Constantin-Alexandru TUDORICĂ - Masinuta Wifi

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

O masinuta teleghidata prin WiFi folosind un smartphone si tehnologi web.

Descriere generală

Hardware Design

Pentru a face legatura cu wifi am folosit o combinatie intre placa de retea ENC28J60 si un router wifi TP-LINK TL-MR3020. Am inlocuit placuta existenta pe masina cu o alta placuta facuta de mine si proiectata astfel incat sa se potriveasca in locul celei vechi. Pentru a controla motoarele a folosit un driver L298N.

A trebuit sa inlocuiesc placa aflata pe masina cu una care sa aiba ce vroiam eu pe ea.

Software Design

Pentru dezvoltare am folosit AVR Studio.

Am folosit librariile de enc28j60 din laboratorul 5 si o librarie de uart pentru debugging. Softul consta dintr-un web server luat din laboratorul 5 si cu un state machine ce trimite comenzi la motor. Stare este codificata pe 5 biti, fiecare bit insemnand cate o directie. Pagina web am creat-o folosind Sublime Text si apoi am comprimat javascriptul din ea cu uglifyjs astfel incat sa o duc sub 1400 de octeti ca sa incapa toata intr-un singur pachet tcp.

Rezultate Obţinute

Comunicatiile cu ENC28J60 sunt precare. Cateodata raspunde si comunica bine, dar dupa cateva secunde primesc pachete malformed sau pachet cu dimensiune approx. 65530, mult mai mari decat ar trebui sa fie. Nu pricep de unde vine problema. ENC28J60 are o erata destul de mare dar tot nu am gasit ceva similar. Am impresia ca placa de retea ar intra intr-o stare proasta si nu mai functioneaza pana cand nu ii dau reset. Am incercat sa o resetez la start folosind o rezistenta de 10k connectata pe pinul de reset dar nu functioneaza.

Concluzii

Mai exista cateva buguri de memorie descrise in erata de la ENC28J60 si o sa incerc sa vad daca pot sa implementez workaround-urile descrise acolo. Cel la care ma gandesc ca ma poate affecta sunt 5 si 19. Am incercat sa imi aflu revizia placii dupa cum este descris in datasheet, dar tot ce se intampla este ca microcontroller-ul ramane blocat la waitspi(), de asta inclin sa cred ca problema ar fi ceva legat de comunicarea SPI.

Download

Sursele pentru tot proiectul se pot gasi pe repo-ul meu de github proiect_pm, unde probabil o sa fie updatate pe timpul verii daca reusesc sa fix-ui din buguri.

O arhiva cu sursele la momentul de final al proiectului aveti aici.

Jurnal

  • M-am decis sa folosesc combinatia ENC28J60 + router wifi WR703N (sau ceva asemanator) in loc de modul wifi.
  • Am reusit sa achizitionez cele 2
  • Am demontat masina si am gasit placa de dinauntru pare destul de custom chip-ul nu l-am gasit pe net si nici un datasheet de la el. O sa incerc sa o copiez in Eagle ca sa se poata prinde prin aceleasi mecansime (2 cleme, 2 lamele de alimentare de la baterie si 2 suruburi).
  • Schema in Eagle e gata si o sa incerc sa o imprim pe placuta folosind o imprimanta laser. TODO pus schema.
  • Imprimarea cu imprimanta laser nu a functionat. Am incercat si cu hartie PNP dar nu a iesit prea bine. Uitati imaginea:
  • Am incercat cu lampa de UV si cablaj de UV. Prima placa a iesit blurry, ca sa tin imaginea pe placa am folosit banda adeziva transparenta si o parte din ea nu a fost bine intinsa. Am mai taiat din folia transparenta pana in buza cablajului imprimat pe ea, astfel am putut sa o centrez. A iesit mai bine dar cred ca am pus prea multa soda caustica (Mr Muscolo) in apa si pana cand s-a desprins tot stratul protector s-au desprins si traseele mai fine. Am mai facut o iteratie dar de data asta am pus mult mai putina solutie (cam 3g/1l de apa) si am facut cum mi-a spus Andrei Voinescu si am alternat placuta din soda caustica in clorura ferica. It worked.
  • Pentru UV am folosit o lampa de la sistemul de filtrare al unui acvariu suspendata pe o galeata, iar pe fundu galetii am pus placa. Lampa are 18W si am expus-o cam 20 de minute. Era mai util sa am si un geam care sa tina folia presata pe placa de textolit. Folia a fost o folie protectoare, deoarece nu am gasit hartie transparenta de printat (am inteles pe urma ca mergea si cu hartie de calc). Here is my set-up:
  • Cum am descris si mai sus bucuria reusitei a tinut putin deoarece am inceput sa ma lovesc de problemele placii de retea ENC28J60.
  • Am gasit ca si un alt coleg a mai folosit aceeasi placa de retea si a reusit sa lucreze pe langa anumite buguri, dar la mine tot nu imi mergea nici cu libraria modificata de el.
  • Am avut nevoie de un cablu cross ca sa pot face debugging pe placa de retea (switchul ignora pachetele cu checksum prost trimise de ea), dar era 10 noaptea asa ca a trebuit sa imi fac singur unu. Logic ca clestele meu am descoperit ca era crapat si nu mai impingea primii 2 pini in mufa asa ca a trebuit sa sacrific un cablu.
  • Am abandonat un pic incercarea de a face placa de retea sa functioneze si am scris pagina web care trebuia sa fie servita catre telefoanele mobile. Dupa ce am finalizat-o a trebuit sa ii reduc dimensiunea si am folosit UglifyJS, versiunea “comprimata” o gasiti aici.
  • Am scris codul pentru motoare ce comanda motoarele in functie de request-urile web.
  • Cumva am reusit sa faca placa de retea sa mearga 10 minute fara sa aibe probleme.. dupa ce am repornit-o nu a mai vrut :( dar macar am reusit sa testez pagina web si mergea.. cu un oarecare lag.
  • Am gasit pe net ca lumea obisnuieste sa reseteze placa de retea, asa ca am legat o rezistenta de 10k intre un pin de pe placa de PM si pin-ul de reset si am inceput sa incerc sa o resetez in varii pozitii din cod. Daca o resetam la pornirea codului aveam sanse mai mari sa mearga pentru cateva secunde. Am incercat si cu reset dupa fiecare pachet trimis dar nu mai mergea deloc bine.
  • Am ajuns in punctul in care a trebuit sa montez placutele pe masinuta. Le-am pus una peste alta si am uitat ca placa de la baza trebuia sa se prinda cu un surub de masinuta (placa de pm venea peste ea si facea imposibila montarea surubului).
  • In timp ce ma chinuiam sa montez lamelele pe placa a scapat una pe jos si am pierdut 30 de minute cautand-o fara sa o gasesc, asa ca trebuit sa improvizez. Am confectionat o lamela din capacul unei conserve.
  • That's about it.

Invataminte

  • Daca ceva poate merge prost, va merge prost in momentul cel mai nepotrivit.
  • Timpul de raspuns al asistentilor la mail-uri e direct proportional cu timpul ramas pana la ora 2 am.
  • Cu cat e o idee mai complexa cu atat are mai multe locuri unde poate sa se defecteze.
  • Tot timpul cand montezi ceva ramai cu o piesa pe masa :)
  • Daca exista o lista cu buguri pentru o componenta, tu vei avea versiunea cu cele mai multe.
  • Cand te duci sa cauti o componenta cu siguranta nu o vei gasi decat la un singur magazin si acela va avea doar una.
  • Stocurile afisate de site-urile web ale magazinelor de electronice sunt in proportie de 66.66% eronate.
pm/prj2013/avoinescu/prj2013/avoinescu/masinuta-wifi.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0