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

AWS - Arduino-Wetterstation

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
USB-A auf Micro-USB-Kabel
× 1
Breadboard (generisch)
× 1
Jumper (generisch)
× 1
Plexiglas 4 mm
× 1
Widerstand 221 Ohm
× 1
Adafruit Standard LCD - 16x2 Weiß auf Blau
× 1
Maxim Integrated DS1307 64 x 8, Seriell, I²C-Echtzeit Uhr
× 1
Fotowiderstand
× 1
DHT11 Temperatur- und Feuchtigkeitssensor (4 Pins)
× 1
Temperatursensor
× 1
IR-Empfänger (generisch)
× 1
Wasserstandssensor
× 1
Sunfounder Starter RFID Kit
× 1

Notwendige Werkzeuge und Maschinen

Laserschneider (generisch)

Über dieses Projekt

AWS, Arduino Weather Station, liefert rund um die Uhr genaue Daten für die Umgebung. Insbesondere basiert es auf einem Arduino-Mikrocontroller-Board und unterstützt eine ganze Reihe von Sensoren für die Analyse der Umgebung.

Das Ziel

Das Ziel dieser Steuerung ist es, eine Reihe von Daten durch die oben beschriebenen Sensoren zu erfassen und sie über einen LCD-Bildschirm mit dem Benutzer zu verbinden. Die geringe Größe der Projekt-„Hardware“ ermöglicht es, sie in einer kleinen Schachtel zu schließen, die mit der Lasercut-Maschine hergestellt wurde.

Verwendete Sensoren

Wasser- und Schneestandssensor

Die Wasserstandsanzeige wird verwendet, um den Wasserstand im Überkopftank anzuzeigen. Dadurch können wir das Überlaufen von Wasser vermeiden und können jederzeit den Wasserstand im Tank erkennen.

DHT11 Feuchtigkeits- und Temperatursensor

Der digitale Temperatur- und Feuchtigkeitssensor DHT11 ist ein kalibrierter kombinierter Temperatur- und Feuchtigkeitssensor mit digitalem Signalausgang, der anwendungsspezifische Module und digitale Temperatur- und Feuchtigkeitssensortechnologie erfasst, um Produkte mit hoher Zuverlässigkeit und ausgezeichneter Langzeitstabilität zu gewährleisten. Das Produkt hat ausgezeichnete Qualität, schnelle Reaktion, Entstörungsfähigkeit, niedrige Kosten und andere Vorteile.

Fotowiderstand

Fotowiderstände, auch als lichtabhängige Widerstände (LDR) bekannt, sind lichtempfindliche Geräte, die am häufigsten verwendet werden, um das Vorhandensein oder Fehlen von Licht anzuzeigen oder die Lichtintensität zu messen. Im Dunkeln ist ihr Widerstand sehr hoch, aber wenn der LDR-Sensor Licht ausgesetzt wird, sinkt der Widerstand je nach Lichtintensität dramatisch, sogar bis auf wenige Ohm.

LCD I2C 1602 Display

LCD1602 mit einem I2C-Bus ist eine Art serieller Bus. Es handelt sich um einen seriellen Hochleistungsbus, der über eine Busleitung und eine Hoch- oder Niedergeschwindigkeits-Gerätesynchronisationsfunktion verfügt, die von Systemen mit mehreren Hosts benötigt wird. Das blaue Potentiometer auf dem I2C LCD1602 wird nur für die Hintergrundbeleuchtung verwendet.

I2C verwendet nur zwei bidirektionale Open-Drain-Leitungen, Serial DataLine (SDA) und Serial Clock Line (SCL), die mit Widerständen hochgezogen sind. Typische verwendete Spannungen sind +5 V oder +3,3 V, obwohl Systeme mit anderen Spannungen zulässig sind.

DS1302 Echtzeituhrmodul

Es basiert auf dem integrierten DS1302, in dem sich eine Echtzeituhr/Kalender und 31 Byte statisches RAM befinden. Sie können das Zeitformat als hh/mm/ss sehen, während das Datumsformat jjjj/mm/tt ist.

LM35 Temperatursensor

Der Präzisions-Temperatursensor LM35 ist ein Sensor, der die Temperatur sehr genau erkennt. Der Analog-Digital-Wandler (ADC) wandelt analoge Werte in eine digitale Näherung basierend auf der Formel ADCWert =Abtastwert * 1024 / Referenzspannung (+5 V) um. Bei einer +5-Volt-Referenz beträgt die digitale Näherung also =Eingangsspannung * 205.

Infrarotempfänger und Fernbedienung

Diese beiden Komponenten arbeiten zusammen:Der IR-Empfänger ermöglicht den Empfang von Daten von der Fernbedienung. Die Daten hängen davon ab, welche Taste Sie drücken möchten. Die folgenden Schaltflächen wurden ausgewählt, um ihnen bestimmte Funktionen zuzuweisen:

  • 0-Taste:Sie können Uhrzeit und Datum auf dem LCD-Bildschirm sehen.
  • 1 Taste:Sie können die Temperaturdaten des LM35 und die Feuchtigkeitsdaten des DHT11 auf dem LCD-Bildschirm sehen.
  • 2-Taste:Sie können den Prozentsatz der Dunkelheit auf dem LCD-Bildschirm sehen.
  • 3-Taste:Sie können den Wert des Flüssigkeitsstands (mm) auf dem LCD-Bildschirm sehen.
  • Schaltfläche „Zyklus“:Sie können alle Bildschirme in einem Zeitintervall von 4 Sekunden voneinander sehen.

DIE A.W.S.

Schritt 1:Aufbau der Box

Nach Abwägung der Projektgröße sind wir mit dem Bau der Plexiglasbox fortgefahren. Die Gesichtergrößen mit ihren jeweiligen ineinandergreifenden Sitzen und Löchern für den Ausgang der Sensordrähte wurden mit der Autocad-Software entworfen, dann haben wir die Gesichter mit der Laserschneidmaschine geschnitten. Und schließlich haben wir alles mit etwas starkem Kleber zusammengebaut.

Schritt 2:Schaltplan und Hardwareverbindungen

Hier ist das Bild des Schaltplans für die Arduino-Wetterstation. Es hat mit Fritzing-Software getan. Die Verbindungen sind ziemlich einfach.

Schritt 3:Arduino Programmierung

Wir haben den Code auf der Arduino IDE erstellt, alle benötigten Bibliotheken verwendet und so programmiert, dass unsere Wetterstation so läuft, wie wir es wollten.

Schritt 4:So geht's funktioniert

AWS (Arduino Wetterstation ) ist eine Wetterstation, die einige Daten aus der Umgebung aufnimmt und mit einer Infrarot-Fernbedienung sichtbar macht. Um sie mit den Benutzern zu verbinden, verfügt es über ein LCD-Display mit fünf verschiedenen Bildschirmen, die vom Benutzer austauschbar sind.

Dies sind die Bildschirme:

1. Startbildschirm: Es ist der erste Bildschirm, den der Benutzer sehen kann, wenn wir das Board einschalten. Es präsentiert das Projekt mit den Worten „Arduino Weather Station“, die einen besonderen Fading-Effekt haben. Sie können diesen Bildschirm auch sehen, wenn Sie AWS jedes Mal darum bitten, einige Daten anzuzeigen.

2. Datums- und Uhrzeitanzeige: Es ist der erste Bildschirm, auf den der Benutzer zugreifen kann, indem er einfach die 0-Taste auf der Fernbedienung drückt. Beim Drücken hat der Bildschirm eine Verzögerung von 10 Sekunden und kehrt dann zum Startbildschirm zurück.

3. Bildschirm für Luftfeuchtigkeit und Temperatur: es ist der Bildschirm, der die von den DHT11- und LM35-Sensoren empfangenen Daten über Feuchtigkeit bzw. Temperatur anzeigt. Es wird mit der Taste 1 der Fernbedienung verbunden und wenn es gedrückt wird, hat der Bildschirm eine Verzögerung von 10 Sekunden und kehrt dann zum Startbildschirm zurück.

4. Dunkelheitsbildschirm: es ist der Bildschirm, der die vom LDR empfangenen Daten über die Lichtmenge auf dem Sensor anzeigt. Es zeigt den Prozentsatz der Dunkelheit auf dem Sensor an. Es wird mit der Taste 2 auf der Fernbedienung verbunden und wenn der Bildschirm gedrückt wird, hat er eine Verzögerung von 10 Sekunden und kehrt dann zum Startbildschirm zurück.

5. Bildschirm für den Flüssigkeitsstand: Dieser Bildschirm gibt die Höhe einer Flüssigkeitsmenge in einem Rezept an. Es wird mit der Taste 3 auf der Fernbedienung verbunden und wenn es gedrückt wird, hat der Bildschirm eine Verzögerung von 10 Sekunden und kehrt dann zum Homescreen zurück.

Die letzten vier Bildschirme können im Abstand von 4 Sekunden nacheinander durch Drücken der Zyklus-Taste . angezeigt werden auf der Fernbedienung. In diesem Modus wird nur eine Runde der Informationen ausgeführt.

Vorsichtsmaßnahmen

Die erste Tatsache, die für die lange Lebensdauer dieses Projekts zu berücksichtigen ist, ist, jeglichen Kontakt von Flüssigkeiten oder anderen schädlichen Substanzen mit dem Board und der Station im Allgemeinen zu vermeiden.

Nach einem Niederschlag ist es notwendig, den Wasserbehälter zu leeren, den Sensor zu überprüfen und zu reinigen.

Der Akku hat eine Lebensdauer von etwa zwei Tagen, daher ist es notwendig, ihn aufzuladen (etwa 2 Stunden), wenn er sich entladen wird.

Wahrscheinlich läuft der Infrarotsensor manchmal nicht so gut, wie wir es wollen, sodass seine Funktion bei niedrigen Temperaturen (ca. 0 Grad) unterbrochen werden kann. Dies stellt kein Problem dar, es ist lediglich erforderlich, die Box zu öffnen und die Reset-Taste zu drücken:AWS funktioniert wieder normal.

Wenn wir die Reset-Taste drücken, ändert das RTC DS1302-Modul seinen Wert bezüglich Datum und Uhrzeit nicht, dank der im Modul vorhandenen Unterstützungsbatterie, die etwa 10 Jahre hält.

Wenn die Stromversorgung von AWS unterbrochen wird, ändern sich Datum und Uhrzeit. Um das Problem zu lösen, ist es notwendig, sie an dem in der Liste angegebenen Punkt nach Ihren Wünschen neu einzustellen. Nach dem Laden müssen Sie die Einstellungen für das Programm wie unten angegeben ausblenden.

Before:Time t(2017, 12, 03, 10, 15, 00, 1);rtc.time(t);After://Time t(2017, 12, 03, 10, 15, 00, 1)//;rtc.time(t); 

Code

//include Sketch-Bibliotheken#include #include  //Uhr-Bibliothek#include  //Uhr-Bibliothek#include  //Uhr library#include  //dht11 library#include  //LCD-Bibliothek#include  //Draht für LCD-Bibliothek#define lmPin A1 //LM35 an A1LiquidCrystal_I2C lcd(0x27, 16, 2); // setze die LCD-Adresse auf 0x27 für ein 16-Zeichen- und 2-Zeilen-Displaydht DHT; //Erzeuge einen Variablentyp von dhtconst int DHT11_PIN =4; // dht11 an Pin 4const anhängen int waterSensor =0; // Wassersensorvariable einstellen waterValue =0; // Variable für Wassersensorint mmwaterValue =0;int sensorPin =A3; // Wählen Sie den Eingangspin für das Potentiometerint luce =0; //Variable für den Ldrint pluce =0; //Variable für das ldrfloat tem =0; //Variable für die temperaturelong lmVal =0; //Variable für den LM35 //irconst int irReceiverPin =3;IRrecv irrecv(irReceiverPin); //Erzeugt eine Variable vom Typ IRrecvdecode_results Results; // Definiere Clock Variableuint8_t RST_PIN =5; // RST-Pin befestigen touint8_t SDA_PIN =6; // IO-Pin befestigen touint8_t SCL_PIN =7; //clk Pin anhängen an/* Puffer erstellen */char buf[50];char day[10];/* DS1302 Objekt erstellen */DS1302 rtc(RST_PIN, SDA_PIN, SCL_PIN); // Variablentyp DS1302void erstellen print_time(){ /* Hole die aktuelle Uhrzeit und das Datum vom Chip */ Time t =rtc.time(); /* Benennen Sie den Wochentag */ memset(day, 0, sizeof(day)); switch (t.day) { Fall 1:strcpy(day, "Sun"); brechen; Fall 2:strcpy(Tag, "Mo"); brechen; Fall 3:strcpy(Tag, "Di"); brechen; Fall 4:strcpy(Tag, "Mi"); brechen; Fall 5:strcpy(Tag, "Do"); brechen; Fall 6:strcpy(Tag, "Fr"); brechen; Fall 7:strcpy(Tag, "Sa"); brechen; } /* Uhrzeit und Datum formatieren und in den temporären Puffer einfügen */ snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", Tag, t. yr, t.mon, t.date, t.hr, t.min, t.sec); /* Geben Sie den formatierten String als Serial aus, damit wir die Zeit sehen können */ Serial.println(buf); lcd.setCursor(2, 0); lcd.print (t.yr); lcd.print("-"); lcd.print (t.mon / 10); lcd.print (t.mon % 10); lcd.print("-"); lcd.print (t.date / 10); lcd.print (t.date % 10); lcd.print(" "); lcd.print (Tag); lcd.setCursor(4, 1); lcd.print (t.hr); lcd.print(":"); lcd.print (t.min / 10); lcd.print (t.min % 10); lcd.print(":"); lcd.print (t.sec / 10); lcd.print (t.sec % 10);}void setup () {//clock Serial.begin (9600); rtc.write_protect (falsch); rtc.halt(falsch); //ir irrecv.enableIRIn(); // IR-Empfängermodul aktivieren lcd.init (); // lcd initialisieren lcd.backlight (); // Öffnen Sie die Hintergrundbeleuchtung PinMode (sensorPin, INPUT); Zeit t(2017, 12, 03, 10, 15, 00, 1); // Initialisieren Sie die Zeit / * Stellen Sie die Uhrzeit und das Datum auf dem Chip ein */ rtc.time (t);}void loop () { lcd. setCursor(0, 0); lcd.print("A"); Verzögerung (50); lcd.setCursor(1, 0); lcd.print("r"); Verzögerung (50); lcd.setCursor(2, 0); lcd.print("d"); Verzögerung (50); lcd.setCursor(3, 0); lcd.print("u"); Verzögerung (50); lcd.setCursor(4, 0); lcd.print("i"); Verzögerung (50); lcd.setCursor(5, 0); lcd.print("n"); Verzögerung (50); lcd.setCursor(6, 0); lcd.print("o"); Verzögerung (50); lcd.setCursor(8, 0); lcd.print("W"); Verzögerung (50); lcd.setCursor(9, 0); lcd.print("e"); Verzögerung (50); lcd.setCursor(10, 0); lcd.print("a"); Verzögerung (50); lcd.setCursor(11, 0); lcd.print("t"); Verzögerung (50); lcd.setCursor(12, 0); lcd.print("h"); Verzögerung (50); lcd.setCursor(13, 0); lcd.print("e"); Verzögerung (50); lcd.setCursor(14, 0); lcd.print("r"); Verzögerung (50); lcd.setCursor(4, 1); lcd.print("S"); Verzögerung (50); lcd.setCursor(5, 1); lcd.print("t"); Verzögerung (50); lcd.setCursor(6, 1); lcd.print("a"); Verzögerung (50); lcd.setCursor(7, 1); lcd.print("t"); Verzögerung (50); lcd.setCursor(8, 1); lcd.print("i"); Verzögerung (50); lcd.setCursor(9, 1); lcd.print("o"); Verzögerung (50); lcd.setCursor(10, 1); lcd.print("n"); delay (50); if (irrecv.decode (&results)) // wenn die Empfängerdaten des IR-Empfängermoduls { if (results.value ==0xFF6897) // wenn "0" gedrückt wird print TIME { lcd.clear (); // lösche das LCD print_time (); Verzögerung (10000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Den nächsten Wert erhalten}if (results.value ==0xFF30CF) //Wenn "1" gedrückt wird, drucke TEMPERATUR und FEUCHTIGKEIT{ lcd.clear(); // lösche das LCD // LESE DATEN des DHT int chk =DHT.read11 (DHT11_PIN); // DATEN ANZEIGEN lcd.setCursor(0, 0); lcd.print("Tem:"); lmVal =analogRead (lmPin); // Lesen Sie den Wert von A1 tem =(lmVal * 0,0048828125 * 100); //5/1024 =0,0048828125; 1000/10 =100 lcd.print (tem); // print tem lcd. print(char(223));//Einheit drucken" ? " lcd.print("C"); // Serial.println ( "C"); lcd.setCursor(0, 1); lcd.print("Summen:"); //Serial.print("Hum:"); lcd.print (DHT.humidity, 1); // Luftfeuchtigkeit auf LCD drucken // Serial.print (DHT.humidity, 1); lcd.print(" % "); //Seriell.println(" %"); Verzögerung (10000); // 3000 ms warten lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Den nächsten Wert erhalten}if (results.value ==0xFF18E7) ​​//Wenn "2" gedrückt wird, drucke die DUNKELHEIT{ lcd.clear(); // lösche das LCD lcd.setCursor (4, 0); // Platzieren Sie den Cursor auf 4 Spalten, 1 Zeile lcd.print ("Dunkelheit:"); luce =analogRead (sensorPin); // ldr lesen pluce =map (luce, 0, 1023, 0, 100); // der Wert des Sensors wird in Werte von 0 bis 100 umgewandelt lcd.setCursor (6, 1); // Platzieren Sie den Cursor in der Mitte des LCD lcd.print (pluce); // den Prozentwert drucken lcd.print("%"); // Drucken Sie die Symbolverzögerung (10000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Empfange den nächsten Wert}if (results.value ==0xFF7A85) //Wenn "3" gedrückt wird, drucke den SCHNEE- oder WASSERSTAND {lcd.clear(); // lösche das LCD lcd.setCursor (0, 0); // Platzieren Sie den Cursor auf 0 Spalte, 1 Zeile lcd.print ( "Fluid level (mm):"); // "Fluid level (mm):" drucken int waterValue =analogRead (waterSensor); // Wassersensorwert abrufen lcd.setCursor (6, 1); // Cursor auf 6 Spalte, 2 Zeile setzen mmwaterValue =map(waterValue, 0, 1023, 0, 40); lcd.print (mmwaterValue); // Wert auf LCD-Verzögerung (10000) angezeigt; // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); irrecv.resume(); // Erhalte den nächsten Wert}if (results.value ==0xFF9867) //wenn "PRESENTATION" gedrückt wird drucke TIME, TEM und HUM, DARKNESS und S oder W LEVEL einmal {lcd.clear(); // lösche das LCD print_time (); Verzögerung (4000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); //eine Weile warten //DATEN des DHT LESEN int chk =DHT.read11(DHT11_PIN); // DATEN ANZEIGEN lcd.setCursor(0, 0); lcd.print("Tem:"); lmVal =analogRead (lmPin); // Lesen Sie den Wert von A0 tem =(lmVal * 0,0048828125 * 100); //5/1024 =0,0048828125; 1000/10 =100 lcd.print (tem); // print tem lcd. print(char(223));//Einheit drucken" ? " lcd.print("C"); // Serial.println ( "C"); lcd.setCursor(0, 1); lcd.print("Summen:"); //Serial.print("Hum:"); lcd.print (DHT.humidity, 1); // Luftfeuchtigkeit auf LCD drucken // Serial.print (DHT.humidity, 1); lcd.print(" % "); //Seriell.println(" %"); Verzögerung (4000); // 3000 ms warten lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten lcd.setCursor (4, 0); // Platzieren Sie den Cursor auf 4 Spalten, 1 Zeile lcd.print ("Dunkelheit:"); luce =analogRead (sensorPin); // ldr lesen pluce =map (luce, 0, 1023, 0, 100); // der Wert des Sensors wird in Werte von 0 bis 100 umgewandelt lcd.setCursor (6, 1); // Platzieren Sie den Cursor in der Mitte des LCD lcd.print (pluce); // den Prozentwert drucken lcd.print("%"); // Drucken Sie die Symbolverzögerung (4000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten lcd.setCursor (0, 0); // Platzieren Sie den Cursor auf 0 Spalte, 1 Zeile lcd.print ( "Fluid level (mm):"); // "Fluid level (mm):" drucken int waterValue =analogRead (waterSensor); // Wassersensorwert abrufen lcd.setCursor (6, 1); // Cursor auf 6 Spalte, 2 Zeile setzen mmwaterValue =map(waterValue, 0, 1023, 0, 40); lcd.print (mmwaterValue); // Wert auf LCD-Verzögerung (4000) angezeigt; // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); irrecv.resume(); // Den nächsten Wert empfangen}}}  

Anstatt den Buchstaben "Arduino Weather Station" pro Buchstabe zu schreiben, ist es möglich, ihn mit dem . zu schreiben "Schalter/Gehäuse"-Modus.

SCHLUSSFOLGERUNGEN

Wir haben mit Arduino eine Wetterstation entwickelt, die das aktuelle Datum und die aktuelle Uhrzeit berücksichtigt und einige Umgebungsdaten aufnimmt, um sie auf einem LCD-Bildschirm zu drucken, der von einer Infrarot-Fernbedienung gesteuert wird.

Code

  • AWS-code.ino
AWS code.inoC/C++
//include Sketch-Bibliotheken#include #include  //Uhr-Bibliothek#include  //Uhr-Bibliothek#include  //Uhr-Bibliothek#include  //dht11 Bibliothek#include  //LCD Bibliothek#include  //Draht für LCD Bibliothek#define lmPin A1 //LM35 an A1LiquidCrystal_I2C anhängen lcd(0x27, 16, 2 ); // setze die LCD-Adresse auf 0x27 für ein 16-Zeichen- und 2-Zeilen-Displaydht DHT; //Erzeuge einen Variablentyp von dhtconst int DHT11_PIN =4; // dht11 an Pin 4const anhängen int waterSensor =0; // Wassersensorvariable einstellen waterValue =0; // Variable für Wassersensorint mmwaterValue =0;int sensorPin =A3; // Wählen Sie den Eingangspin für das Potentiometerint luce =0; //Variable für den Ldrint pluce =0; //Variable für das ldrfloat tem =0; //Variable für die temperaturelong lmVal =0; //Variable für den LM35 //irconst int irReceiverPin =3;IRrecv irrecv(irReceiverPin); //Erzeugt eine Variable vom Typ IRrecvdecode_results Results; // Definiere Clock Variableuint8_t RST_PIN =5; // RST-Pin befestigen touint8_t SDA_PIN =6; // IO-Pin befestigen touint8_t SCL_PIN =7; //clk Pin anhängen an/* Puffer erstellen */char buf[50];char day[10];/* DS1302 Objekt erstellen */DS1302 rtc(RST_PIN, SDA_PIN, SCL_PIN); // Variablentyp DS1302void erstellen print_time(){ /* Hole die aktuelle Uhrzeit und das Datum vom Chip */ Time t =rtc.time(); /* Benennen Sie den Wochentag */ memset(day, 0, sizeof(day)); switch (t.day) { Fall 1:strcpy(day, "Sun"); brechen; Fall 2:strcpy(Tag, "Mo"); brechen; Fall 3:strcpy(Tag, "Di"); brechen; Fall 4:strcpy(Tag, "Mi"); brechen; Fall 5:strcpy(Tag, "Do"); brechen; Fall 6:strcpy(Tag, "Fr"); brechen; Fall 7:strcpy(Tag, "Sa"); brechen; } /* Uhrzeit und Datum formatieren und in den temporären Puffer einfügen */ snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", Tag, t. yr, t.mon, t.date, t.hr, t.min, t.sec); /* Geben Sie den formatierten String als Serial aus, damit wir die Zeit sehen können */ Serial.println(buf); lcd.setCursor(2, 0); lcd.print (t.yr); lcd.print("-"); lcd.print (t.mon / 10); lcd.print (t.mon % 10); lcd.print("-"); lcd.print (t.date / 10); lcd.print (t.date % 10); lcd.print(" "); lcd.print (Tag); lcd.setCursor(4, 1); lcd.print (t.hr); lcd.print(":"); lcd.print (t.min / 10); lcd.print (t.min % 10); lcd.print(":"); lcd.print (t.sec / 10); lcd.print (t.sec % 10);}void setup () {//clock Serial.begin (9600); rtc.write_protect (falsch); rtc.halt(falsch); //ir irrecv.enableIRIn(); // IR-Empfängermodul aktivieren lcd.init (); // lcd initialisieren lcd.backlight (); // Öffnen Sie die Hintergrundbeleuchtung PinMode (sensorPin, INPUT); Zeit t(2017, 12, 9, 11, 20, 00, 7); // Uhrzeit initialisieren / * Uhrzeit und Datum auf dem Chip einstellen */ rtc.time (t);}void loop () { lcd. setCursor(0, 0); lcd.print("A"); Verzögerung (50); lcd.setCursor(1, 0); lcd.print("r"); Verzögerung (50); lcd.setCursor(2, 0); lcd.print("d"); Verzögerung (50); lcd.setCursor(3, 0); lcd.print("u"); Verzögerung (50); lcd.setCursor(4, 0); lcd.print("i"); Verzögerung (50); lcd.setCursor(5, 0); lcd.print("n"); Verzögerung (50); lcd.setCursor(6, 0); lcd.print("o"); Verzögerung (50); lcd.setCursor(8, 0); lcd.print("W"); Verzögerung (50); lcd.setCursor(9, 0); lcd.print("e"); Verzögerung (50); lcd.setCursor(10, 0); lcd.print("a"); Verzögerung (50); lcd.setCursor(11, 0); lcd.print("t"); Verzögerung (50); lcd.setCursor(12, 0); lcd.print("h"); Verzögerung (50); lcd.setCursor(13, 0); lcd.print("e"); Verzögerung (50); lcd.setCursor(14, 0); lcd.print("r"); Verzögerung (50); lcd.setCursor(4, 1); lcd.print("S"); Verzögerung (50); lcd.setCursor(5, 1); lcd.print("t"); Verzögerung (50); lcd.setCursor(6, 1); lcd.print("a"); Verzögerung (50); lcd.setCursor(7, 1); lcd.print("t"); Verzögerung (50); lcd.setCursor(8, 1); lcd.print("i"); Verzögerung (50); lcd.setCursor(9, 1); lcd.print("o"); Verzögerung (50); lcd.setCursor(10, 1); lcd.print("n"); delay (50); if (irrecv.decode (&results)) // wenn die Empfängerdaten des IR-Empfängermoduls { if (results.value ==0xFF6897) // wenn "0" gedrückt wird print TIME { lcd.clear (); // lösche das LCD print_time (); Verzögerung (10000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Den nächsten Wert erhalten}if (results.value ==0xFF30CF) //Wenn "1" gedrückt wird, drucke TEMPERATUR und FEUCHTIGKEIT{ lcd.clear(); // lösche das LCD // LESE DATEN des DHT int chk =DHT.read11 (DHT11_PIN); // DATEN ANZEIGEN lcd.setCursor(0, 0); lcd.print("Tem:"); lmVal =analogRead (lmPin); // Lesen Sie den Wert von A1 tem =(lmVal * 0,0048828125 * 100); //5/1024 =0,0048828125; 1000/10 =100 lcd.print (tem); // print tem lcd. print(char(223));//Einheit drucken" " lcd.print("C"); // Serial.println ( "C"); lcd.setCursor(0, 1); lcd.print("Summen:"); //Serial.print("Hum:"); lcd.print (DHT.humidity, 1); // Luftfeuchtigkeit auf LCD drucken // Serial.print (DHT.humidity, 1); lcd.print(" % "); //Seriell.println(" %"); Verzögerung (10000); // 3000 ms warten lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Den nächsten Wert erhalten}if (results.value ==0xFF18E7) ​​//Wenn "2" gedrückt wird, drucke die DUNKELHEIT{ lcd.clear(); // lösche das LCD lcd.setCursor (4, 0); // Platzieren Sie den Cursor auf 4 Spalten, 1 Zeile lcd.print ("Dunkelheit:"); luce =analogRead (sensorPin); // ldr lesen pluce =map (luce, 0, 1023, 0, 100); // der Wert des Sensors wird in Werte von 0 bis 100 umgewandelt lcd.setCursor (6, 1); // Platzieren Sie den Cursor in der Mitte des LCD lcd.print (pluce); // den Prozentwert drucken lcd.print("%"); // Drucken Sie die Symbolverzögerung (10000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten irrecv.resume(); // Empfange den nächsten Wert}if (results.value ==0xFF7A85) //Wenn "3" gedrückt wird, drucke den SCHNEE- oder WASSERSTAND {lcd.clear(); // lösche das LCD lcd.setCursor (0, 0); // Platzieren Sie den Cursor auf 0 Spalte, 1 Zeile lcd.print ( "Fluid level (mm):"); // "Fluid level (mm):" drucken int waterValue =analogRead (waterSensor); // Wassersensorwert abrufen lcd.setCursor (6, 1); // Cursor auf 6 Spalte, 2 Zeile setzen mmwaterValue =map(waterValue, 0, 1023, 0, 40); lcd.print (mmwaterValue); // Wert auf LCD-Verzögerung (10000) angezeigt; // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); irrecv.resume(); // Erhalte den nächsten Wert}if (results.value ==0xFF9867) //wenn "PRESENTATION" gedrückt wird drucke TIME, TEM und HUM, DARKNESS und S oder W LEVEL einmal {lcd.clear(); // lösche das LCD print_time (); Verzögerung (4000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); //eine Weile warten //DATEN des DHT LESEN int chk =DHT.read11(DHT11_PIN); // DATEN ANZEIGEN lcd.setCursor(0, 0); lcd.print("Tem:"); lmVal =analogRead (lmPin); // Lesen Sie den Wert von A0 tem =(lmVal * 0,0048828125 * 100); //5/1024 =0,0048828125; 1000/10 =100 lcd.print (tem); // print tem lcd. print(char(223));//Einheit drucken" " lcd.print("C"); // Serial.println ( "C"); lcd.setCursor(0, 1); lcd.print("Summen:"); //Serial.print("Hum:"); lcd.print (DHT.humidity, 1); // Luftfeuchtigkeit auf LCD drucken // Serial.print (DHT.humidity, 1); lcd.print(" % "); //Seriell.println(" %"); Verzögerung (4000); // 3000 ms warten lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten lcd.setCursor (4, 0); // Platzieren Sie den Cursor auf 4 Spalten, 1 Zeile lcd.print ("Dunkelheit:"); luce =analogRead (sensorPin); // ldr lesen pluce =map (luce, 0, 1023, 0, 100); // der Wert des Sensors wird in Werte von 0 bis 100 umgewandelt lcd.setCursor (6, 1); // Platzieren Sie den Cursor in der Mitte des LCD lcd.print (pluce); // den Prozentwert drucken lcd.print("%"); // Drucken Sie die Symbolverzögerung (4000); // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); // eine Weile warten lcd.setCursor (0, 0); // Platzieren Sie den Cursor auf 0 Spalte, 1 Zeile lcd.print ( "Fluid level (mm):"); // "Fluid level (mm):" drucken int waterValue =analogRead (waterSensor); // Wassersensorwert abrufen lcd.setCursor (6, 1); // Cursor auf 6 Spalte, 2 Zeile setzen mmwaterValue =map(waterValue, 0, 1023, 0, 40); lcd.print (mmwaterValue); // Wert auf LCD-Verzögerung (4000) angezeigt; // 10000 ms verzögern lcd.clear (); // lösche die LCD-Verzögerung (200); irrecv.resume(); // Den nächsten Wert erhalten}}}

Kundenspezifische Teile und Gehäuse

box_a5et5f4U9F.dwg

Schaltpläne

aws_DMDwb4iUZp.fzz

Herstellungsprozess

  1. Wetterstation V 2.0
  2. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  3. Arduino-Gyroskop-Spiel mit MPU-6050
  4. 6-Shooter:Arduino-Getränkemischstation
  5. Arduino Digital Dice
  6. Finde mich
  7. Arduino Audio Reactive Desk Light
  8. Arduino-betriebener Wetterballon-Datenlogger
  9. $10 Portable Arduino Wetterstation (AWS)
  10. NeoMatrix Arduino Pong