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

Lectura de temperatura DHT22 activada por SMS con Arduino Mega 2560

Componentes y materiales

Componente Cantidad
Arduino Mega 2560 1
Sensor de temperatura DHT22 1
Módulo SIM800L 1
Resistencia 10k ohm 1
Protoboard (genérico) 1
Cables de conexión (genéricos) 1

Sobre el proyecto

Hola. Este proyecto es parte de uno mucho mayor. Tuve muchos problemas con esta parte y al encontrar solución, decidí compartirla para ayudar a la comunidad.

Descripción del proyecto

Enviar SMS al Arduino y recibir la temperatura en casa.

Software

Para el módulo SIM800L usé la librería "Seeeduino_GPRS-master". Tuve que cambiar en "sim800.h" las líneas:

#define SIM800_TX_PIN 8
#define SIM800_RX_PIN 7

... a TX_PIN 10 y RX_PIN 11. Cambiar la librería de "SoftwareSerial" a uno de los puertos serie hardware del Mega (Serial3) era muy difícil, así que tomé el camino fácil.

El problema

Mi código es copiar/pegar de ejemplos de "DHT.h" y "Seeeduino_GPRS-master". El problema: el ejemplo "gprs.h" solo mostraba cómo enviar un mensaje predeterminado entre comillas. No lograba enviar el valor float variable del sensor de temperatura. Lo mismo con otras librerías: "GPRS_SIM900-master" y "SIM800L-master".

Pasé semanas buscando ejemplos en la web sin encontrar ninguno. Vi posts en foros sobre el mismo tema, y para esas pobres almas sin respuesta, espero que encuentren esta publicación.

La solución

¡Convertir el valor float a String y luego el String a array de caracteres (char array) - simple!

Fragmento de código clave

MyString = String(temp, 0); // Convertir float a String
MyString = (MyString + " Grados C"); 
// Convertir string a char array
int str_len = MyString.length() + 1;
char char_array[str_len];
MyString.toCharArray(char_array, str_len);
// Fin conversión
gprs.sendSMS("04++++++++", char_array); // número de teléfono y texto

Conexiones

Usé una batería ULTRAFIRE 18650 para alimentar el módulo SIM. Luego añadiré regulador de voltaje. Ver este tutorial.

Material de referencia

Librerías

Código completo

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

#include <gprs.h>
#include <softwareserial.h>
#define TIMEOUT 5000
GPRS gprs;
bool ITemp = false;
float temp;
String MyString;
#define LED_PIN 13
bool ledStatus;
char currentLine[500] = "";
int currentLineIndex = 0;
bool nextLineIsMessage = false;

void Reply() {
  Serial.println("GPRS - Send SMS Test ...");
  gprs.preInit();
  delay(1000);
  while(0 != gprs.init()) {
    delay(1000);
    Serial.print("init error\r\n");
  }
  Serial.println("Init success, start to send SMS message...");
  if (ITemp == true) {
    float t = dht.readTemperature();
    temp = t;
    ITemp = false;
  }
  MyString = String(temp, 0);
  MyString = (MyString + " Grados C");
  int str_len = MyString.length() + 1;
  char char_array[str_len];
  MyString.toCharArray(char_array, str_len);
  gprs.sendSMS("04++++++++", char_array);
}

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dht.begin();
  gprs.preInit();
  delay(1000);
  while(0 != gprs.init()) {
    delay(1000);
    Serial.print("init error\r\n");
  }
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI"); return;
  }
  if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI"); return;
  }
  Serial.println("Init success");
}

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  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() {
  digitalWrite(LED_PIN, ledStatus);
  Serial.println("Buscando SMS");
  if(gprs.serialSIM800.available()) {
    char lastCharRead = gprs.serialSIM800.read();
    if(lastCharRead == '\r' || lastCharRead == '\n') {
      String lastLine = String(currentLine);
      if(lastLine.startsWith("+CMT:")) {
        Serial.println(lastLine);
        nextLineIsMessage = true;
      } else if (lastLine.length() > 0) {
        if(nextLineIsMessage) {
          Serial.println(lastLine);
          if(lastLine.indexOf("InTemp") >= 0) {
            Serial.println("InTemp");
            ITemp = true;
            Reply();
          }
          nextLineIsMessage = false;
        }
      }
      for(int i = 0; i < sizeof(currentLine); ++i) currentLine[i] = (char)0;
      currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}

Esquemáticos

Lectura de temperatura DHT22 activada por SMS con Arduino Mega 2560

Proceso de manufactura

  1. Ventilador controlado por temperatura: sistema DIY con relé para refrigeración de muebles multimedia
  2. Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
  3. Cómo leer temperatura con un DS18B20 en Raspberry Pi 2
  4. Monitorización profesional de temperatura con Raspberry Pi y DS18B20
  5. Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
  6. Monitorización precisa de temperatura en armario de servidores con Raspberry Pi
  7. Tutorial IoT para principiantes: Streaming de datos de temperatura desde Raspberry Pi
  8. Construya una Estación Meteorológica de Laboratorio Habilitada para Red con Raspberry Pi
  9. Monitor de temperatura casero con Raspberry Pi, MCP9808, InfluxDB y Grafana
  10. Construye un Rover con Windows IoT Core en Raspberry Pi 2 – Guía de Principiante a Avanzado
  11. AuGe12: Aleación Premium de Soldadura Blanda a Base de Oro