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

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

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

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>

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

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.

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ă
  • (2p) Secvența de luminițe se execută doar când suntem în vacanța de iarnă (21.12 - 5.01)
  • (4p) Luminițele se aprind doar seara, când stăm cu lumina stinsă în jurul bradului (când este întuneric)
si/lab/2020/hidden/lab9.txt · Last modified: 2021/08/10 18:32 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0