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

ARTIK + MKR1000 + DHT11 + MQTT

Componentes e suprimentos

Arduino MKR1000
× 2
Sensor DHT11 de Temperatura e Umidade (4 pinos)
× 1
LED (genérico)
× 2

Aplicativos e serviços online

Samsung ARTIK Cloud para IoT
Arduino IDE

Sobre este projeto


Este projeto faz uso de dois MKR1000s com DHT11 como sensor e LEDs como atuadores de metáfora. Os verdadeiros atuadores podem ser o ar-condicionado e o ventilador de teto. O dispositivo de temperatura e umidade DHT11 envia dados para a nuvem ARTIK. As regras foram definidas para enviar comandos para os LEDs vermelho e amarelo.





Configure o IDE Arduino


Com o gerenciador de bibliotecas do IDE do Arduino, instale as seguintes bibliotecas.

Instale WiFi101 (consulte este guia)

Instale MQTT de Joel Gaehwiler

Instale o ArduinoJson

Observação:consulte meu postagem anterior para descobrir detalhes sobre como trabalhar com a nuvem ARTIK.





Configure o sensor de temperatura e umidade DHT11


Crie um tipo de dispositivo ( Sensor DHT11 )

Conecte um dispositivo ( Sensor DHT11 A1 )

Conecte os dispositivos físicos

.

Configure os parâmetros MQTT da nuvem ARTIK
  char mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =8883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id do dispositivo]"; char mqttCloudPassword [] ="[token do dispositivo]"; char mqttCloudDataOut [] ="/v1.1/messages/[device-id]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient;  

Enviando mensagens para a nuvem ARTIK.
  void sendToArtikCloud (temperatura flutuante, umidade flutuante) {loadBuffer (temperatura, umidade); // carrega os valores atuais no buffer mqttCloudClient.publish (mqttCloudDataOut, buf); } void loadBuffer (temperatura flutuante, umidade flutuante) {StaticJsonBuffer <200> jsonBuffer; JsonObject &dataPair =jsonBuffer.createObject (); dataPair ["temperatura"] =temperatura; dataPair ["umidade"] =umidade; dataPair.printTo (buf, sizeof (buf)); }  







Configure os atuadores LED de temperatura e umidade

Crie um tipo de dispositivo ( Ator DHT11 )

Conecte um dispositivo ( DHT11 Actor A1 )

Conecte os dispositivos físicos

Configurar parâmetros MQTT da nuvem ARTIK
  // ARTIK Cloud MQTT params char mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =1883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id do dispositivo]"; char mqttCloudPassword [] ="[token do dispositivo]"; char mqttCloudActionsIn [] ="/v1.1/actions/[device-id]"; WiFiClient ipCloudStack; MQTTClient mqttCloudClient;  

Recebendo ações MQTT.
  void messageReceived (String topic, String payload, char * bytes, unsigned int length) {Serial.print ("topic ="); Serial.println (tópico); Serial.print ("carga útil ="); Serial.println (carga útil); Serial.print ("bytes ="); Serial.println (bytes); Serial.print ("comprimento ="); Serial.println (comprimento); parseBuffer (carga útil); }  

Analise e processe as ações da nuvem ARTIK.
  void parseBuffer (String payload) {StaticJsonBuffer <200> jsonBuffer; String json =carga útil; JsonObject &root =jsonBuffer.parseObject (json); const char * nameparam =root ["ações"] [0] ["nome"]; const int actionLEDRed =root ["ações"] [0] ["parâmetros"] ["led_red"]; const int actionLEDYellow =root ["ações"] [0] ["parâmetros"] ["led_yellow"]; Serial.print ("nome ="); Serial.println (nameparam); Serial.print ("led_red ="); Serial.println (actionLEDRed); Serial.print ("led_yellow ="); Serial.println (actionLEDYellow); Serial.println (); if (actionLEDRed ==1) {if (savedRedValue! =actionLEDRed) {digitalWrite (LED_RED_PIN, HIGH); saveRedValue =actionLEDRed; } savedRedTime =millis (); } else {if (savedRedValue! =actionLEDRed) {if (millis () - savedRedTime> RED_DELAY) {digitalWrite (LED_RED_PIN, LOW); saveRedValue =actionLEDRed; }}} if (actionLEDYellow ==1) {if (savedYellowValue! =actionLEDYellow) {digitalWrite (LED_YELLOW_PIN, HIGH); saveYellowValue =actionLEDYellow; } savedYellowTime =millis (); } else {if (savedYellowValue! =actionLEDYellow) {if (millis () - savedYellowTime> YELLOW_DELAY) {digitalWrite (LED_YELLOW_PIN, LOW); saveYellowValue =actionLEDYellow; }}}}  








Crie regras








Existem 4 regras:
  • SE a temperatura do sensor DHT11 A1 for superior a 32 e a umidade for superior a 34 ENTÃO envie para DHT11 Ator A1 a ação setValue com led_red =1, led_yellow =1‌
  • SE a temperatura do sensor DHT11 A1 for superior a 32 e a umidade for inferior a 35 ENTÃO envie para DHT11 Ator A1 a ação setValue com led_red =1, led_yellow =0‌
  • SE a temperatura do sensor DHT11 A1 for inferior a 33 e a umidade for superior a 34 ENTÃO envie para DHT11 Ator A1 a ação setValue com led_red =0, led_yellow =1
  • SE a umidade do sensor DHT11 A1 for inferior a 35 e a temperatura for inferior a 33 ENTÃO envie para DHT11 Ator A1 a ação setValue com led_red =0, led_yellow =0‌





Vídeo de demonstração


Observe que você precisará esperar que a temperatura aqueça (LED aceso) e esfrie (LED apagado). O LED vermelho é ligado em 37 segundos e desligado em 1:13 segundos. O vídeo de demonstração mostra apenas mudanças de temperatura. Usei um secador de cabelo para mudar a temperatura ao redor do sensor DHT11.

.






Código

  • artik_dht11_sensor.ino
  • artik_led_actor.ino
artik_dht11_sensor.ino C / C ++
 #include  #include  #include  #include "DHT.h" #define DHTPIN 2 // a qual pino digital estamos conectados # define DHTTYPE DHT11 / / DHT 11DHT dht (DHTPIN, DHTTYPE); const char * _SSID ="[SSID de Wi-Fi]"; const char * _PASSWORD ="[Senha de Wi-Fi]"; // ARTIK Cloud MQTT paramschar mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =8883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id do dispositivo]"; char mqttCloudPassword [] ="[token do dispositivo]"; char mqttCloudDataOut [] ="/v1.1/messages/[device-id]"; WiFiSSLClient ipCloudStack; MQTTClient mqttCloudClient; char buf [128]; temperatura flutuante, umidade; int n =0; void getNextSample (flutuante * Temperatura, flutuante * Umidade) {// 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 de até 2 segundos 'antigas' (é um sensor muito lento) * Humidity =dht.readHumidity (); // Lê a temperatura como Celsius (o padrão) * Temperature =dht.readTemperature (); // Lê a temperatura como Fahrenheit (isFahrenheit =true) // float f =dht.readTemperature (true); //printf("Temp=%.2f, Pres =%. 2f, Humi =%. 2f \ n ", Temp_c__f, Pres_hPa__f, Humi_pct__f); Serial.print ("Temperatura ="); Serial.println (* Temperatura); Serial.print ("Umidade ="); Serial.println (* Umidade);} configuração vazia () {Serial.begin (57600); dht.begin (); // Configuração de Wifi WiFi.begin (_SSID, _PASSWORD); enquanto (WiFi.status ()! =WL_CONNECTED) {atraso (500); Serial.print ("."); } Serial.println (); Serial.println ("WiFi conectado"); Serial.print ("endereço IP:"); Serial.println (WiFi.localIP ()); mqttCloudClient.begin (mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println ("iniciar o ARTIK Cloud Connect"); Serial.println (); while (! mqttCloudClient.connect (mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) {Serial.print ("*"); atraso (500); }} void messageReceived (String topic, String payload, char * bytes, unsigned int length) {} void sendToArtikCloud (float temperature, float umidade) {loadBuffer (temperatura, umidade); // carrega os valores atuais no buffer mqttCloudClient.publish (mqttCloudDataOut, buf);} void loadBuffer (temperatura flutuante, umidade flutuante) {StaticJsonBuffer <200> jsonBuffer; JsonObject &dataPair =jsonBuffer.createObject (); dataPair ["temperatura"] =temperatura; dataPair ["umidade"] =umidade; dataPair.printTo (buf, sizeof (buf));} void loop () {if (++ n> 10) {Serial.println ("Parado."); saída (0); } mqttCloudClient.loop (); atraso (1000); getNextSample (&temperatura, &umidade); Serial.println ("Publicando ..."); Serial.println (); sendToArtikCloud (temperatura, umidade); atraso (15000);} 
artik_led_actor.ino C / C ++
 #include  #include  #include  #define LED_RED_PIN 11 # define LED_YELLOW_PIN 13 # define RED_DELAY 5000 # define YELLOW_DELAY 10000const char * _SSID ="[Wi-Fi SSID ] "; const char * _PASSWORD =" [Senha Wi-Fi] "; // ARTIK Cloud MQTT paramschar mqttCloudServer [] ="api.artik.cloud"; int mqttCloudPort =1883; char mqttCloudClientName [] ="ARTIK-Arduino"; char mqttCloudUsername [] ="[id do dispositivo]"; char mqttCloudPassword [] ="[token do dispositivo]"; char mqttCloudActionsIn [] ="/v1.1/actions/[device-id]"; WiFiClient ipCloudStack; MQTTClient mqttCloudClient; char buf [128]; int savedRedValue, savedYellowValue; unsigned long savedRedTime, savedYellowTime; void setup () {Serial.begin (57600); pinMode (LED_RED_PIN, OUTPUT); pinMode (LED_YELLOW_PIN, OUTPUT); saveRedValue =savedYellowValue =0; // Configuração de Wifi WiFi.begin (_SSID, _PASSWORD); enquanto (WiFi.status ()! =WL_CONNECTED) {atraso (500); Serial.print ("."); } Serial.println (); Serial.println ("WiFi conectado"); Serial.print ("endereço IP:"); Serial.println (WiFi.localIP ()); mqttCloudClient.begin (mqttCloudServer, mqttCloudPort, ipCloudStack); Serial.println ("iniciar o ARTIK Cloud Connect"); Serial.println (); while (! mqttCloudClient.connect (mqttCloudClientName, mqttCloudUsername, mqttCloudPassword)) {Serial.print ("*"); atraso (500); } mqttCloudClient.subscribe (mqttCloudActionsIn);} void messageReceived (String topic, String payload, char * bytes, unigned int length) {Serial.print ("topic ="); Serial.println (tópico); Serial.print ("carga útil ="); Serial.println (carga útil); Serial.print ("bytes ="); Serial.println (bytes); Serial.print ("comprimento ="); Serial.println (comprimento); parseBuffer (carga útil);} void parseBuffer (carga útil String) {StaticJsonBuffer <200> jsonBuffer; String json =carga útil; JsonObject &root =jsonBuffer.parseObject (json); const char * nameparam =root ["ações"] [0] ["nome"]; const int actionLEDRed =root ["ações"] [0] ["parâmetros"] ["led_red"]; const int actionLEDYellow =root ["ações"] [0] ["parâmetros"] ["led_yellow"]; Serial.print ("nome ="); Serial.println (nameparam); Serial.print ("led_red ="); Serial.println (actionLEDRed); Serial.print ("led_yellow ="); Serial.println (actionLEDYellow); Serial.println (); if (actionLEDRed ==1) {if (savedRedValue! =actionLEDRed) {digitalWrite (LED_RED_PIN, HIGH); saveRedValue =actionLEDRed; } savedRedTime =millis (); } else {if (savedRedValue! =actionLEDRed) {if (millis () - savedRedTime> RED_DELAY) {digitalWrite (LED_RED_PIN, LOW); saveRedValue =actionLEDRed; }}} if (actionLEDYellow ==1) {if (savedYellowValue! =actionLEDYellow) {digitalWrite (LED_YELLOW_PIN, HIGH); saveYellowValue =actionLEDYellow; } savedYellowTime =millis (); } else {if (savedYellowValue! =actionLEDYellow) {if (millis () - savedYellowTime> YELLOW_DELAY) {digitalWrite (LED_YELLOW_PIN, LOW); saveYellowValue =actionLEDYellow; }}}} void loop () {mqttCloudClient.loop (); atraso (500); } 

Processo de manufatura

  1. Sensor DHT11 com LEDs e um alto-falante Piezo
  2. Arduino Spybot
  3. FlickMote
  4. TV B-Gone caseiro
  5. Relógio mestre
  6. Encontre-me
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Quadruped
  10. Mkr1000 Pinout:uma escolha preferencial para projetos de IoT