Ceas cu afișaj matriceal utilizând Raspberry Pi

Chiar dacă realizarea unui ceas electronic este o sarcină simplă care se poate realiza utilizând cam orice platformă programabilă (inclusiv o placă Arduino) utilizarea unui  unui ecran de dimensiuni mari format din leduri RGB pentru afișare este o sarcină puțin mai dificilă. Dificultatea provine atât din necesarul de memorie cât și din necesarul de putere de prelucrare. Tocmai din aceste motive, în cadrul proiectului de față, ne propunem să prezentăm implementarea unui ceas / calendar utilizând o platformă Raspberry Pi și o placă Adafruit RGB Matrix + Real Time Clock – placă ce reprezintă combinația ideală pentru proiectul nostru deoarece conține atât componenta de RTC cât și componenta de comandă pentru matrici RGB.

2

https://www.robofun.ro/raspberry-pi-si-componente/adafruit-rgb-matrix-hat-rtc-for-raspberry-pi-mini-kit

Pentru mai multe informații legate de punerea în funcțiune și utilizarea plăcii Adafruit RGB Matrix + Real Time Clock se poate consulta și:

Adafruit RGB Matrix + Real Time Clock HAT for Raspberry Pi

https://learn.adafruit.com/adafruit-rgb-matrix-plus-real-time-clock-hat-for-raspberry-pi

Atenție!!! Pentru buna funcționare a modulului RTC este nevoie de o baterie de 12mm (de exemplu CR1225) ce nu este inclusă în kit. Placa Adafruit RGB Matrix nu vine cu afișajul RGB inclus, se poate utiliza unul sau se pot inseria mai multe module Adafruit Matrice LED RGB 32×32:

3

https://www.robofun.ro/electronice/led/matrice-led-rgb-32×32

Pentru mai multe informații despre inserierea și alimentarea corectă a acestor module LED RGB se poate consulta și următorul material:

32×16 and 32×32 RGB LED Matrix HUNDREDS of pixels of eye-blasting LED glory!

https://learn.adafruit.com/32×16-32×32-rgb-led-matrix/

Pentru implementarea funcționalității propuse vom efectua două operații: vom configura placa Raspberry Pi să utilizeze circuitul RTC DS1307 prezent pe placa Adafruit și vom scrie programul ce afișează data și ora pe afișajul matriceal RGB.

Configurarea plăcii Rapberry Pi pentru a utiliza circuitul RTC DS1307 este similară cu configurarea prezentată în proiectul ”Conectarea unui RTC I2C la o placă Raspberry Pi”. Se va instala suportul software pentru comunicația I2C:

sudo apt-get install -y python-smbus

sudo apt-get install -y i2c-tools

și se va activa comunicația I2C utilizând utilitarul raspi-config:

sudo raspi-config

Pentru a verifica conexiunea între placa de dezvoltare și componenta RTC se poate utiliza următoarea comandă:

sudo i2cdetect -y 1

ce va indica adresa I2C a modulului conectat: 0x68 pentru DS1307.

4

Dacă conexiunea între modulul RTC și placa de dezvoltare este în regulă putem configura fișierele de inițializare a sistemului de operare pentru a utiliza modulul RTC.

În fișierul /boot/config.txt se adaugă următoarea linie:

dtoverlay=i2c-rtc,ds1307

Se va înlătura serviciul sistemului de operare ce emulează ceasul hardware:

sudo apt-get -y remove fake-hwclock

sudo update-rc.d -f fake-hwclock remove

în fișierul /lib/udev/hwclock-set se vor comenta următoarele linii

#if [ -e /run/systemd/system ] ; then

# exit 0

#fi

și se va reporni sistemul:

sudo reboot

După repornire se poate verifica funcționarea corectă a modulului RTC și a mecanismelor specifice sistemului de operare prin următoarele comenzi:

Prima inițializare a modulului RTC se va face prin intermediul comenzii:

sudo hwclock -D -r

Sincronizarea timpului sistemului cu modulul RTC se va face prin comanda (scrierea datei sistem în memoria modulului RTC):

sudo hwclock -w

Consultarea informațiilor din modulul RTC se va face prin comanda:

sudo hwclock -r

După setarea inițială a modulului RTC sistemul Raspberry Pi se va sincroniza automat la fiecare repornire cu informațiile stocate în memoria internă a modulului RTC – la fiecare repornire ora și data se vor inițializa cu ajutorul modulului RTC care păstrează infomarțiile și în lipsa alimentării cu energie electrică.

Pentru a implementa funcționalitatea de ceas (afișarea datei și orei pe ecranul LED RGB) se va pleca de la proiectul:

RGB LED Matrx and matrix hat + RTC From Adafruit

https://www.youtube.com/watch?v=7iGx401DEs0

Codul sursă a acestui proiect se poate descărca de la adresa:

https://drive.google.com/open?id=0ByaorJ43ehItV3laTHdjenR2bms

Acest proiect utilizează biblioteca BiblioPixel ce permite realizarea de animații pentru mai multe tipuri de afișaje:

https://github.com/maniacallabs/bibliopixel/

Utilizarea acestei biblioteci necesită instalarea următoarelor componente:

sudo pip install BiblioPixel

sudo pip install pillow

sudo pip install spidev

sudo pip install pyserial

După instalarea componentelor software și după copierea codului sursă a proiectului se va edita fișierul clock.py și se va putea observa codul necesar implementării funcționalității de ceas (funcția ShowDateTime) scris în limbajul Python:

global image

global draw

blink=0 

for n in range(1,seconds*2):

font = ImageFont.truetype(‘font/Generica Condensed

Std Bold.otf’, 17)

fonts = ImageFont.truetype(‘font/pixelmix.ttf’, 8)

if blink == 0:

if mode == 0:   

for n in range(1, 9):

draw.line((1, n, 30, n),fill=colors.Black)

draw.text((4,1),datetime.now().strftime(‘%H’),

font=fonts, fill=Timecolor)

draw.text((18,1), datetime.now().strftime(‘%M’),

font=fonts, fill=Timecolor)

draw.text((16,1), ‘:’, font=fonts, fill=Timecolor)

draw.text((3,11), datetime.now().strftime(‘%d/%m’),

font=fonts, fill=Datecolor)

draw.text((6,21), datetime.now().strftime(‘20%y’),

font=fonts, fill=Yearcolor)

blink=1

elif mode == 1: 

for n in range(1, 16):

draw.line((1, n, 30, n), fill=colors.Black)

draw.text((1,2), datetime.now().strftime(‘%H’),

font=font, fill=Timecolor)

draw.text((17,2), datetime.now().strftime(‘%M’),

font=font, fill=Timecolor)

draw.text((15,0), ‘:’, font=font, fill=Timecolor)

draw.text((3,21), datetime.now().strftime(‘%d/%m’),

font=fonts, fill=Datecolor)

blink=1

else:

if mode == 0:   

for n in range(1, 9):

draw.line((1, n, 30, n), fill=colors.Black)

draw.text((4,1), datetime.now().strftime(‘%H’),

font=fonts, fill=Timecolor)

draw.text((18,1), datetime.now().strftime(‘%M’),

font=fonts, fill=Timecolor)

draw.text((3,11), datetime.now().strftime(‘%d/%m’),

font=fonts, fill=Datecolor)

draw.text((6,21), datetime.now().strftime(‘20%y’),

font=fonts, fill=Yearcolor)

blink=0

elif mode == 1: 

for n in range(1, 16):

draw.line((1, n, 30, n), fill=colors.Black)

draw.text((1,2), datetime.now().strftime(‘%H’),

font=font, fill=Timecolor)

draw.text((17,2), datetime.now().strftime(‘%M’),

font=font, fill=Timecolor)

draw.text((3,21), datetime.now().strftime(‘%d/%m’),

font=fonts, fill=Datecolor)

blink=0

matrix.SetImage(image.im.id, 0, 0)

time.sleep(0.5)

Bineînțeles, pe lângă funcționalitatea de ceas / calendar, ansamblul format din platforma Raspberry Pi și placa Adafruit Matrice LED RGB permite implementarea de funcționalități diverse (inclusiv proiectul dat ca exemplu adaugă funcționalitatea de stație meteo). Se pot explora diverse dezvoltări ulterioare parcurgând și următoarele proiecte:

RGB Matrix In Architectural Model

https://blog.adafruit.com/2015/04/28/rgb-matrix-in-architectural-model-arttuesday/

Raspberry Pi RGB LED Matrix Webapp

Control RGB LED panels from a Web application using Raspberry Pi.

https://learn.adafruit.com/raspberry-pi-rgb-led-matrix-webapp

DIY LED Video Wall

Tile together multiple RGB LED panels to create a giant LED wall!

https://learn.adafruit.com/adafruit-diy-led-video-wall/

OpenWRT – mai mult decât simplă conectivitate WiFi

Succesul revoluției IoT arată în mod clar că sistemele embedded au atins un prag funcțional în care conectivitatea de rețea este absolut necesară. Bineînțeles, această evoluție a fost posibilă datorită creșterii nivelului de integrare a circuitelor integrate ce a condus la creșterea puterii de calcul a microcontrolerelor și a apariției controlerelor de rețea extrem de accesibile. Conectivitatea de rețea fără fire (WiFi) este cea mai comodă și mai flexibilă modalitate de conectare directă la rețeaua Internet a unui sistem embedded. Acest lucru se poate observa și în efortul companiilor producătoare de circuite integrate de a aduce pe piață controlere specializate WiFi din ce în ce mai puternice și din ce în ce mai ieftine. Controlere precum ESP8266 (ce echipează plăcile de dezvoltare NodeMCU, Adafruit Feather HUZZAH, Sparkfun Blynk Board, Arduino Uno WiFi), HDG204 (Arduino WiFi shield), CC3000 (CC3000 WiFi Shield) sau ATWINC1500 (Adafruit Feather M0 Wifi, Genuino MKR1000) sunt doar câteva exemple de componente ce permit conectarea unui sistem Arduino la Internet prin intermediul unei rețele WiFi.

1

https://www.robofun.ro/wireless/wireless-wifi/arduino_wifi_shield

2

https://www.robofun.ro/feather-m0-wifi-atsamd21-atwinc1500

În ciuda complexității acestei noi generații de controlere WiFi sistemele embedded pe 8 biți precum plăcile de dezvoltare Arduino Uno sau Arduino Leonardo au de îndeplinit o sarcină dificilă prin conectarea la rețeaua Internet. Chiar dacă aceste controlere implementează în totalitate stiva de comunicație TCP/IP lăsând în sarcina microcontrolerului doar implementarea nivelului aplicație, limitările sistemului rezultat sunt destul de mari fiind date de memoria internă de dimensiuni modeste (atât memoria program cât și memoria de date), viteza de procesare mică a microcontrolerului, posibilitatea redusă de prelucrare a informației (cuvânt de date pe 8 biți). Cu alte cuvinte, chiar dacă echipăm un sistem embedded pe 8 biți cu un controler WiFi performant nu vom obține un sistem de calcul cu posibilitățile de prelucrare și comunicație echivalente cu un Raspberry Pi, de exemplu, sau cu un alt sistem bazat pe o arhitectură de tip microprocesor.

Totuși, există o posibilitate prin care putem transforma o platformă Arduino clasică într-un sistem IoT cu capabilități complete de prelucrare și comunicație. Soluția este oferită de controlere de comunicație ce rulează distribuția Linux OpenWRT precum Arduino Yun.3

https://www.robofun.ro/wireless/wireless-wifi/arduino_yun

Placa Arduino Yun dispune de un microprocesor Atheros AR9331 cu 16MB memorie flash internă, unde este stocat sistemul de operare, și 64MB memorie RAM plus un  microcontrolerul ATmega32U4 (prezent și pe Arduino Leonardo). Coexistența celor două circuite programabile simplifică implementarea aplicațiilor de rețea permițând scrierea părții de nivel aplicație pe microprocesorul Atheros. Astfel programatorul are la dispoziție microcontrolerul ATmega32U4 doar pentru sarcinile specifice unei plăci Arduino: control, achiziție de date, interfață utilizator etc. Comunicația între cele două circuite programabile se face serial și este ușurată de biblioteca software Bridge. Această combinație de două circuite programabile este mult mai simplu de utilizat și mai eficientă pentru dezvoltarea aplicațiilor embedded decât o placă de dezvoltare de tipul Raspberry Pi sau BeagleBone. Pentru exemplificare vă recomandăm parcurgerea proiectului Yun Spot din cadrul cărții ”10(zece) proiecte cu Arduino” ce descrie implementarea unui router cu facilități de tip punct de acces WiFi și interfață utilizator bazată pe un LCD alfanumeric HD4478:

https://books.google.ro/books?id=aMB8BgAAQBAJ

Distribuția Linux OpenWRT ce rulează pe microprocesorul Atheros este o distribuție gândită special pentru sisteme specializate de tip punct de acces WiFi necesitând foarte puține resurse de calcul (memorie, putere procesor, spațiu de stocare intern). Această distribuție este întâlnită pe multe sisteme de tip router aflate pe piață produse de firme precum: 3Com, Asus, D-Link, Hi-Link etc. – cine știe? poate chiar routerul dvs. rulează OpenWrt…

4

https://openwrt.org/

Succesul plăcii de dezvoltare Arduino Yun a condus la diversificarea acestei subfamilii Arduino apărând diferite variante bazate pe aceiași combinație microcontroler AVR și microprocesor ce rulează OpenWRT:

Arduino Yun Mini – o placă de format mai mic dar fără mufele RJ45 (pentru conexiunea Ethernet) și USB Host (ambele prezente pe Arduino Yun) și fără cititorul de card SD. Este produsă exclusiv de arduino.org și din acest motiv biblioteca Bridge a fost rebotezată Ciao.

5

https://www.robofun.ro/arduino/arduino-yun-mini

Arduino Industrial 101 – un format fizic total atipic pentru familia Arduino, nu expunse decât 7 pini ai microcontrolerului ATmega32U4 (4 analogici și 3 digitali), în plus deține conector pentru afișaj dogOLED. Fără conectori Ethernet, USB Host și cititor card SD. Singurul avantaj este prețul mai mic. Produsă exclusiv de arduino.org.

6

https://www.robofun.ro/arduino/arduino-industrial-101

Arduino Tian – un Arduino Yun pe steroizi… Microprocesor Atheros AR9342 (560MHz, compatibil WiFi 2.4GHz și 5GHz), memorie flash 16MB + 4GB eMMC, memorie RAM 64MB, conexiune Ethernet 10/100/1000 Mbit/s. Microcontroler ARM Cortex M0+ SAM21G18 pe 32 de biți, memorie flash 256KB, memorie RAM 32KB. Conectivitate Bluetooth 4.0 / BLE. Produsă exclusiv de arduino.org .

7

https://www.robofun.ro/arduino/arduino-tian

și nu în ultimul rând: LinkIt Smart 7688 și LinkIt Smart 7688 Duo – două plăci de dezvoltare produse de compania MediaTek (sunt echipate cu microprocesoare MediaTek MT7688 580MHz, 32MB Flash, 128MB RAM) în parteneriat cu Seeed Studio. Doar varianta Duo dispune de microcontroler ATmega32U4 și, în ciuda diferenței de microprocesor, este compatibilă software 100% cu placa Arduino Yun și cu biblioteca Bridge (inclusă în distribuția OpenWRT instalată în memoria flash a plăcii). Au avantajul major al prețului …

8

https://www.robofun.ro/arduino/linkit-smart-7688-duo

 

Pentru a vă convinge de avantajele sistemului de operare OpenWRT în realizarea unor proiecte IoT vă recomandăm următoarele proiecte și articole:

9

 

Plant Monitoring System using AWS IoT

https://www.hackster.io/carmelito/plant-monitoring-system-using-aws-iot-6cb054

Make Batman dance at the rythm of a gas sensor

https://blog.arduino.cc/2015/07/23/make-batman-dance/

Simple and Smart Air Purifier System

https://create.arduino.cc/projecthub/aaronkow/simple-and-smart-air-purifier-system-8604ab

Arduino Yún: the best hacks you will ever see

http://www.open-electronics.org/arduino-yun-the-best-hacks-you-will-ever-see/

Embedded Linux Board Comparison – Raspberry Pi, Beaglebone Black, Arduino Yun, and Intel Galileo–which one is right for you?

https://learn.adafruit.com/embedded-linux-board-comparison

Zoned Climate Control with MediaTek’s LinkIt™ Smart 7688

https://www.hackster.io/BuddyC/zoned-climate-control-with-mediatek-s-linkit-smart-7688-f7eb3c

DIY a Wi-Fi Speaker with LinkIt Smart 7688

http://www.seeed.cc/project_detail.html?id=1076

Linkit SMART/ONE sensor monitoring

https://www.hackster.io/smerkousdavid/linkit-smart-one-sensor-monitoring-7e2741

Cum testăm scheme electronice bazate pe platforma Arduino fără să riscăm să ardem componente?

Una dintre principalele neplăceri a primilor pași în descoperirea ”tainelor” montajelor electronice este riscul de distrugere a componentelor cu care lucrăm. Fire de conectare legate greșit sau inversate, alimentare greșit conectată, scurtcircuit între Vcc și GND, curenți prea mari sau insuficienți, interpretarea greșită a poziției pinilor unui circuit integrat – toate aceste greșeli sunt extrem de probabile pentru un începător dar nu numai. Singurele modalități de a evita aceste accidente sunt răbdarea, atenția și practica îndelungată. Până acum… când există posibilitatea de simulare a montajelor realizate cu platforma Arduino.

Mediilor de simulare electronică sunt orientate puternic către fabricația cablajelor electronice și către simularea părții electronice dar există și platforme de proiectare electronică ce permit simularea electronică combinată cu partea software, esențială în lucrul cu circuitele programabile de tip microcontroler. O astfel de platformă este Proteus Design Suite.

1

http://www.labcenter.com

Din păcate această platformă este un produs comercial cu un cost destul de mare și care nu este destinată începătorilor. O platformă online apărută recent face disponibilă în mod gratuit partea de proiectare, simulare și testare hardware și software a montajelor electronice bazate pe placa de dezvoltare Arduino, este vorba despre platforma Autodesk 123D Circuits (circuits.io).

2

https://circuits.io

Această platformă este parte a unei familii mai mari de produse online dezvoltată în ultima perioadă de compania Autodesk (companie binecunoscută pentru produse de proiectare CAD precum AutoCAD sau 3D Studio Max). Această familie include: 123D Catch – software de scanare 3D, 123D Design – software de modelare 3D, 123D Make – software de conversie a modelelor 3D în puzzle-uri 3D, 123+ Sculpt+ – software  de modelare 3D pentru iPad. Datorită apartenenței la această familie 123D Circuits depășește funcționalitatea de proiectare electronică a circuitelor electronice permițând proiectarea circuitelor imprimate (PCB) și chiar și a carcaselor pentru proiectele electronice.

Pentru a accesa platforma 123D este necesară înregistrarea gratuită a unui cont utilizator. După conectarea la platformă, realizarea unei scheme presupune accesarea secțiunii Electonics Labs de unde puteți crea un proiect nou (New Electronics Lab) sau vizualiza proiectele realizate de alți utilizatori (Gallery) – toate proiectele de pe platformă sunt partajate între utilizatori.

3

Pentru realizarea montajelor există o listă destul de mare de componente electronice: rezistențe, condesoatoare, led-uri, butoane, senzori analogici și digitali, circuite digitale logice, afișaje, relee, motoare, plăci de dezvoltare (Arduino Uno, Arduino Micro, ESP8266), instrumente de măsură (voltmetru, ampermetru, osciloscop) și multe altele. Din păcate nu există, la acest moment, posibilitatea de adăugarea de noi componente. Lista completă de componente poate fi explorată în secțiunea Components:

https://circuits.io/lab/components

Pentru a începe să realizați propriile montaje și simulări vă recomandăm următoarele materiale:

Zero to Breadboard Simulation

http://www.instructables.com/id/Zero-to-Breadboard-Simulation/

Web Browser Arduino Simulation

http://www.instructables.com/id/Web-Browser-Arduino-Simulation/

iar pentru a trece la partea de implementare practică a montajelor:

Custom Electronics Enclosure

http://www.instructables.com/id/Custom-Electronics-Enclosure/

 

Spre deosebire de mediul de dezvoltare Arduino IDE partea de simulare software a platformei 123D Circuits oferă posibilitatea de depanare a programului (DEBUGGER) prin introducerea de puncte de suspendare a execuției (breakpoints):

4

O altă funcție extrem de importantă a simulării este verificarea din punct de vedere electric a schemei realizate. Captura de mai jos ilustrează avertizarea de depășire a curentului maxim debitat pentru un registru de deplasare 74HC595 – avertizare ce se traduce în viața reală prin distrugerea fizică a circuitului digital. Această facilitate oferită de simulator face posibilă evaluarea și înțelegerea modului de funcționare electrică a circuitului testat.

5

Datorită caracterului colaborativ al platformei 123D Circuits (proiectele realizate sunt partajate între utilizatori, se poate copia și lucra pe un proiect deja existent, se poate lucra în echipă pe un proiect) o sursă foarte importantă de învățare este studierea proiectelor realizate de ceilalți utilizatori ai platformei. Vă recomandăm următoarele proiecte:

Analog Gas Sensor

6

https://circuits.io/circuits/2631979-analog-gas-sensor

ce utilizează senzorul de gaz metan MQ-4.

7

https://www.robofun.ro/senzori/biometric/senzor_metan_mq-4

HelloKeypad

8

https://circuits.io/circuits/2255844-hellokeypad-ino

ce prezintă modul de funcționare a unei tastaturi matriceale.

https://www.robofun.ro/electronice/butoane/membrane-3×4-matrix-keypad-extras-3×4

NeoPixel Clock – San Francisco9https://circuits.io/circuits/2102703-neopixel-clock-san-francisco

ce utilizează un modul ESP8266 și două afișaje Neopixel Ring.

https://www.robofun.ro/wireless/wireless-wifi/wifi-module-esp8266

https://www.robofun.ro/electronice/led/neopixel-ring-16-x-ws2812-5050-rgb-led

https://www.robofun.ro/electronice/led/neopixel-ring-24-x-ws2812-5050-rgb-led

Christmas Tree

10

https://circuits.io/circuits/1392613-christmas-tree

ESP8266 Temperature Weather Station

11

https://circuits.io/circuits/2100207-esp8266-temperature-weather-station

Johnson Decade Counter Example

12

https://circuits.io/circuits/1091346-johnson-decade-counter-example