În laboratorul de astăzi vom folosi Gertboard, o placă de extensie pentru RaspberryPi ce conține:
Placa Gertboard este conectată pe header-ul de extensie al raspberryPi, care pune la dispoziție următoarele periferice:
Pentru a folosi placa, întâi vom configura jumper-ii și conexiunile:
<imgcaption image1 | Setarea tensiunii de lucru la 3.3V > </imgcaption>
<imgcaption image2 | Conectarea firelor și jumper-elor pentru a folosi LED-urile > </imgcaption>
RaspberryPi oferă posibilitatea controlării modulului de GPIO și din userspace prin intermediul unei interfețe sysfs. Avem astfel acces facil la pinii de GPIO din cadrul unui program sau chiar din interiorul unui script bash.
Interfața sysfs pentru GPIO se este expusă în /sysfs/class/gpio
. În cadrul acestui folder avem două pseudo-fișiere, export
și unexport
, care controlează ce pini putem controla prin sysfs. În mod implicit nici un pin nu este expus inițial.
Pentru a expune un anumit pin trebuie să scriem index-ul acelui pin în fișierul export
. Asemănător, scrierea unui index în fișierul unexport
va șterge acel pin din interfața sysfs.
root@celestia:~# echo 19 > /sys/class/gpio/export root@celestia:~# ls /sys/class/gpio export gpio19 gpiochip0 unexport root@celestia:~# echo 19 > /sys/class/gpio/unexport root@celestia:~# ls /sys/class/gpio export gpiochip0 unexport
O dată exportat un pin, el va apărea în interfața sysfs ca un director cu numele de forma gpioN care conține mai multe fișiere cu care pinul poate fi controlat. Dintre acestea, de interes sunt:
in
sau out
root@celestia:~# echo out > /sys/class/gpio/gpio19/direction root@celestia:~# echo 1 > /sys/class/gpio/gpio19/value root@celestia:~# echo 0 > /sys/class/gpio/gpio19/value
Un alt mod de a controla pinii, insa de data aceasta folosind PWM (un singur pin pe RaspberryPi are PWM hardware, pinul 18), putem folosi biblioteca WiringPi. WiringPi este o bibliotecă care include și o aplicație pentru o folosire mai ușoară a GPIO-urilor. Pentru PWM permite folosirea PWM hardware și poate face PWM software pentru ceilalți pini.
raspberrypi $ git clone git://git.drogon.net/wiringPi raspberrypi $ cd wiringPi raspberrypi $ ./build
WiringPi admite modul PWM pentru pinul 18 de pe RaspberryPi
raspberrypi $ gpio -g mode 18 pwm raspberrypi $ gpio -g pwm 18 100
Pentru I/O normal se poate folosi
raspberrypi $ gpio -g mode 25 output raspberrypi $ gpio -g write 25 1 raspberrypi $ gpio -g write 25 0
sau
raspberrypi $ gpio -g mode 25 down raspberrypi $ gpio -g read 25
WiringPi poate încărca automat module de kernel pentru comunicația SPI și include interfațarea de SPI în aplicația gpio
raspberrypi $ gpio load spi
Pe Gertboard este prezent un convertor Digital-Analogic ( MCP4802), care funcționează după următoarea formulă: V_out = value/256 * 2.048 V (Convertorul DAC este pe 8 biți).
În același timp, pe Gertboard se află și un MCP3002, convertor analog-digital pe 10 biți (unde 1023, valoarea maximă, este echivalent cu 3.3V).
Amândouă convertoarele sunt conectate pe SPI. Pentru a le conecta la RaspberryPi trebuie puse jumperele:
GP11 -- SCLK GP10 -- MOSI GP9 -- MISO GP8 -- CSnA GP7 -- CSnB
DAC-ul și ADC-ul vor putea fi interfațate cu programul de WiringPi:
raspberrypi $ gpio gbr <canal> raspberrypi $ gpio gbw <canal> <valoare>
<imgcaption image3 | Conectarea firelor și jumper-elor pentru a folosi ADC-ul și DAC-ul (simultan, cu loopback) > </imgcaption>
Puteți testa inițial cele două componente cu un “loopback”: Ieșirea DAC-ului (DA1) va fi conectată la intrarea ADC-ului (AD0)
student $ sudo ip addr add 10.0.0.10<x>/24 dev em1 (x este numarul de pe raspberryPi)
Implementați un sistem embedded care controlează o instalație de luminițe pentru pomul de Crăciun inteligentă. Acesta va porni, în mod automat, la lăsarea întunericului, în perioada 21.12 - 05.01.
Pentru a determina gradul de întuneric vom folosi un senzor de lumină. Acesta returnează o tensiune invers proporțională cu lumina receptată. Folosiți convertorul A/D al plăcii Gertboard pentru a măsura tensiunea și a aprinde instalația.
*o*o*o* o*o*o*o *o*o*o* o*o*o*o *o*o*o* o*o*o*o ******* ooooooo ******* ooooooo ******* ooooooo ******* ******* ******* ooooooo ooooooo ooooooo ******* ******* ******* ooooooo ooooooo ooooooo