Control des del NodeRED i MQTT fent servir una Raspberry Pi Zero W
Contingut
Imatge descarregable
Imatge d'un Raspbian preparat per a funcionar a una Raspberry Pi Zero W. Un cop cremeu la imatge a la targeta SD li heu de fer una expansió.
El primer cop que la poseu en marxa podeu fer servir el vostre mòbil com a punt d'accés [SSID: iotcat Contrasenya: 1234567890a]. Al cap d'una estona us sortirà una IP per la pantalla OLED. El primer cop que hi accediu mitjançant SSH podeu personalitzar la connexió a la xarxa sense fils de casa vostra.
NodeRED
Python
Per a visualitzar per terminal l'estat dels sensors infrarojos i la lectura de distància del sensor d'ultrasons:
pi@robot01:~/code/robot $ ./irUs_03.py
Per a moure els motors fem servir la funció vMotion(nEsq,nDre) present a l'arxiu importable edcoRobot.py:
vMotion(-127, +127)
pi@robot01:~/code/robot $ ./motor_01.py
Interacció amb el maquinari
Inici i aturada del procés al rerefons
Per a fer la comunicació entre el maquinari i el NodeRED cal executar:
/home/pi/code/robot/robot_01.py
Altrament, també es pot executar des dels nodes del NodeRED:
Anomenem l'execució del codi com a procesUnic:
bash -c "exec -a procesUnic /usr/bin/python3 /home/pi/code/robot/robot_01.py"
I per a matar el procés pel nom procesUnic:
pkill -f procesUnic
robot_01.py és l'encarregat de comunicar el maquinari i el NodeRED. Per tant, quan no està en marxa no hi ha comunicació entre el maquinari i el NodeRED.
Recepció de les dades dels sensors
Objecte JSON amb les dades del sensor:
us: distància en centímetres del sensor d'ultrasons.
bL i bR: Sensors infrarojos (IR) darrere esquerre (back left) i darrere dret (back right). L'estat W és la detecció d'un color blanc (white) quan rebota el llum i l'estat B és la detecció d'una absorció de llum, normalment la detecció del color negre (black).
bFL, bCL, bCC, bCR i bFR: Sensors infarojos (IR) frontals (far left, center left, center, center right i far right). L'estat W és la detecció d'un color blanc (white) quan rebota el llum i l'estat B és la detecció d'una absorció de llum, normalment la detecció del color negre (black).
button: El botó entre els sensors ultarsònics i la Raspberry Pi. L'estat N és de no premut (not pressed) i P és premut (pressed).
Objecte JSON en format de cadena de caràcters:
Transmissió de dades als actuadors
Es fa mitjançant un JSON amb els camps left i right que controlen les rodes de la dreta i les de l'esquerra. Els valors corresponen al cicle de treball (duty cicle) del sistema de modulació per amplada de pols (PWM: Pulse Width Modulation). Els valors entre -255 i 0 corresponen al 100% i 0% del cicle de treball amb els motors en marxa enrere, i els valors entre 0 i 255 corresponen al 0% i 100% del cicle de treball amb els motors en marxa endavant.
En aquest exemple els motors de l'esquerra del robot van enrere amb un cicle de treball del 50% (el 100% és 255) i els motors de la dreta van endavant amb un cicle de treball del 50%:
{"left":-127,"right":127}
Activació dels actuadors en funció dels sensors
Exemple
Aquesta és la implementació d'un exemple amb aquest comportament:
- Quan es detecta B a bCC s'aturen els motors i quan es detecta W els dos motors van cap a endavant amb un cicle de treball del 50%.
La funció Robot Brain:
flow.set("bCC",msg.payload.ir.bCC); if(msg.payload.ir.bCC == "B"){ flow.set("left",0); flow.set("right",0); msg.payload = {"left":0,"right":0}; }else{ flow.set("left",127); flow.set("right",127); msg.payload = {"left":127,"right":127}; } return msg;