This shows you the differences between two versions of the page.
pm:prj2023:iotelea:tesla-2 [2023/05/05 23:27] matei.trandafir a |
pm:prj2023:iotelea:tesla-2 [2023/05/30 18:20] (current) matei.trandafir [Tesla 2] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Tesla 2 ====== | ====== Tesla 2 ====== | ||
+ | //Trandafir Matei-Paul, 336CB// | ||
===== Introducere ===== | ===== Introducere ===== | ||
+ | |||
+ | {{ :pm:prj2023:iotelea:tesla2-logo.png?500 |}} | ||
Proiectul reprezinta o varianta foarte simplificata, in miniatura, a unei masini, cu functionalite de evitare a accidentelor, fie prin franare, fie prin viraj. Masina este controlata prin Bluetooth, folosind o aplicatie mobila, insa are si optiunea de "autopilot". In acest mod, masinii i se stabileste o directie/ruta de urmat, pe care va incerca apoi sa o urmeze, ocolind toate obstacolele pe care le intalneste. | Proiectul reprezinta o varianta foarte simplificata, in miniatura, a unei masini, cu functionalite de evitare a accidentelor, fie prin franare, fie prin viraj. Masina este controlata prin Bluetooth, folosind o aplicatie mobila, insa are si optiunea de "autopilot". In acest mod, masinii i se stabileste o directie/ruta de urmat, pe care va incerca apoi sa o urmeze, ocolind toate obstacolele pe care le intalneste. | ||
Line 21: | Line 24: | ||
Lista de piese: | Lista de piese: | ||
- | * Kit masina 2WD - contine sasiu, 2 roti cu motoare atasate si cutie pentru baterii de 1.5V pentru alimentare motoare si Arduino | + | * [[https://www.optimusdigital.ro/en/robot-kits/3161-mini-aluminum-premium-twin-robot-mini-kit.html|Kit masina 2WD]] - contine sasiu, 2 roti spate cu motoare, 1 roata fata simpla, de tip carucior de cumparaturi |
- | * Arduino UNO | + | * [[https://www.optimusdigital.ro/en/compatibile-with-arduino-uno/1678-placa-de-dezvoltare-compatibila-cu-arduino-uno-atmega328p-i-ch340.html|Placa compatibila Arduino UNO]] |
- | * Senzor de distanta cu ultrasunete HC-SR04 | + | * [[https://www.optimusdigital.ro/en/ultrasonic-sensors/9-hc-sr04-ultrasonic-sensor.html|Senzor de distanta cu ultrasunete HC-SR04]] |
- | * LCD cu interfata I2C | + | * [[https://www.optimusdigital.ro/en/lcds/2894-1602-lcd-with-i2c-interface-and-blue-backlight.html|LCD cu interfata I2C]] |
- | * Buzzer | + | * [[https://www.optimusdigital.ro/en/arduino-shields/3434-a4990-dual-motor-driver-shield-for-arduino.html|Shield cu Driver de Motor Dual A4990]] |
- | * Shield cu Driver de Motor Dual A4990 | + | * [[https://www.optimusdigital.ro/en/wireless-bluetooth/153-hc-05-master-slave-bluetooth-module-with-adapter-33v-and-5v-compatible.html|Modul bluetooth HC-05]] |
- | * Modul bluetooth HC-06 | + | * [[https://www.optimusdigital.ro/en/buzzers/12247-3-v-or-33v-passive-buzzer.html|Passive Buzzer]] |
Schema de conectare este urmatoarea: | Schema de conectare este urmatoarea: | ||
- | {{:pm:prj2023:iotelea:tesla-2-circuit.png?700|}} | + | {{:pm:prj2023:iotelea:tesla-2-circuit.png?665|}} |
+ | Proiectul asamblat arata asa: | ||
+ | |||
+ | {{:pm:prj2023:iotelea:tesla2_1.jpg?160|}} {{:pm:prj2023:iotelea:tesla2_2.jpg?505|}} | ||
+ | |||
+ | {{:pm:prj2023:iotelea:tesla2_3.jpg?333|}} {{:pm:prj2023:iotelea:tesla2_4.jpg?333|}} | ||
+ | |||
+ | Din motive de spatiu si pozitionare a pieselor, pinii folositi nu sunt aceeasi cu cei din schema de mai sus. De asemenea, pinii HC-05 functioneaza la 3.3V, nu 5V, asa ca legatura HC-05 <-> Arduino este facuta cu un divizor de tensiune (un pin HC-05 este conectat la Arduino prin rezistor 1K si la GND prin rezistor 2K). Acest lucru nu este necesar la pinii de iesire ai modulului, deoarece Arduino inregistreaza 3.3V pe un pin digital ca 1 logic fara probleme. | ||
+ | |||
+ | Diferentele dintre schema de mai sus si hardware sunt urmatoarele: | ||
+ | * KEY al HC-05 -> 4 | ||
+ | * TRIG, ECHO ale HC-SR04 -> 12 respectiv 13 | ||
+ | * Buzzer -> ~11 | ||
+ | * Servo -> ~5 | ||
+ | |||
+ | Pentru a extrage VCC (din moment ce scutul cu motor driver acopera acest pin), am lipit un fir de VCC-ul scutului, care apoi alimenteaza celelalte componente. Arduino este alimentat direct de la scut, de la bateria de 9V, deoarece scutul are optiunea de a scurta intre VIN (input baterie) si VOUT (output catre Arduino VIN). Acest scurt este activat printr-un jumper, care trebuie scos atunci cand Arduino este conectat la USB (pentru a nu fi dublu alimentat). | ||
===== Software Design ===== | ===== Software Design ===== | ||
Line 41: | Line 59: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | TODO | + | In repository, puteti gasi [[https://github.com/rChaoz/tesla-2/tree/main/OCW/video|cateva videoclipuri]] care demonstreaza functionalitatea proiectului. Functionalitatile, in detaliu, sunt: |
- | <note tip> | + | * Masina controlabila de pe telefon (Bluetooth) - se face pairing din setarile telefonului, apoi se deschide aplicatia si se alege masina din lista |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | {{:pm:prj2023:iotelea:tesla2_1_1.png?200|}} {{:pm:prj2023:iotelea:tesla2_1_2.jpg?500|}} |
+ | |||
+ | * Din UI, se poate controla masina cu cele 2 Joystick-uri, iar in partea de sus se observa distanta pana la obstacole. Se mai pot controla: sunetul (On/Off), Sweeping Mode (rotire senzor distanta constanta stanga-dreapta), toggle intre Auto-breaking si Obstacle avoidance (care este disponibil doar daca este activat si Sweeping mode, pentru a putea decide in ce directie sa vireze). | ||
+ | |||
+ | {{:pm:prj2023:iotelea:tesla2_2_1.jpg?700|}} | ||
+ | |||
+ | * Atunci cand masina se apropie de un obstacol, isi reduce automat viteza, proportional cu distanta pana la obstacol, pentru a evita lovirea. Simultan, masina emite beep-uri, pentru a semnala distanta pana la obstacol, similar unor senzori de parcare. Distanta pana la obstacole se poate vedea si pe aplicatia mobila. | ||
+ | * Daca "obstacle avoidance" este activat, masina, pe langa cele de mai sus, va incerca sa ocoleasca obstacolele, prin viraj, inainte de a frana (daca nu este posibil, tot se va opri). Virajul se face pe acolo unde observa ca nu sunt obstacole. | ||
+ | * Autopilot - prin mentinerea Joystick-ului de viteza in pozitia inainte, masina va merge inainte, ocolind obstacolele, oprindu-se doar daca se blocheaza (e.g. colt), caz in care trebuie interventie manuala, deoarece nu va da automat cu spatele | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | TODO | + | In acest proiect, am invatat cum functioneaza comunicarea Bluetooth seriala, cum se pot comunica astfel date intre un microcontroller si un telefon, dar si multe altele despre motoare, timere, PWM si lipirea firelor/pieselor. |
- | ===== Download ===== | + | Unui din lucrurile pe care le-am invatat din acest proiect este cat de multe probleme neasteptate pot aparea in cadrul unor task-uri, chiar si simple: |
+ | * daca primele 3 librarii de LCD nu au mers, nu este LCD-ul stricat, ci a 4a va merge | ||
+ | * aparent, un fir de tip breadboard se poate rupe //in interiorul izolatiei//, invizibil din exterior, si sa faca apoi contact intermitent, ceea ce duce la foarte multe ore de depanare | ||
+ | * un senzorul de distanta stricat face un feedback-loop cu el insusi, indicand permanent 3-4cm, mai putin daca este pusa o bucata de scotch intre tranzmitator/receptor | ||
+ | * 2 motoare identice, la aceeasi tensiune, se vor invarti la viteze diferite | ||
+ | * atunci cand modulul Bluetooth comunica cu Arduino prin UART, Arduino IDE se va bloca cand incearca sa faca upload, deoarece foloseste tot UART | ||
+ | * orice librarie foloseste timer 1, ceea ce duce la interferenta intre librarii; pentru orice librarie exista o varianta care foloseste timer 2 sau niciunul | ||
- | TODO | + | ===== Download ===== |
- | <note warning> | + | |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | 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**. | + | Intreg proiectul se gaseste pe [[https://github.com/rChaoz/tesla-2|github]]. De asemenea, aici sunt si arhive ale codului: |
- | </note> | + | |
- | ===== Jurnal ===== | + | Codul sursa Arduino: {{:pm:prj2023:iotelea:tesla2-arduino.zip|}} |
- | <note tip> | + | Codul sursa Android: {{:pm:prj2023:iotelea:tesla2-android.zip|}} |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | TODO | + | Librarii folosite pentru Arduino: |
+ | * pentru LCD I2C - [[https://github.com/duinoWitchery/hd44780|HD44780]] | ||
+ | * pentru controlare servo folosind timer2 - [[https://github.com/nabontra/ServoTimer2|ServoTimer2]] | ||
+ | * pentru driver-ul de motor A4990 - [[https://github.com/pololu/a4990-motor-shield|A4990 Motor Shield]] | ||
+ | * pentru senzorul de distanta HC-SR04 = [[https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home||NewPing]] | ||
+ | Pagina in format PDF:\\ | ||
{{:pm:prj2023:iotelea:tesla_2.pdf|}} | {{:pm:prj2023:iotelea:tesla_2.pdf|}} | ||
- | |||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||