Hubrus Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 Salutare,Am de facut o masina umblareatza care sa ia singura decizii in functie de ce vede prin intermediul unei camere video (format NTSC).Sunt incepator si acum sunt in faza de documentare.Pentru inceput m-am blocat la urmatoarea idee: cum fac sa procesez un sir de pixeli?Nu reusesc sa imi dau seama cum fac sa bag o linie intreaga de pixeli in uC, dupa care sa procesez acea linie. As putea sa procesez semnalul si fara sa-l memorez undeva ... da` tot mi-e neclar cum ma uit la intregul sir de pixeli dupa care sa iau niste decizii in functie de ce am vazut?Luminati-ma voi, ca eu am intrat intr-o mare ceata...Va multumesc!Cu stima,Vlad Link spre comentariu
nana Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 Imi place ideea dar problema care ai puso tu trece la un nivvel foarte avansat de cunostinte si financiar. Si eu m-am cinuit sa ma documentez pe aceasta tema si am ajuns la urmatoarea concluzie. 1 iti recomand procesoare atmel seria AP700x care au inclus un pixeli coprocesor si asemenea au destul ram si putere de prelucrare, 2 sunt pe 32 de biti. Problema e ca suporta doar interfata jtag de programare.2 cu un procesor risc de 8 biti la cate memorie au cam greu sa prelucrezi o imagine mai ales daca e si video(de rezolutie mare) trebe sa o stochezi in ram care e cam putin si devine inghesuita.3 lucru cu pixeli se fac pe matrici si vectori daca vrei sa faci prelucrarea lor. Link spre comentariu
Hubrus Postat Ianuarie 15, 2010 Autor Partajează Postat Ianuarie 15, 2010 Deci eu trebuie sa fac ca masina sa se plimbe intre doua linii albe trasate pe un fond albastru inchis. Semnalul care vine de la camera video va trece printr-un comparator ce imi va crea un semnal format doar din 1 si 0, unde 1 este alb si 0 este fundalul. Eu din toata imaginea vreau sa imi iau doar doua linii, care sa le procesez si sa iau decizii cum sa virez.Semnalul video este cuprins intre 0.2V si 1V .... in momentul in care semnalul cade in 0V, inseamna ca se trece la o noua linie. Deci practic eu o sa pot lua doar o linie de pixeli, da` tot mi-e neclar cum o bag in uC.Provocarea este ca trebuie sa folosesc un ATtiny24A Link spre comentariu
bogdan_ Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 pai tu trebuie sa faci un line follower...sau in cazult tau line avoider. Sigur nu se face cu o camera video, ci doar cu niste senzori simplii care urmaresc ce e pe jos si indreapta masina in directie opusa cand ajunge la o linie.Googaleaza "line follower robot" si vei gasi idei multe. Link spre comentariu
nana Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 Nu ai cum sa faci ce vrei tu asa, deoarece trebe sa ai toata imaginea sa vezi daca cele 2 lini sunt in matricea respectiva. tu pe imagine de exemplu cele 2 lini o sa le vezi ca pe niste diagonale formand un V, nu prea ai cum sa faci altfel. Cel mai simplu e cu niste senzori foto(fotodiode sau fototranzistori) si sa vezi daca esti intre cele 2 lini sau nu. de exemplu cand 1 senzor detecteaza ca e pe linia albastra dai comanda sa o ia in partea cealalta si viceversa. Asa ceva poti face cu un risc de 8 biti insa ce vrei tu sa faci cu camera sigur nu merge pe un attiny poate daca era un procesor din seria mega. atunci mai ziceam dar pe tiny iti dau 80% sa nu reusesti si daca mai zici ca esti si incepator se duc la 99%. acu nu vreau sa iti tai elanu dar prelucrarea video necesita cunostinte destul de avansate si algoritmi destul de complicati si consumatori de resurse. Link spre comentariu
Hubrus Postat Ianuarie 15, 2010 Autor Partajează Postat Ianuarie 15, 2010 Lasati in grija mea modul in care voi face rost de o linie de pixeli, fara a lua imaginea intreaga Doar lamuriti-ma cum bag un semnal digital de 200 de biti, intr-un uC, pe un singur pin, eventual 4. P.S. Nu imi trebuiesc alternative la modul in care poate fi implementat proiectu, pentru ca trebuie sa folosesc obligatoriu camera si obligatoriu ATtiny24A. Ideea e sa pastrezi totul simplu si sa fi eficient... sa arati ca poti face ceva aparent complicat cu costuri mici. Promit ca o sa ma incadrez in procentul de 1% reusita dar raspundeti-mi concret la intrebari :DVa multumesc!Cu stima,Vlad Link spre comentariu
bogdan_ Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 Atunci inseamna ca trebuie sa te uiti la semnalul NTSC ... si sa analizezi fiecare linie, sa te sincronizezi cu ea etc.Attiny24 are ADC, dar este muuuuult prea lent, atat de lent ca ar putea sa ia doar un esantion pentru fiecare linie, sau pe undeva pe acolo. Deci, daca vrei sa folosesti camera, ia ceva mai puternic. Sau poti face brutal: te sincronizezi pe inceputul liniei cumva cu un comparator, vezi cand apare dunga aia cu un alt comparator, masori timpul dintre ele ca sa iti dai seama de pozitie. Iar intrebarea ta are un singur raspuns banal: pe rand, adica serial. Link spre comentariu
Hubrus Postat Ianuarie 15, 2010 Autor Partajează Postat Ianuarie 15, 2010 Pai brutal fac treaba, exact cum am zis si mai sus. Din tot semnalul meu o sa trimit catre uC, doar o linie de 0 si 1, lunga de 250 biti (sau ce latime are o linie in standard NTSC). Cu un comparator fac semnalul video in alb/negru si tot cu un comparator stiu cand am inceput de linie si trimit catre uC.Nu reusesc sa imi dau seama cum merge treaba. Adik ok, la front de ceas, mie imi este luat bitul si stocat. Da` programu cand se ruleaza? Nu e si ala pe timpi/fronturi de ceas? Incerc sa-mi fac o imagine de ansamblu cu ce se intampla in uC mai exact si in ce timpi.... Link spre comentariu
bogdan_ Postat Ianuarie 15, 2010 Partajează Postat Ianuarie 15, 2010 pai sa zicem ca faci asa: comparatorul care iti da inceputul de linie il legi la o linie de intrerupere, INTx si faci din soft sa raspunda la intrerupere pe linia aia. Cand ai primit intreruperea dai drumul la un timer care sa iti de apoi 200 si cate vrei tu de intreruperi la un interval necesar, si la fiecare intrerupere tu vezi ce bit ai pe pinul la care e legat comparatorul ala de la culoare. Sau mai simplu poti face fara sa stochezi: cand ai primit intreruperea de inceput de linie poti sa dai drumul la un timer care iti masoara cand primesti tu un bit de 0 sa zicem pe comparatorul de luminozitate. in felul asta stii unde e pozitionata linia in cadrul tau. apoi mai astepti si cealalta linie. asta se poate face tot cu intrerupere, tot pe acelas timer eventual... Link spre comentariu
mitescu Postat Ianuarie 16, 2010 Partajează Postat Ianuarie 16, 2010 Nu prea pot sa-mi imaginez cum obtii tu 200(250) de biti pe care ii ai ... unde? Daca ai o iesire ANALOGICA (0,2-1V) si vrei sa o esantionezi in 200 de biti pe o perioada de 1/15750 s, adica timpul de linie in sistem NTSC. In aceste conditii poti adopta doua solutii, una hardware, si alta software. Oricare din aceste solutii prezuma utilizarea a doua comparatoare. Unul care detecteaza pragul de culoare (face bitii 0 sau 1) si care compara tensiunea de la iesirea ta analogica (0,2-1V) cu unh prag situat intre aceste doua valori. Este bine sa pui un semireglabil pentru a regla pragul. Un al doilea comparator va detecta pragul minim. Asa cum spui tu in acel moment se face schimbarea de linie. Astfel obtii doua semnale digitale: unul contine informatia ta (SD) si un aldoilea da "capetele" informatiei (SC). Acum pentru a esantiona SD ar trebuii sa o faci cu o viteza egala cu NrBiti x F_linie, ceea ce insemna ca frecventa de esantionare va fi 200x15750=3.15MHz. Se observa ca viteza este foarte mare. Realizare Solutia hardware este o solutie sigura dar foarte ampla. Ideea este ca sa-ti construiesti un registru cu intrare serie de 200 de biti. De exemplu se pot utiliza 25 de SN74HC595 pusi in serie. La intrarea registrului serie pui semnalul SD printr-o poarta AND (7408). La CLK de la registrul serie conectezi un oscilator cu frecventa de 3,15Mhz. Alaturat pui un bistabil (74HC74) pe intrarea caruia intra semnalul SC. Iesirea bistabilului (OS)o conectezi la a doua intrare a portii AND de mai sus si in acelasi timp pe o intrare a lui Tiny24. Va rezulta ca in momentul in care semnalul OS este in 0 logic in registru ai captura ultimilor 200 de biti, pe care poti sa ii serializezi spre MC. Solutia software presupune utilizarea resursei USI a lui Tiny24. Pentru aceasta USI trebuie configurat ca SLAVE. Langa MC tot iti trebuie un oscilator de 3,15MHz conectat pe pinul USCK a MC si un bistabil cu intrarea la fel ca inainte si iesirea (OS) pe o intrare a MC. Semanlul SD va fi conectat pe pinul DI a MC Logica programului va fi: - initializare USI ca SLAVE - intializare intrerupere USI_OVF de aici se intra intr-o bucla - se urmareste intrarea OS - cand acesta trece in 1 se activeaza intreruperile *** in intrerupere se va citi continutul USDR - se se va stoca intr-un buffer ''' aici trebuie spus ca se va pierde cate 1 bit la fiecare intrerupere - in partea principala se astepta ca OS sa cada in 0 logic si se dezactiveaza intreruprea USI_OVF - in acest moment vom avea in bufferul cei 25 de octeti pe care ii dorim si in care se afla informatia despre linia de imagine. dupa prelucrare se reia bucla pentru o noua citire Cam astea sunt metodele. Problema nu este simpla dar nici grea. Pe de alta parte nu indic sa se utilizeze o camera pentru astfel de detectoare. Cel mai simplu este sa se utilizez un CCD cu care se poate citi numai o linie si cu viteza pe care o dorim. Deci mult mai accesibil. CCD-ul poate fi luat din orice fax cu tot cu sistem optic Link spre comentariu
wingless Postat Februarie 5, 2010 Partajează Postat Februarie 5, 2010 salut poti folosi un senzor ccd liniar cum spune mitescu cu o lentila gen fiola de algocalmin Un circuit interesant este TLS 3301 http://lis.epfl.ch/contest/flying07/doc ... SL3301.pdf Gasedti multa documentatie inclusiv cum sa il interfatezi cu seriala unui AVR dezavantajmul sau avantajul depinde cum vrei sa o iei este ca ai controlul de expunere manual. Ieie un rand de 100 pixeli faci intensitatea medie a pixelilor si daca e prea sus sau daca faci o histograma si vezi ca ai multi pixeli pe 255(saturati) mai scazi timpul de integrare Bafta Link spre comentariu
nana Postat Februarie 5, 2010 Partajează Postat Februarie 5, 2010 Daca esti baiat bun iti dau o lucrare de diploma (a mea ) facut cu acest senzor interfatat pe un atmega8 face minuni.... si cu un softuletz la fel de interesant, doar ca singura problema e ca daca cresti f mult timp de integrare ti se satureaza senzorul in draci, acumuleaza mai multi fotoni expusi pe suprafata. Si creste intervalul de citire al senzorului. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum