Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul are în vedere realizarea unei conexiuni seriale prin aer, prin intermediul unui laser. Ideea mi-a venit când într-o seară în cămin am fost asaltaţi noaptea cu lasere (puternice) de către studenţi din căminul de vis-a-vis care nu aveau ceva mai bun de făcut cu viaţa lor în timpul unei pene de curent, gen să urle, să bată în oale drept protest, sau să arunce pocnitori. Deşi enervat de laser, îi văzusem un potenţial: cum ar fi dacă prin acea rază laser s-ar putea transmite date? În felul acesta, o persoană ar putea primi internet de la un amic din blocul de vis-a-vis, fără să mai plătească internetul.
Proiectul constă în realizarea unui bridge laser (1 transmiţător şi un receptor), care să fie capabil să transporte cadre în ambele sensuri între două calculatoare. Ideal ar fi să se poată realiza o conexiune ssh peste această metodă de transport.
Componentă | Cantitate | Model |
---|---|---|
Placa de bază | 2 | |
Laser | 2 | <5mW> |
Fotodiodă rapidă | 2 | BPW-34 |
LED-uri | 10 | |
Modul USB-usart | 2 | CP2102 |
Fire | 2m | <1mm> |
Bandă adezivă | 1 buc | |
Suport (lemn) | 1 |
Schema electrică:
Corecție la schemă: rezistența de la laser e de 100 ohmni, nu de 5k.
În schema electrică nu au fost figurate LED-urile de status. Ele sunt mai mult cu scop de debugging.
Deși pare complicată idea proiectului, ea este destul de simplă: Prin modulul USB-UART vor fi trimise date. Acestea vin în grupări de 8 biți o dată. Tot ce trebuie placa să facă este să ia aceste date, și să le trimită prin laser. Pentru fiecare octet primit prin uart, 8 tranziții a stării laserului vor avea loc. Capătul opus va trebui să facă același lucru, doar în sens invers. De asemenea, ambele capete trebuie să poată să trimită și să primească în același timp, de aceea cele 2 acțiuni vor fi intercalate.
Acești octeți vor circula prin laser constant, fie că reprezintă date venite prin UART sau nu. Pentru a nu avea întreruperi în execuția programului, se vor dezactiva toate întreruperile.
O problemă care trebuie rezolvată înainte de transmisie este sincronizarea: Trebuie să fiu sigur că eșantionarea nu are loc pe o tranziție, ceea ce ar însemna că se pierd datele. De aceea, următorul algoritm va fi implementat:
Nu este cel mai optim algoritm, dar ar trebui să meargă.
Luminozitatea va fi măsurată folosind ADC. Diodele sunt conectate într-un mod numit “Reverse-Biasing a Photodiode”. Practic, voi primi pe pinul PA0 o tensiune de la 0-5V. Tensiunea asta va fi determinată de intensitatea luminii. Aceasta e măsurată în lumeni. Există o aplicație de android numită “sensors multitool” care permite măsurarea în timp real a intensității luminii (în lux). Este foarte folositoare pentru a face graficele alea din datasheet mai ușor de înțeles. 1000 lux ar fi lumina (naturală) dintr-un birou. ~200 lux ar fi flash-ul de la telefon. Lumina direct de la soare ajunge în ordinul zecilor de mii de lux. Laserul de 5mW pare să producă peste câteva mii de lux. În configurația mea, laserul va face ADC-ul să citească valoarea maximă.
Mediul meu de dezvoltare este vim + make :D. Drept biblioteci, folosesc codul din laborator :D.
Am reușit să stabilesc o conexiune full-duplex între cele 2 plăci. Am conectat ambele plăci la același laptop.
Am ales o altă metodă de sincronizare în final: când începe placa, țin laserul activ și aștept laser pe fotodiodă. când celălalt capăt devine activ, mai aștept câteva milisecunde după care trec în starea de transmisie de date. E mult mai simplu decât ce am gândit inițial, doar că nu verifică cât de bine sunt plasate laserele.
Arhivă: proiectpm-lifi.zip
Soft-ul a fost dezvoltat în linux.
Optimus digital și Conex electronic: chair dacă pe site zice că au comanda încă în procesare, te poți duce să iei comanda a 2-a zi. Eu am așteptat 1 săptămână și 1/2 până să dau telefon.
E foarte important cum pui fotodioda. Eu am pus-o invers, deși credeam că o așezasem bine…
Nu folosiți ledcon cu vârf daltă. E greu de lipit și rămâne mult fludor pe pini.
Un lucru foarte pelicular: Aparent, plastilina este conductoare (cel puțin cea umedă). Am dat de chestia asta după ce mi-am fixat plăcuțele de suportul de lemn folosind un strat aplatizat de plastilină între placă și lemn (pentru a nu aluneca). Suna foarte bine ideea, până când am încercat să uploadez pe plăci softul și am constatat că nu mai mergeau. A fost destul de horror momentul pentru mine. Am dat plăcile jos și le-am curățat după cu probele de la un multimetru pe dedesubt. Aparent rămăsese straturi de plastilină întărită. Spre fericirea mea, par să funcționeze după ce le-am curățat, deși practic le-am scurcircuitat în zona alimentării. Slavă domnului.