Le Framboise Pi Pico est le moyen idéal pour entrer dans les microcontrôleurs. À partir de 4 $, la planche est bon marché et facile à utiliser. Le faible coût et la facilité d’utilisation signifient que nous pouvons facilement les intégrer à un projet sans craindre le pire pour notre portefeuille.
Dans ce tutoriel, nous utiliserons un Raspberry Pi Pico pour capturer des données de température en direct à l’aide d’un DS18B20. Ce capteur se présente sous de nombreuses formes, d’une puce de transistor nue à un câble résistant à l’eau. Nous utiliserons cette dernière version, qui peut être partiellement immergée dans un liquide pour surveiller la température. Notre projet prendra une lecture de température et à l’aide d’un test conditionnel en MicroPython, il déclenchera le clignotement d’une LED si la température descend en dessous de 20 degrés Celsius.
Pour ce projet, vous aurez besoin
Construire le circuit
Le circuit est composé de deux parties. Le capteur de température DS18B20 et la LED. Nous les décomposerons en deux sections.
Le DS18B20 dispose de trois connexions au Raspberry Pi Pico.
Framboise Pi Pico | Couleur du fil | DS18B20 |
---|---|---|
3V3 | Rouge | VDD |
GPIO26 | Jaune | Données |
Terre | Noir | Terre |
Les trois connexions sont faites dans la planche à pain et les fils sont utilisés pour se connecter au Pico. Entre les données et les broches 3V3 (jaune et rouge), il y a un 4.7K Ohm résistance qui est utilisé pour tirer la broche de données vers le haut en utilisant le 3,3 V fourni. Cela maintient une connexion stable entre la broche de données et le Pico.
La LED n’a que deux connexions au Raspberry Pi Pico.
Framboise Pi Pico | Couleur du fil | DIRIGÉ |
---|---|---|
GPIO15 | Rouge | Anode (jambe longue) |
Terre | Noir | Cathode (jambe courte) |
La LED a une résistance de 330 ohms sur la jambe cathodique, en ligne avec GND. Cela réduit la quantité de courant que la LED peut consommer.
Écrire le code
1. Suivez ce guide pour télécharger et installer la dernière version de MicroPython pour votre modèle de Raspberry Pi Pico. Suivez les étapes jusqu’à et y compris la connexion du Raspberry Pi Pico à Thonny.
2. Créez un nouveau projet vierge dans Thonny.
3. Importez trois modules de code pré-écrit. Le premier est onewire, un module qui permet au Pico de communiquer avec l’interface à un fil du DS18B20. Vient ensuite ds18x20, un module qui interprète les données du capteur du DS18B20 et nous fournit des données lisibles par l’homme. Enfin, nous importons du temps qui est utilisé pour rythmer notre code de projet.
import onewire, ds18x20, time
4. Depuis le module Machine, importez la classe Pin. Cela permettra à notre code d’interagir avec les composants connectés au GPIO.
from machine import Pin
5. Créez deux objets, SensorPin et alert. SensorPin est la broche GPIO utilisée pour connecter la broche de données du DS18B20 au Pico. Alert est la broche GPIO qui se connecte à l’anode (jambe longue) de la LED.
SensorPin = Pin(26, Pin.IN)
alert = Pin(15, Pin.OUT)
6. Créez un objet, un capteur et utilisez-le pour indiquer au module ds18x20 où trouver notre capteur de température DS18B20. Cette ligne utilise également le module onewire, car c’est le protocole utilisé par le capteur pour la connexion.
sensor = ds18x20.DS18X20(onewire.OneWire(SensorPin))
7. Créez un objet, des roms et utilisez l’objet capteur pour scanner l’interface afin de trouver notre capteur de température DS18B20. Tous les appareils à un fil, tels que notre DS18B20, ont un numéro d’enregistrement unique stocké dans la ROM que nous devons identifier avant de pouvoir les utiliser.
roms = sensor.scan()
8. Utiliser une boucle while True pour exécuter les lignes de code suivantes dans une boucle sans fin.
while True:
9. Réglez la lecture de la température pour utiliser Celsius. Notez que le code dans la boucle while True est mis en retrait pour montrer qu’il appartient à la boucle.
sensor.convert_temp()
dix. Ajoutez une pause de deux secondes au code. Cela donne au DS18B20 le temps de s’installer avant de prendre une lecture.
time.sleep(2)
11. Utilisez une boucle for pour parcourir la liste de ROM renvoyée. Comme nous n’avons qu’un seul DS18B20 sur l’interface à un fil, une seule ROM sera stockée dans la liste sur laquelle nous itérons.
for rom in roms:
12. Créez un objet, une température, et utilisez-le pour stocker la sortie de la lecture du capteur DS18B20. La sortie est enveloppée dans une fonction round() qui arrondira les données renvoyées à 1 décimale.
temperature = round(sensor.read_temp(rom),1)
13. Utilisez un test conditionnel pour vérifier la valeur stockée dans l’objet de température par rapport à une valeur codée en dur. Dans cet exemple, si la température est inférieure ou égale à 20 degrés Celsius, la condition sera évaluée comme vraie et la section suivante du code en retrait s’exécutera.
if temperature <= 20:
14. Imprimez un message sur le Python Shell qui avertit l’utilisateur que la température est inférieure à 20 C et incluez la valeur de la température dans la phrase.
print("Warning the temperature is",temperature,"C")
15. Utilisez une boucle for pour faire clignoter la LED 10 fois, avec un délai de 0,5 seconde.
for i in range(10):
alert.toggle()
time.sleep(0.5)
16. Créer une autre condition qui s’active si la température est supérieure à 20 C. Cette condition imprimera la température actuelle avant de se terminer.
else:
print(temperature,"C")
17. Ajouter une pause de cinq secondes avant de terminer la boucle et de revenir au début de la boucle.
time.sleep(5)
18. Enregistrez le code sur le Raspberry Pi Pico sous TemperatureMonitor.py.
19. Cliquez sur l’icône Exécuter pour lancer le code. Après une courte pause, les détails de la température apparaîtront dans le shell Python. Si la température est inférieure à 20 C, la LED clignotera cinq fois pour nous avertir.
Liste complète des codes
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)