Licență

Da, da, am reușit (cu greu) să scap de restanțe, și acum am voie să intru în licență acum în vară. De lunea trecută lucrez aproape nonstop, deși lucrul la proiectul ăsta l-am început undeva prin februarie.

Proiectul meu este realizarea unei platforme mobile pentru dezvoltarea de roboți autonomi. Adică o bază de la care să poți pleca mai departe să îți faci robotul.

Ieri am reușit să termin asamblarea, m-am muncit destul de mult, dar a ieșit ca în planuri, cu mici variații :) O să pun poze mâine, azi n-am mai ajuns la școală că o plouat și mi-am luat vacanță.

Până acum am făcut o punte H cu relee pentru controlul motorului principal, cu care am avut o grămadă de probleme și încă nu i-am rezolvat toate hibele, și am scris un driver în Java pentru controlul robotului prin adaptorul serial 2 wireless pe care îl avem. Bine, driver-ul mai dă mici rateuri, dar sunt fixable, cred :). Planul e să scriu drivere pentru mai multe limbaje de programare, să fie așa, ca un api către robotul ăsta. A, și am mai scris driver-ul pentru LCD, în mare. Adică mai treuie aranjat un pic :).

Poze cu placa pentru puntea H, în diferite stagii de dezvoltare:

După aplicarea foliei Press and Peel
După aplicarea foliei Press and Peel
După corodare și după muuulte găuri
După corodare și după muuulte găuri
Placa completă, cu toate piesele pe ea
Placa completă, cu toate piesele pe ea
Testare :)
Testare :)

PORTC pe ATMega32

Scriu acest post pentru că e util să înveți din nopțile pierdute ale altora, ca să ai timp să-ți pierzi nopțile pe altceva, mai interesant :).

Am ajuns târziu ieri la școală, pentru că am fost să dau jos blana, și m-am hotărât să nu plec până nu fac modulul de condus motorul să meargă (o să scriu mai pe larg despre el, în mai multe posturi despre a mea viitoare licență). Evident, treaba părea simplă și a devenit tot mai groasă pe măsură ce treceau orele.

Am scăpat de câteva conexiuni greșite, mi-am dat seama ca am pus diodele de protecție de peste bobinele de la relee pe dos, totul părea ok până într-un punct. Pun un ATMega32 nou nouț în soclu, setez direct AVR Eclipseu la 1MHz ca sa nu mai resetez fuse-uri, programez, super tare, merge. Pun multimetru pe picioarele ATMega, care ar fi trebuit să tragă tot portul C pe ieșire, pe 0. Jumate din pini erau la 0. Restu, la Vcc. WTF?

Îmi dau seama un pic mai târziu că PC0 și PC1 sunt legați la conectorul meu pentru I2C, și sunte legați la Vcc cu niște pull-up-uri ca să meargă cu brick-urile NXT. Bun. Dar restul? Mai erau cel puțini 3 pini care erau strâmbi. Din care unu exact ăla pe care mi-am legat eu ieșirile pentru comanda la motor. Am mai pierdut vreo oră, două întrebându-l pe prof, căutând scurt-uri pe placă …

Am scos porțile logice, am zis ca poate fac alea ceva. Niet, no luck. Am schimbat controller-ul cu cel de la mașinuța pentru Eurobot, aceeași poveste. Într-un final, pe la 6:45 AM, deja mă ridicasem de pe scaun să merg la șaorma, mă gândesc să mă uit eu pe datasheet la ATMega să vad dacă n-au ei ceva șmecherie cu Portu C. Urmeaza partea cu informație utilă din acest post:

Se pare că ATMega32 (și presupun că și alte ATMega-uri) au anumite PORT-uri din portul C care nu pot fi utilizate pentru I/O în momentul în care este activat JTAG-ul pe controller. Este vorba despre pinii PC5, PC4, PC3 și PC2. Soluția, evident, este să se dezactiveze JTAG-ul. Asta se poate face prin de-programarea siguranței (fuse) JTAGEN de pe ATMega. Eu am folosit AVRDude (pentru Linux), pe Windows foloseam PonyProg. Pentru AVRDude, ca să nu cauți referințe grămadă prin datasheet, există site-ul asta, care îți formează automat comanda pentru avrdude.

Cumpărături în București, experiențe personale

A venit vremea să ne ocupăm și de Eurobot, și pentru că anul acesta vrem un robot solid, făcut bine, avem nevoie de niște materiale de construcție mai tari ca plasticul și scotch-ul dublu adeziv (deși, sunt convins că scotch-ul va rămâne permanent în inventarul echipei noastre :) ). Pentru pereți și carcasă, am vrut inițial să folosim plexiglas, dar Dan a venit cu o idee mai bună, și anume să folosim policarbonat. Policarbonat-ul este un material special, foarte rezistent, din care sunt făcute, spre exemplu, CD-urile. Policarbonatul celular se folosește acum mai peste tot – unii îl folosesc peste poarta de fier forjat să nu vadă trecătorii în curte, alții îl folosesc la uși la baie, și în unele locuri a luat locul tablei ondulate. E un material relativ ușor, foarte rezistent și mai ușor de prelucrat decât metalul.

Există și o variantă mai rigidă de policarbonat, policarbonatul compact, care e exact ca plexiglas-ul, doar că e ceva mai rezistent. Aici, cu policarbonatul compact începe povestea mea despre o zi de cumpărături prin București. Prima firmă pe care am găsit-o care vinde așa ceva (pentru că la Brico nu este) era în Pantelimon. Ce-am zis (ce zic toți albaiulienii despre Pantelimon, sunt convins) – blocuri, băieți de cartier … Dar pentru că blocuri și băiețași am mai văzut, am luat echipa și pe la ora 12 jumate am plecat spre ceea ce noi credeam că este un depozit.

Dan se uitase în prealabil pe hartă, și cu o scurtă escală la Eroilor am luat troleu 69 spre Pantelimon. La nici 3 stații de la Eroilor se urcă vreo 10 – 15 aurolaci, care încep să se înghesuie în spatele mașinii spre față. Că se înghesuiau era o chestie, dar mirosea prin tot troleu a prelandez (nu știu daca așa miroase aurolacu ăla ce-l bagă-n ei, da era some strong shit). Ne-am dat jos (noi și tot restu lumii) undeva pe la Foișorul de Foc, toți cu expresii de-alea de genu ”ai uitat unde mergem? la ce să te aștepți la altceva?”. Am luat altceva (85, parcă) până în Baicului.

Eu vedeam Baicului așa, ca un ”hood” din filmele cu gangsta. În schimb, când am ajuns acolo, aproape imediat ne-a cuprins așa sentimentul apăsător că ceva nu este în regulă cu locul ăla. Am mers spre strada cu depozitul, am trecut peste o cale ferată, dar nu ne simțeam deloc în mijlocul unui oraș mare, și apoi, am luat-o la dreapta pe o străduță de am ajuns direct la sat. Străduța noastră se termina direct în ALTĂ cale ferată. La 1km în stânga și în dreapta se vedeau blocurile mari ,trademark Bucureși. Dar noi eram la țară: case cu acareturi de tot felul, dintre care una cu un etaj și o scară exterioară înghesuită cumva acolo, cu numele depozitului pe care îl căutam noi pe ea.

Tot locul, toată treaba era extrem de spookie. Dar aveam adresa, aveam numele firmei, se potrivea, și ne-am făcut curaj și am intrat. Oamenii de fapt chiar aveau acolo depozit, și, într-un final, am reușit să înțelegem că de fapt materialul ăsta nu-i doar foarte mișto, ci și foarte scump (cam 3 milioane metru pătrat la 6mm grosime), dar le-am povestit oamenilor că suntem robotiști și ne-au vândut o fâșie de policarbonat cu reducere specială de studenți.

Necazul a fost că nu ne așteptam să fie așa scump și nu aveam bani. Am cerut indicații către cel mai aproape bancomat, și am luat-o în direcția aproximativă indicată. Am mai întrebat la un magazin la colțul străzii (care evident ne-a dat alte indicații), și am ajuns destul de repede in the middle of nowhere, printre niște blocuri semipărăsite, niște străzi goale și gri, mărginite de aceeași cale ferată. Eram toți așa, cu urechile ciulite și parcă cu ochii în toate părțile, aveam sentimentul ăla ciudat că ceva nu este de loc în regulă și că noi nu prea căutam bine ce căutam pe unde eram (și nu mă refer la bancomate). Am întâlnit o singură persoană pe strada, am întrebat de bancomate și ne-o zis ca nu se există așa ceva în fundul de lume unde eram. Până la urmă am luat o mașină (cred că tot la inspirația lui Dan) și am ajuns undeva la Doamna Ghica, de unde am scos banii, și ne-am întors cu același autobuz de unde am plecat, să plătim.

De menționat că la Doamna Ghica am văzut un câine, maidanez, de-ăsta de nici o rasă, care era cel puțin de două ori mai mare decât orice câine maidanez am văzut vreodată, îmi ajungea undeva la șold. Întorși să dam banii, pe strada rurală pe care era depozitul, unul din vecini ținea de un câine să nu scape din curte, un câine iarăși, imens. La ușa din spate a depozitului stătea de gardă, evident, un alt câine imens. Am luat placa, am zis mulțam și am băgat urgent talpă până la mașina care ne-a adus în „cartierul minunat”.

Cine a numit Bucureștiul Micul Paris, n-a fost decât pe Victoriei în zilele ei bune. Am fost la Paris, și nu-i așa. La un moment dat eu ziceam că Bucureștiul că seamănă cu Istambul-ul, sau mă rog, cu cum îmi imaginez eu Istambulul pentru că n-am fost încă pe-acolo, dar ce-am văzut joi nu seamănă cu nimic. Este doar ”o realitate crudă” din inima capitalei României și sper să nu mai am drum în capătul ăla de lume prea curând.

Back to working on the car

M-am întors la lucrul la mașină, în timp ce încerc, în paralel, să dau câte o idee și la planul pentru Eurobot. Avem momentan două idei, două strategii diferite, fiecare cu bubele ei, dar măcar, de azi avem toate pisele de care avem nevoie. Acum trebuie doar să ne hotărâm cum vrem să le punem laolaltă :)

Pentru mașinuță am mai lucrat la controller-ul de viteză. Am reușit până la urmă, după multe experimente mai mult sau mai puțin reușite, urmărind o idee a domnului profesor, să fac un driver pentru motorul cu perii (motorul de mișcare) al mașinuței, folosind relee de 8A pentru puntea H (pentru direcție) și un pe post de intrerupător (pentru PWM). Schema asta funcționează primind PWM de undeva, dar controller-ul mașinuței encodează și direcția, tot în PWM (adică factor de umplere 50% înseamnă full stop, 0 înseamnă înapoi și 100% înseamnă full înainte).

Ca să pot să-i dau controllerului meu ce are nevoie (un semnal PWM pur, și doi pini de control pentru direcție înainte / înapoi) am folosit un ATMega32, de care mai aveam de la alte proiecte mai vechi. M-am tot câcâit să învăț cum se face un PWM și marți sau miercuri m-am pus și am citit documentația de la ATMega, și am produs un PWM, apoi am folosit Input Capture Unit-ul (guess what that does) să traduc semnalul PWM de la PMS5005 (placa de control a robotului) într-un PWM și o direcție pentru controller-ul meu. Cu sprijinul lui Dan și al osciloscopului am trecut peste o parte din bug-uri, dar încă nu reușesc să variez PWM-ul de la ieșire corect în funcție de PWM-ul de la intrare. Dunno why yet, dar dacă există oameni care știu pitfall-uri în partea asta de Input Capture, please do tell!

Primul meu laborator de PW

După cum am mai scris aici, semestrul ăsta încerc și eu marea cu degetul și sunt asistent la o materie care se numește Programare Web. Pentru cine mă știe, știe că e straigh up my alley, pentru că asta fac de muuuultă vreme, și am o oarecare experiență în domeniu. Prima experiență interesantă a fost când a trebuit să susțin eu laboratoare în fața studenților și să-i sprijin în timp ce se obișnuiau cu PHP, și alte tehnologii web. Dar pe departe mai dificil (dar nu mai puțin interesant) mi-a fost să pregătesc eu un laborator.

PW este o materie nouă, se face pentru prima oară acum, și nu există materiale existente pentru laboratoare (sau pentru curs, for that matter). Deși avem stabilită o tematică generală, în funcție de nivelul cu care se avansează la laborator și de feedback-ul de la studenți, tematica de laborator se mai schimbă. Anyway, cum eu sunt mai proaspăt în treaba asta cu laboratoarele decât colegul meu, Matei, a ajuns acum, în săptămâna a 6-a, rândul meu să inventez un laborator. Și n-a fost simplu.

Partea teoretică merge repede, mai ales dacă știi despre ce e vorba. Dar când am ajuns la partea practică, la partea de ”cum îi fac eu pe oamenii ăștia să aplice cât mai mult din partea teoretică în cod, dar să le ajungă 2h și să nu fie PREA simplu pentru ei”, m-am lovit de un perete. Am văzut studenți care au trecut în 5 minute peste probleme care mie mi-au luat (e drept, acum mai mulți ani) zile întregi să le rezolv. Dar am avut și surpriza ca mulți studenți să se blocheze în chestii elementare. Concluzia de aici e că, după ce ai lucrat mare parte din viață în Web, nu mai știi ce e greu și ce nu e greu pentru un începător, pentru că fiecare vine cu alt soi de pregătire.

Am făcut până la urmă un compromis între ceva dificil și ceva prea simplu, și am pus ca task, în mare, utilizarea unei clase Template (care trebuie doar periată puțin, pentru overloading) pentru separarea codului HTML de cod PHP (asta a fost o întrebare la mai mulți studenți care s-au apucat de teme). Sunt foarte curios care or să fie feedback-ul despre laborator. Deja unul dintre studenți m-a tras de urechi (și are toată dreptatea) că nu am pus laboratorul suficient de repede pe site. Data viitoare știu să mă apuc mai din timp.