Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Thuismonitor

Componenten en benodigdheden

Arduino Mega 2560
× 1
Arduino Ethernet-kaart
× 1
4x20 LCD met I2C-interface
× 1
DHT22-temperatuursensor
× 1
DS3231 RTC
× 1
HC-SR04 ultrasone afstand
× 1
OSH Park op maat gemaakte PCB
× 1

Over dit project

Ik begon met thuismonitoring door een Ecobee Smart-thermostaat in het huis van mijn dochter te installeren. Ze zijn stopgezet door Ecobee, dus ik wilde een alternatief waarmee ik dingen kon controleren, zoals het niveau van de put, overstromingsalarm, stroomuitval en andere items. Ik heb veel uit andere projecten op verschillende sites getrokken, vooral voor de codering van zowel de Arduino als de website. Het gebruik van Pushingbox voor notificaties was het belangrijkste onderdeel van het systeem om op afstand notificaties mogelijk te maken. Ik waardeer de open ontwerpgemeenschap voor het publiceren van hun kennis en projecten.

Ik begon met een Arduino Mega 2560, voegde een Ethernet-kaart toe. Met behulp van Eagle cad ontwierp ik een aantal borden voor invoer en een visuele annunciator. Ik heb deze laten maken door OSH Park. Het interfacebord verbindt de zeven beschikbare droge contacten, temperatuur- en vochtigheidssensor, realtime klok en ultrasone carterniveausensor met de Arduino.

Voor lokale weergave heb ik een 4x20 LCD-scherm gebruikt. Er zijn ook 8 leds die de status van elke alarmingang weergeven, oranje wanneer deze is ingeschakeld, groen wanneer deze is gewist en uit wanneer deze is gereset.
De resetknop wist alle groene leds terwijl het bericht enable PB de meldingen in- of uitschakelt met Pushingbox.

De website wordt alleen weergegeven op het LAN. Ik wilde mijn router om mogelijke veiligheidsredenen niet overzetten. Er waren verschillende Arduino-voorbeelden waarvan ik zowel delen als jqplot gebruikte, omdat ik alleen op mijn laboratoriumsysteem wilde staan.

Website met volledige weergave.

Er zijn nog geen labels, maar de software is ingesteld op een alarm op minder dan 10 inch van de sensor en de oranje led brandt om aan te geven dat dit alarm actief is. Het alarm dat groen is, geeft aan dat het ooit binnen was, maar sindsdien is geopend. Door op de reset pb te drukken gaat de groene led uit, maar de oranje led blijft branden totdat het niveau meer dan 10 inch is.

Code

  • Arduino-code
  • Website
Arduino-codeC/C++
 // Home Monitor code/* OPDRACHTEN arduino grn led rood led interface melder annunciator sensor# variabele input pin output pin output pin variabel bord prikbord rood prikbord grn pinsump niveau 1 6,8 18 19 inch x15-2 tot 6 , x15-3 tot 8 20-1 20-2overstromingsalarm 2 28 23 25 x15-4 20-3 20-4 stroomuitval 3 30 27 29 x15-5 20-5 20-6 temperatuur 4 ftemp 5 (ftemp,1 ) x15-1 vochtigheid 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 inhibit msginhbt 44 x15-12 bericht led 17* moet veranderen voor wifi schild WIRINGVCC naar 5VLCD:SDA pin naar pin 21LCD:SCL pin naar pin 20DHT:DHT pin 1 naar VCCDHT:DHT pin 2 naar pin 5 en 10K naar VCCDHT:DHT pin 3 spareDHT:DHT pin 4 naar GNDSR04:SR04 pin trig naar pin 8SR04:SR04 pin echo naar pin 6RTC:SDA pin naar pin 21RTC:SCL pin naar pin 20 VERLIES VAN VOEDING pin 30OVERSTROMING ALARM pin 28MESSAGE LED-pin 17 kan pinnen 4, 7, 10, 11, 12, 13 50, 51, 52 en 53 niet gebruiken */// LIBRARIES#include #include #include # include  #include #include #include #include #include // grootte van buffer gebruikt om HTTP vast te leggen verzoeken #define REQ_BUF_SZ 50// MAC-adres van Ethernet-schildsticker onder boardbyte mac [] ={ 0xzz, 0xzz, 0xzz, 0xzz, 0xzz, 0xzz };IPAddress ip(192, 168, 1, 100);//(10, 9, 9, 12); of (192.168.1.100); IP-adres, moet mogelijk worden gewijzigd, afhankelijk van netwerkIPAddress-gateway (192,168,1,1); //(10,9,9,1):of (192,168,1,1); niet eerder gebruikt in andere schetsen MOET VERWIJDERD subnet (255,255,255,0);// (255,255,255,0); niet eerder gebruikt in andere schetsen MOET VERWIJDEREN thethernetServer server (1000); // maak een server op poort 1000File webFile; // het webpaginabestand op de SD-kaartchar HTTP_req[REQ_BUF_SZ] ={0}; // gebufferd HTTP-verzoek opgeslagen als null beëindigd stringchar req_index =0; // index in HTTP_req buffer//Uw geheime DevID van PushingBox.com. U kunt meerdere DevID op meerdere pins gebruiken als u wiltchar DEVID1[] ="xxxxxxxxxxxxxxxxxx"; //Scenario:"dit is het eerste waarschuwingsscenario" plaats uw DevID hier tussen aanhalingstekens// DEVICE SETUP//setup LCDLiquidCrystal_I2C lcd (0x27,20,4); // stel het LCD-adres in op 0x27 voor een display van 16 tekens en 2 regels // stel DHT22dht DHT in;#define DHT22_PIN 5//setup sonar#define TRIGGER_PIN 8 // Arduino-pin vastgemaakt aan triggerpin op de ultrasone sensor.#define ECHO_PIN 6 // Arduino-pin vastgemaakt aan echopin op de ultrasone sensor.#define MAX_DISTANCE 200 // Maximale afstand waarvoor we willen pingen (in centimeters). De maximale sensorafstand is 400-500 cm. Nieuwe Ping-sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup van pinnen en maximale afstand.//setup RTCRTC_DS3231 RTC;//Globale variabelen unsigned long mathtime1 =0; unsigned lange mathtime2 =0; unsigned lange mathtime3 =0; niet-ondertekende lange mathtime3a =0; unsigned lange mathtime4 =0; String tijdreeks; String datumstring; ongetekende int inches; vlotter ftemp; drijvende fhumi; int aux1; int aux2; int aux3; int aux4; int aux5; int reset; int msginhbt =LAAG; int-sensor1 =0; Stringsensor2 =0; Stringsensor3 =0; int-sensor4 =0; int-sensor5 =0; Stringsensor6 =0; Stringsensor7 =0; Stringsensor8 =0; Stringsensor9 =0; Stringsensor10 =0; String messagesend;String sensor1msg;String sensor2msg;String sensor3msg;String sensor6msg;String sensor7msg;String sensor8msg;String sensor9msg;String sensor10msg;String msginhbtmsg;String devid ="xxxxxxxxxNamexxxxx" =a char server boolean lastConnected =false;boolean DEBUG =waar; // voor het oplossen van problemen met pushboxboolean DEBUG1 =true; // voor het oplossen van problemen websiteboolean DEBUG2 =false; // voor het oplossen van problemen met datavoid setup () {// SD-KAARTBEWERKINGEN // schakel Ethernet-chip pinMode (10, OUTPUT) uit; digitalWrite (10, HOOG); // START SERIAL VOOR DEBUGGING Serial.begin (9600); if (DEBUG1){Serial.println("Startprogramma..");} Ethernet.begin(mac,ip,gateway,subnet); if (DEBUG1){Serial.println("Active Server IP:");Serial.println(Ethernet.localIP());} server.begin(); // initialiseer SD-kaart if (DEBUG1){Serial.println("Initialiseren SD-kaart...");} if (!SD.begin(4)) { if (DEBUG1){Serial.println("ERROR - SD-kaart initialisatie mislukt!");} return; // init mislukt } if (DEBUG1) {Serial.println ("SUCCESS - SD-kaart geïnitialiseerd.");} // controleer op index.htm-bestand if (!SD.exists ("index.htm")) { if ( DEBUG1){Serial.println("FOUT - Kan index.htm-bestand niet vinden!");} return; // kan indexbestand niet vinden } Serial.println ("SUCCESS - Gevonden index.htm-bestand."); // INITIALISEER APPARATUUR // initialiseer webserver Ethernet.begin (mac, ip); // initialiseer Ethernet-apparaatserver.begin(); // begin naar klanten te luisteren // initialiseer de lcd lcd.init(); //initialiseer de RTC Wire.begin(); RTC.begin(); if (! RTC.isrunning()) {if (DEBUG2){Serial.println("RTC is NIET actief!");} // volgende regel stelt de RTC in op de datum en tijd waarop deze schets is gecompileerd RTC.adjust(DateTime (__DATUM TIJD__)); } DateTime nu =RTC.now(); DateTime gecompileerd =DateTime(__DATE__, __TIME__); if (now.unixtime() -1){ //check of het commando homefront =homefront+6 kwam; //haal het volgende karakter int endfront =homefront+3; //Ik hoop dat dit commando 3 tekens String action =line.substring(homefront,endfront);//haal de waarde van het commando 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( "})"); } pauze; } if(c =='\n') { continu =waar; } else if (c !='\r') { continu =false; } } } vertraging(1); klant.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("Mijn website IP-adres:"); Serial.println(Ethernet.localIP());} }void timeanddate(){//time and date DateTime now =RTC.now(); DateTime future (now.unixtime() - 0);//tijdcorrectie was bij 840 String hourstring; String minuutstring; String tweede string; 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; String maandstring; String dagstring; String jaarteken; 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=maandtekenreeks + dagtekenreeks + toekomst.jaar(); lcd.setCursor(0,0); lcd.print(tijdreeks); lcd.setCursor(10,0); lcd.print(datumstring); mathtime1 =(nu.unixtime()); opbrengst; }void ultrasone sensor(){ //ultrasone sensor{ unsigned int uS =sonar.ping_median(5); // Stuur ping, ontvang ping-tijd in microseconden (us). lcd.setCursor(9,1); lcd.print(" "); lcd.setCursor(9,1); lcd.print(us / US_ROUNDTRIP_IN); // Converteer ping-tijd naar afstand in cm en print resultaat (0 =buiten het ingestelde afstandsbereik) inches =(uS / US_ROUNDTRIP_IN); sensor1 =inch; if (DEBUG2){Serial.print("Distance:");Serial.println(inch);}}return;}void dht22(){//temp en vochtigheidssensor{ if ((mathtime1 - mathtime4)>2) { int chk =DHT.read22(DHT22_PIN); fhumi=(DHT.vochtigheid); ftemp=((DHT.temperatuur*1.8)+32); lcd.setCursor(9,2); lcd.print(fhumi, 1); lcd.setCursor(12,3); lcd.print(ftemp, 1); rekentijd4 =rekentijd1; } //vertraging (2000); //2 seconde vertraging voor metingen if (DEBUG2){Serial.println("Temperature and Humidity:");} if (DEBUG2){Serial.println(ftemp,1);} if (DEBUG2){Serial.println(fhumi ,1);} }return;}void annunciator() { //sump alarm if (inch<10) { digitalWrite (18, HIGH); digitalWrite(19, HOOG); } else {digitalWrite(19, LOW);}//overstromingsalarm if (digitalRead(28) ==HOOG) {digitalWrite(23, HIGH); digitalWrite(25, HOOG); } else {digitalWrite(25, LOW);}//uitval alarmif (digitalRead(30) ==HOOG) {digitalWrite(27, HIGH); digitalWrite(29, HOOG); } else {digitalWrite(29, LOW);}//aux 1 alarmif (digitalRead(32) ==HOOG) {digitalWrite(31, HIGH); digitalWrite(33, HOOG); } else {digitalWrite(33, LOW);}//aux 2 alarmif (digitalRead(34) ==HIGH) {digitalWrite(35, HIGH); digitalWrite(37, HOOG); } else {digitalWrite(37, LOW);}//aux 3 alarmif (digitalRead(36) ==HIGH) {digitalWrite(39, HIGH); digitalWrite(41, HOOG); } else {digitalWrite(41, LOW);}//aux 4 alarmif (digitalRead(38) ==HIGH) {digitalWrite(43, HIGH); digitalWrite(45, HOOG); } else {digitalWrite(45, LOW);}//aux 5 alarmif (digitalRead(40) ==HIGH) {digitalWrite(47, HIGH); digitalWrite(49, HOOG); } 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; { for (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 ) // wijzigen naar 300 seconden verzendt bericht niet meer dan elke 5 minuten {mathtime2 =mathtime1; if (DEBUG1){Serial.println("SEND MESSAGE!");} EthernetClient-client; Serial.println("Ethernet gereed"); // druk het IP-adres van de Ethernet-kaart/-shield af:Serial.print ("My SENDMESSAGE IP-adres:"); Serial.println(Ethernet.localIP()); // geef het Ethernet-schild een seconde om te initialiseren: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("Dit is de waarde die wordt ingelijst:");Serial.println(room);} client.stop(); if(DEBUG){Serial.println("verbinden...");} if (client.connect(serverName, 80)) { if(DEBUG){Serial.println("verbonden");} if(DEBUG){ Serial.println("verzendverzoek");} client.print("GET /pushingbox?devid="); klant.print(devid); klant.print("&room="); if (DEBUG){Serial.print("Dit is de waarde die wordt verzonden:");Serial.println(room);} client.print(room); client.println ("HTTP/1.1"); client.print("Host:"); client.println(servernaam); client.println ("Gebruiker-agent:Arduino"); klant.println(); } else { if(DEBUG){Serial.println("verbinding mislukt");} } }} return;}
WebsiteJavaScript
moet u de js- en css-bestanden toevoegen om dit uit te voeren, deze bevinden zich op de computer die u gebruikt. I
 Home Monitor          //     

Home Monitor Ontwikkeld door Kevin Strain

Datum en tijd:

MUDSHARK INDUSTRIES
De wereld veranderen voor een betere toekomst.

Status:

Sumpniveau Waarde: inch vanaf bovenkant

Overstromingsalarm Status:

Power Status:

Temperatuur Waarde: ° F

Vochtigheid Waarde: %

Aux-ingang 1 Status:

Aux-ingang 2 Status:

Aux-ingang 3 Status:

Aux-ingang 4 Status:

Aux-ingang 5 Status:

E-mailbericht verzonden minuten geleden

Schema's

Interface en annunciator LED%20BAR%202.sch

Productieproces

  1. Bloeddrukmeter
  2. Een draadloos sensornetwerk in uw huis bouwen
  3. Bewaak je huistemperatuur met je Raspberry Pi
  4. RASPBERRY PI HOME AUTOMATION
  5. Maak thuis een zelfgemaakte schrijfmachine voor huiswerk
  6. Maak Monitor Ambilight met Arduino
  7. Hartslagmeter met IoT
  8. Warmwaterverwarmer Thermokoppel Spanningsmonitor
  9. Autonome Home Assistant-robot
  10. Arduino Home Controller geactiveerd door Alexa
  11. MAX 30102 hartslagmeter op 16x2 LCD