Levitator acustic - Chiper Ioana-Cristina

Introducere

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.

Descriere generală

SCHEMA BLOC
Mai jos este prezentată schema bloc a sistemului în care sunt prezentate modul în care diferitele componente vor interacționa.

Hardware Design

LISTĂ PIESE

  • Placă de dezvoltare Compatibilă cu Arduino UNO R3 (ATmega328p + ATmega16u2)
  • Senzor ultrasonic HC-SR04 x2 (se desasambleză și se folosește doar T)
  • Modul cu driver de motoare dual L298N
  • Baterie 9V
  • Buton x4
  • Bandă LED adresabilă RGB, WS2812
  • LCD 1602 cu interfață I2C

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:

  • deși circuitul merge cu o baterie de 9V ca alimentare pentru emițătoare, este mult mai ușor cu o baterie de 20V, permițând o distanță mai mare între emițătoare și utilizarea de obiecte puțin mai mari.
  • se pot levita mai multe obiecte în același timp, dar devin instabile, uneori chiar ele însele fiind cauza destabilizării altora
  • sensibilitate destul de mare la curenți de aer sau mișcări apropiate
  • momentan ideea de a levita apă nu a reușit (sistemul este prea slab)

Software Design

  • Mediu de dezvoltare: Arduino IDE
  • Biblioteci adiționale:
    • FastLED.h
    • LiquidCrystal.h

Notiuni utilizate:

  • Timer: pentru a crea unde ultrasonice prin intermediul transmitatorilor este nevoie de un semnal oscilant de frecventa mare si intensitatea mai mare decat se poate genera prin intermediul arduino. De aceea se foloseste un semnal dreptunghiular generat de arduino pentru controlul unui voltaj mai mare prin intermediul unui modul de drivere de motoare. Timer-ul este folosit pentru a contoriza frecventa semnalului, adica momentul la care trebuie inversata valoarea tensiunii.
  • Intreruperi: Acestea sunt folosite tot in generarea semnalului despre care am vorbit mai sus. Intrucat forma acestuia este foarte importanta nu vrem sa asteptam dupa alte evenimente la alternarea tensiunii ce genereaza semnalul dreptunghiular. Astfel punem un eveniment ce declaseaza intreruperea pe baza timerului.
  • I2C: Acest protocol este folosit in comunicarea cu ecranul lcd. Din motive de resurse (numar de pini relativ mic pe arduino) am decis folosirea lcd-ului cu modul de i2c integrat.
  • Registrii: Utilizati pentru setupul timer-ului si intreruperii + setarea anumitor pini

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)

Rezultate Obţinute

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:

  • Levitatorul este functional si cu 9V ca alimentare pentru transmitatoare, insa trebuie micsorata distanta. De asemenea, montajul devine mult mai sensibil la perturbarii (de exemplu daca te aproprii de el respiratia este suficienta pentru a-l dezechilibra, desi sunt sanse sa isi revina la echilibru daca nu insisti)
  • In final am decis sa raman la alimentarea la 20V pentru ca permite sustinerea mai multor obiecte si chiar a unor bile de polistiren intregi (desi se dezechilibreaza usor)
  • Efectul de respingere in cazul in care obiectul pozitionat in campul de unde nu este intr-un nod este destul de amuzant, seamana cu efectul unui arc.
  • Destul de interesant faptul ca prin rotirea suportului la orizontala obiectele raman in levitatie (dar sunt extrem de sensibile, mult mai mult decat in cazul vertical). Acest lucru inseamna ca totusi sistemul le poate mentine, in schimb daca se incearca introducerea obiectelor in campul pozitionat orizontal sansa de reusita este aproape nula. (singura metoda a fost introducerea polistirenului in pozitia verticala si apoi rotirea suportului)
  • Introducerea transmitatoarelor intr-o structura tubulara (deschisa pe o parte) pentru asigurarea pozitiei perfect paralele dintre transmitatoare parea o idee promitatoare, insa in realitate acest lucru a dus la deformarea campului. (Nu am reusit sa imi dau seama cum, deoarece in continuare merge, desi nu la fel de bine)
  • Dupa multe incercari nereusite cu diferite setup-uri (distante, tensiuni) am concluzionat ca montajul meu nu este capabil de levitat lichide, desi acest lucru este posibil. Motivul gasit a fost limitarea echipamentului utilizat.

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.

Design

In ce a constat:

  • Gasirea unor cutii si piese
  • Lipituri (de toate felurile: cu fludor, cu lipici, cu scotch…)
  • Aranjarea firelor astfel incat sa nu fie foarte incurcate
  • Mini elemente de design: folosirea unor bile de sticla pentru a acoperi led-urile etc

PROBLEME INTAMPINATE:

  • E prea scurt firul
    • Solutie: Cat am avut am prelungit firele cu altele mama-tata,, apoi a trebuit sa le lipesc cu alte fire de cupru pe care le-am mai gasit si sa le pun capete
  • Nu se aprind led-urile
    • Cauze intampinate: a sarit unul din cabluri, s-a dezlipit o lipitura, am uitat sa alimentez arduino
  • A sarit firul din Arduino (dupa asamblarea finala)
    • Painful, l-am pus la loc cu o penseta si tot cu o penseta si banda dublu-adeziva am luat decizia de a lipi lateralul firelor de cel al mufelor mama de pe arduino
  • A sarit lipitura cu tot cu contactul de la led TT_TT
    • cea mai mare problema intampinata
    • cauze: cand am indoit cablurile ca se le bag in cutie, fiind rigide, au pus tensiune pe contacte si s-au rupt, nu doar lipitura ci si contactul
    • solutie: Unul dintre led-uri a fost abandonat, iar la altul am reusit sa lipesc pe spate contactul
    • Cea mai frustranta operatiune din cadrul proiectului
  • Nu prinde fludorul
    • Solutie: Insistat, folosit fire de cupru
  • Butoanele nu stau lipite
    • Incercat mai multe lipituri, in final solutia a fost folosirea glue gun
  • Nu pot sa apas butonul dupa ce l-am lipit
    • Plasticul era mai gros decat butonul in sine
    • Solutia este utilizarea unui betisor :)

Gallery: (click photo for enlarging)

Concluzii

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).

Download

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.

filmulete.zip

Jurnal

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

Bibliografie/Resurse

pm/prj2023/fstancu/levitator.txt · Last modified: 2023/05/30 20:48 by ioana.chiper
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