Footprints

Pentru utilizatorii de Linux, există o distribuție opensource de unelte pentru ceea ce se numește Electronic Design Automation, ce se numește gEDA (de la gplEDA). În nici un caz la fel de atrăgătoare ca și GUI și la fel de puternică ca feature-uri ca și CAD-urile profesionale, comerciale, uneltele gEDA au în schimb niște avantaje interesante pentru studenți, inventatori, și alte categorii de persoane care nu folosesc calculatorul DOAR pentru dezvoltare de circuite :). În primul rând, sunt gratis ;). În al doilea rând se bazează pe formate deschise, și aici nu mă refer doar la codul efectiv al aplicațiilor, ci și la cum sunt definite componentele.

Pentru orice componentă pentru care nu există încă modelul lui în biblioteca standard, poți căuta pe gedasymbols.org (sau pe alte siteuri) după dispozitivul tău, sau, dacă nu există, poți să-l scrii (sau să-l desenezi) de mână, după specificațiile producătorului. Formatul, atât pentru modele simbolurile pentru scheme, cât și pentru footprints (care nu știu cum se traduce în română în contextul ăsta), este text și este destul de intuitiv :D

Anyway, unul din proiectele „de weekend” la care lucrez era pe standby din cauză că nu aveam un footprint pentru o mufă RJ-45 mamă cu transformator și cu leduri integrate (asta a mea e făcută de CviLux, există mai șmechere, făcute de MagJack, eu am luat-o de la Comet). Simbolul pentru editorul de scheme electrice l-am făcut repede (acolo nu trebuie să știi decât ce pini are), iar footprint-ul mi-a luat vreo oră și un pic, pentru că e migălos și trebuie să măsori, să calculezi, să mai corectezi dacă ești bleg și greșești sau uiți … .

So, am luat așa ceva (asta e MagJack, a mea e copia mai ieftină :P)

Asta e un RJ45 mamă cu ceva protecții și leduri, exact cum se găsește în placa de bază la mai toate calculatoarele

Și am facut un simbol pentru gSchem. Simbolul se poate desena foarte ușor, tot în gSchem, în funcție de necesități, poate fi editat și într-un editor de texte pentru a aranja diferite aspecte. Există și mai multe soluții semi-automate pentru generarea de simboluri, care sunt de folos când ai componente cu mulți pini (>20), spre exemplu. În cazul meu, a fost simplu, am luat un simbol de mufă RJ45 mamă simplu și am adăugat pinii pentru leduri.

Simbolul prezintă doar reprezentarea logică, abstractizată a elementului de circuit

Și apoi am făcut un footprint, care este reprezentarea fizică a mufei, și care respectă dimensiunile propuse de producător (distanța dintre pini, grosimea găurilor pentru pini). Am avut grijă ca numerotarea pinilor de pe simbol să se potrivească cu pinii de pe footprint. Pentru realizarea circuitelor (plasarea componentelor, trasarea rutelor) există, în același pachet, programul (denumit sugestiv) PCB. La fel, footprintul se poate desena în PCB, se poate scrie de mână, sau se poate desena în PCB și apoi aranja de mână. Există chiar dezvoltatori care au făcut scripturi pentru generarea automată de footprinturi.

Și așa arată footprint-ul meu :)

Aici sunt și fișierele pentru simbol și pentru footprint, ca în cazul în care mai are cineva nevoie, să nu mai piardă timpul să le facă :D

Rețele Industriale Eterogene și Tolerante la Defecte

Semetrul ăsta, înafară de documentarea și punerea în temă pentru doctorat, am dat o mână de ajutor la o materie numită Rețele Industriale Eterogene și Tolerante la Defecte. Am pus acum ceva vreme niște prezentări aici pe blog, care au fost prezentări pe care le-am făcut la cursurile de RIETD cand au venit mai mulți studenți decât profesori (s-a întâmplat de vreo trei ori).

Înafară de cursuri, a fost o serie de teme de laborator, în care s-au implicat 8 studenți din cei aproximativ 20 de la modulul lor de master, și 6 au predat temele la sfârșitul semestrului. Când le-am propus, lui Alex și mie ni s-au părut temele mișto, dar se pare că lor nu :). Temele se ocupau cu roboței Mindstorms NXT, cu comunicație Bluetooth, cu comunicație ZigBee și cu alte trăznăi în aceeași gamă (lista completă cu temele și cu descrierea lor este aici).

Până la urmă, am avut niște rezultate interesante, spre exemplu toate cele 3 echipe au implementat comunicația Bluetooth între doi roboți, într-o formă sau alta. Una din echipe s-a evidențiat în mod deosebit, prin implementarea unui task condus prin Bluetooth între mai mulți roboți, dar și un sistem de pasare a mesajelor printr-un nod central și o interfața de conducere a robotului prin intermediul unui GUI cu un volan, de pe PC.

Băieților din echipa asta din urmă le-am propus să își mai rafineze proiectul și să încerce să scrie un articol pentru conferința Eurobot.

Înafară de studenții de mai sus, au mai fost trei studenți la doctorat care au ales materia asta ca una din cele 4 materii care trebuie făcute în pregătirea doctorală, care în principiu toți trei s-au ocupat de ZigBee.

Cu acordul lor, voi pune codul în SVN-ul de la robot, așa că dacă sunt pasionați Mindstorms NXT out there, să poată să refolosească ce au făcut ei :)

Testul final pentru materie a fost grilă și l-am pregătit eu. Am încercat să pun întrebări de bun simț, cu răspunsuri nu neapărat evidente dar deductibile și ușor de identificat chiar dacă dădeai numai un ochi pe prezentări, nu și pe documentația relativ serioasă pe care am pus-o pe site. Totuși, din 19 întrebări, doar 2 din cei 8 studenți a făcut mai mult de jumătate, ceea ce m-a cam întristat. Adică măcar pe prezentările care erau pe site puteau să dea un ochi…

New toy :D

Am tot zis că o să scriu despre ce fac pentru doctorat, dar tot n-am apucat. Dar o să scriu. Ideea e că astăzi a venit în sfărșit noul webcam (că webcamul vechi eram cam pușcat), un Canyon CNR-WCAM813 cu 50 de lei de la eMag, Acuma, ideea a fost să construim un dispozitiv experimental (adică cu care să putem face experimente) în care webcam-ul să vadă ce văd eu, inclusiv când îmi mișc capul. Ne-am gândit la un sistem stil frontală (pentru ne-munțomani, frontala îi lanterna aia ce ți-o pui pe cap :P), care probabil va fi și soluția finală, dar pentru prima tură de experimente am folosit o șapcă, primită sponsorizare de la cei cinci care au rămas patru (mulțumeeesc).

Un pic de bormașina, niște prinzătoare de plastic, și, taaa-daaaa:

Camera e prinsă cu șurubul original pe sub cozoroc

La primele teste, inclusiv unghiul camerei este bun, as in centrul imaginii este drept în fața mea :) One more picture:

Eh, e chiar stylish, nu? :P

Grafice rapide pe Linux

Deși nu ne-am calificat la FRC2010, am învățat mai multe lucruri utile și pentru multe alte feluri de proiecte. Spre exemplu, primeam date de la accelerometrul ala, și le salvam pe un card în microSD. Pentru mine, pe Linux, a fost destul de nasol să fac graficul acceleratie(x) în OOo Calc, pentru că erau foarte multe puncte, și efectiv nu se descurca, și graficul rezultat era greu de aranjat.

Așa că am început să folosim Octave, care este un soft de genul Matlab (evident, opensource și mai puțin dezvoltat ca Matlab), și interfața grafică QtOctave. Am luat datele de la accelerometru, dar și punctele unde am înregistrat noi curbele, și valorile de prag pe care le calculam la fiecare tură. Ce mi-a s-a părut foarte tare a fost că în 20 de minute am făcut un script python cu niște expresii regulate, care spărgea fișierul provenit de la mașină în mai multe seturi de date, și o funcție Octave care să tragă niște grafice după care să ne estimăm noi algoritmul. Practic, din trei clickuri, era gata tot, și și foarte repede.

Octave-ul e doar este o soluție la îndemână pentru învârtit datele, pentru aranjat în matrici. De acolo, de fapt octave-ul folosește gnuplot, care se poate folosi și standalone, și care și el este o super sculă :D

Anyway, toate sculele astea sunt gratis, și, even better, opensource.

Tadaaaaa

EpicFail, cu picături de pozitivitate

Luni a fost preselecția pentru faza pe facultate a Freescale Race Challenge 2010, despre care am mai scris mai demult. Foarte pe scurt, echipele de pe la noi din departament s-au calificat și au trecut mai departe, toate mai puțin a mea :). Ce m-a lovit cel mai tare nu a fost că nu ne-am calificat, ci că nici nu am apucat să arătăm ce știm. Cu programul nostru mașinuța a „murit” în tura de învățare, înainte să facă orice deștept, la o viteză cu care alte echipe au mers destul de bine. Nu știu, cauciucurile, uzura mecanică a motorului, nu știu ce s-a întâmplat. Cert este că nici nu am apucat să concurăm.

Aaaaaanyway :) Am lucrat cu Adi un weekend încheiat la program (30 și ceva de ore cu pauză de budă și de ciorbă de burtă), și alte câteva ore împrăștiate prin decembrie. Am dezvoltat un algoritm destul de deștept de învățare, care parcurgea traseul, îl reducea la un set de curbe, și apoi îl scria pe card într-o formă redus (fișierele de învățare aveau până într-o sută de bytes).

După aia aveam un algoritm de rulare care prima data citea într-un array curbele astea, și verifica daca nu cumva s-a trecut la urmatoarea curbă în funcție de ce facea accelerometrul ala care masura accelerația laterală. Am mai făcut noi un fel de filtru acolo, să se sincronizeze bine pe circuit, și i-am mai zis să accelereze pe o bucată (gen 40 – 50%) din liniile drepte. Am încercat să mai implementăm și o accelerare pe ieșirile din curbă în cazul în care după curbă urma linie dreaptă, dar am renunțat la asta, pentru că era prea târziu.

Duminică după masa devenise aproape imposibil să putem testa extensiv algoritmul, l-am testat cât o fost, și i-am dat send. Ghinion cu tura de învățare.

În cazul în care v-ați întrebat vreodată cum merg mașinuțele astea, uite, o tură de test a lui Matei:

Pe circuit. Ceața aia din poza e cauzată de o altă mașină care a trecut în timp ce făceam poza :)