Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Resposta de temperatura por SMS

Componentes e suprimentos

Arduino Mega 2560
× 1
Sensor de temperatura DHT22
× 1
SIM800L
× 1
Resistor 10k ohm
× 1
Breadboard (genérico)
× 1
Fios de jumpers (genérico)
× 1

Sobre este projeto


Olá. Este projeto é parte de um projeto muito maior. Como tive muitos problemas com essa parte e acabei encontrando uma solução, decidi compartilhar com a comunidade e espero que possa ajudá-los em seus projetos.

Descrição do Projeto

Envie SMS para o Arduino e verifique a temperatura em casa.





Software


Para o módulo SIM800L, usei a biblioteca “Seeeduino_GPRS-master”. Tive que alterar as seguintes linhas na Biblioteca “sim800.h” para habilitá-lo a funcionar em um MEGA:
  #define SIM800_TX_PIN 8 # define SIM800_RX_PIN 7  

... para TX_PIN 10 e RX_PIN 11. Alterar a Biblioteca de “SoftwareSerial” para uma das portas Mega Serial, ou seja, Serial3, foi muito difícil, então escolhi o caminho mais fácil.

O problema

Basicamente, meu código é copiar e colar exemplos de duas bibliotecas:“DHT.h“ e “Seeeduino_GPRS-master”. O problema que tive foi que o exemplo “gprs.h” mostrava apenas como enviar uma mensagem predeterminada entre aspas. Eu não conseguia descobrir como enviar o valor flutuante variável do meu sensor de temperatura. Isso também aconteceu com outras bibliotecas que experimentei:“GPRS_SIM900-master” e “SIM800L-master”.

Passei semanas procurando na WEB exemplos para resolver meu problema e não encontrei nenhum. Eu tinha encontrado postagens de fórum sobre o mesmo assunto, e para aquelas pobres almas perdidas que não obtiveram respostas, espero que vocês encontrem esta postagem.

A resposta

Converta o valor flutuante em uma String e então a String em um Char Array - simples!





Snippet de código

  MyString =String (temp, 0); // Converter float em StringMyString =(MyString + "Degrees C"); // converter string em char começa aqui // Comprimento (com um caractere extra para o terminador nulo) int str_len =MyString.length () + 1; // Prepare o array de caracteres (o buffer) char char_array [str_len]; // Copie-o sobre MyString.toCharArray (char_array, str_len); // converte string para char termina heregprs.sendSMS ("04 +++++++ + ", char_array); // define o número do telefone e texto.  





Fiação


Usei uma bateria ULTRAFIRE 18650 para fornecer energia ao módulo sim. Posteriormente, adicionarei um regulador de tensão ao circuito. Veja este tutorial.

Material de referência
  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf





Bibliotecas

  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • https://github.com/adafruit/DHT-sensor-library

Código

  • DHT_SIMPosting.ino
DHT_SIMPosting.ino Arduino
Enviar SMS "InTemp" solicita a temperatura e a resposta do Arduino em graus C.
 // Exemplo de esboço de teste para vários sensores de umidade / temperatura DHT // Escrito por ladyada, domínio público # include "DHT.h" #define DHTPIN 2 // a qual pino digital estamos conectados # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // # define DHTTYPE DHT21 // DHT 21 (AM2301) // Conecte o pino 1 (à esquerda) do sensor a + 5V // Conecte o pino 2 do sensor a qualquer que seja o seu DHTPIN // Conecte o pino 4 (à direita) do sensor ao TERRA // Conecte um resistor de 10K do pino 2 (dados) ao pino 1 (potência) do sensor // Inicializar o sensor DHT.DHT dht (DHTPIN, DHTTYPE); # include  #include  #define TIMEOUT 5000GPRS gprs; bool ITemp =false; float temp; String MyString; #define LED_PIN 13bool ledStatus; // Variável para manter a última linha de saída serial de SIM800char currentLine [500] =""; int currentLineIndex =0; // Booleano a ser definido como verdadeiro se a notificação de mensagem foi encontrada e a próxima // linha de saída serial é o conteúdo da mensagem SMS real nextLineIsMessage =false; void Reply () // A função começa aqui {Serial.println ("GPRS - Send SMS Test ..."); gprs.preInit (); atraso (1000); enquanto (0! =gprs.init ()) {atraso (1000); Serial.print ("erro de inicialização \ r \ n"); } Serial.println ("Inicialização bem-sucedida, comece a enviar mensagem SMS ..."); if (ITemp ==true) {float t =dht.readTemperature (); temp =t; ITemp =falso; } MyString =String (temp, 0); // Converte float para String MyString =(MyString + "Degrees C"); // converter string em char começa aqui // Comprimento (com um caractere extra para o terminador nulo) int str_len =MyString.length () + 1; // Prepare o array de caracteres (o buffer) char char_array [str_len]; // Copie sobre MyString.toCharArray (char_array, str_len); // converter string para char termina aqui gprs.sendSMS ("04 ++++++++", char_array); // define o número do telefone e o texto // A função termina aqui} void setup () {Serial.begin (9600); Serial.println ("Teste DHTxx!"); dht.begin (); gprs.preInit (); atraso (1000); enquanto (0! =gprs.init ()) {atraso (1000); Serial.print ("erro de inicialização \ r \ n"); // exibe mais tarde SIM ERROR na Nextion HMI Home Page} // Defina o modo SMS para ASCII if (0! =gprs.sendCmdAndWaitForResp ("AT + CMGF =1 \ r \ n", "OK", TIMEOUT)) {ERROR ( "ERROR:CNMI"); Retorna; } // Comece a ouvir novas indicações de mensagem SMS if (0! =Gprs.sendCmdAndWaitForResp ("AT + CNMI =1,2,0,0,0 \ r \ n", "OK", TIMEOUT)) {ERROR (" ERRO:CNMI "); Retorna; } Serial.println ("Init success");} void loop () {// Aguarde alguns segundos entre as medições. atraso (2000); // A leitura da temperatura ou umidade leva cerca de 250 milissegundos! // As leituras do sensor também podem ser até 2 segundos 'antigas' (é um sensor muito lento) float h =dht.readHumidity (); // Lê a temperatura como Celsius (o padrão) float t =dht.readTemperature (); Serial.print ("Umidade:"); Serial.print (h); Serial.println ("% \ t"); Serial.print ("Temperatura:"); Serial.print (t); Serial.println ("* C"); SIM ();} void SIM () {// Grava o status atual no pino do LED digitalWrite (LED_PIN, ledStatus); Serial.println ("Procurando SMS"); // Se houver saída serial do SIM800 if (gprs.serialSIM800.available ()) {char lastCharRead =gprs.serialSIM800.read (); // Lê cada caractere da saída serial até que \ r ou \ n seja alcançado (o que denota o fim da linha) if (lastCharRead =='\ r' || lastCharRead =='\ n') {String lastLine =String (currentLine); // Se a última linha for + CMT, novas indicações de mensagem SMS foram recebidas. // Portanto, a próxima linha é o conteúdo da mensagem. if (lastLine.startsWith ("+ CMT:")) {Serial.println (lastLine); nextLineIsMessage =true; } else if (lastLine.length ()> 0) {if (nextLineIsMessage) {Serial.println (lastLine); // Lê o conteúdo da mensagem e define o status de acordo com o conteúdo do SMS if (lastLine.indexOf ("InTemp")> =0) {Serial.println ("InTemp"); ITemp =verdadeiro; Responder (); // ledStatus =1; // Serial.println ("Ligue a luz"); //} else if (lastLine.indexOf ("LED OFF")> =0) {// ledStatus =0; // Serial.println ("Desligue a luz"); } nextLineIsMessage =false; }} // Limpa a matriz de caracteres para a próxima linha de leitura para (int i =0; i  

Esquemas


Processo de manufatura

  1. Ventilador com temperatura controlada
  2. Registrador de temperatura Raspberry Pi
  3. Ler a temperatura com DS18B20 | Raspberry Pi 2
  4. Monitoramento de temperatura no Raspberry Pi
  5. Medindo a temperatura com RASPBERRY PI
  6. Monitorando a temperatura com Raspberry Pi
  7. Projeto IoT 101:Temperatura do Fluxo do Raspberry Pi
  8. Laboratório ‘Estação meteorológica’
  9. Sensor de temperatura Raspberry Pi
  10. Rover