Registrador de dados em tempo real baseado em WiFi para armário ou geladeira

Introdução

Você acha chato quando o bolo que você colocou no freezer não fica pronto na hora certa? Talvez alguém esteja abrindo a geladeira com frequência quando você não percebe. Ou você pode ter um armário pessoal de onde suas coisas simplesmente desaparecem ou são perdidas quando você está ausente. Então, como saber quando a porta da sua geladeira/armário é aberta?
Bem, temos uma solução simples para isso. Usando esta técnica você pode verificar a que horas e também quantas vezes ele foi aberto, sentado em qualquer lugar com a ajuda da internet.
Componentes necessários
1. Arduino UNO
2. Módulo Wi-Fi ESP 8266
3. Sensor ultrassônico SR-04 (versão de 4 pinos)
4. Fios
Como vamos fazer isso?

Mediremos constantemente a distância entre a porta do armário/geladeira e o sensor ultrassônico e atualizaremos na web. Sempre que a porta do armário fosse aberta, a distância mostraria um pico.

Calculando distância usando ondas ultrassônicas

Um sensor ultrassônico mede a distância usando a velocidade do som. Basicamente, o transmissor envia uma onda sonora ultrassônica em direção a um objeto e a parte receptora recebe a onda sonora que é refletida no mesmo objeto. Sabemos que a velocidade do som é de 330 metros por segundo. O sensor nos dá o tempo que a onda leva para atingir o objeto e voltar ao receptor. Como conhecemos o tempo e a velocidade, podemos calcular facilmente a distância do objeto ao sensor.

Imagem representando o funcionamento do Sensor Ultrassônico

Figura 1: Imagem representando o funcionamento do Sensor Ultrassônico

Digamos que o objeto esteja à distância='d'metros do sensor. O tempo que a onda ultrassônica (mostrada em vermelho) leva para atingir o objeto e refletir de volta é T segundos e velocidade da onda = 'S' EM. Então,

2Xd = SXT

=> d = SXT/2

Calculamos o dobro da distância porque a onda viaja de Tx para o objeto e depois do objeto para Rx. E como sabemos que S=330m/s obtemos,

d = 165 metros XT (onde T está em segundos)

Portanto, tudo o que precisamos de saber é o tempo que a onda demora a viajar de um lado para o outro. Este tempo é fornecido pelo pino 'Echo' do módulo SR-04.

ESP8266 em modo cliente

Em nosso último projeto vimos como utilizar o módulo ESP8266 em modo servidor. Ele serviu como uma página da web para qualquer dispositivo discado em seu endereço IP. Agora, aqui o módulo atuaria como um cliente, o que significa que ele se conectaria à internet, a um determinado site e atualizaria algum valor no site.
Basicamente estamos enviando os dados obtidos do sensor ultrassônico para um site chamado thingspeak.com através do módulo Wi-Fi.
Algoritmo:
– Módulo de teste usando o comando “AT”
– Defina o modo de operação usando o comando “AT+CWMODE=
– Conecte-se a uma rede Wi-Fi usando o comando “AT+CWJAP=,
– Conecte-se a um site em modo TCP usando o comando “AT+CIPSTART=, ,
– Através do comando “AT+CIPSEND= ”, envie os dados que deseja atualizar no site.
– Após a conclusão, feche a conexão usando o comando “AT+CIPCLOSE”.
Sobre Thingspeak.com

Thingspeak.com é um site onde você pode fazer upload de determinados dados para um 'canal' que você criou e também pode ver os mesmos dados na forma de um gráfico e também com atualização em tempo real. Ao criar uma conta e um canal, você recebe um código que também é conhecido como 'Chave', que seria usado para carregar a data em um canal específico.

Procedimento:

1. Acesse www.thingspeak.com e inscreva-se para uma conta gratuita.

2. Na página de inscrição, não esqueça de selecionar o fuso horário correto. O fuso horário permitirá que os dados carregados obtenham um carimbo de data/hora.
3. Depois que a conta for criada, você terá a opção de criar um canal. Clique nele e deixe todas as entradas como padrão.

Captura de tela da geração de chave de API no servidor Thingspeak

Figura 2: Captura de tela da geração de chave de API no servidor Thingspeak

4. Agora, navegue até a guia ‘API’ e anote a “chave API”

5. Para testar o canal que você acabou de criar, digite o seguinte na barra de endereço do seu navegador:

Substitua pelo que você obteve em 4º etapa.

E então pressione Enter. Você deverá ver uma página em branco com apenas '1' escrito nela.

6. Agora volte para a página do canal e navegue até a guia ‘Visualização privada’ e você verá algo assim:

Captura de tela das estatísticas do canal exibidas no servidor Thingspeak

Figura 3: Captura de tela das estatísticas do canal exibidas no servidor Thingspeak

Explicação do código

O Arduino basicamente coleta dados do sensor ultrassônico, calcula a distância e usa o módulo Wi-Fi para atualizá-los no canal thingspeak.com. Aqui estão os passos a serem seguidos:
– Inicie a conexão serial com taxa de transmissão de 9600. Enviar NO e verifique se OK é recebido. Isso é para garantir a presença do módulo.
– Coloque o módulo no modo Estação usando o comando AT+CWMODE=1
– Conecte o módulo à sua rede doméstica usando o comando AT+CWJAP=”NOME DA REDE CASA”,”SENHA”
– Verifique se o módulo respondeu OK. Se sim, prossiga
– Entre em loop infinito
– Atribua o 16º pino (que está conectado ao pino TRIGGER & ECHO do sensor) como saída e defina-o como LOW. Aguarde 2 microssegundos
– Defina o pino para HIGH, espere 5 microssegundos e novamente configure-o para LOW (Basicamente está criando um pulso com duração de 5 microssegundos)
– Agora atribua o mesmo pino ao modo INPUT e leia a duração do pulso vindo do pino ECHO do sensor
– Use a duração para calcular a distância usando a função microsecondsToCentimeters . Converta o valor obtido em um tipo string e armazene-o em uma variável 'cmstr'
– Se o valor mudar (ou seja, quando o armário for aberto), passe o cmstr para a função updateDist
– Conecte-se a thingspeak.com no modo TCP usando o comando, AT+CIPSTART=”TCP”,”184.106.153.149”,80
– Poste o valor da distância usando a função AT+CIPSEND= seguido pela GET /update?key=&field1=cmstr
– Feche a conexão usando AT+CIPCLOSE

Arranjo

1. Conecte as peças de acordo com o diagrama de circuito.
2. Coloque-o dentro de um armário de forma que o sensor fique a pelo menos 4 cm de distância da porta.
3. Conecte uma fonte de alimentação ao circuito (bateria A) e em um minuto você deverá ver a saída em seu canal thingspeak.com.

Protótipo de circuito baseado em modem Wi-Fi Arduino e ESP8266 usado para registro de dados

Figura 4: Protótipo de circuito baseado em modem Wi-Fi Arduino e ESP8266 usado para registro de dados

Imagem mostrando sensor ultrassônico conectado ao Arduino Uno

Figura 5: Imagem mostrando sensor ultrassônico conectado ao Arduino Uno

Aqui estão alguns resultados que obtive:

Captura de tela das estatísticas do armário exibidas no servidor Thingspeak

Figura 6: Captura de tela das estatísticas do armário exibidas no servidor Thingspeak

Como vocês podem ver, quando abri e dediquei um tempo para configurar o sistema lá corretamente, ele já começou a enviar dados pois havia uma diferença de distância da porta do armário.

Depois disso, por volta das 12h, parou de enviar dados porque o armário estava fechado e por isso não houve alteração na distância entre o sensor e a porta por um tempo. E então, por volta das 12h52, quando abro a porta, ele percebe a mudança de distância e começa a enviar dados novamente.

Solução de problemas

Caso a atualização ao vivo não esteja sendo exibida no canal:
– Verifique e certifique-se de que sua conexão de internet e Wi-Fi esteja funcionando bem.
– Verifique se você forneceu o nome de rede e a senha corretos no código.
– Verifique se você substituiu a API KEY correta no código
Caso a atualização esteja ocorrendo, mas seja mostrada como zero:
– Certifique-se de que o sensor ultrassônico esteja funcionando e que as conexões estejam firmes.

Código fonte do projeto

 
int pingPin = 16; // A2 - Connected to both Trig & ECHO Pins of the Sensorunsigned int cm_old=0; void setup {  Serial.begin(9600);  Serial.println("AT");  delay(5000);  if(Serial.find("OK")){    connectWiFi ;  }} void loop {  long duration,cm;   // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:  pinMode(pingPin, OUTPUT);  digitalWrite(pingPin, LOW);  delayMicroseconds(2);  digitalWrite(pingPin, HIGH); // Sending a High Pulse on the Trig Pin of the Sensor  delayMicroseconds(5);  digitalWrite(pingPin, LOW);   // The same pin is used to read the signal from the PING))): a HIGH  // pulse whose duration is the time (in microseconds) from the sending  // of the ping to the reception of its echo off of an object.  pinMode(pingPin, INPUT);  duration = pulseIn(pingPin, HIGH);   // convert the time into a distance  cm = microsecondsToCentimeters(duration);  String cmstr = String(cm);    if(cm!=cm_old) updateDist(cmstr);  delay(2000);  cm_old=cm;} void updateDist(String cmstr){  String cmd = "AT+CIPSTART="TCP","";  cmd += "184.106.153.149";  cmd += "",80";  Serial.println(cmd);  delay(2000);  if(Serial.find("Error")){    return;  }  cmd = "GET /update?key=&field1="; //edit the key and copy paste with your own one  cmd += cmstr;  cmd += "rn";  Serial.print("AT+CIPSEND=");  Serial.println(cmd.length );  if(Serial.find(">")){    Serial.print(cmd);  }else{    Serial.println("AT+CIPCLOSE");  }}  boolean connectWiFi {  Serial.println("AT+CWMODE=1");  delay(2000);  String cmd="AT+CWJAP="";  cmd+="";  cmd+="","";  cmd+="";  cmd+=""";  Serial.println(cmd);  delay(5000);  if(Serial.find("OK")){    return true;  }else{    return false;  }} long microsecondsToCentimeters(long microseconds){  // The speed of sound is 340 m/s or 29 microseconds per centimeter.  // The ping travels out and back, so to find the distance of the  // object we take half of the distance travelled.  return microseconds / 29 / 2;}

Diagramas de circuito

Diagrama de circuito-Arduino-ESP8266-Protótipo de registro de dados baseado em modem Wi-Fi

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.