Disco Lamp
Autor
Introducere
Acest proiect urmarește crearea unei “lampi” formate dintr-o serie de 2 leduri care vor lumina in pattern-uri diferite in functie de selectia utilizatorului remote, printr-un site hostat de catre arduino in reteaua locala sau prin comutarea starii ledurilor prin intermediul butoanelor fizice.
Descriere generală
Schema bloc:
Funcționalitate
Placuta arduino joaca rolul unui web server care hosteaza in reteaua locala un website de unde pot selecta ce pattern uri de culori doresc sa afisezi pe cele 2 leduri ale circuitului. De asemenea ledurile pot sa fie schimbate si din cele 2 butoane ale circutului, comutand intre 2 moduri de lumin hardcodate.
Hardware Design
Listă de piese
Arduino Uno
2 LED-uri
2 butoane
Ethernet Shield
Fire
Breadboard
3 Rezistente 1k
o hartie
Schema circuit - EAGLE
Ca o nota de umor, in cadrul circuitului am folosit o bucata de hartie care nu apare in schema pentru ca ethernet shield-ul avea pini de conectare mult prea scurti iar placuta arduino se atingea de cea ethernet si faceau scurt. Din fericire am inginerit o solutie!
Software Design
Medii de dezvoltare folosite
Arduino IDE - pentru codul Arduino
Draw.io - pentru schema bloc
EAGLE - pentru schema circuitului
192.168.0.102 - IP-ul la care este hostata pagina web
Biblioteci
Descrierea Codului
Am initializat pinii pentru fiecare led si pentru butoane, led1 are pinii 9, 8, 7 iar led2 6, 5, 4, butoanele fiind pe pinii 2 si 3. Pinii 10, 11 si 12 sunt ocupati de catre ethernet shield. De asemenea am variabilele buttonState1 si buttonState2 ce tin minte starile butoanelor, originalState folosit pentru a tine minte starea precedenta a ledurilor ca sa schimb modurile definite pe butoane iar buttonPressed tine minte ce buton a fost apasat ultima data.
Functii
blink1 - functie utilizata pentru a comuta pe modul de pe primul buton, culorile propriu zise sunt setate in functia loop
blink2 - functie utilizata pentru a comuta pe modul de pe al 2-lea buton, culorile propriu zise sunt setate in functia loop
loop - in cazul in care au fost apasate vreunele dintre cele 2 butoane, ledurile sunt comutate pe diferite culori in functie de valoarea pe care variabila
buttonPressed o reprezinta. Continuam prin a crea un ethernetClient care sa reprezinte pagina web, unde scriem pe rand string-uri ce reprezinta content
HTML cat timp clientul este disponibil. Pentru a citi valorile date de catre utilizator in cadrul webpage-ului folosesc variabila
readString ce preia toate datele caractere transmise de client catre server, urmand sa citesc valoarea setata de catre utilizator. Pentru a face diferenta dintre cele 2 led-uri ma folosesc de indicele unde apare setarea aleasa in interiorul string-ului
readString, fiind date putine de citit, setarile pentru led-ul 1 vor incepe mereu de la pozitia 10 iar cele pentru led-ul 2 de la pozitia 15.
Observatii
Proiectarea a fost foarte interesanta, procesul de a crea un webserver local a fsot simplu la prima vedere insa din cauza nevoii de a utiliza string-uri pentru a scrie content-ul fiecarui client duce la o crestere considerabila a dificultatii in cazul in care doream sa creez un site mai complex.
O alta problema ar fi memoria limitata, care ajunge sa fie destul de usor consumanta daca doream sa introduc mai multe linii de content in interiorul site-ului, limitand considerabil ce functii ar putea avea pagina mea.
Un ultim aspect dificil este trimiterea datelor inapoi la server, metoda aleasa de mine de a citi fiecare caracter primit de la client este o metoda foarte ineficienta in cazul in care am un proiect mai complex, sau daca as dori sa primesc comenzi care nu sunt deja prestabilite.
Rezultate Obţinute
Concluzii
Ca si experienta a fost un proiect fun care prin niste modificari in cadrul codului, ceva memorie in plus si posibile modificari ale circuitului sa poate fi extins la ceva mult mai utilizabil.
Download
Jurnal
24 Aprilie : alegerea temei proiectului
27 Aprilie : Discutie cu laborantul
15 Mai : Achizitionare componente
26 Mai : Schema electrica EAGLE
2 Iunie: Finalizare proiect + finalizare pagina wiki.
Bibliografie/Resurse