Inhaltsverzeichnis:

Mini-Wetterstation mit Attiny85 - Gunook
Mini-Wetterstation mit Attiny85 - Gunook

Video: Mini-Wetterstation mit Attiny85 - Gunook

Video: Mini-Wetterstation mit Attiny85 - Gunook
Video: miniature servo ATtiny control 2024, November
Anonim
Mini-Wetterstation mit Attiny85
Mini-Wetterstation mit Attiny85
Mini-Wetterstation mit Attiny85
Mini-Wetterstation mit Attiny85
Mini-Wetterstation mit Attiny85
Mini-Wetterstation mit Attiny85

In einem kürzlich anweisbaren Indigod0g beschrieb eine Mini-Wetterstation, die mit zwei Arduinos ziemlich gut funktioniert. Vielleicht möchte nicht jeder 2 Arduinos opfern, um Feuchtigkeits- und Temperaturmesswerte zu erhalten, und ich kommentierte, dass es möglich sein sollte, eine ähnliche Funktion mit zwei Attiny85 auszuführen. Ich denke, Reden ist einfach, also stecke ich mein Geld besser da, wo mein Mund ist.

In der Tat, wenn ich zwei frühere instructables kombiniere, schrieb ich:

2-Draht-LCD-Schnittstelle für Arduino oder Attiny und Empfangen und Senden von Daten zwischen Attiny85 (Arduino IDE 1.06)dann ist die meiste Arbeit bereits erledigt. Muss nur die Software etwas anpassen.

Ich habe mich für eine Zweidraht-LCD-Lösung mit einem Schieberegister anstelle eines I2C-LCDs entschieden, da das Schieberegister auf dem Attiny einfacher zu implementieren ist als der I2C-Bus. Allerdings… wenn Sie zum Beispiel einen BMP180 oder BMP085 Drucksensor auslesen möchten, benötigen Sie dafür sowieso I2C, also können Sie auch dann ein I2C-LCD verwenden. TinyWireM ist eine gute Bibliothek für I2C auf einem Attiny (aber es erfordert zusätzlichen Speicherplatz).

BOM Der Sender: DHT11 Attiny85 10 k Widerstand 433MHz Sendermodul

Der Empfänger Attiny85 10k Widerstand 433 MHz Empfängermodul

Das Display 74LS164 Schieberegister 1N4148 Diode 2x1k Widerstand 1x1k variabler Widerstand ein LCD-Display 2x16

Schritt 1: Mini-Wetterstation mit Attiny85: der Sender

Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender
Mini-Wetterstation mit Attiny85: dem Sender

Der Sender ist eine sehr einfache Konfiguration des Attiny85 mit einem Pull-Up-Widerstand auf der Reset-Leitung. Ein Sendermodul wird an Digital-Pin '0' angeschlossen und der DHT11-Daten-Pin wird an Digital-Pin 4 angeschlossen. Bringen Sie einen Draht von 17,2 cm als Antenne an (für eine viel bessere Antenne siehe Schritt 5). Die Software sieht wie folgt aus:

// funktioniert auf Attiny // RF433 = D0 Pin 5

//DHT11=D4 Pin 3 // Bibliotheken #include //Von Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // Pin, an dem Ihr Sender angeschlossen ist // Variablen float h = 0; Schwimmer t=0; int send_t = 0; int send_h = 0; int send_data = 0; Void setup () { PinMode (1, INPUT); man.setupTransmit(TX_PIN, MAN_1200); aufrechtzuerhalten. Void Schleife () {int chk = DHT11.read11 (DHT11PIN); h=DHT11. Feuchtigkeit; t = DHT11. Temperatur; // Ich weiß, ich verwende hier 3 Integer-Variablen // wobei ich 1 verwenden könnte // aber das ist nur, damit es einfacher ist, send_h=100* (int) h; send_t = (int) t; send_data=transmit_h+transmit_t; man.transmit(transmit_data); Verzögerung (500); }

Die Software verwendet Manchester-Code, um die Daten zu senden. Es liest den DHT11 und speichert die Temperatur und Luftfeuchtigkeit in 2 separaten Schwimmern. Da der Manchester-Code keine Gleitkommazahlen, sondern eine ganze Zahl sendet, habe ich mehrere Optionen: 1- die Gleitkommazahlen in jeweils zwei ganze Zahlen aufteilen und diese senden 2- jede Gleitkommazahl als ganze Zahl senden 3- die beiden Gleitkommazahlen als eine ganze Zahl senden Mit Option 1 muss ich kombinieren die Ganzzahlen in Floats im Empfänger wieder und ich muss identifizieren, welche Ganzzahl was ist, was den Code langatmig macht. Mit Option 2 muss ich noch identifizieren, welche Ganzzahl für Feuchtigkeit und welche für Temperatur steht. Ich kann nicht allein durch die Sequenz gehen, falls eine ganze Zahl bei der Übertragung verloren geht, daher müsste ich eine an die ganze Zahl angehängte Kennung senden. Mit Option 3 kann ich nur eine ganze Zahl senden. Dies macht die Messwerte offensichtlich etwas ungenauer - innerhalb von 1 Grad - und man kann keine Temperaturen unter Null senden, aber es ist nur ein einfacher Code und es gibt Möglichkeiten, dies zu umgehen. Im Moment geht es nur um das Prinzip. Also mache ich die Floats in ganze Zahlen und multipliziere die Luftfeuchtigkeit mit 100. Dann addiere ich die Temperatur zu der multiplizierten Luftfeuchtigkeit. Angesichts der Tatsache, dass die Luftfeuchtigkeit nie 100% betragen wird, ist die Die maximale Zahl, die ich bekomme, ist 9900. Da die Temperatur auch nicht über 100 Grad liegen wird, beträgt die maximale Zahl 99, daher ist die höchste Zahl, die ich sende, 9999 und das ist auf der Empfängerseite leicht zu trennen Meine Berechnung, bei der ich 3 ganze Zahlen verwende, ist übertrieben, da dies leicht mit 1 Variable möglich ist. Ich wollte nur den Code leichter verständlich machen. Der Code kompiliert jetzt wie folgt:

Binäre Skizzengröße: 2, 836 Byte (von maximal 8, 192 Byte), so dass sie in einen Attiny 45 oder 85 passt. HINWEIS: Die von mir verwendete dht.h-Bibliothek ist die von Rob Tillaart. Diese Bibliothek ist auch für einen DHT22 geeignet. Ich verwende Version 1.08. Der Attiny85 kann jedoch Probleme beim Lesen eines DHT22 mit niedrigeren Versionen der Bibliothek haben. Es wurde mir bestätigt, dass die 1.08 und 1.14 - obwohl sie auf einem normalen Arduino funktionieren - Probleme beim Lesen eines DHT22 auf dem Attiny85 haben. Wenn Sie einen DHT22 auf dem Attiny85 verwenden möchten, verwenden Sie die Version 1.20 dieser Bibliothek. Es hat alles mit dem Timing zu tun. Die Version 1.20 der Bibliothek hat ein schnelleres Lesen. (Danke für diese Benutzererfahrung Jeroen)

Schritt 2: Mini-Wetterstation mit Attiny85: der Empfänger

Mini-Wetterstation mit Attiny85: der Empfänger
Mini-Wetterstation mit Attiny85: der Empfänger

Auch hier wird der Attiny85 in einer Grundkonfiguration verwendet, wobei der Reset-Pin mit einem 10 k-Widerstand hoch gezogen wird. Das Empfängermodul wird an den digitalen Pin 1 (Pin 6 auf dem Chip) angeschlossen. Das LCD wird an die digitalen Pins 0 und 2 angeschlossen. Bringen Sie einen 17,2 cm langen Draht als Antenne an. Der Code lautet wie folgt:

#enthalten

#include LiquidCrystal_SR lcd(0, 2, TWO_WIRE); #define RX_PIN 1 //= physikalischer Pin 6 Void setup () {lcd.begin (16, 2); lcd.home(); man.setupReceive(RX_PIN, MAN_1200); man.beginReceive(); }void loop () { if (man.receiveComplete ()) { uint16_t m = man.getMessage (); man.beginReceive(); lcd.print("Feucht: "); lcd.print (m/100); lcd.setCursor(0, 1); lcd.print("Temp"); lcd.print (m%100); } }

Der Code ist ziemlich einfach: Die übertragene Ganzzahl wird empfangen und in der Variablen 'm' gespeichert. Sie wird durch 100 geteilt, um die Luftfeuchtigkeit zu erhalten, und das Modulo von 100 gibt die Temperatur an. Nehmen Sie also an, die empfangene Ganzzahl wäre 33253325/100 = 333325 % 100 =25Dieser Code wird als 3380 Byte kompiliert und kann daher nur mit einem attiny85 verwendet werden, nicht mit einem 45

Schritt 3: Mini-Wetterstation mit Attiny85/45: das Display

Mini-Wetterstation mit Attiny85/45: das Display
Mini-Wetterstation mit Attiny85/45: das Display
Mini-Wetterstation mit Attiny85/45: das Display
Mini-Wetterstation mit Attiny85/45: das Display

Für die Anzeige ist es am besten, dass ich mich auf mein anweisbares auf einem Zweidraht-Display beziehe. Kurz gesagt, ein gemeinsames 16x2-Display verwendet ein Schieberegister, damit es mit zwei digitalen Pins betrieben werden kann auch möglich, aber dann müssen Sie ein I2C-Protokoll auf dem Attiny implementieren. Das Tinywire-Protokoll kann dies tun. Obwohl einige Quellen sagen, dass dies einen 1-MHz-Takt erwartet, hatte ich keine Probleme (in einem anderen Projekt), ihn auf 8Mhz zu verwenden. Jedenfalls habe ich mich hier nicht die Mühe gemacht und ein Schieberegister verwendet.

Schritt 4: Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen

Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen
Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen
Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen
Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen
Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen
Mini-Wetterstation mit Attiny85/45: Möglichkeiten/Schlussfolgerungen

Wie gesagt, ich habe dies anweisbar gemacht, um zu zeigen, dass man eine Mini-Wetterstation mit zwei attiny85 machen kann (sogar mit einem attiny85 + 1 attiny45). Es sendet nur Feuchtigkeit und Temperatur mit einem DHT11. Der Attiny hat jedoch 5 digitale Pins zu verwenden, 6 sogar mit einigen Tricks. Daher ist es möglich, Daten von mehr Sensoren zu senden. In meinem Projekt - wie in den Bildern auf Stripboard und auf einer professionellen Platine (OSHPark) zu sehen - sende / empfange ich Daten von einem DHT11, von einem LDR und von einem PIR, alle mit zwei attiny85'sDie Einschränkung bei der Verwendung eines attiny85 als Empfänger ist jedoch die Darstellung der Daten in einem auffälligen Stil. Da der Speicher begrenzt ist: Texte wie 'Temperature, Humidity, light level, subject approaching' füllen ziemlich schnell wertvollen Speicherplatz. Trotzdem kein Grund, zwei Arduinos nur zum Senden/Empfangen von Temperatur und Luftfeuchtigkeit zu verwenden. Außerdem ist es möglich um den Sender schlafen zu lassen und ihn nur aufzuwecken, um beispielsweise alle 10 Minuten Daten zu senden und ihn so von einer Knopfzelle zu füttern. Natürlich können nicht nur Temperatur- oder Feuchtigkeitsdaten gesendet werden, sondern man kann eine Reihe von kleinen Sendern senden lassen auch Bodenfeuchtigkeitsmessungen, oder fügen Sie ein Anemometer oder einen Regenmesser hinzu

Schritt 5: Mini-Wetterstation: die Antenne

Mini-Wetterstation: die Antenne
Mini-Wetterstation: die Antenne

Die Antenne ist ein wichtiger Bestandteil jedes 433Mhz-Setups. Ich habe mit der Standard-17,2-cm-Stabantenne experimentiert und hatte einen kurzen Flirt mit einer Spulenantenne. Was am besten zu funktionieren schien, ist eine spulenbelastete Antenne, die einfach herzustellen ist. Das Design stammt von Ben Schueler und wurde anscheinend im Magazin 'Elektor' veröffentlicht. Ein PDF mit der Beschreibung dieser 'Luftgekühlten 433 MHz Antenne' ist leicht zu verstehen. (Link verschwunden, siehe hier)

Schritt 6: Hinzufügen eines BMP180

Hinzufügen eines BMP180
Hinzufügen eines BMP180

Möchten Sie einen barometrischen Drucksensor wie den BMP180 hinzufügen? Überprüfen Sie meine anderen instructable darauf.

Empfohlen: