Das Himbeer Pi Pico ist der ideale Einstieg in Mikrocontroller. Ab 4 US-Dollar ist das Board günstig und einfach zu handhaben. Die niedrigen Kosten und die Benutzerfreundlichkeit bedeuten, dass wir sie problemlos in ein Projekt einfügen können, ohne das Schlimmste für unseren Geldbeutel befürchten zu müssen.
In dieser Anleitung verwenden wir einen Raspberry Pi Pico, um Live-Temperaturdaten mit einem DS18B20 zu erfassen. Dieser Sensor ist in vielen Formen erhältlich, von einem nackten Transistorchip bis zu einem wasserfesten Kabel. Wir verwenden die letztere Version, die teilweise in eine Flüssigkeit getaucht werden kann, um die Temperatur zu überwachen. Unser Projekt wird eine Temperaturmessung durchführen und mit einem bedingten Test in MicroPython wird es eine LED zum Blinken bringen, wenn die Temperatur unter 20 Grad Celsius fällt.
Für dieses Projekt benötigen Sie
Aufbau der Schaltung
Die Schaltung besteht aus zwei Teilen. Der Temperatursensor DS18B20 und die LED. Wir werden sie in zwei Abschnitte unterteilen.
Der DS18B20 hat drei Verbindungen zum Raspberry Pi Pico.
Himbeer Pi Pico | Drahtfarbe | DS18B20 |
---|---|---|
3V3 | Rot | VDD |
GPIO26 | Gelb | Daten |
Masse | Schwarz | Masse |
Alle drei Verbindungen werden in das Steckbrett hergestellt, und die Drähte werden verwendet, um eine Verbindung zum Pico herzustellen. Zwischen den Daten- und 3V3-Pins (gelb und rot) liegt ein 4,7K Ohm Widerstand der verwendet wird, um den Datenstift mit den gelieferten 3,3 V hochzuziehen. Dadurch wird eine ständige Verbindung zwischen dem Datenstift und Pico aufrechterhalten.
Die LED hat nur zwei Verbindungen zum Raspberry Pi Pico.
Himbeer Pi Pico | Drahtfarbe | LED |
---|---|---|
GPIO15 | Rot | Anode (langes Bein) |
Masse | Schwarz | Kathode (kurzes Bein) |
Die LED hat einen 330-Ohm-Widerstand am Kathodenschenkel, inline mit GND. Dies reduziert die Strommenge, die die LED verbrauchen kann.
Schreiben des Codes
1. Folgen Sie dieser Anleitung um die neueste MicroPython-Version für Ihr Raspberry Pi Pico-Modell herunterzuladen und zu installieren. Befolgen Sie die Schritte bis einschließlich zum Verbinden des Raspberry Pi Pico mit Thonny.
2. Erstellen Sie ein neues leeres Projekt in Thonny.
3. Importieren Sie drei Module mit vorgefertigtem Code. Das erste ist Onewire, ein Modul, das es dem Pico ermöglicht, mit der One-Wire-Schnittstelle des DS18B20 zu kommunizieren. Als nächstes kommt ds18x20, ein Modul, das die Sensordaten des DS18B20 interpretiert und uns menschenlesbare Daten liefert. Zuletzt importieren wir die Zeit, die zum Tempo unseres Projektcodes verwendet wird.
import onewire, ds18x20, time
4. Importieren Sie aus dem Maschinenmodul die Pin-Klasse. Dadurch kann unser Code mit den mit dem GPIO verbundenen Komponenten interagieren.
from machine import Pin
5. Erstellen Sie zwei Objekte, SensorPin und Alarm. SensorPin ist der GPIO-Pin, der verwendet wird, um den Daten-Pin vom DS18B20 mit dem Pico zu verbinden. Alert ist der GPIO-Pin, der mit der Anode (langes Bein) der LED verbunden ist.
SensorPin = Pin(26, Pin.IN)
alert = Pin(15, Pin.OUT)
6. Erstellen Sie ein Objekt, einen Sensor und verwenden Sie es, um dem ds18x20-Modul mitzuteilen, wo sich unser DS18B20-Temperatursensor befindet. Diese Leitung verwendet auch das Onewire-Modul, da dies das Protokoll ist, das der Sensor für die Verbindung verwendet.
sensor = ds18x20.DS18X20(onewire.OneWire(SensorPin))
7. Erstellen Sie ein Objekt, roms und verwenden Sie das Sensorobjekt, um die Schnittstelle zu scannen, um unseren DS18B20-Temperatursensor zu finden. Alle One-Wire-Geräte, wie unser DS18B20, haben eine eindeutige Registrierungsnummer im ROM gespeichert, die wir identifizieren müssen, bevor sie verwendet werden können.
roms = sensor.scan()
8. Verwenden Sie eine While-True-Schleife um die nächsten Codezeilen in einer Endlosschleife auszuführen.
while True:
9. Stellen Sie die Temperaturanzeige auf Celsius ein. Beachten Sie, dass der Code innerhalb der while True-Schleife eingerückt ist, um anzuzeigen, dass er in die Schleife gehört.
sensor.convert_temp()
10. Fügen Sie dem Code eine Pause von zwei Sekunden hinzu. Dies gibt dem DS18B20 Zeit, sich zu beruhigen, bevor wir eine Messung vornehmen.
time.sleep(2)
11. Verwenden Sie eine for-Schleife, um die zurückgegebene Liste der ROMs zu durchlaufen. Da wir nur einen DS18B20 auf der One-Wire-Schnittstelle haben, wird nur ein ROM in der Liste gespeichert, über die wir iterieren.
for rom in roms:
12. Erstellen Sie ein Objekt, Temperatur, und verwenden Sie es, um die Ausgabe des Lesens des DS18B20-Sensors zu speichern. Die Ausgabe wird in eine round()-Funktion eingeschlossen, die die zurückgegebenen Daten auf 1 Dezimalstelle rundet.
temperature = round(sensor.read_temp(rom),1)
13. Verwenden Sie einen Bedingungstest, um den im Temperaturobjekt gespeicherten Wert mit einem hartcodierten Wert zu vergleichen. Wenn in diesem Beispiel die Temperatur kleiner oder gleich 20 Grad Celsius ist, wird die Bedingung als wahr ausgewertet und der nächste Abschnitt des eingerückten Codes wird ausgeführt.
if temperature <= 20:
14. Geben Sie eine Nachricht an die Python-Shell aus, die den Benutzer warnt, dass die Temperatur unter 20 °C liegt, und fügen Sie den Temperaturwert in den Satz ein.
print("Warning the temperature is",temperature,"C")
fünfzehn. Verwenden Sie eine for-Schleife, um die LED 10 Mal mit einer Verzögerung von 0,5 Sekunden zu blinken.
for i in range(10):
alert.toggle()
time.sleep(0.5)
16. Erstellen Sie eine Sonst-Bedingung, die aktiviert wird, wenn die Temperatur über 20 C liegt. Diese Bedingung druckt die aktuelle Temperatur vor dem Ende.
else:
print(temperature,"C")
17. Fügen Sie eine Pause von fünf Sekunden hinzu bevor Sie die Schleife beenden und zum Anfang der Schleife zurückkehren.
time.sleep(5)
18. Speichern Sie den Code auf dem Raspberry Pi Pico als TemperatureMonitor.py.
19. Klicken Sie auf das Run-Symbol, um den Code zu starten. Nach einer kurzen Pause erscheinen die Temperaturdetails in der Python-Shell. Wenn die Temperatur unter 20 C liegt, blinkt die LED fünfmal, um uns zu warnen.
Vollständige Codeliste
import onewire, ds18x20, time
from machine import Pin
SensorPin = Pin(26, Pin.IN)
alert = Pin(15, Pin.OUT)
sensor = ds18x20.DS18X20(onewire.OneWire(SensorPin))
roms = sensor.scan()
print(roms)
while True:
sensor.convert_temp()
time.sleep(2)
for rom in roms:
temperature = round(sensor.read_temp(rom),1)
if temperature <= 20:
print("Warning the temperature is",temperature,"C")
for i in range(10):
alert.toggle()
time.sleep(0.5)
else:
print(temperature,"C")
time.sleep(5)