This is an old revision of the document!


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

Gallery: (click photo for enlarging)

Final look:

Concluzii

Download

Arhiva ce contine codul sursa:
chiper_ic_335cb_pm.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

Bibliografie/Resurse

pm/prj2023/fstancu/levitator.1685421561.txt.gz · Last modified: 2023/05/30 07:39 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