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

Monitor doméstico

Componentes e suprimentos

Arduino Mega 2560
× 1
Placa Arduino Ethernet
× 1
LCD 4x20 com interface I2C
× 1
Sensor de temperatura DHT22
× 1
DS3231 RTC
× 1
Distância ultrassônica HC-SR04
× 1
PCB fabricado sob encomenda do OSH Park
× 1

Sobre este projeto


Comecei com o monitoramento doméstico instalando um termostato Ecobee Smart na casa da minha filha. Eles foram descontinuados pela Ecobee, então eu queria uma alternativa que permitisse monitorar coisas como nível de reservatório, alarme de inundação, perda de energia, entre outros itens. Eu tirei muito de outros projetos em vários sites, especialmente para a codificação do Arduino e do site. O uso do Pushingbox para notificações foi a parte fundamental do sistema para permitir um meio de notificação remota. Agradeço a comunidade de design aberto por publicar seus conhecimentos e projetos.

Comecei com um Arduino Mega 2560, adicionei uma placa Ethernet. Usando Eagle cad, projetei algumas placas para entradas e também um anunciador visual. Mandei fazer isso por OSH Park. A placa de interface conecta os sete contatos secos disponíveis, sensor de temperatura e umidade, relógio em tempo real e sensor ultrassônico de nível do reservatório ao Arduino.

Para exibição local, usei um display LCD 4x20. Também existem 8 leds que mostram o status de qualquer entrada de alarme, âmbar quando ativado, verde quando apagado e apagado quando reinicializado.
O botão de reset limpa todos os leds verdes enquanto a mensagem habilitar PB liga / desliga as notificações usando Pushingbox.

O site é exibido apenas na LAN. Eu não queria portar meu roteador por possíveis motivos de segurança. Havia vários exemplos de Arduino dos quais usei partes, bem como jqplot, pois queria ficar sozinho em meu sistema de laboratório.

Site de exibição completo.
Ainda sem rótulos, no entanto, o software está configurado para alarmar a menos de 10 polegadas do sensor e o LED âmbar está aceso indicando que este alarme está ativo. O alarme verde mostra que ele já esteve ativado, mas foi aberto desde então. Ao pressionar o botão reset pb, o led verde se apagará, porém o led âmbar permanecerá aceso até que o nível seja superior a 10 polegadas.

Código

  • código Arduino
  • Site
Código do Arduino C / C ++
 // Código do Home Monitor / * ATRIBUIÇÕES arduino grn led vermelho led interface anunciador anunciador sensor # pino de saída variável pino de saída pino placa variável placa de pinos placa vermelha grn pinsump nível 1 6,8 18 19 polegadas x15-2 a 6 , x15-3 a 8 20-1 20-2 alarme de inundação 2 28 23 25 x15-4 20-3 20-4 perda de energia 3 30 27 29 x15-5 20-5 20-6 temperatura 4 ftemp 5 (ftemp, 1 ) x15-1 umidade 5 fhumi 5 (fhumi, 1) x15-1aux 1 6 aux1 32 31 33 x15-6 20-7 20-8aux 2 7 aux2 34 35 37 x15-11 21-1 21-2 aux 3 8 aux3 36 39 41 x15-7 21-3 21-4aux 4 9 aux4 38 43 45 x15-8 21-5 21-6aux 5 10 aux5 40 47 49 x15-9 21-7 21-8 redefinir redefinir 42 x15-10 inibição de mensagem msginhbt 44 LED de mensagem x15-12 17 * deve mudar para blindagem wi-fi WIRINGVCC para 5VLCD:pino SDA para pino 21LCD:pino SCL para pino 20DHT:pino DHT 1 para VCCDHT:pino DHT 2 para pino 5 e 10K para VCCDHT:pino DHT 3 sobressalente DHT:DHT pino 4 a GNDSR04:pino SR04 trig ao pino 8SR04:pino SR04 eco ao pino 6RTC:pino SDA ao pino 21RTC:pino SCL ao pino 20 PERDA DE ALIMENTAÇÃO pino 30 ALARME DE FLUXO pino 28 MENSAGEM O pino LED 17 não pode usar os pinos 4, 7, 10, 11, 12, 13 50, 51, 52 e 53 * /// BIBLIOTECAS # incluir  #incluir  #incluir  # include  #include  #include  #include  #include  #include  // tamanho do buffer usado para capturar HTTP request # define REQ_BUF_SZ 50 // endereço MAC do adesivo de escudo Ethernet sob boardbyte mac [] ={0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz}; IPAddress ip (192, 168, 1, 100); // (10, 9, 9, 12); ou (192,168,1,100); Pode ser necessário alterar o endereço IP, dependendo do gateway de endereço IP da rede (192,168,1,1); // (10,9,9,1):ou (192,168,1,1); não usado anteriormente em outros esboços PODE TER QUE REMOVEIPAddress sub-rede (255,255,255,0); // (255,255,255,0); não usado anteriormente em outros esboços PODE TER QUE REMOVER o servidorEthernetServer (1000); // cria um servidor na porta 1000File webFile; // o arquivo da página da web no cartão SDChar HTTP_req [REQ_BUF_SZ] ={0}; // solicitação HTTP em buffer armazenado como stringchar req_index =0 com terminação nula; // indexar no buffer HTTP_req // Seu DevID secreto de PushingBox.com. Você pode usar vários DevID em vários Pin se desejarchar DEVID1 [] ="xxxxxxxxxxxxxxxxx"; // Cenário:"este é o primeiro cenário de alerta" coloque seu DevID aqui entre aspas // DEVICE SETUP // setup LCDLiquidCrystal_I2C lcd (0x27,20,4); // definir o endereço LCD para 0x27 para um display de 16 caracteres e 2 linhas // configurar DHT22dht DHT; #define DHT22_PIN 5 // configurar sonar # define TRIGGER_PIN 8 // Pino do Arduino amarrado ao pino do gatilho no sensor ultrassônico. # define ECHO_PIN 6 // Pino do Arduino amarrado ao pino de eco no sensor ultrassônico. # Define MAX_DISTANCE 200 // Distância máxima para a qual queremos pingar (em centímetros). A distância máxima do sensor é avaliada em 400-500cm. Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuração de NewPing de pinos e distância máxima.//setup RTCRTC_DS3231 RTC; // Variáveis ​​globais unsigned long mathtime1 =0; tempo matemático longo sem sinal 2 =0; tempo matemático longo sem sinal 3 =0; tempo matemático longo sem sinal 3a =0; tempo matemático longo sem sinal 4 =0; String timestring; String de dados; polegadas int não assinadas; float ftemp; float fhumi; int aux1; int aux2; int aux3; int aux4; int aux5; int reset; int msginhbt =LOW; sensor interno 1 =0; Sensor de string2 =0; String sensor3 =0; sensor interno 4 =0; sensor interno 5 =0; String sensor6 =0; String sensor7 =0; Sensor de corda 8 =0; Sensor de corda 9 =0; Sensor de string 10 =0; String messagesend; String sensor1msg; String sensor2msg; String sensor3msg; String sensor6msg; String sensor7msg; String sensor8msg; String sensor9msg; String sensor10msg; String msginhbtmsg; String devid ="xxxxxxxxxxxxxxxxx"; char serverName [] ="api.pushingbox.com"; booleano lastConnected =false; boolean DEBUG =true; // para solucionar problemas pushboxboolean DEBUG1 =true; // para solucionar problemas de websiteboolean DEBUG2 =false; // para solução de problemas datavoid setup () {// SD CARD OPERATIONS // desativa o chip Ethernet pinMode (10, OUTPUT); digitalWrite (10, ALTO); // INICIA A SERIAL PARA DEPURAÇÃO Serial.begin (9600); if (DEBUG1) {Serial.println ("Iniciando Programa ..");} Ethernet.begin (mac, ip, gateway, sub-rede); if (DEBUG1) {Serial.println ("IP do servidor ativo:"); Serial.println (Ethernet.localIP ());} server.begin (); // inicializar o cartão SD if (DEBUG1) {Serial.println ("Inicializando o cartão SD ...");} if (! SD.begin (4)) {if (DEBUG1) {Serial.println ("ERROR - cartão SD a inicialização falhou! ");} return; // falha de inicialização} if (DEBUG1) {Serial.println ("SUCCESS - cartão SD inicializado.");} // verificar o arquivo index.htm if (! SD.exists ("index.htm")) {if ( DEBUG1) {Serial.println ("ERROR - Não é possível encontrar o arquivo index.htm!");} Return; // não é possível encontrar o arquivo de índice} Serial.println ("SUCCESS - Arquivo index.htm encontrado."); // INICIALIZE O EQUIPAMENTO // inicializa o servidor web Ethernet.begin (mac, ip); // inicializa o dispositivo Ethernet server.begin (); // começa a escutar os clientes // inicializa o lcd lcd.init (); // inicializa o RTC Wire.begin (); RTC.begin (); if (! RTC.isrunning ()) {if (DEBUG2) {Serial.println ("RTC não está em execução!");} // a linha seguinte define o RTC para a data e hora em que este esboço foi compilado RTC.adjust (DateTime (__DATA HORA__)); } DateTime agora =RTC.now (); DateTime compilado =DateTime (__ DATE__, __TIME__); if (now.unixtime ()  -1) {// verifique se o comando veio homefront =homefront + 6; // obtém o próximo caractere int endfront =homefront + 3; // Espero que este comando 3 caracteres String action =line.substring (homefront, endfront); // recupere o valor do comando client.print ("datas ({sensor1:"); client.print (sensor1); client. print (", sensor2:"); client.print (sensor2); client.print (", sensor3:"); client.print (sensor3); client.print (", sensor4:"); client.print (sensor4 ); client.print (", sensor5:"); client.print (sensor5); client.print (", sensor6:"); client.print (sensor6); client.print (", sensor7:"); cliente .print (sensor7); client.print (", sensor8:"); client.print (sensor8); client.print (", sensor9:"); client.print (sensor9); client.print (", sensor10:"); client.print (sensor10); client.print (", msgtimer:"); client.print (mathtime3a); client.print (", msgonoff:"); client.print (msginhbtmsg); client.print ( "})"); } pausa; } if (c =='\ n') {contínuo =verdadeiro; } else if (c! ='\ r') {contínuo =falso; }}} atraso (1); client.stop (); } if (DEBUG1) {Serial.print ("datas ({sensor1:"); Serial.println (sensor1); Serial.print (", sensor2:"); Serial.println (sensor2); Serial.print (", sensor3:"); Serial.println (sensor3); Serial.print (", sensor4:"); Serial.println (sensor4); Serial.print (", sensor5:"); Serial.println (sensor5); Serial. print (", sensor6:"); Serial.println (sensor6); Serial.print (", sensor7:"); Serial.println (sensor7); Serial.print (", sensor8:"); Serial.println (sensor8 ); Serial.print (", sensor9:"); Serial.println (sensor9); Serial.print (", sensor10:"); Serial.println (sensor10); Serial.print (", msgtimer:"); Serial .println (mathtime3a); Serial.print (", msgonoff:"); Serial.print (msginhbtmsg); Serial.println ("})");} if (DEBUG1) {Serial.print ("Endereço IP do meu site:"); Serial.println (Ethernet.localIP ());}} void timeanddate () {// hora e data DateTime now =RTC.now (); DateTime future (now.unixtime () - 0); // a correção da hora estava em 840 String hourstring; String minutestring; String secondstring; if (future.hour () <10) {hourstring ='0' + String (future.hour ()) + ':';} else {hourstring =String (future.hour ()) + ':';} se (future.minute () <10) {minutestring ='0' + String (future.minute ()) + ':';} else {minutestring =String (future.minute ()) + ':';} if ( future.second () <10) {secondstring ='0' + String (future.second ());} else {secondstring =String (future.second ());} timestring =hourstring + minutestring + secondstring; String monthstring; String daystring; String yearstring; if (future.month () <10) {monthstring ='0' + String (future.month ()) + '/';} else {monthstring =String (future.month ()) + '/';} if (future.day () <10) {daystring ='0' + String (future.day ()) + '/';} else {daystring =String (future.day ()) + '/';} datestring =string do mês + string do dia + futuro.ano (); lcd.setCursor (0,0); lcd.print (sequência de tempo); lcd.setCursor (10,0); lcd.print (cadeia de dados); mathtime1 =(now.unixtime ()); Retorna; } void ultrasonicsensor () {// sensor ultrassônico {unsigned int uS =sonar.ping_median (5); // Enviar ping, obtém o tempo de ping em microssegundos (uS). lcd.setCursor (9,1); lcd.print (""); lcd.setCursor (9,1); lcd.print (uS / US_ROUNDTRIP_IN); // Converte o tempo de ping para a distância em cm e imprime o resultado (0 =fora da faixa de distância definida) polegadas =(uS / US_ROUNDTRIP_IN); sensor1 =polegadas; if (DEBUG2) {Serial.print ("Distance:"); Serial.println (inches);}} return;} void dht22 () {// sensor de temperatura e umidade {if ((mathtime1 - mathtime4)> 2) { int chk =DHT.read22 (DHT22_PIN); fhumi =(DHT.umidade); ftemp =((DHT.temperatura * 1.8) +32); lcd.setCursor (9,2); lcd.print (fhumi, 1); lcd.setCursor (12,3); lcd.print (ftemp, 1); mathtime4 =mathtime1; } // delay (2000); // atraso de 2 segundos para leituras if (DEBUG2) {Serial.println ("Temperatura e Umidade:");} if (DEBUG2) {Serial.println (ftemp, 1);} if (DEBUG2) {Serial.println (fhumi , 1);}} return;} void annunciator () {// alarme de sump if (inches <10) {digitalWrite (18, HIGH); digitalWrite (19, ALTO); } else {digitalWrite (19, LOW);} // alarme de inundação if (digitalRead (28) ==HIGH) {digitalWrite (23, HIGH); digitalWrite (25, ALTO); } else {digitalWrite (25, LOW);} // perda de potência alarmif (digitalRead (30) ==HIGH) {digitalWrite (27, HIGH); digitalWrite (29, ALTO); } else {digitalWrite (29, LOW);} // aux 1 alarmif (digitalRead (32) ==HIGH) {digitalWrite (31, HIGH); digitalWrite (33, ALTO); } else {digitalWrite (33, LOW);} // aux 2 alarmif (digitalRead (34) ==HIGH) {digitalWrite (35, HIGH); digitalWrite (37, ALTO); } else {digitalWrite (37, LOW);} // aux 3 alarmif (digitalRead (36) ==HIGH) {digitalWrite (39, HIGH); digitalWrite (41, ALTO); } else {digitalWrite (41, LOW);} // aux 4 alarmif (digitalRead (38) ==HIGH) {digitalWrite (43, HIGH); digitalWrite (45, ALTO); } else {digitalWrite (45, LOW);} // aux 5 alarmif (digitalRead (40) ==HIGH) {digitalWrite (47, HIGH); digitalWrite (49, ALTO); } else {digitalWrite (49, LOW);} // redefinir ledsif (digitalRead (42) ==HIGH) {int ledPinsout [] ={18, 19, 23, 25, 27, 29, 31, 33, 35, 37 , 37, 39, 41, 43, 45, 47, 49}; int ledPinsoutcnt =17; {para (int q =0; q  99999) {mathtime3a =99999;}; if (DEBUG2) {Serial.print ("MATH TIME 1:"); Serial.println (mathtime1); Serial.print ("MATH TIME 2:"); Serial .println (mathtime2); Serial.print ("MATH TIME 3:"); Serial.println (mathtime3); Serial.print ("ZFLAG:"); Serial.println (zflag);} {if (zflag ==1 &&mathtime3> 300) // mudar para 300 segundos envia mensagem não mais do que a cada 5 minutos {mathtime2 =mathtime1; if (DEBUG1) {Serial.println ("ENVIAR MENSAGEM!");} Cliente EthernetClient; Serial.println ("Ethernet pronto"); // imprime o endereço IP da placa Ethernet / escudo:Serial.print ("My SENDMESSAGE IP address:"); Serial.println (Ethernet.localIP ()); // dê ao escudo Ethernet um segundo para inicializar:delay (1000); if (DEBUG2) {Serial.print ("valor de entrada:"); Serial.println (messagesend);} String repel =messagesend; char room [repel. length () + 1]; repel.toCharArray (room, repel.length () + 1); if (DEBUG2) {Serial.print ("Este é o valor sendo enquadrado:"); Serial.println (room);} client.stop (); if (DEBUG) {Serial.println ("Connecting ...");} if (client.connect (serverName, 80)) {if (DEBUG) {Serial.println ("connected");} if (DEBUG) { Serial.println ("enviando solicitação");} client.print ("GET / pushbox? Devid ="); client.print (devid); client.print ("&room ="); if (DEBUG) {Serial.print ("Este é o valor que está sendo enviado:"); Serial.println (room);} client.print (room); client.println ("HTTP / 1.1"); client.print ("Host:"); client.println (serverName); client.println ("User-Agent:Arduino"); client.println (); } else {if (DEBUG) {Serial.println ("conexão falhou");}}}} return;} 
Site JavaScript
precisa adicionar os arquivos js e css para executá-lo, eles residem no computador que você está usando. I
    Home Monitor              //      

Date and Time:

MUDSHARK INDUSTRIES
Changing the World for a better future.

Status:

Sump Level Value: inches from top

Flood Alarm Status:

Power Status:

Temperature Value: ° F

Humidity Value: %

Aux Input 1 Status:

Aux Input 2 Status:

Aux Input 3 Status:

Aux Input 4 Status:

Aux Input 5 Status:

Email message sent minutes ago

Esquemas

Interface and annunciator LED%20BAR%202.sch

Processo de manufatura

  1. Monitor de pressão arterial
  2. Construindo uma rede de sensores sem fio em sua casa
  3. Monitore a temperatura de sua casa usando o Raspberry Pi
  4. RASPBERRY PI HOME AUTOMATION
  5. Faça uma máquina de escrever trabalhos de casa DIY em casa
  6. Faça Monitor Ambilight usando Arduino
  7. Monitor de freqüência cardíaca usando IoT
  8. Monitor de Tensão do Termopar do Aquecedor de Água Quente
  9. Robô assistente autônomo da casa
  10. Arduino Home Controller ativado por Alexa