This is an old revision of the document!
Grupa: 335CBb
Schema bloc a proiectului este urmatoarea (realizata cu https://app.diagrams.net/):
Panoul este format din 8 matrici 8 x 8 LED-uri si permite afisarea prin scroll stanga de mesaje transmise prin bluetooth sau serial monitor, preluate din SD card, respectiv ora exacta. Mesajele se pot salva pe un microSD introdus in modulul SD card.
In componenta proiectului intervin:
- un modul Arduino (Mega 2560);
- panou cu 8 matrici 8 x 8 LED-uri;
- un modul Bluetooth HC-05;
- un modul ceas de timp real DS3231;
- un modul SD card;
- sursa de alimentare 5V 2A.
Panoul cu 8 matrici 8 x 8 LED-uri foloseste cate un circuit MAX7219 pentru comanda fiecarei matrici de 8 x 8 LED-uri. Panoul este conectat prin interfata SPI cu modulul Arduino. Afisarea mesajelor se face prin scoll (deplasare) stanga. Prin comenzi interpretate de modulul Arduino si care provin fie de la un telefon conectat bluetooth, fie prin folosirea serial monitor, se vor putea modifica parametrii mesajelor afisate: schimbarea vitezei de deplasare a textului afisat, a intensitatii luminose a LED-urilor din panou, dar si afisarea video invers (stingerea pixelilor normal aprinsi si aprinderea celor normal stinsi).
Modulul Bluetooth HC-05 este folosit pentru conectarea cu un telefon (Android) care dispune de bluetooth si permite transmisia de comenzi si mesaje catre Arduino cu afisare pe panoul de LED-uri. Modulul bluetooth este conectat prin interfata UART cu Arduino. Se vor putea seta prin comenzi transmise prin Bluetooth sau folosind serial monitor urmatorii parametri:
- viteza de deplasare a textului (scroll stanga);
- intensitatea luminoasa a LED-urilor pe care se afiseaza mesajele;
- afisarea pe video invers.
Ca aplicatie pe telefon (Android) poate fi folosita Serial Bluetooth Terminal.
Modulul ceas de timp real DS 3231 permite actualizarea permanenta a orei exacte si a datei, functionarea in absenta tensiunii de alimentare de la sursa externa de 5V datorandu-se unei baterii locale de tip CR2032 aflata pe modul. Modulul ceas de timp real este interfatat I2C cu modulul Arduino. Ceasul de timp real va putea fi interogat de Arduino, iar informatia obtinuta (ora, data) va fi afisata pe panoul de LED-uri. Initial, ora exacta la ceasul de timp real va putea fi setata prin comanda transmisa de modulul Arduino. Suplimentar, modulul ceas de timp real ofera si informatii despre temperatura, care va fi afisata pe panoul de LED-uri. Modulul RTC contine si un senzor de temperatura care ofera informatii in acest sens. Comenzile de interogare si de setare a modulului ceas de timp real provin de la telefonul conectat bluetooth, dar si de la serial monitor.
Modulul SD card permite operarea cu un microSD card. Modulul SD card este interfatat SPI cu Arduino. Comenzile executate de catre Arduino asupra modulului SD card sunt:
- citirea unui fisier aflat pe microSD card si transmiterea continutului acestuia in vederea afisarii pe panoul de LED-uri;
- scrierea unui fisier pe SD card, cu denumirea fisierului si continutul acestuia;
- stergerea unui fisier aflat pe SD card;
- listarea fisierelor aflate pe SD card (se va face pe telefonul conectat prin Bluetooth, dar si la serial monitor).
Toate aceste comenzi provin de la telefonul conectat bluetooth sau prin folosirea serial monitor.
Sursa de alimentare 5V 2A permite functionarea panoului de afisaj in locurile destinate expunerii, fara necesitatea folosirii unui laptop/PC. Sursa trebuie sa acopere consumul solicitat indeosebi de cele 8 matrici de LED-uri.
Primul pas in realizarea proiectului a constat in realizarea unui montaj de test cu modulele implicate (folosind breadboard si fire dupont) si efectuarea de teste software.
S-a inceput cu interfatarea matricilor de LED-uri la Arduino folosind interfata SPI si afisarea de mesaje.
S-a continuat cu conectarea modulului bluetooth HC-05 la Arduino prin interfata UART si transmiterea de mesaje de la acesta catre matricile de LED-uri. S-a avut in vedere ca modulul bluetooth, desi alimentat la +5V, are pinii Tx si Rx compatibili cu nivelele de tensiune specifice alimentarii cu +3,3V. Din acest motiv pe intrarea Rx a modulului este conectat un divizor format din 2 rezistente de 10k si 22k care are rolul de a translata nivele logice specifice alimentarii de +5V pentru semnalele care vin de la Arduino in nivele logice specifice alimentarii cu +3,3V pe intrarea RX de la HC-05. In sens invers, de la pinul Tx al modulului HC-05 catre Arduino nu este nevoie de translatare de nivel logic, intrarea de la Arduino preluand corect respectivele nivele logice ale semnalelor transmise.
A urmat conectarea modului RTC DS3231 la Arduino prin interfata I2C cu preluarea informatiilor gestionate de RTC.
In final, s-a conectat modulul SD Card la Arduino prin interfata SPI cu implementarea operatiilor la nivelul microSD Card-ului.
Pentru proiectare s-a folosit mediul Fritzing (versiunea gratuita 0.9.3) care are avantajul ca modulele folosite in proiect prezinta o reprezentare grafica apropiata de cea reala.
A rezultat schema hardware a montajului prezentata in figura urmatoare, dispunerea componentelor folosite fiind similara cu cea din realizarea practica:
Tot in Fritzing s-a realizat si o schema electrica, prezentata in figura urmatoare:
MD_Parola - implementeaza functii pentru afisarea de texte pe matricile LED cu folosirea circuitului MAX7219
MD_MAX72XX - implementeaza functii care permit sa se utilizeze circuitele MAX7219, 7221 pentru actionarea matricilor de LED-uri
SPI - implementeaza functii pentru interfata SPI
Wire - implementeaza functii pentru interfata I2C
SD - implementeaza functii pentru lucrul cu SD card
DS3231 - implementeaza functii pentru operarea cu circuitul RTC DS3231
#0<ENTER> afisarea orei exacte, a datei si a temperaturii citite de la RTC;
#1 ‘mesaj’<ENTER> transmisia unui mesaj pentru afisare la panoul de LED-uri;
#2 v ‘mesaj’<ENTER> transmisia unui mesaj de la serial monitor sau bluetooth pentru afisare la panoul de LED-uri cu specificarea viteza deplasare text (v = 0 … 99);
#3 v<ENTER> schimbarea vitezei de deplasare stanga a textului afisat pe panoul de LED-uri (v = 0 … 99);
#4 i<ENTER> schimbarea intensitatii luminoase a LED-urilor (i = 0 … 15);
#5 ‘nume fisier’<ENTER> citirea unui fisier de pe microSD card si afisarea acestuia pe panoul de LED-uri;
#6 ‘nume fisier’ ‘mesaj’<ENTER> scrierea unui mesaj ca fisier pe microSD card;
#7<ENTER> listarea fisierelor aflate pe SD card (in directorul radacina) la telefonul conectat Bluetooth si la serial monitor;
#8 ‘nume fisier’<ENTER> stergerea unui fisier de pe microSD card;
#9 HH MM SS DD MM YY<ENTER> setarea orei exacte la RTC;
#10<ENTER> afisare pe video invers.
Montajul final, realizat pe placa de test, avand componentele si conexiunile intre ele lipite, este urmatorul:
Montajul in stare de functionare (in timpul deplasarii spre stanga a textului care prezinta ora si data) cu alimentare de la sursa externa:
Semnalez si o problema intampinata pe parcursul dezvoltarii software si programarii modulului Arduino cu firmware-ul compilat. Astfel, pe intervalul de timp in care se programeaza Arduino, matricile de LED-uri pierd comanda din partea microcontrolerului, se aprind aleator, iar curentul consumat creste mult. Acest curent nu este suportat de interfata USB la care este conectat si alimentat modulul Arduino. Practic programarea modulului Arduino esueaza. Solutia pe care am gasit-o este deconectarea matricilor LED de la alimentarea de +5V pe timpul programarii Arduino prin folosirea unui jumper.
Toate functionalitatile proiectate pentru panoul de afisaj cu matrici LED au fost implementate cu succes si acesta poate fi folosit in scopuri de afisare mesaje in diverse spatii.
Proiectul a reprezentat o buna oportunitate pentru a exersa proiectarea si realizarea concreta a unui sistem embedded avand module conectate prin principalele interfete de comunicatii (UART, SPI si I2C).
Pentru viitor, proiectul poate fi continuat prin realizarea unui panou cu dimensiuni marite.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
21 aprilie 2022 Comanda pentru componente;
27 aprilie 2022 Primire componente comandate;
28 aprilie 2022 Realizarea de montaje de test cu modulele implicate in proiect (folosind breadboard si fire dupont) si testari software;
6 mai 2022 Finalizarea testarilor;
7 mai 2022 Realizarea schemei electrice a proiectului folosind Fritzing;
8 mai 2022 Pagina wiki si documentatia pentru Milestone1;
10 mai 2022 Inceperea realizarii montajului final pe cablajul de test (cu lipirea componentelor si a firelor de conexiune);
12 mai 2022 Finalizarea montajului final;
12 mai 2022 Inceperea implementarii programului software;
20 mai 2022 Finalizarea implementarii software;
23 mai 2022 Pagina wiki si documentatia pentru Milestone2.
Resurse Hardware
https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf https://datasheets.maximintegrated.com/en/ds/DS3231.pdf https://microcontrollerslab.com/max7219-dot-matrix-display-arduino-tutorial/ https://create.arduino.cc/projecthub/electropeak/sd-card-module-with-arduino-how-to-read-write-data-37f390
https://lastminuteengineers.com/ds3231-rtc-arduino-tutorial/
Resurse Software
https://github.com/MajicDesigns/MD_MAX72XX https://github.com/MajicDesigns/MD_Parola https://www.arduino.cc/reference/en/libraries/md_parola/ https://www.arduino.cc/reference/en/libraries/md_max72xx/ https://www.arduino.cc/reference/en/language/functions/communication/spi/ https://www.arduino.cc/reference/en/language/functions/communication/wire/ https://www.arduino.cc/reference/en/libraries/sd/ https://www.arduino.cc/reference/en/libraries/ds3231/