22 apr. 2009

Birds

Vrabie (Passer domesticus)















Graur (Sturnus vulgaris)



9 apr. 2009

Minitehnicus

Voi incepe un proiect pe cat de ambitios pe atat de sortit succesului ... sau esecului, dupa caz.
Este vorba de controlul motoarelor pas cu pas cu aplicatii in: autofocus cu telescopul, autofocus cu aparate DSLR conectate la telescop si in final controlul automat al pozitionarii telecopului pentru urmarirea unui obiect.
Ideea proiectului este urmatoarea: sa reusesc sa controlez un motor pas cu pas din PC folosind pentru inceput portul paralel (e mai simplu de implementat partea software si hardware). Prin control inteleg controlul sensului rotatiei si/sau a vitezei de rotatie.

Aplicatiile imediate la care ma gandesc sa folosesc sistemul imaginat mai sus sunt:
1. focusul automat folosind un Webcam conectat la telescop
2. focusul automat folosind un aparat foto DSLR conectat la telescop
3. controlul miscarii telescopului folosind oluneta separata de urmarire a unui obiect in miscare

Odata depasita faza 1 (controlul motorului) cred ca cele trei aplicatii propuse sunt perfect realizabile...evident in masura in care teoria se aplica fara probleme in practica. Insa, tinand cont ca in teorie teoria si practica sunt acelasi lucru dar in practica nu...nu ramane decat sa incerc si sa vad rezultatele.

Acestea fiind zise, imi iau avant si va propun sa urmarim in continuare curgerea firului epic al povestii.

PS: orice opinie, idee, critica e bine venita.


Day -1
07/04/2009

La inceput a fost ideea...apoi cuvantul: ce ar fi sa fac un device care sa imi permita autofocus folosind webcamul conectat la telescop. Adica daca as gasi o metoda prin care sa corectez focusul (focuserul telescopului) folosind PC-ul atunci restul ar fi doar istorie.

Dupa aceea au venit si alte idei: ce ar fi daca as putea sa fac un device care sa permita autofocus cand am un DSLR conectat la un telescop...Aici problema e mai chinchi...

...Si alte idei: ce ar fi daca as putea sa urmaresc obiecte miscatoare cu telescopul.

Probabil va intrebati la ce sunt utile toate astea: un prim exemplu aici...


Day 1
08/04/2009

Pentru inceput am pus mana pe carte si cartea in raft si am dat un simplu search. Si am gasit urmatoarele:
- un soft simplu (dar suficient) de controlat portul paralel: ParallelPortInterfacing.zip respectiv Controlling LEDs with Parallel Port
- ceva detalii: Parallel Port Programming respectiv Parallel port

Trecand peste micile probleme cu proiectul in Visual Studio 2003 am reusit sa il rulez "pe uscat", adica fara vreun led sau device conectat pe portul paralel. Pare ok.


Day 2
09/04/2009

Revenind dupa o binemeritata perioada de odihna tinand cont de munca istovitoare din ziua 1, sunt in punctul de a testa functionalitatea programelului de control a iesirilor de pe portul paralel. Tinand cont ca pinii interesanti sunt cei 8 de iesire, si care sunt si pinii ce pot fi controlati de soft, procedura de urmat este urmatoarea: testarea cu voltmetrul/ampermetrul a functionalitatii.
Se ia un cablu de imprimanta, se identifica cei 8 pini (D0 - D7) si se masoara tensiunea cand bitul respectiv este setat pe 0 binar respectiv pe 1 binar. Teoretic, tensiunea dintre D (D0 - D7) si masa G (G0 - G7) ar trebui sa fie 0.0V cand bitul e setat pe 0 binar respectiv 5.0V cand bitul e setat pe 1 binar. In plus am sa masor si curentul pentru a vedea cam ce putere scoate portul pe cei 8 biti de control. Ma gandesc sa alimentez motorul direct din pini, fara a folosi alt circuit...asta evident daca am suficienta putere. Daca nu, atunci voi folosi cei 8 pini pentru controlul unor relee care vor fi capabile sa alimenteze la o putere suficienta motorul/motoarele.

Incercarea s-a soldat cu ...cu ... (suspans)... cu esec. Dar revizuind putin schema pinilor si vazand in oglinda schema de aici, tabelul 1.0, am reusit sa masor 3.25V cand bitul e setat pe 1 respectiv 0.00V cand bitul e setat pe 0. Am masurat doar bit-ul D0, probabil ceilalti se comporta similar...pana la proba contrarie. Poate ar fi bine sa fac orga de 8 leduri ca sa ii vad dansand pe toti.

Aceasta prima ipoteza de lucru absolut necesara dar nu si suficienta fiind depasita nu ramane decat sa visez frumos in continuare...pana la urmatorul obstacol.


Day 3
10/04/2009

Dupa o discutie scurta aici am decis sa iau azi urmatoarele:
- Driver CNC pentru motor pas cu pas
- Motor pas cu pas 1,25Nm si ax dublu
Multumesc lui Vasile pentru sfaturi, schema de alimentare si nu in ultimul rand pentru timpul acordat.





Am ales cele de mai sus pe baza urmatoarelor considerente:
- alimentare la max. 12V ca sa am independenta si mobilitate (vreau sa leg totul la bateria auto si sa nu depind de 220V)
- sa nu fie prea scump, in cazul ca dau gres pierderea sa nu fie prea mare
- desi aveam motoare am preferat sa iau ansamblu complet pentru a-l putea verifica la achizitie, eliminand astfel eventualele probleme aparute la legarea controllerului cu motoarele pe care deja le am. Fiind prea multe necunoscute la mijloc, iar terenul fiind unul virgin pentru mine, am preferat sa iau un motor in plus pentru a elimina din aceste necunoscute (cum ar fi functionarea device-ului, a motorului sau a conexiunii dintre ele). Astfel ca acum pot pleca de la premiza ca hardware-ul merge.

Am preferat sa nu pierd prea mult timp cu discutii pentru ca vroiam sa am timp in weekend sa ma joc cu noile jucarii. Si asa ajungem la ziua nr. 4, sambata.


Day 4
11/04/2009

Toata ziua am petrecut-o facand pregatirile necesare:
- elaborarea alimentarii (schema e aici)
- pregatirea firelor, mufelor, bateriilor...

Am dorit ca alimentarea sa fie destul de simpla si construita in jurul unui acumulator auto de 12V si suficienti Amperi. Oricum nu am nevoie de prea multi, cam maxim 2A pentru fiecare combinatie controller+motor.
Am "desenat" schema de coborare a tensiunii de la 12V la 5V necesara controllerului. Motorul l-am luat astfel incat sa mearga direct la 12V iar intreg ansamblul hardware e destul de simplu pe partea de alimentare:
- 12V (direct din baterie) pentru motor
- 5V (prin tranzistor( pentru alimentarea controllerului

Am facut "cablajul", am lipit ce era de lipit, am testat, totul e OK: 4.95V la iesire. Asa a luat nastere primul meu "circuit" facut vreodata...



Am scos o mufa de 40 pini de la imprimanta, am acoperit pinii in plus pentru a evita problemele nedorite, am conectat-o prin intermediul cablului de imprimanta la portul paralel, am identificat pinii D0-D7 si masa G0-G7 la iesirea din mufa.



And now we wait...for the software.


Day 5
15/04/2009

Dupa cateva zile de incercari si teste cu softul de trimis biti pe portul paralel am reusit sa integrez toate componentele: motor, controller, alimentare, fire, mufe, soft si am trezit monstrul la viata:



Imaginea nu-i foarte buna (e si ea un prototip) insa se invarte.
Mai clara e interfata aplicatiei de testare a controllerului:


Deocamdata face o singura operatie: miscarea cu viteza si acceleratie reglabila intr-un singur sens. Urmeaza sa controlez si sensul si oprirea/pornirea.

Si din momentul acesta apar alte probleme: am constatat ca, desi parea simplu la inceput, nu-i chiar asa. Problema se complica in momentul cand doresc sa controlez fin motorul (impulsuri scurte). Am avut neplacuta surpriza sa constat ca nu prea pot controla timpi foarte scurti (milisecunde) necesari unei viteze mai mari a motorului. Motivul: daca sistemul este uniprocesor, thread-ul care genereaza impulsul de step este pus in executie respectiv sleep de catre SO (Windows in cazul asta) in cuante de cca. 16 milisecunde...ori in timpul cand thread-ul este sleep trebuie totusi sa generez impulsuri. Astfel ca nu pot controla impulsuri cu perioada de cateva milisecunde deci viteze de maxim 1/3 rotatii pe secunda (1.8 grade per pas X 62 pasi/sec = 112 grade/sec).
Daca insa am un multicore, unul din nuclee poate fi ocupat 100% de threadul de control...astfel ca pot genera si impulsuri de cca. 2 milisecunde. E mai bine dar tinta mea era de cca. 1 milisecunda sau chiar mai jos.
In plus, daca ma las la mana Windowsului sa imi gestioneze el procesele si threadurile critice...am surpriza sa am hopuri (variatii de viteza) ceea ce se vor traduce in vibratii nedorite mai ales cand voi folosi motorul pentru controlul pozitiei telescopului. Pentru focus nu-i chiar asa de critic.

Probabil abordarea cu threaduri Windows nu e prea fericita asa ca ar trebuie sa apelez la artileria grea: asembler, MOV, ADD, MUL, IRQ, si alte fineturi d'astea.

Deocamdata o sa trec la urmatorul pas: cuplarea motorului la focuser si un prim algoritm de autofocus cu Webcam-ul.


Day 6
26/04/2009

Dupa cateva zile de teste cu aplicatia de autofocus si de autotracking, azi am reusit sa integrez ambele functii in aceeasi aplicatie prototip. Deocamdata merge pe uscat: am o imagine pe care o filmez cu webcam-ul si ii determin punctul de focus precum si obiectul principal din scena (in cazul de fata un avion):



Mai jos un demo cu aplicatia in actiune: histogramele YUV si cele de detectie a obiectului (pt. autotracking pe baza de histograma pe canalul de luminanta), histogramele de detaliu (pt. algoritmul de AF pe baza de detectie de contrast).



Urmeaza sa integrez si partea de comanda a motoarelor, sa le asociez cu algoritmii de detectie de miscare si focus...si gata.

5 apr. 2009

From the sky above

Some images taken during my flight...