Table of Contents

Gertboard. Christmas Lights

Gertboard

Î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>

I/O din linia de comandă

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.

exemplu export gpio
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:

exemplu output gpio
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

I/O cu WiringPi

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 

SPI cu WiringPI, Convertoarele A/D și D/A

WiringPi poate încărca automat module de kernel pentru comunicația SPI și include interfațarea de SPI în aplicația gpio

Pentru setup-ul din acest laborator, modulul de SPI nu trebuie incarcat deoarece acesta este deja inclus.

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)

Setup RaspberryPi

Plăcile sunt configurate pentru a lucra cu rootfs-ul exportat prin NFS de la fiecare calculator în parte. Ca să funcționeze, trebuie să aveți IP de tipul 10.0.0.10x pe calculatorul pe care lucrați, înainte de a fi pornit placa.

Comenzile din aceasta subsectiune se executa pe host!

student $ sudo ip addr add 10.0.0.10<x>/24 dev em1 (x este numarul de pe raspberryPi)

Christmas Lights

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.

Exercitii

Pentru a putea demonstra cu usurinta functionalitatea solutiei (si astfel sa nu avem surpriza neplacuta de a descoperi in vacanta de iarna ca sistemul nu functioneaza asa cum a fost proiectat) realizati si o configuratie care sa declanseze secventa de aprindere a luminilor in fiecare minut.

Referințe