Home > Technologie > Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

0
Advertisement

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Dies ist ein Projekt, an dem ich schon seit einiger Zeit arbeite, und es gibt immer noch Möglichkeiten, zu gehen, aber ich habe genug Erfolg, gerade jetzt, wo ich kann, was ich habe. Dies umfasst das Anschließen eines Beaglebone und eines Arduino über TTL seriell und I2C unter Verwendung eines Parallel-LCD mit einem Arduino unter Verwendung eines DHT-22 mit Arduino und unter Verwendung von DS18B20 1-Draht-Sensoren mit einem BeagleBone in der nächsten Woche oder so.

Ich glaube, dass alle Anweisungen hier gelten mehr oder weniger as-is zu einem RaspberryPI oder pcDuino oder einem anderen kleinen Computer, der TTL seriell und i2c und 1-Draht für den DS18B20 unterstützt. Als ich einige bekommen ArchReactor (die lokale hackerspace) Mitglieder dies auf ihren Geräten , um zu versuchen, werde ich hier zu aktualisieren , welche Geräte Arbeit bestätigt und alle relevanten Informationen hinzuzufügen.

Mein Ziel ist es, verschiedene Temperatur-, Feuchtigkeits- und andere Sensoren zu verwenden, die über mein Haus verteilt sind, auch außerhalb, und die Kontrolle über meine Wärme- und Klimaanlage sowie den gesamten Hausventilator, um den Komfort und den Energieverbrauch zu optimieren und auszugleichen. Die Details, wie das funktioniert, sind noch nicht genagelt, und ich werde mit der Überwachung zu starten, damit ich sehen kann, welche Art von Daten, die ich zu arbeiten haben.

Dieses anweisbare wird erklären, wie man mit einem Arduino und Beaglebone und ein paar Sensoren und ein Display zu beginnen.

Material, das Sie benötigen:
- BeagleBone
- Ardunio
- TFT LCD
- Sensoren
- viele Steckbrücken!

Ich habe einen BeagleBone für eine Weile, aber ein Schwarzes sollte das gleiche funktionieren. Für die Arduino können Sie Prototyp mit einem Uno oder anderen Standard-Arduino-kompatibel, aber ich bin mit einem Steckbrett Arduino, und ich werde schließlich eine Leiterplatte für sie, so dass ich es in so klein wie möglich zu integrieren. Für die LCD, habe ich eine gewählte 2,8 "TFT mit Touch - Screen . Es gibt sicherlich einfacher LCDs zu verwenden , da draußen, aber dieses ist nur $ 18, und ich habe genug IOs diesen Lauf in 8-Bit - Modus zu machen. I ' M beginnend mit dem DHT-22 Temperatur- und Feuchtigkeitssensor, und ich werde bald DS18B20 Temp-Sensoren hinzufügen.

Ich habe gemacht SparkFun Wunschliste für die Steckbrett Arduino Teile und die Sensoren.

Ein anderes Ziel von mir war, das Arduino-Programm aus der TTL-Serie des BeagleBone zu aktualisieren. Ich habe detailliert, dass in diesem instructable, und die seriellen Teile hier wird auf der Grundlage. Nachdem ich den LCD-Betrieb erkannte ich, dass es erfordert die Verwendung von D0 und D1 (die serielle Schnittstelle) und so mit dem Beaglebone kommunizieren musste ich etwas anderes zu verwenden. Ich beschloss, etwas Neues zu lernen und I2C zu verwenden.

Schritt 1: Wire die BB und Arduino zusammen

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Wir beginnen mit dem BeagleBone, um mit dem Arduino zu sprechen. Ich empfehle, lesen Sie meine instructable für immer sie verdrahtet und den Test-Code ausgeführt. Ich mache einen schnellen Überblick hier, verweisen das Bild mit dem Diagramm für Pin-Nummern:

Verbinden Sie die nackten Knochen Arduino , abzüglich der FTDI.
BeagleBone Serial2 auf den Pegelschieber.
Draht Ardunio seriell auf die Ebene Shifter, RX und TX gekreuzt.
Draht BeagleBone und Arduino i2c zusammen. Level Shifter wird nicht benötigt, die Pullups des BeagleBones sind stark genug, um den niedrigen Strom zu bewältigen.
BeagleBones P9 23 auf Arduino zurücksetzen
Wire 5V Versorgung auf einer Stromschiene und 3.3V auf der anderen.
Verdrahten Sie das Gelände zusammen.

Ich habe eine neue Fritzing, um die I2C-Zeilen zu zeigen. Leider habe ich nicht speichern eine einfache Reihe von i2c Testprogramme. Wenn jemand Probleme hat, diese zu arbeiten, kann ich einen machen.

Schritt 2: Verdrahten Sie das LCD und DHT-22

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Das ITDB02 LCD unterstützt 16-Bit- und 8-Bit-Anzeigemodi. 8bit-Modus erfolgt durch Verwendung von nur 8 der Datenleitungen und Springen der anderen auf Masse. Da ich wirklich nur Text und einige grundlegende Grafiken, bin ich mit 8-Bit-Modus, um die IO-Pins für andere Anwendungen.

Ich verwende die UTFT Bibliothek , um den LCD - Laufwerk. Ihre Anforderungen pdf hat ein Diagramm , das die Pin - Zuordnung für die Arduino zeigt. Ich fand die Pin - Etiketten auf dem LCD schwer zu lesen , nachdem ein paar Drähte angeschlossen wurden und die sich auf das Bild und Grafik auf der Produktseite war eine große Hilfe.

Da die LCD-Pin-Header ist nicht breadboard freundlich, habe ich einige weibliche <-> weiblichen Jumper auf sie mit einigen normalen männlichen <-> männlichen Jumper, um es alle aufgehängt. Dieses ist eine Tonne Drähte, also nehmen Sie einfach Ihre Zeit und überprüfen Sie sie alle.

Die DHT22 arbeitet auf 1wire Protokoll, aber es ist nicht Dallas 1-Draht kompatibel. Adafruit hat ein großes Tutorial auf Verbinden und mit dem DHT-22 , empfehle ich nach ihrem Führer.

Schritt 3: Programmierung

Dies ist, wo es Spaß macht.
Die UTFT Bibliothek erwies sich als recht einfach zu bedienen sein, und ich fand auch eine einfach zu benutzende Bibliothek für die DHT-22 . Auch mit diesen schönen Bibliotheken gab es einige Herausforderungen.
Der Arduino als i2c-Slave scheint sich nur zu verhalten, wenn man seine Verwendung auf Einzel-Byte-Operationen beschränkt, was das Senden flexibler komplexer Strukturen erschwert. Ich möchte in der Lage sein, Bildschirmbildbefehle vom BeagleBone zum Arduino zu senden. Meine Optionen waren, ein System zu kodieren, in dem ein Byte als "Befehlstyp" gesendet wird, dann verzweigen, um mehr Bytes zu lesen, um die Struktur abzuschließen, oder erarbeiten einen Weg, um eine abgegrenzte Zeichenfolge zu verkapseln und zu verarbeiten. Methode 1 würde bedeuten, ich kann keine optionalen Parameter, und wenn die Byte-Sende wird aus der Synchronisierung wird es schwierig, neu zu synchronisieren. Also habe ich Methode 2 verwendet, indem ich einige Puffer-Variablen und Senden eines 0-Byte als Null-Terminator, wie C verwendet für Zeichenfolgen. Selbst wenn ein Byte gelöscht wird, beendet das 0-Byte die Struktur an einem gewissen Punkt und dann ist es nur eine Frage des Umgangs mit seltsamen Daten, wenn ich analysiere.

Die nächste Herausforderung war, dass die DHT22 langsam ist. Wie, wirklich sehr langsam. Gelöst, dass mit einer "aktuellen Wert" Variable und eine Verzögerung. Ich brauche nicht super schnelle Reaktion, wenn die Werte ändern, aber ich möchte, dass es schnell reagiert, wenn ich für die Werte fragen. Die Hauptschleife fragt jede Funktion ab, die Funktion prüft dann, wann der Wert zuletzt aktualisiert wurde, und aktualisiert sie, wenn sie länger als 3 Sekunden war. Ich werde wahrscheinlich am Ende umwandeln diese in einen Timer von einer Art.

Ich habe auch in einem "dev-Modus" programmiert, so kann ich trennen Sie die LCD-und erhalten Sie einige Informationen über serielle. Es ist praktisch, so weit, aber jetzt, dass die Grundlagen ausgearbeitet werde ich wahrscheinlich nicht verwenden es wieder.

Auf der BeagleBone verwende ich PyBBIO jetzt. Es ist arduino wie Befehle und Methoden mich davon abhalten, super verwirrt beim Umgang mit solchen verschiedenen Sprachen wie C und Python sind. Es ist ziemlich einfach zu installieren, und hat ein paar schöne Klassen in. Es ist meine Absicht zu versuchen und bekommen eine Art von i2c-Klasse, wenn Haim nicht zuerst!

Sie finden eine Zip-Datei mit meinem Code, eine Ino-Datei für die arduino und eine Python-Datei für die beaglebone. Derzeit gibt es nur Unterstützung für die DHT22 Temperatur und Luftfeuchtigkeit Messwerte. Es aktualisiert die Anzeige auf dem arduino, auch wenn das Python-Skript nicht ausgeführt wird. Das Python-Skript erhält einfach die Werte und druckt sie an das Terminal. Wie ich schon sagte, habe ich noch viel zu tun!

Die kompilierte Skizze verwendet 29.5K der 32.2K Maximum, und ich muss noch Touch-Unterstützung und die Zeichnung Funktionen hinzuzufügen! Ich denke, es gibt eine Menge Code in der utft, dass ich schneiden kann, und vielleicht kann ich ziehen Sie die DTH-Bibliothek Zeug in und machen es schlanker als gut. Oder vielleicht werde ich einfach genug, wir werden sehen!

Schritt 4: führen Sie es!

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Sobald Sie die utft- und dht-Bibliotheken installiert haben und die Skizze zum Ardunio kompilieren und hochladen, sollte das LCD-Display klar sein und Ihnen einige Daten geben. Dann können Sie ssh zu Ihrem beaglebone und führen Sie die Python-Skript und sehen Sie die Werte auf Ihre Werte gibt es auch.

Als nächstes muss ich das auf eine Platine! Nun, da die grundlegende Hardware funktioniert, kann ich das tun. Danach füge ich die 1-Draht-Sensoren direkt dem Beaglebone hinzu. Ich setze die DHT22 auf den Arduino, weil ich die Lektüre in der Nähe des Displays will und es wird an der Wand mit dem Beaglebone im Keller aus dem Weg sein.

Schritt 5: Temperaturfühler DS18B20

Ich habe nicht die DS18B20's integriert in meinem Hauptprogramm noch, aber ich habe ein Testprogramm für sie.

DS18B20 haben 3 Beine: Ground, Data und VCC. Sie können sogar verwenden sie nur die Datenleitung, wie es Macht Macht aus diesem. Ich plane auf Laufen viele von diesen, und die BeagleBone ist derzeit auf IO-Anschlüsse begrenzt ist, so werde ich sie mit Strom versorgen.

Beigefügt ist das Python-Skript zum Testen. Es gibt ein schickes Diagramm im Skript, das sagt, wie man sie verbindet.
Einfach auf Masse und Leistung, dann BeagleBone P8 Pin 6 auf Data Pin und es sollte auftauchen. Das Anbringen mehr DS18B20s ist so einfach wie das Verbinden seiner Stifte auch. Gehen alle Sensordaten an den Pin 6 des BeagleBone P8.

Ich verwende eine Struktur, um alle meine Objekte zu halten, so kann ich sie nennen und nicht mit der einzigartigen ID's alle durch den Code behandeln. Das Skript druckt den Temp-Wert auf alle Sonden, die alle 2 Sekunden definiert sind.

Schritt 6: Aktualisiert

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Sharing einige Updates, ist neuer Code in der beigefügten Zipdatei.

Ich habe den Code zu trimmen, und es gibt eine aktualisierte UTFT-Bibliothek im Zip, das nur unterstützt die ITDB02 im 8-Bit-Modus, und auch nur die Klasse Methoden, die ich tatsächlich verwenden.

Ich habe es eingerichtet, so dass die BeagleBone alle Datenerfassung und alle Bildschirm-Zeichnung, über ein einfaches Protokoll, das ich, dass die Karten zu den UTFT's Zeichnung Funktionen erstellt. Der Python-Code liest die Temperatur und Feuchtigkeit, schreibt dann das Datum, die Zeit und die formatierte Temperatur und Feuchtigkeit wieder auf den Bildschirm einmal pro Sekunde. Dann, einmal alle 5 Minuten, fügt es die aktuelle Temp zu einer Grafik. Wenn das Diagramm das Ende des Bildschirms erreicht, schlägt es zurück um und fängt an, überschreibt das vorhergehende Diagramm, während es geht. Ein roter Punkt zeigt den aktuellen Punkt an und grün wird für die Historie verwendet.

Ich habe auch einige Fehlerbehandlung, so dass das Python-Skript nicht abstürzen, wenn das Arduino zurückgesetzt wird. Es stattdessen geht in eine Test-Schleife und zieht den Bildschirm von Anfang an, sobald es zurück kommt. Auf der Arduino Seite, wenn es keine Kommunikation in 10 Sekunden, es löscht das Display und sagt zu "Host überprüfen", damit Sie wissen, dass etwas falsch ist.

Mein nächster Schritt ist es, die Arduino und Bildschirm auf ihr eigenes Board setzen und machen einen Fall für permanente Montage.

Schritt 7: Herstellen einer Leiterplatte

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Umweltüberwachung mit BeagleBone oder RaspberryPI und Ardunio

Es gibt viele Anweisungen da draußen auf eine Leiterplatte, so für die Details auf, dass ich Sie ermutigen, sie zu suchen. Ich stelle das hier zur Vollständigkeit. Dies ist meine erste PCB-Design, konstruktive Kritik ist sehr willkommen.

Ich entschied mich für Fritzing. Ich ändere die Voreinstellungen auf dem Autorouter, um 8mil Spuren zu verwenden, und beobachtete es, ein vollständiges Chaos zu machen, dann fuhr ich fort, es oben zu regeln.

Ich habe nicht das Board noch, so ist dies nicht die endgültige Version.

Related Reading