În laboratorul de astăzi vom folosi Gertboard, o placă de extensie pentru RaspberryPi ce conține:
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 interfete sysfs. Avem astfel acces facil la pinii de GPIO din cadrul unui program sau chiar din interiorul unui script bash.
Interfata 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
. Asemenător, scrierea unui index în fișierul unexport
va sterge 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
Pentru 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
WiringPi poate încărca automat module de kernel pentru comunicația SPI și include interfațarea de SPI în aplicația gpio
Pentru a încărca modulul de SPI:
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)
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.
Secvența de aprindere a LED-urilor este descrisă mai jos (* - LED aprins, o - LED stins).
*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
Christmas Lights!