Arduíno,  Artigo

Medidor Temperatura, Servo Motor.

Dois outros tutoriais que escrevi mostram o básico ( Arduino 101 ) e como criar um data logger realmente básico ( Arduino Datalogger – simples ). Este tutorial irá mostrar como conectar servomotores e usar o sensor de temperatura para movê-lo!

A premissa é que, muitas vezes, você quer responder a alguma entrada e fazer algo acontecer. A maioria dos tutoriais mostra como acender as luzes ou emitir um som. Aqui, quero mostrar como você pode usar um simples servomotor para abrir algo (como uma janela) em proporção à temperatura ambiente.

Vamos começar!Adicionar dicaPerguntarComenteBaixar

Etapa 1: Adicionando os Componentes

Imagem de adicionar os componentes
Imagem de adicionar os componentes

Para este tutorial, você precisará de:

  • Um arduino
  • Uma tábua de pão pequena
  • Um servo motor
  • Um LED
  • um resistor, ajustado para 150Ω
  • um sensor de temperatura

Eu uso o Tinkercad para todos os tutoriais até eu entrar em classes ou bibliotecas complexas, então vá até lá e ganhe uma conta! Para adicionar os componentes, você precisará abrir o componente Componentes e pesquisar / rolar, certificando-se de ter selecionado “todos” em vez de “básico” no seletor suspenso de componentes.

Se você não tiver certeza de como usá-los, ou se a qualquer momento se perder, volte ao Passo 1 e use o tutorial 101 e datalogger para começar. Eles são um bom ponto de partida.

Vamos ligar isso.Adicionar dicaPerguntarComenteBaixar

Etapa 2: conectando a fiação

Imagem de Fiação Acima
Imagem de Fiação Acima
Imagem de Fiação Acima
Imagem de Fiação Acima

Um lembrete de que todas as colunas em uma placa de montagem estão conectadas, mas há uma lacuna no meio que desconecta a matriz superior da parte inferior.

  1. Use a primeira imagem como guia sobre como conectar os fios 5v e GND do Arduino à breadboard. Conecte as portas 5V e GND no Arduino à breadboard. Essencialmente, esses dois trilhos de energia fornecem um número maior de portas para acessar a energia ao criar protótipos.
  2. Conecte a parte inferior da placa ao topo. Certifique-se de combinar GND / Negativo (preto) para 5v / Positivo (vermelho).
  3. Certifique-se de que todos os componentes estejam na metade inferior da placa de montagem, exceto o servo, e que eles estão cruzando as colunas. Isso é importante, então não cruzamos nenhum fio.
    1. Adicione o LED (imagem 2).
    2. Use o resistor e conecte a um dos pinos (usei o ânodo). 
      Se você usou o ânodo (e é mais fácil seguir o diagrama de fiação na imagem), conecte o cátodo (negativo) à linha GND na breadboard. 

      Dica rápida! Se você passar o mouse sobre o final dos pinos em um componente, ele informará qual é o ânodo e o catodo, ou sinal etc.
    3. Ligue o sensor de temperatura. Certifique-se de que a perna esquerda vá para 5v. A perna direita vai para o GND. A perna do meio deve estar conectada ao pino A0. 
      Este é um dispositivo analógico e, como tal, precisa de um pino analógico. Poderíamos usar digital e dizer para receber analógico, mas temos pinos suficientes.
    4. Para o servo, temos três fios. Estes incluem 5v, GND (terra) e um fio de sinal.
      1. Conecte o fio marrom no servo ao GND na breadboard.
      2. Conecte o fio vermelho no servo a um pino de 5v na breadboard.
      3. Conecte o fio laranja ao pino digital 3 no Arduino.

Se não tiver certeza, verifique as imagens acima!Adicionar dicaPerguntarComenteBaixar

Etapa 3: o código

Imagem do Código

Neste exemplo, estou supondo que tenho uma casa em um clima quente. Eu gostaria de abrir as janelas quando ficar quente para que eu possa maximizar o fluxo de ar, porque eu tenho um condensador de ar que requer pressão positiva maciça na casa para resfriar o local. Então, vamos controlar automaticamente as janelas para maximizar o fluxo de ar.

Vamos entrar no código bom e rápido!

#include <servo.h>

Esta é a primeira vez (nesta série) que usamos uma biblioteca. Uma biblioteca é como uma caixa com uma série de pastas. Em cada pasta há folhas de papel, e cada uma delas tem instruções especiais sobre como usar dispositivos específicos. Você pode “incluir” essas pastas em seu código, o que torna mais rápido escrever seu código!No passado, escrevi plugins para webapps e outros softwares que são distribuídos gratuitamente. É uma ótima maneira de retribuir à comunidade! Depois de ter desenvolvido uma boa base de habilidades em código, é uma oportunidade válida para se envolver em código aberto.

Nós usamos a instrução #include para dizer ao Arduino que ele irá usar a biblioteca. Se é uma biblioteca global (algo que você instalou com o gerenciador de pacotes ou embutido no Arduino, como math.h), então você irá colocá-lo entre os símbolos <>.

Mais tarde, você aprenderá a escrever o seu próprio e se você armazená-los na pasta do projeto, você colocará o nome do arquivo entre aspas duplas, “assim”. Isso porque o compilador (o programa que converte o código de algo que podemos ler para algo que o Arduino pode ler) precisa referenciar o arquivo na pasta, não no escopo global.

O próximo bloco de código deve parecer bastante familiar, então vamos apenas olhar para os novos recursos.

// Definir constantes
#define temperatura A0
#define ledIndicator 2
#define servoPin 3
// Inicializa a classe servo
Servo MainServo;

Então, nós definimos as duas constantes que vamos usar. Estes são os pinos conectados aos sensores ou saídas. Nós também definimos o pino servo.

Você pode ver a linha Servo mainServo – é onde instanciamos a classe Servo que instalamos com a biblioteca. Isto é como ligar a máquina de café para aquecê-lo (eu amocafé …). Está pronto para ir! Neste caso, mainServo é o nome que demos a esta nova instanciação. Isso é importante, porque com as classes, eu poderia ter 1, 2 ou muitos servos rodando ao mesmo tempo! É por isso que usamos classes, porque eles são pequenos pacotes por conta própria, podemos usar muitas vezes e fazer muitas coisas com eles.

// Definir variáveis
posição int = 0;
int previousPosition;
void setup () {
	pinMode (temperatura, INPUT);
	pinMode (ledIndicator, OUTPUT);
	// Diz ao mainServo qual pino ele está conectado
	mainServo.attach (servoPin);
	Serial.begin (9600);
}

Este bloco de código acima é bastante consistente com tudo o que fizemos. A única nota importante a fazer é a chamada de função mainServo.attach () . Aqui, dissemos à mainServo para executar uma função chamada attach () e dentro das chaves redondas, indicamos o pino ao qual estamos anexando o servo. Isso ajuda o servo a saber para onde enviar os sinais mais tarde.Se você está se perguntando como sabemos quais chamadas de função fazer dentro de nossa biblioteca, todas as bibliotecas têm documentação. Esta documentação informa quais funções existem dentro da biblioteca e como você pode usá-las (por exemplo, quais parâmetros cada função executa).

void loop () {
}

O próximo bloco de código vai dentro do código loop () .

// Análise de temperatura
int tempReading = analogRead (temperatura);
// Se estiver usando uma entrada de 5v
tensão de flutuação = tempReading * 5.0;
// Dividido por 1024
voltagem / = 1024,0;
// Convertendo de 10mv por grau
float tempC = (voltagem - 0,5) * 100;
// Isso mapeia a temperatura para graus abertos para a aba
int position = map (tempC, 10, 50, 0, 180); <br>

Neste bloco, estamos completando a análise de temperatura (vimos isso no tutorial do registrador de dados). Essencialmente, estamos pegando o sinal analógico enviado pelo sensor de temperatura e convertendo-o em graus.

A função map () nos permite converter isso em algo utilizável. Em vez de executar matemáticas complexas que precisariam de muitas linhas, nós as convertemos assim:

map (variableValue, fromLow, deHigh, toLow, toHigh);

O que isto faz é pegar o valor da variável que temos (como graus) e converter o valor mínimo possível e o valor máximo possível em pode nos dar (neste caso, eu defino o mínimo para 10 graus e o máximo para 50 graus . Estes são os valores mínimo e máximo que estou esperando do sensor de temp, e também sei que em 10degrees, gostaria que o windows completamente fechado para manter o calor dentro! Enquanto em 50degrees, eu quero que eles completamente abertos para o fluxo de ar máximo!

if (previousPosition! = position) {
	Serial.print ("Nova posição:");
	Serial.println (posição);
	mainServo.write (posição);
	digitalWrite (ledIndicator, HIGH);
	// Espere o servo se mover
	atraso (2000);
}
// Desligue a luz indicadora
digitalWrite (ledIndicator, LOW);
// set previousPosition por isso, se não temos que mudar, não disparamos o servo
previousPosition = posição;

Neste bloco, decidi apenas permitir que o servo disparasse quando a posição realmente mudasse. Isso não deve ser assim tão frequentemente, mas pode ser. Nesse caso, talvez eu precise fazer algumas alterações para que o código só permita o movimento quando a alteração da temperatura for superior a 5 graus, caso contrário, poderá estar aparando constantemente a janela, o que pode danificar o servo. Enfim, um problema para outro dia!

Então, se a posição mudar, então nós imprimiremos a nova posição para o Serial e então, usando a chamada da função mainServo.write () , passando a nova posição, o servo muda de posição. Para alertar o usuário de que algo está acontecendo, ligo um LED e aguardo 2 segundos para o servo se mover. As duas últimas linhas desligam o LED e certificam-se de que a previousPosition está armazenada para que possamos verificar o próximo loop.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *