Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Luftsurfer

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
3,2 Zoll TFT-Modul für Mega 2560
× 1
Temperaturfühler
× 1
Adafruit Feuchtigkeits- und Temperatursensor
× 1
mh-z19 CO2-Sensor
× 1
RTC-Modul
× 1
einstellbarer Spannungsregler
× 1
Luftfahrtstecker L89 G12
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Als Bauingenieur weiß ich sehr genau, wie Lüftungssysteme zu Hause funktionieren sollen. Um die Luftqualität in meiner Wohnung zu messen, habe ich mir einen CO2-Monitor gekauft, der mir sehr gut gefallen hat, weil er nicht nur den CO2-Wert, sondern auch die Raumtemperatur anzeigt.

Dies war mir jedoch nicht genug. Ich wollte mehr Parameter messen, also suchte ich nach einem geeigneten Gerät. Ich fand einige, die lächerlich teuer waren, also beschloss ich, meine eigenen zu machen.

Zu dieser Zeit hatte ich bereits Erfahrung in der Programmierung von Arduino-Controllern für eine Pumpstation mit Magnetventilen, die verschiedene Rohrleitungszweige steuern.

Ich habe ein Projekt auf Papier gemacht und dann die notwendigen Werkzeuge und Sensoren bestellt.

Basis

Ich wollte, dass es einen riesigen Bildschirm von mindestens 10 Zoll hat, aber es würde meine Taschen sehr schnell leeren. Ich beschloss realistisch zu sein und entschied mich für Arduino Mega 2560 R3 mit tft 3.2 420x380 Display. Dieses Setup erforderte eine minimale Verkabelung, da das Display direkt mit der Arduino-Platine verbunden ist.

Leider war das Display, das ich bei Aliexpress bestellt habe, so billig, dass es nicht sehr gut funktioniert hat. Es gab weiße kleine Punkte, die mit der Zeit und invertierten Farben erschienen. Ich habe verschiedene Bibliotheken und verschiedene Controller ausprobiert, aber es hat nicht geholfen. Also habe ich die Farben im Code angepasst und die Bildschirmaktualisierung um 12.00 Uhr und 12.00 Uhr hinzugefügt.

Sensoren

Der teuerste Teil des Projekts war der CO2-Sensor mh-z19. Er ist unter anderen CO2-Sensoren relativ günstig und bietet gleichzeitig zuverlässige Messungen und eine automatische Kalibrierungsfunktion.

Und während andere Module relativ einfach zu installieren waren, hatte dieser Sensor nicht viele Informationen in seinem Datenblatt, also suchte ich in Foren nach einem Code und kombinierte alle Informationen. Dadurch funktioniert jetzt alles perfekt und noch besser als beim vorherigen Sensor.

Es dauerte jedoch 24 Stunden, bis es sich selbst kalibriert hatte, sodass seine Messwerte zunächst inkonsistent waren. Die automatische Kalibrierung ist einfach. Wenn ich meine Wohnung verlasse, verbraucht niemand Sauerstoff, sodass der CO2-Wert auf den Außenwert von 400 ppm sinkt. Wenn die Messwerte irgendwo unter diesen Werten liegen, wird der Sensor kalibriert.

Es kann über UART und PWM kommunizieren. Ich habe mich für den ersten entschieden, weil ich denke, dass er zuverlässiger ist.

Dann habe ich den Temperatur- und Feuchtigkeitssensor SI7021 für die Innenüberwachung verwendet, der das I2C-Protokoll verwendet und an SDA- und SCL-Pins angeschlossen wird. Nicht teuer, industrielle Hochpräzision. Ich mag es, weil ich überhaupt keine Probleme damit hatte.

Für Außentemperaturen habe ich ds18b20 verwendet, das in einer Edelstahlkapsel eingeschlossen ist. Günstige und genaue Messwerte. Es erfordert jedoch einen Widerstand von 4,7 kOhm, also vergessen Sie es nicht. Die Kommunikation erfolgt über 1-Draht.

Für die Zeit kaufte ich ein DS 1307 RTC-Modul, das I2C verwendet.

Dann 3 LEDs für CO2-Werte. Für 400-800ppm ist die grüne LED, für 800-1200ppm die orange LED und für 1200ppm - und darüber ist die rote LED.

Außerdem 3 Edelstahltasten mit LEDs. Die linke ist stundenlang einstellbar. Die mittlere ist für Minuten und die rechte für das Ändern der Textfarbe.

Zusätzlich habe ich einen Fotowiderstand verdrahtet, um die Helligkeit der LEDs einzustellen. Ich wollte nicht, dass sie nachts zu hell leuchten.

Leistung

Für die Stromversorgung habe ich unten ein Loch gebohrt und dort einen DC-Anschluss platziert:

Das Problem war, dass ich keine geeigneten Stromquellen hatte. Ich hatte nur 19-V- und 15-V-Versorgungsadapter, während die empfohlene Spannung für Arduino 7-12 V beträgt. Ich hatte jedoch eine Reihe von LM2696 DC-DC einstellbaren Spannungsreglern.

Ich habe es in die Box gelegt und auf 7 Volt eingestellt. Ich habe herausgefunden, dass mein Arduino unter 12 Volt sehr schnell aufheizt, also habe ich das empfohlene Minimum gewählt. Dadurch kann es nun aus verschiedenen Stromquellen versorgt werden.

Für den Außentemperatursensor habe ich Fliegerstecker und Telefonkabel verwendet.

Kasten

Das war für mich das Hauptproblem, da ich keinen 3D-Drucker hatte. Ich habe zuerst versucht, es aus Fimo zu machen, aber es hat seine Form nicht gut gehalten. Außerdem habe ich es in einem Ofen verbrannt.

Der zweite Versuch war mit 6mm Sperrholz. es war meistens in Ordnung, aber es war schwer zu schneiden. Ich musste eine elektrische Säge und ein Dremel-Werkzeug verwenden.

Das letzte und erfolgreichste war aus 3 mm Sperrholz (das schwer zu finden war), das ich ohne elektrische Geräte schneiden konnte und nur Cuttermesser und etwas Schleifpapier verwendet habe. Habe es mit Acrylfarbe überzogen und sieht dadurch viel besser aus.

Kosten

  • Arduino Mega 2560 R3 - 8,27$ (480Rub)
  • Display TFT 3.2 480x320 - 8$ (400Rub)
  • RTC DS1307 Modul - 0,55$ (32Rub)
  • CO2 mh-z19 Sensor - 20$ (1160Rub)
  • Temperatur- und Feuchtigkeitssensor Si7021 - 2$(118Rub)
  • Temperatursensor DS18b20 in Kapsel - 1,14$ (66Rub)
  • Fotowiderstand - 1$/50Stück (65Rub)
  • LEDs - 0,67$/100Stück (39Rub)
  • Edelstahl-Druckknöpfe - 5,07$/3Stk. (294Rub)
  • GX12-3 Pin Luftfahrtstecker (Set) - 1,17$ (68Rub)
  • DC-Anschluss 1,25$/10Stk. (73Rub)
  • LM2596 DC-DC einstellbarer Spannungsregler - 0,69$ (40Rub)
  • Netzteil 12V - 2,14$ (120Rub)
  • Drähte - 1,78$ (100Rub)
  • Sperrholz 3mm - 1,78$ (100Rub)

Insgesamt 55,51$ (3155 Rubel)

Code

  • Air-Surfer-Code
Air-Surfer-CodeArduino
#include #include "RTClib.h"//#include #include #include #include #include  #include #include #define ONE_WIRE_BUS 9#define GRÜNLED 5#define GELBLED 7#define ROTLED 8#define BUTTONLED 11OneWire oneWire(ONE_WIRE_BUS);DallasTemperatureUTFT(&.oneWire); myGLCD(CTE32HR, 38, 39, 40, 41); HTU21D myHumidity;RTC_DS1307 rtc; extern uint8_t Ubuntu[]; Byte cmd[9] ={0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9];unsigned int ppm;unsigned long time;int photocellReading;int hourupg;int minupg;float humd;float temp;int tcolor;int Z; // LED-Helligkeitboolescher Reset =false; // zum Zurücksetzen der Anzeige; leere Lampen (void) {// CO2if (ppm <800) { myGLCD.setColor (255,140,255); //grün myGLCD.fillCircle (450, 87, 12); analogWrite (GRÜNLED, Z); analogWrite (GELBLED, 0); analogWrite (REDLED, 0); } if (ppm> 800 &ppm <1200) { myGLCD.setColor (70,70,255); //Gelb myGLCD.fillCircle(450, 87, 12); analogWrite (GRÜNLED, 0); analogWrite (GELBLED, Z); analogWrite (REDLED, 0);} if (ppm> 1200) { myGLCD.setColor (VGA_AQUA); myGLCD.fillCircle(450, 87, 12); analogWrite (GRÜNLED, 0); analogWrite (GELBLED, 0); analogWrite (REDLED, Z); } // Hum wenn (humd>30 &humd<50) { myGLCD.setColor (255,140,255); //grün myGLCD.fillCircle (450, 149, 12); aufrechtzuerhalten. Wenn (humd>20 &humd<30) { myGLCD.setColor (70,70,255); //Gelb myGLCD.fillCircle(450, 149, 12); aufrechtzuerhalten. Wenn (humd<20) { myGLCD.setColor (70,70,255); //Gelb myGLCD.fillCircle(450, 149, 12); aufrechtzuerhalten. Wenn (humd>50 &humd<60) { myGLCD.setColor (70,70,255); //Gelb myGLCD.fillCircle(450, 149, 12); aufrechtzuerhalten. Wenn (humd>60) { myGLCD.setColor (VGA_AQUA); myGLCD.fillCircle(450, 149, 12); } //Temp ins if (temp>
20 &temp<27) { myGLCD.setColor (255,140,255); //grün myGLCD.fillCircle(450, 213, 12); aufrechtzuerhalten. Sonst {myGLCD.setColor (70,70,255); //YellowmyGLCD.fillCircle(450, 213, 12); } //Tempouts if (sensors.getTempCByIndex(0)<10) {myGLCD.setColor(70,70,255); //YellowmyGLCD.fillCircle(450, 278, 12);} else { myGLCD.setColor(255,140,255); //grün myGLCD.fillCircle(450, 278, 12);}}void drawmain(void) {myGLCD.setFont(Ubuntu);if (tcolor==0) myGLCD.setColor(VGA_BLACK);if (tcolor==1) myGLCD.setColor(VGA_SILVER);if (tcolor==2) myGLCD.setColor(250,10,250);if (tcolor==3) myGLCD.setColor(200,100,200);if (tcolor==4) myGLCD.setColor(100,200,200);if (tcolor==5) myGLCD.setColor(10,200,200);if (tcolor==6) myGLCD.setColor(200,200,100);if (tcolor==7) myGLCD.setColor(250,250,10);if (tcolor==8) myGLCD.setColor(10,10,250);if (tcolor==9) myGLCD.setColor(10,250,10);if (tcolor==10) myGLCD.setColor(250,10,10);if (tcolor==11) myGLCD.setColor(VGA_TEAL);if (tcolor==12) myGLCD.setColor(VGA_AQUA); DateTime now =rtc.now(); // Timeif (now.hour()<10) { myGLCD.print("0", 190, 7);myGLCD.printNumI(now.hour(), 215, 7); aufrechtzuerhalten. Sonst {myGLCD.printNumI (now.hour(), 190, 7); } myGLCD.print(":", 240, 5); if (now.minute()<10) { myGLCD.print("0", 265, 7);myGLCD.printNumI(now.minute(), 290, 7); aufrechtzuerhalten. Sonst { myGLCD.printNumI (now.minute(), 265, 7); } // myGLCD.setColor (VGA_BLACK); myGLCD.print ("CO2", 18, 74); if (ppm> 999){ myGLCD.printNumI(ppm, 250, 74);}else{myGLCD.print(" ", 250, 74);myGLCD.printNumI(ppm, 275, 74);}myGLCD.print(" ppm", 348, 74);myGLCD.print("Luftfeuchtigkeit", 18, 136);myGLCD.printNumI(humd, 343, 136); //humdmyGLCD.print("%", 398, 136);myGLCD.print("Temp(in)", 18, 200);if (temp>
=0) { if (temp<10) {myGLCD.print( " ", 275, 200);myGLCD.print("+", 300, 200); //tempmyGLCD.printNumF(temp,1, 325, 200);}sonst{ myGLCD.print("+", 275, 200); //tempmyGLCD.printNumF(temp,1, 300, 200);}}if (temp<0){ if (temp>
-10) { myGLCD.print(" ", 275, 200);myGLCD.printNumF(temp, 1, 300, 200);}else{ myGLCD.printNumF(temp,1, 275, 200);}}myGLCD.print("C", 398, 200);myGLCD.print("Temp(out)", 18 , 265);if (sensors.getTempCByIndex(0)<-100) { myGLCD.print("Leer", 300, 265);}else{if (sensors.getTempCByIndex(0)>=0) { if (sensoren. getTempCByIndex(0)<10) {myGLCD.print(" ", 275, 200);myGLCD.print("+", 300, 265);myGLCD.printNumF(sensors.getTempCByIndex(0),1, 325, 265);}else{ myGLCD.print("+", 275, 265);myGLCD.printNumF(sensors.getTempCByIndex(0),1, 300, 265);}}if (sensors.getTempCByIndex(0)<0){ if (sensors.getTempCByIndex(0)>-10) { myGLCD.print(" ", 275, 200);myGLCD.printNumF(sensors.getTempCByIndex(0),1, 300, 265);}else{ myGLCD.printNumF(sensoren .getTempCByIndex(0),1, 275, 265);}}myGLCD.print("C", 398, 265);}} void dateandtime(void) { DateTime now =rtc.now();hourupg=now.hour ();minupg=jetzt.minute(); // Zeitanpassung if (digitalRead (3) ==LOW) {if (minupg==59) {minupg=0; aufrechtzuerhalten. Sonst { minupg =minupg + 1; } rtc.adjust (DateTime (0,0,0,hourupg,minupg,0)); } if (digitalRead (2) ==LOW) { if (hourupg ==23) {hourupg =0; aufrechtzuerhalten. Sonst {hourupg=hourupg+1; } rtc.adjust (DateTime (0,0,0,hourupg,minupg,0)); }}void co2 (void) {Serial3.write (cmd, 9); memset (Antwort, 0, 9); Serial3.readBytes (Antwort, 9); int ich; Byte crc =0; für (i =1; i <8; i++) crc+ =Antwort[i]; crc =255 - crc; crc++; if ( !(response[0] ==0xFF &&response[1] ==0x86 &&response[8] ==crc) ) { } else { unsigned int responseHigh =(unsigned int) response[2]; unsigned int responseLow =(unsigned int) response[3]; ppm =(256*AntwortHoch) + AntwortNiedrig; }}void th(void) {humd =myHumidity.readHumidity(); temp =myHumidity.readTemperature(); sensoren.requestTemperatures(); // Senden Sie den Befehl, um Temperaturmesswerte zu erhalten}void Photosensor (void) { photocellReading =analogRead (12); if (photocellReading <150) {//Serial.println(" - Dark"); analogWrite (BUTTONLED, 5); Z=25; aufrechtzuerhalten. Sonst if (photocellReading <300) {//Serial.println (" - Dim"); analogWrite(BUTTONLED, 50); Z=80; aufrechtzuerhalten. Sonst if (photocellReading <700) {//Serial.println (" - Light"); analogWrite (BUTTONLED, 100); Z=120; aufrechtzuerhalten. Sonst if (photocellReading <900) {//Serial.println (" - Bright"); analogWrite (BUTTONLED, 150); Z=150; aufrechtzuerhalten. Sonst {//Serial.println ( " - Sehr hell"); analogWrite (BUTTONLED, 200); Z=200; } // Serial.print (PhotocellReading);}void screenreset (void) {if(((hourupg==0 &&minupg==0) || (hourupg==12 &&minupg==0)) &&Reset==false ) {myGLCD.clrScr();myGLCD.fillScr(VGA_WHITE); // wegen invertierter Farben auf meinem displaymyGLCD.setBackColor (VGA_WHITE); //aufgrund invertierter Farben auf meinem DisplayReset=true;}if((hourupg==0 || hourupg==12)&&minupg>0) { Reset=false; }}void setup (void) {myGLCD.InitLCD();myGLCD.clrScr();myGLCD.fillScr(VGA_WHITE); // wegen invertierter Farben auf meinem displaymyGLCD.setBackColor (VGA_WHITE); // wegen invertierter Farben auf meinem displaySerial3.begin (9600); // Serial.begin (9600); sensoren.begin(); myHumidity.begin(); tcolor=0;rtc.begin();pinMode(GREENLED, OUTPUT);pinMode(YELLOWLED, OUTPUT);pinMode(REDLED, OUTPUT);pinMode(BUTTONLED, OUTPUT);pinMode(2, INPUT_PULLUP);pinMode(3, INPUT_PULLUP );pinMode(4, INPUT_PULLUP);Z=0;}void loop (void) {co2(); Fotosensor();DatumundUhrzeit();th(); if (digitalRead (4) ==LOW) { tcolor =tcolor + 1; }if (tcolor>=13) tcolor=0; drawmain();lamps();screenreset();}

Schaltpläne


Herstellungsprozess

  1. Messen der Luftqualität auf OpenSensors
  2. Luftverschmutzungsdetektor
  3. Einen Luftkompressor winterfest machen
  4. Eine Einführung in den Luftzylinder-Aktuator
  5. Auswahlhilfe für Top-Luftkompressoren
  6. Kompressor in Automotoren verstehen
  7. Autoklimaanlage verstehen
  8. Luftfederung verstehen
  9. Air Injection System verstehen
  10. Luft =Geld