Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Respuesta de temperatura por SMS

Componentes y suministros

Arduino Mega 2560
× 1
Sensor de temperatura DHT22
× 1
SIM800L
× 1
Resistencia de 10k ohmios
× 1
Breadboard (genérico)
× 1
Cables de puente (genéricos)
× 1

Acerca de este proyecto

Hola. Este proyecto es parte de un proyecto mucho más grande. Debido a que tuve muchos problemas con esta parte y finalmente encontré una solución, decidí compartirla con la comunidad y espero que pueda ayudarlos en sus proyectos.

Descripción del proyecto

Envía SMS a Arduino y obtén la temperatura en casa.

Software

Para el módulo SIM800L, utilicé la biblioteca “Seeeduino_GPRS-master”. Tuve que cambiar las siguientes líneas en la biblioteca "sim800.h" para permitir que funcione en un MEGA:

  #define SIM800_TX_PIN 8 # define SIM800_RX_PIN 7  

... a TX_PIN 10 y RX_PIN 11. Cambiar la biblioteca de "SoftwareSerial" a uno de los puertos Mega Serial, es decir, Serial3, era demasiado difícil, así que tomé el camino más fácil.

El problema

Básicamente, mi código es cortar y pegar ejemplos de dos bibliotecas:"DHT.h" y "Seeeduino_GPRS-master". El problema que tuve fue que el ejemplo "gprs.h" solo mostraba cómo enviar un mensaje predeterminado entre comillas. No pude averiguar cómo enviar el valor de flotación variable desde mi sensor de temperatura. Esto también fue cierto con otras bibliotecas que probé:"GPRS_SIM900-master" y "SIM800L-master".

Pasé semanas buscando ejemplos en la WEB para resolver mi problema y no encontré ninguno. Encontré publicaciones en foros sobre el mismo tema, y ​​para aquellas pobres almas perdidas que no obtuvieron respuestas, espero que encuentren esta publicación.

La respuesta

Convierta el valor flotante en un String y luego el String en un Char Array - ¡simple!

Fragmento de código

  MyString =String (temp, 0); // Convertir float a StringMyString =(MyString + "Degrees C"); // convertir cadena a char comienza aquí // Longitud (con un carácter adicional para el terminador nulo) int str_len =MyString.length () + 1; // Prepara la matriz de caracteres (el búfer) char char_array [str_len]; // Cópiala sobre MyString.toCharArray (char_array, str_len); // convierte la cadena en char termina aquí gprs.sendSMS ("04 +++++++ + ", char_array); // define el número de teléfono y el texto.  

Cableado

Usé una batería ULTRAFIRE 18650 para suministrar energía al módulo sim. Luego agregaré un regulador de voltaje al circuito. Vea este tutorial.

Material de referencia

  • 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 la temperatura y la respuesta de Arduino en grados C.
 // Ejemplo de boceto de prueba para varios sensores de humedad / temperatura DHT // Escrito por ladyada, dominio público # incluye "DHT.h" #define DHTPIN 2 // a qué pin digital estamos conectados # definir DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // # definir DHTTYPE DHT21 // DHT 21 (AM2301) // Conectar el pin 1 (a la izquierda) del sensor a + 5V // Conecte el pin 2 del sensor a lo que sea su DHTPIN // Conecte el pin 4 (a la derecha) del sensor a TIERRA // Conecte una resistencia de 10K del pin 2 (datos) al pin 1 (alimentación) del sensor // Inicializar el sensor DHT.DHT dht (DHTPIN, DHTTYPE); # include  #include  #define TIMEOUT 5000GPRS gprs; bool ITemp =false; float temp; String MyString; #define LED_PIN 13bool ledStatus; // Variable para contener la última línea de salida en serie de SIM800char currentLine [500] =""; int currentLineIndex =0; // Boolean para establecerse en verdadero si se encontró la notificación de mensaje y la siguiente // línea de salida en serie es la contenido del mensaje SMS real nextLineIsMessage =false; void Responder () // La función comienza aquí {Serial.println ("GPRS - Enviar prueba de SMS ..."); gprs.preInit (); retraso (1000); while (0! =gprs.init ()) {retraso (1000); Serial.print ("error de inicio \ r \ n"); } Serial.println ("Inicialización exitosa, comenzar a enviar mensaje SMS ..."); if (ITemp ==true) {float t =dht.readTemperature (); temp =t; ITemp =falso; } MyString =String (temp, 0); // Convertir flotante a String MyString =(MyString + "Grados C"); // convertir cadena a char comienza aquí // Longitud (con un carácter adicional para el terminador nulo) int str_len =MyString.length () + 1; // Preparar la matriz de caracteres (el búfer) char char_array [str_len]; // Cópialo sobre MyString.toCharArray (char_array, str_len); // convertir cadena a char termina aquí gprs.sendSMS ("04 ++++++++", char_array); // define el número de teléfono y el texto // La función termina aquí} void setup () {Serial.begin (9600); Serial.println ("¡Prueba DHTxx!"); dht.begin (); gprs.preInit (); retraso (1000); while (0! =gprs.init ()) {retraso (1000); Serial.print ("error de inicio \ r \ n"); // luego muestra SIM ERROR en la página de inicio de Nextion HMI} // Establece el modo SMS en ASCII if (0! =gprs.sendCmdAndWaitForResp ("AT + CMGF =1 \ r \ n", "OK", TIMEOUT)) {ERROR ( "ERROR:CNMI"); regreso; } // Empiece a escuchar las nuevas indicaciones de mensajes SMS if (0! =Gprs.sendCmdAndWaitForResp ("AT + CNMI =1,2,0,0,0 \ r \ n", "OK", TIMEOUT)) {ERROR (" ERROR:CNMI "); regreso; } Serial.println ("Inicialización exitosa");} void loop () {// Espere unos segundos entre mediciones. retraso (2000); // ¡La lectura de la temperatura o la humedad tarda unos 250 milisegundos! // Las lecturas del sensor también pueden tener hasta 2 segundos de antigüedad (es un sensor muy lento) float h =dht.readHumidity (); // Lee la temperatura como Celsius (por defecto) float t =dht.readTemperature (); Serial.print ("Humedad:"); Serial.print (h); Serial.println ("% \ t"); Serial.print ("Temperatura:"); Serial.print (t); Serial.println ("* C"); SIM ();} void SIM () {// Escribe el estado actual en el pin LED digitalWrite (LED_PIN, ledStatus); Serial.println ("Buscando SMS"); // Si hay una salida en serie de SIM800 if (gprs.serialSIM800.available ()) {char lastCharRead =gprs.serialSIM800.read (); // Leer cada carácter de la salida en serie hasta llegar a \ r o \ n (que denota el final de la línea) if (lastCharRead =='\ r' || lastCharRead =='\ n') {String lastLine =String (currentLine); // Si la última línea leyó + CMT, se recibieron nuevas indicaciones de mensaje SMS. // Por lo tanto, la siguiente línea es el contenido del mensaje. if (lastLine.startsWith ("+ CMT:")) {Serial.println (lastLine); nextLineIsMessage =verdadero; } else if (lastLine.length ()> 0) {if (nextLineIsMessage) {Serial.println (lastLine); // Leer el contenido del mensaje y establecer el estado de acuerdo con el contenido del SMS if (lastLine.indexOf ("InTemp")> =0) {Serial.println ("InTemp"); ITemp =verdadero; Respuesta (); // ledStatus =1; // Serial.println ("ENCENDER la luz"); //} else if (lastLine.indexOf ("LED APAGADO")> =0) {// ledStatus =0; // Serial.println ("Apagar la luz"); } nextLineIsMessage =falso; }} // Limpiar la matriz de caracteres para la siguiente línea de lectura para (int i =0; i   

Esquemas


Proceso de manufactura

  1. Ventilador de temperatura controlada
  2. Registrador de temperatura Raspberry Pi
  3. Leer temperatura con DS18B20 | Raspberry Pi 2
  4. Monitoreo de temperatura en Raspberry Pi
  5. Medición de temperatura con RASPBERRY PI
  6. Supervisión de la temperatura con Raspberry Pi
  7. Proyecto IoT 101:Temperatura de transmisión desde su Raspberry Pi
  8. Laboratorio "Estación meteorológica"
  9. Sensor de temperatura Raspberry Pi
  10. Rover
  11. AGO12