Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Moniteur d'accueil

Composants et fournitures

Arduino Mega 2560
× 1
Carte Ethernet Arduino
× 1
LCD 4x20 avec interface I2C
× 1
Capteur de température DHT22
× 1
DS3231 RTC
× 1
distance ultrasonore HC-SR04
× 1
OSH Park Custom PCB fabriqué
× 1

À propos de ce projet

J'ai commencé par la surveillance à domicile en installant un thermostat intelligent Ecobee dans la maison de ma fille. Ils ont été abandonnés par Ecobee, je voulais donc une alternative qui permettrait de surveiller des éléments tels que le niveau du puisard, l'alarme d'inondation, la perte de puissance ainsi que d'autres éléments. J'ai beaucoup puisé dans d'autres projets sur différents sites notamment pour le codage à la fois de l'Arduino et du site web. L'utilisation de Pushingbox pour les notifications était l'élément clé du système pour permettre un moyen de notification à distance. J'apprécie la communauté de conception ouverte pour la publication de leurs connaissances et de leurs projets.

J'ai commencé avec un Arduino Mega 2560, ajouté une carte Ethernet. En utilisant Eagle cad, j'ai conçu quelques cartes pour les entrées ainsi qu'un annonciateur visuel. Je les ai fait fabriquer par OSH Park. La carte d'interface connecte les sept contacts secs disponibles, le capteur de température et d'humidité, l'horloge en temps réel et le capteur de niveau de puisard à ultrasons à l'Arduino.

Pour l'affichage local, j'ai utilisé un écran LCD 4x20. Il y a également 8 LED qui indiquent l'état de toute entrée d'alarme, orange lorsqu'elle est activée, verte lorsqu'elle est effacée et éteinte lorsqu'elle est réinitialisée.
Le bouton de réinitialisation efface toutes les LED vertes tandis que le message d'activation du PB active/désactive les notifications à l'aide de Pushingbox.

Le site Web est affiché uniquement sur le réseau local. Je ne voulais pas porter mon routeur pour d'éventuelles raisons de sécurité. Il y avait plusieurs exemples Arduino dont j'ai utilisé des parties ainsi que jqplot car je voulais être autonome sur mon système de laboratoire.

Site d'affichage complet.

Aucune étiquette pour le moment, cependant, le logiciel est configuré pour déclencher une alarme à moins de 10 pouces du capteur et le voyant orange est allumé, indiquant que cette alarme est active. L'alarme qui est verte indique qu'elle a déjà été activée mais qu'elle s'est ouverte depuis. En appuyant sur le bouton reset, la LED verte s'éteindra mais la LED ambre restera allumée jusqu'à ce que le niveau soit supérieur à 10 pouces.

Code

  • Code Arduino
  • Site Web
Code ArduinoC/C++
 // Home Monitor code/* AFFECTATIONS arduino grn led rouge led interface annonciateur annonciateur capteur# entrée variable broche de sortie broche de sortie carte variable carte à broches rouge carte à broches grn pinsump niveau 1 6,8 18 19 pouces x15-2 à 6 , x15-3 à 8 20-1 20-2alarme inondation 2 28 23 25 x15-4 20-3 20-4 perte de puissance 3 30 27 29 x15-5 20-5 20-6 température 4 ftemp 5 (ftemp,1 ) x15-1 humidité 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-8reset reset 42 x15-10message inhibition msginhbt 44 x15-12message led 17* doit changer pour le bouclier wifi WIRINGVCC à 5VLCD:broche SDA à broche 21LCD:broche SCL à broche 20DHT:broche DHT 1 à VCCDHT:broche 2 DHT à broche 5 et 10K à VCCDHT:DHT broche 3 de rechangeDHT:DHT broche 4 à GNDSR04 :broche trig SR04 à la broche 8SR04 :écho de la broche SR04 à la broche 6RTC :broche SDA à la broche 21RTC :broche SCL à la broche 20 PERTE DE PUISSANCE broche 30 ALARME FLOOD broche 28MESSAGE La broche LED 17 ne peut pas utiliser les broches 4, 7, 10, 11, 12, 13 50, 51, 52 et 53 */// LIBRARIES#include #include #include # include  #include #include #include #include #include // taille du tampon utilisé pour capturer HTTP request#define REQ_BUF_SZ 50// adresse MAC de l'autocollant Ethernet shield sous boardbyte mac[] ={ 0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz };IPAddress ip (192, 168, 1, 100); // (10, 9, 9, 12); ou (192 168 1 100); L'adresse IP, peut devoir changer en fonction de la passerelle networkIPAddress (192,168,1,1) ; //(10,9,9,1) :ou (192,168,1,1) ; non utilisé auparavant dans d'autres croquis PEUT DEVOIR SUPPRIMERIPAddress subnet (255,255,255,0); // (255,255,255,0); non utilisé auparavant dans d'autres esquisses PEUT DEVOIR SUPPRIMER le serveur Ethernet Server (1000); // crée un serveur sur le port 1000File webFile; // le fichier de page Web sur la carte SDchar HTTP_req[REQ_BUF_SZ] ={0}; // requête HTTP mise en mémoire tampon stockée en tant que stringchar terminé par null req_index =0; // index dans le tampon HTTP_req // Votre DevID secret de PushingBox.com. Vous pouvez utiliser plusieurs DevID sur plusieurs broches si vous voulezchar DEVID1[] ="xxxxxxxxxxxxxxxxxx" ; //Scénario :"c'est le premier scénario d'alerte" mettez votre DevID ici entre guillemets// DEVICE SETUP//setup LCDLiquidCrystal_I2C lcd(0x27,20,4) ; // définissez l'adresse LCD sur 0x27 pour un affichage de 16 caractères et 2 lignes//configurez DHT22dht DHT;#define DHT22_PIN 5//setup sonar#define TRIGGER_PIN 8 // Broche Arduino liée à la broche de déclenchement sur le capteur à ultrasons.#define ECHO_PIN 6 // Broche Arduino liée à la broche d'écho sur le capteur à ultrasons. #define MAX_DISTANCE 200 // Distance maximale pour laquelle nous voulons envoyer un ping (en centimètres). La distance maximale du capteur est évaluée à 400-500 cm. Nouveau sondeur Ping (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuration NewPing des broches et de la distance maximale.//setup RTCRTC_DS3231 RTC;//Variables globales non signées long mathtime1 =0; mathtime2 long non signé =0 ; mathtime3 long non signé =0 ; mathtime3a long non signé =0 ; mathtime4 long non signé =0 ; Chaîne de temps; Chaîne de date; pouces int non signés ; flottant ftemp; flotteur fhumi; int aux1; int aux2; int aux3; int aux4; int aux5; entier réinitialisé ; int msginhbt =FAIBLE; int capteur1 =0 ; String sensor2 =0 ; Capteur de chaîne3 =0 ; int capteur4 =0 ; int capteur5 =0 ; Capteur de chaîne 6 =0 ; Capteur de chaîne 7 =0 ; Capteur de chaîne8 =0 ; Capteur de chaîne9 =0 ; Capteur de chaîne10 =0 ; String messagesend;String sensor1msg;String sensor2msg;String sensor3msg;String sensor6msg;String sensor7msg;String sensor8msg;String sensor9msg;String sensor10msg;String msginhbtmsg;String devid ="xxxxxxxxxxxx[]xxxx";char serveracom booléen lastConnected =false;booléen DEBUG =true; // pour le dépannage pushboxboolean DEBUG1 =true; //pour le dépannage du site Webboolean DEBUG2 =false; //pour le dépannage de la configuration de datavoid (){// OPÉRATIONS DE CARTE SD // désactive le pinMode de la puce Ethernet (10, OUTPUT); digitalWrite(10, HAUT); // DÉMARRER LA SÉRIE POUR LE DÉBOGAGE Serial.begin(9600); if (DEBUG1){Serial.println("Démarrage du programme..");} Ethernet.begin(mac,ip,gateway,subnet); if (DEBUG1){Serial.println("Active Server IP:");Serial.println(Ethernet.localIP());} server.begin(); // initialise la carte SD if (DEBUG1){Serial.println("Initialisation de la carte SD...");} if (!SD.begin(4)) { if (DEBUG1){Serial.println("ERREUR - carte SD l'initialisation a échoué !");} return ; // échec de l'initialisation } if (DEBUG1){Serial.println("SUCCESS - SD card initialized.");} // recherche du fichier index.htm if (!SD.exists("index.htm")) { if ( DEBUG1){Serial.println("ERREUR - Impossible de trouver le fichier index.htm !");} return ; // impossible de trouver le fichier d'index } Serial.println("SUCCESS - Fichier index.htm trouvé."); // INITIALISER L'EQUIPEMENT //initialiser le serveur web Ethernet.begin(mac, ip); // initialiser le périphérique Ethernet server.begin(); // commencer à écouter les clients // initialiser l'écran lcd lcd.init(); //initialiser le RTC Wire.begin(); RTC.begin(); if (! RTC.isrunning()) { if (DEBUG2){Serial.println("RTC n'est PAS en cours d'exécution!");} // la ligne suivante définit le RTC à la date et à l'heure à laquelle cette esquisse a été compilée RTC.adjust(DateTime (__DATE__, __HEURE__)); } DateHeure maintenant =RTC.now(); DateTime compilé =DateTime(__DATE__, __TIME__); if (now.unixtime() -1){ //vérifie si la commande est arrivée homefront =homefront+6; // obtient le caractère suivant int endfront =homefront+3; //J'espère que cette commande 3 caractères String action =line.substring(homefront,endfront);//récupérer la valeur de la commande 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 :"); client .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( "})"); } Pause; } if(c =='\n') { continu =vrai; } else if (c !='\r') {continu =false; } } } délai(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("Adresse IP de mon site Web :"); Serial.println(Ethernet.localIP());} }void timeanddate(){//time and date DateTime now =RTC.now(); DateTime future (now.unixtime() - 0); // la correction de l'heure était à 840 String hourstring; Chaîne minutestring; Chaîne deuxième chaîne ; if(future.hour() <10){ hourstring ='0' + String(future.hour()) + ':';} else { hourstring =String(future.hour()) + ':';} if (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; Chaîne monthstring; Chaîne daystring; Chaîne de l'année ; 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=chaînemois + chaînejour + future.année(); lcd.setCursor(0,0); lcd.print (chaîne de temps); lcd.setCursor(10,0); lcd.print(datestring); mathtime1 =(now.unixtime()); retourner; }void ultrasonicsensor(){ //capteur à ultrasons{ unsigned int uS =sonar.ping_median(5) ; // Envoie le ping, obtient le temps de ping en microsecondes (uS). lcd.setCursor(9,1) ; lcd.print(" "); lcd.setCursor(9,1) ; lcd.print(uS / US_ROUNDTRIP_IN); // Convertir le temps de ping en distance en cm et imprimer le résultat (0 =en dehors de la plage de distance définie) pouces =(uS / US_ROUNDTRIP_IN); capteur1 =pouces ; if (DEBUG2){Serial.print("Distance :");Serial.println(inches);}}return;}void dht22(){//temp et capteur d'humidité{ if ((mathtime1 - mathtime4)>2) { int chk =DHT.read22(DHT22_PIN); fhumi=(DHT.humidité); ftemp=((DHT.température*1.8)+32); lcd.setCursor(9,2) ; lcd.print(fhumi, 1); lcd.setCursor(12,3) ; lcd.print(ftemp, 1); heuremath4 =heuremath1; } //délai (2000); //2 secondes de délai pour les lectures if (DEBUG2){Serial.println("Température et humidité :");} if (DEBUG2){Serial.println(ftemp,1);} if (DEBUG2){Serial.println(fhumi ,1);} }return;}void annonciator() { //sump alarm if (inches<10) { digitalWrite(18, HIGH); digitalWrite (19, ÉLEVÉ); } else { digitalWrite(19, LOW);}//alarme d'inondation if (digitalRead(28) ==HIGH ) { digitalWrite(23, HIGH); digitalWrite (25, HAUT); } else { digitalWrite (25, LOW);}//alarme de perte de puissance (digitalRead(30) ==HIGH ) { digitalWrite (27, HIGH); digitalWrite (29, HAUT); } else { digitalWrite(29, LOW);}//aux 1 alarmif (digitalRead(32) ==HIGH ) { digitalWrite(31, HIGH); digitalWrite(33, HAUT); } else { digitalWrite(33, LOW);}//aux 2 alarmif (digitalRead(34) ==HIGH ) { digitalWrite(35, HIGH); digitalWrite (37, ÉLEVÉ); } else { digitalWrite(37, LOW);}//aux 3 alarmif (digitalRead(36) ==HIGH ) { digitalWrite(39, HIGH); digitalWrite (41, ÉLEVÉ); } else { digitalWrite(41, LOW);}//aux 4 alarmif (digitalRead(38) ==HIGH ) { digitalWrite(43, HIGH); écriture numérique (45, ÉLEVÉ); } else { digitalWrite(45, LOW);}//aux 5 alarmif (digitalRead(40) ==HIGH ) { digitalWrite(47, HIGH); digitalWrite (49, ÉLEVÉ); } else { digitalWrite(49, LOW);}//reset 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 ; { pour (int q=0; q 99999){mathtime3a =99999;};if (DEBUG2){Serial.print("MATH TIME 1:");Serial.println(mathtime1);Serial.print("MATH TIME 2:");Série .println(mathtime2);Serial.print("MATH TIME 3:");Serial.println(mathtime3);Serial.print("ZFLAG:");Serial.println(zflag);}{ if (zflag ==1 &&mathtime3> 300 ) // passer à 300 secondes envoie un message toutes les 5 minutes maximum {mathtime2 =mathtime1; if (DEBUG1){Serial.println("ENVOYER UN MESSAGE !");} Client Ethernet Client ; Serial.println("Ethernet prêt"); // affiche l'adresse IP de la carte/shield Ethernet :Serial.print("Mon adresse IP SENDMESSAGE :"); Serial.println(Ethernet.localIP()); // donne au blindage Ethernet une seconde pour s'initialiser :delay(1000);if (DEBUG2){Serial.print("incoming value:");Serial.println(messagesend);}String repel =messagesend;char room[repel. length()+1];repel.toCharArray(room,repel.length()+1); if (DEBUG2){Serial.print("Ceci est la valeur encadrée :");Serial.println(room);} client.stop(); if(DEBUG){Serial.println("connecting...");} if (client.connect(serverName, 80)) { if(DEBUG){Serial.println("connected");} if(DEBUG){ Serial.println("envoi de la demande");} client.print("GET /pushingbox?devid="); client.print(devid); client.print("&room="); if (DEBUG){Serial.print("Ceci est la valeur envoyée :");Serial.println(room);} client.print(room); client.println(" HTTP/1.1"); client.print("Hôte :"); client.println(nomserveur); client.println("User-Agent :Arduino"); client.println(); } else { if(DEBUG){Serial.println("la connexion a échoué");} } }} return;}
Site WebJavaScript
besoin d'ajouter les fichiers js et css pour exécuter cela, ils résident sur l'ordinateur que vous utilisez. I
 Home Monitor          //     

Home Monitor Développé par Kevin Strain

Date et heure :

INDUSTRIES DE BOUE
Changer le monde pour un avenir meilleur.

Statut :

Niveau de puisard Valeur : pouces du haut

Statut de l'alarme d'inondation :

Power Statut :

Température Valeur : ° F

Humidité Valeur : %

Entrée Aux 1 Statut :

Entrée Aux 2 Statut :

Entrée Aux 3 Statut :

Aux Input 4 Statut :

Aux Input 5 Statut :

Email envoyé il y a quelques minutes

Schémas

Interface et annonciateur LED%20BAR%202.sch

Processus de fabrication

  1. Tensiomètre
  2. Construire un réseau de capteurs sans fil dans votre maison
  3. Surveillez la température de votre maison à l'aide de votre Raspberry Pi
  4. DOMOMATISATION RASPBERRY PI
  5. Fabriquer une machine à écrire pour les devoirs à la maison
  6. Créer un moniteur Ambilight à l'aide d'Arduino
  7. Moniteur de fréquence cardiaque utilisant l'IoT
  8. Moniteur de tension du thermocouple du chauffe-eau
  9. Robot assistant domestique autonome