User Tools

Site Tools


lab:2015:gertboard

Gertboard. Christmas Lights

Gertboard

În laboratorul de astăzi vom folosi Gertboard, o placă de extensie pentru RaspberryPi ce conține:

  • Buffer-e de I/O
  • 12 LED-uri
  • 3 switch-uri
  • 1 convertor A/D (conectat prin SPI)
  • 1 convertor D/A (conectat prin SPI)
  • 1 driver de motor
  • driver pentru curent mare
  • Atmega328 pentru extensie de I/O, conectat prin UART

Placa Gertboard este conectată pe header-ul de extensie al raspberryPi, care pune la dispoziție următoarele periferice:

  • 1 interfață serială UART
  • 1 interfață serială SPI pentru cel mult două dispozitive
  • 1 interfață serială I2C
  • 8 linii GPIO

Pentru a folosi placa, întâi vom configura jumper-ii și conexiunile:

Fig. 1: Setarea tensiunii de lucru la 3.3V

Fig. 2: Conectarea firelor și jumper-elor pentru a folosi LED-urile

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:

  • direction - setează direcția pinului in sau out
  • value - setează/citește valoarea pinului
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

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

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

Fig. 3: Conectarea firelor și jumper-elor pentru a folosi ADC-ul și DAC-ul (simultan, cu loopback)

Puteți testa inițial cele două componente cu un “loopback”: Ieșirea DAC-ului (DA1) va fi conectată la intrarea ADC-ului (AD0)

Christmas Lights

Plăcile sunt configurate pentru a lucra cu kernel-ul luat prin TFTP 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.

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.

Senzorul de lumină are trei fire:

  • Masa cu verde. Trebuie conectată la GND pe Gertboard
  • Alimentarea cu roșu, trebuie conectată la 3V3
  • Firul de măsurare, care trebuie conectat la o intrare analogică (AD0 sau AD1)

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

Punctaje

Christmas Lights!

  • (4p) Secvența de luminițe este respectată
  • (4p) Secvența de luminițe se execută doar când suntem în vacanța de iarnă (21.12 - 5.01)
  • (2p) Luminițele se aprind doar seara, când stăm cu lumina stinsă în jurul bradului (când este întuneric)

Referințe

lab/2015/gertboard.txt · Last modified: 2015/12/14 12:42 by Andrei Voinescu