PREZENTARE IDEE
Ideea a venit de la un interes personal petru levitația bazată pe ultrasunete. Astfel am decis că proiectul la PM este ocazia perfectă pentru satisfacerea acestei curiozități.
Din cauza puterii mici, levitatorul va fi limitat la biluțe de polistiren sau poate o mica picătură de apă (dar această parte rămâne sub semnul întrebării deoarece densitatea obiectului influențează foarte mult intensitatea undei necesară pentru a putea levita).
SCOP ȘI UTILIZARE
La o primă vedere proiectul nu are o utilitate practică și de aceea am decis să construiesc un obiect cu scop decorativ ce să înblobeze drept componentă principală levitatorul.
Deoarece perturbațiile din aer pot influența echilibrul levitatorului, acesta trebuie ținut într-un loc mai rar accesat, ceea ce m-a condus la ideea implementării unui ceas ornamental. Astfel levitatorul va reprezenta elemental de design modern și doresc utilizarea unui strip de led-uri adresabil pentru un joc de lumini asupra obiectului levitat.
Ceasul va fi implementat prin cod, iar ora va putea fi setată, și va fi afișat pe un ecran lcd 16×2.
SCHEMA BLOC
Mai jos este prezentată schema bloc a sistemului în care sunt prezentate modul în care diferitele componente vor interacționa.
SCHEMA ELECTRICĂ
TESTE HARDWARE
Intrucat emițătoarele de ultrasunete desprinse din senzorii de distanță erau mai greu de testat am realizat un montaj de test pentru levitator pentru a fi sigură de funcționalitatea acestora. Din acest test am realizat și următoarele observații:
Notiuni utilizate:
OBSEVATII:
1) Ceasul a fost implementat doar prin logica interna, fara a folosi modul RTC separat (din motive de timp, buget si disponibilitate), ceea ce inseamna ca ceasul trebuie setat la fiecare repornire.
2) Contorizarea secundelor se realizeaza prin atribuirea functiei loop() un timp de executie de aproximativ o secunda. Acest lucru s-a realizat prin functia millis()
3) Pentru a avea un timp de raspuns relativ nesesizabil de la butoane, am decis spargerea buclei loop() in 5 iteratii a cate 200ms. Din testarea manuala timpul de raspuns pare destul de rapid incat sa nu fie deranjant. (tinand cont si de scopul butoanelor - setarea orei si schimbarea culorilor)
for (int i = 0; i < 5; i++) { while ((now - last_time) < 200) // Delay 200ms now = millis(); last_time=now; // Prepare for next loop // logic here... }
Codul sursa poate fi gasit aici. (link Github)
In primul rand, proiectul este functional, dar mai am de lucru la partea de aspect pentru prezentare.
Realizand mai multe teste pentru levitator am observat urmatoarele:
Tinand cont ca aspectul principal al proiectului (si punctul meu central de interes) era levitatorul, nu pot spune ca am acordat la fel de multa atentie celorlalte doua componente, dar mentionez ca utilizarea led-urilor adresabile este amuzanta si iti permite realizarea unor jocuri de lumini interesante. Desi nu am implementat in proiect in mod special jocuri de lumini, perioada de testare/invatare a utilizarii acestor tipuri de led-uri a fost destul de captivanta.
Tot legat de acest aspect doresc sa mentionez o posibila problema mai greu de depistat pentru care am pierdut foarte mult timp. Alimentarea pentru led-uri a fost o baterie externa de 9V, intrucat specificatiile mentionau ca un led consuma ~50mA. Observatia realizata pe baza unei experiente neplacute este ca atunci cand bateria incepe sa se descarce sub un anume nivel ledurile se comporta ciudat. Intuitia mi-ar fi spus ca la descarcarea bateriei ar lumina mai putin intens. In realitate ledurile se aprindeau random doar cateva din cele care ar fi tb sa se aprinda. In contextul in care aveam un buton de control al culorilor comenzile erau luate din cand in cand, iar transmiterea lor era tot ciudata, se putea intampla ca unele leduri sa vada modificarea si altele nu.
In ce a constat:
PROBLEME INTAMPINATE:
Gallery: (click photo for enlarging)
In primul rand mentionez ca au fost aduse cateva modificari design-ului hardware din diferite motive:
1. Am renuntat la butonul pentru controlul levitatorului (nu influenteaza complexitatea fiind similar cu celelalte butoane)
2. Butonul pentru led-uri nu le stinge, ci este utilizat pentru schimbarea culorilor (Mi s-a parut o utilizare mai buna si interesanta)
3. In conceptul initial pentru forma finala elementele levitatorului trebuiau sa fie in aceiasi cutie cu led-urile. In urma testelor si observatiilor facute relativ la functionalitatea acestora am decis sa las modulul levitatorului pe stativul de proba si exterior celorlalte componente pentru o experienta mai buna de utilizare la demo.
Overall:
A fost un proiect destul de interesant, insa perioada de desfasurare a fost foarte aglomerata si timpul de implementare relativ restrans, pierzand cateva nopti de somn.
Ma bucur ca a mers din prima dupa introducerea in cutie. Desi testasem elementele inainte de asamblarea finala aveam emotii vizavi de functionare, mai ales ca anumite componente ar fi fost greu de mutat/schimbat dupa asamblare.
Final look:
L-am denumit AiHao, inseamna hobby, motivele au fost ca imi place sonoritatea, cum arata caracterele si lipsa de o inspiratie mai buna la momentul finalizarii (ora 1 am inainte de PM fair).
Arhiva ce contine codul sursa:
chiper_ic_335cb_pm.zip
Mai jos este o arhiva cu cateva filmulete cu levitatorul si functionarea finala a componentelor. DISCLAIMER: Se aude un sunet relativ neplacut pe fundal, este din cauza ca microfonul de la telefon prinde din ultrasunetele de la levitator.
05/05/2023:
Achiziționare componente hardware
07/05/2023:
Finalizare etapa 1 - documentație
15/05/2023:
Testare emițătoare - realizare montaj de probă pentru levitator - it worked (^▽^)
21/05/2023:
Finalizare etapa 2 - hardware (schema + teste)
26/05/2023:
Implementat controlul led-urile
27/05/2023:
Implementat functionalitatea de ceas + work with lcd
28/05/2023:
Completat pagina de wiki cu etapa de soft + rezultate/concluzii
29/05/2023:
Finalizat implementarea fizica
30/05/2023:
Final update for the wiki
Export to PDF
https://www.youtube.com/watch?v=WZpdGN6YTdY
https://www.heise.de/ratgeber/Einfacher-Ultraschall-Levitationsapparat-4022505.html
https://www.youtube.com/watch?v=FUviBs3flvo&t=393s
https://www.youtube.com/watch?v=-E7zlQEk5MA
https://randomnerdtutorials.com/guide-for-ws2812b-addressable-rgb-led-strip-with-arduino/
https://www.alldatasheet.com/datasheet-pdf/pdf/22440/STMICROELECTRONICS/L298N.html