Vlad-Florin ILIE (87856) - Is it full?

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul are in vedere implementarea unui sistem ce va determina cat de pline sunt unul sau mai multe recipiente. Utilizatorul va putea interactiona cu sistemul prin doua metode: gradul de umplere al recipientelor va fi afisat pe un ecran conectat direct la dispozitiv (util pentru utilizatorii ce se afla langa sistem) si va mai fi afisat si online la o adresa prestabilita. Sistemul poate fi folosit pentru monitorizarea unor recipiente precum: cosuri de gunoi, rezervor de colectare a apei etc.

Descriere Generala

Sistemul este format din patru componente principale: placa de baza, modul Wi-Fi ESP8266, ecran LCD, senzor/senzori ultrasonici HC-SR04. Placa de baza se va ocupa de comunicarea cu HC-SR04 (pornirea pulsurilor ultrasonice precum si masurarea distantei) si va trimite detaliile despre nivelul de umplere al recipientelor catre LCD (SPI) si catre modulul Wi-Fi (SERIAL).

Modulul Wi-Fi (ESP8266) va avea un server WEB intern prin intermediul caruia le va oferi utilizatorilor datele primite de la placa de baza.

Schema Bloc

Hardware Design

Lista de piese

  • Placa de baza (Atmega324)
  • Modul Wi-Fi (ESP8266)
  • Ecran LCD Nokia 5110
  • Senzori ultrasonici (HC-SR04)
  • Cabluri de legatura
  • Level shifter
  • Sursa

Schema Electrica

Software Design

Pentru acest proiect am folosit ca mediu de dezvoltare Notepad++ (pentru scrierea efectiva a codului) si WinAvr (pentru compilare). Pentru modulul Wi-Fi, am folosit Arduino IDE. Am preluat din laborator bibliotecile pentru SPI, USART si biblioteca pentru ecranul color ce foloseste controller-ul ST7735R. Am initializat un timer care apeleaza intreruperea asociata o data la 100us. In aceasta intrerupere este incrementat cate un contor pentru: de cate ori am numarat pana la 100us (folosit pentru a masura latimea pulsului intors de senzorii ultrasonici), mai este incrementat ul alt contor (pana la 30) folosit pentru debounce (30 * 100us = 30ms) iar ultimul contor incrementat va numara pana la 5000 (fiecare masuratoare are loc o data pe secunda).

Pulsurile intoarse de senzorii ultrasonici vor activa o intrerupere de tip PCINT unde verific de la ce senzor vine pulsul si in ce stadiu e (rising edge sau falling edge). In functie de acestea, modific variabilele in care sunt retinute latimile pulsurilor.

In intreruperea pentru seriala am nevoie sa verific doar cate un singur caracter (deci nu este nevoie de un buffer mai mare de un byte). In cazul in care gasesc caracterele 0 sau 1 (cerere pentru datele device-ului 0 sau 1 - primul sau al doilea senzor), voi modifica un flag prin care voi anunta acest lucru. Trimiterea efectiva a datelor are loc in bucla principala pentru a evita un timp prea mare petrecut in intrerupere.

In anumite zone ale codului (in special in functiile care folosesc variabile modificate de ISR) trebuie folosite sectiuni atomice → ATOMIC_BLOCK. In acest fel avem garantia ca datele din acele variabile nu se vor corupe.

La apasarea butonului de pe placa, utilizatorul poate sa aleaga datele carui senzor ultrasonic sunt afisate pe ecran.

Modulul Wi-Fi ii va cere placii de baza distantele masurate de senzori o data pe secunda. Acest lucru este realizat astfel: se curata buffer-ul de primire, se trimite caracterul dorit catre placa de baza (0 sau 1) apoi se asteapta date de la placa. In cazul in care se corup date, pe pagina web va fi afisat: “Missing data, please wait!”. Pagina web este actualizata automat astfel incat utilizatorului sa ii fie cat mai simplu sa lucreze cu acest sistem. ESP8266 are si un sistem de fisiere integrat in care am stocat fisierele paginii web (HTML si imaginea).

Rezultate Obţinute

Ecranul cu datele primite de la primul senzor - este desenata cu rosu portiunea ocupata si cu verde cea libera.

Vedere de ansamblu a placii de baza si a celorlalte module montate pe breadboard.

Unul din senzorii ultrasonici prins de marginea unui recipient.

Pagina web afisata prin intermediul serverului web din modului Wi-Fi.

Am reusit sa duc proiectul la bun sfarsit cu toate ca exista unuele probleme ce pot fi remediate destul de usor:

  • Datele de pe seriala se corup destul de usor din cauza legaturilor slabe de pe breadboard → se poate inlocui breadboard-ul cu o placa de test ce va avea legaturile lipite de ea.
  • Modulele Wi-Fi ESP8266 sunt de proasta calitate. Din 3 module cumparate, unul nu poate fi programat (probleme cu memoria interna?), unul pierde foarte multe data de pe seriala (aproape pe toate) iar ultimul arunca exceptii in diferite locuri ale codului si se reporneste (este posibil sa fie o problema de alimentare).

In rest, sistemul este capabil sa masoare cu exactitate distanta de la senzor pana la lichidul/obiectele dintr-un recipient. Astfel, ii poate spune utilizatorului cat de mult spatiu mai este in acel recipient prin intermediul ecranului sau, direct, pe pagina web.

Concluzii

Prin intermediul acestui proiect am invatat cum sa creez o schema electrica si sa rezolv diferite probleme hardware/software intalnite pe parcurs.

Dar cel mai importat lucru este ca am pus bazele unui proiect IoT pe care as vrea sa il continui in viitor.

Download

Jurnal

  1. Cumpararea componentelor necesare.
  2. Realizarea softului pentru a controla un senzor ultrasonic cu placa de baza.
  3. Modificarea softului pentru a comunica prin seriala cu modulul Wi-Fi.
  4. Realizarea softului modulului Wi-Fi si a paginii web care este afisata utilizatorului.
  5. Conectarea celor doua modulului Wi-Fi si a placii de baza prin intermediul unui level-shitfer.
  6. Modificarea codului de pe placa de baza pentru a adauga biblioteca necesara LCD-ului.
  7. Adaugarea celui de-al doilea senzor ultrasonic.
  8. Debug module Wi-Fi.

Bibliografie/Resurse

pm/prj2019/dghilinta/is-it-full.txt · Last modified: 2021/04/14 17:07 (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