V-ati dorit vreodata sa aveti un animal de companie loial, dar fara fite si nevoie sa ii dai de mancare? (excluzand bateriile) Vrei sa te ajute cu adusul romului si monstrilor, desi tu ai o mana ocupata cu tiktoku si cealalta cu tema la IA? Say no more, caci exista o solutie perfecta: Cezarmobilul
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Acesta este un container umblator care poate fi controlat prin bluetooth cu mai multe moduri: sa seada la o anumita locatie sau sa isi urmareasca un stapan. Totusi, acesta trebuie cumva sa isi marcheze teritoriul, de aceea cand este pornit el va intra intr-o stare de recunoastere. Locatia din care o sa plece o sa fie cotetul lui si acolo se va intoarce cand intra in starea default.
In faza de recunoastere/follow el se va folosi de senzori ultrasonici pentru a detecta obstacolele/stapanul
GPIO | Label | Pin componenta |
36 | Sensor_VP | ADC Bat |
32 | D32 | L298N In1 |
33 | D33 | L298N In2 |
25 | D25 | L298N In3 |
26 | D26 | L298N In4 |
27 | D27 | PWM L298N EnA, EnB |
13 | D13 | Trig S1, S2, S3 |
4 | D4 | Echo S1 |
16 | D16 | Echo S2 |
17 | D17 | Echo S3 |
5 | SPI_CS (!) | CS SD_card |
18 | SPI_CLK | CLK SD_card |
19 | SPI_MISO | MISO SD_card |
21 | SDA | SDA LCD |
22 | SCL | SCL LCD |
23 | SPI_MOSI | MOSI SD_card |
Incluse in frameworkul Arduino:
3rd party:
Am folosit ArduinoOTA pentru a putea face flashing de la distanta, altfel ar fi insemnat sa ma tot car cu un fir si sa deschid la o frecventa foarte ridicata sasiul. Ar fi fost o motivatie parnaie sa ii dau si o “coada” catelului, dar oricum ar fi prezentat o incomoditate mare. On the same note, am folosit WebSerial pentru a putea avea un serial monitor, altfel degeaba aveam OTA. As fi putut sa fac printing pe LCD, dar unele chestii pot fi prea specifice/mari, si mai poti da si comenzi astfel.
For some whatever reason, nu exista un builtin pentru LCD_I2C, asa ca a trebuit sa se foloseasca o dependenta externa. E totusi frumos ca platformio face acest proces seamless
undefined
Overall s-au folosit 4 laboratoare
S-a folosit un main care contine mai multe programe, OTA-ul si US-ul. In acelasi timp se updateaza si LCD-ul si motoarele. Motoarele si LCD-ul au fost facute pe principiul de singleton, LCD-ul contine mai multe parti ale statusului precum ar fi senzorii ultrasonici, ADC-ul, cat si in cazul in care se face flashing prin OTA care ar fi progresul pentru acesta. S-a si initializat WebSeriala pentru a putea face printuri generice cat si a putea da niste comenzi simplute pentru robot.
In un program separat se pot folosi datele de senzori din LCD (Mi-a fost sincer lene sa creez o clasa diferita pentru asta cut me some slack), si se pot actiona motoarele. Datele sunt acquired automat cu ajutorul timerelor, dar setarea lor in starea globala se face doar la update-ul senzorului respectiv, pentru a sincroniza codul si a asigura ca datele senzorilor sunt luate cum trebuie.
Am printat datele senzorilor pe LCD, si am vazut ca uneori dau valori, alteori nu. Pentru omul ghinionist care o sa aibe onoarea sa imi citeasca codul, o sa observe acolo o chestie '#ifndef PARNAIE_DE_LA_GPT'. Ce reprezinta asta? Senzorii astia functioneaza cand vor ei, dar exista o logica in existenta lor nefunctionala. Ideea e ca GPT-ul mi-a cacat un cod, si acela stiu clar ca functioneaza daca toti senzorii dau valoarea 0. Daca dau flash din nou la codu meu dupa, ca prin magie, (cel mai probabil!) functioneaza… daca nu, ia de scoate si baga senzorii la loc.
Mda, din pacate, trebuia sa ma astept ca daca dai 5 lei, 5 lei o sa primesti inapoi, si mi-am invatat lectia fix cu senzorii astia. M-as fi gandit ca daca se rupe o masa de la senzorii astia, se intampla din cauza ca nu dau distanta la timp + accurately si imi intra robotu in ea, nu credeam ca o sa fie din cauza ca dau eu cu pumnu in masa mai rau ca la lol ca nu vor chinezariile astea astia sa mearga decat cand vor ele…
La restu din fericire a mers brici, functioneaza ca unse. Din pacate totusi speram ca rotile omnidirectionale sa preia o mare parte din loadul greutatii, dar tot se chinuia grav de la un amarat de borsec de 2 litri. Asta si un pic tot mai depinde de centrul de masa mobilitatea vehicului
Oricum, o chestie e clara: de frumos e frumos, de destept e frumos. Atat s-a putut.mp4
Sa mor eu de mai folosesc vreodata in viata mea ultrasonice in un proiect
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
Motorul care merge: