Smart Car


Autor

Introducere

Tema proiectului este construirea unei masini inteligente care sa evite obstacolele cu ajutorul unui senzor ultrasonic.


Descriere Generala

Masina va folosi un senzor ultrasonic montat astfel incat sa poata detecta obiecte in fata cat si in partile laterale folosind rotatii la anumite unghiuri (cu ajutorul unui servomotor) si un motor driver L298N folosit pentru a pune in miscare cele 4 roti ale masinii. Masina se va deplasa inainte pana cand senzorul va detecta un obiect. In momentul detectarii masina se va opri la o distanta fixa fata de acel obiect si se va redirectiona.

Schema Bloc


Schema Electrica


Hardware Design

Designul este foarte similar cu cel din schema de sus, cu exceptia ca eu am folosit 4 baterii AA + o baterie de 9V in schimbul a 2 baterii Li-On 18650, iar tipul de intrerupator este diferit fata de cel reprezentat in schema. Modul in care sunt conectate firele este de asemenea un pic diferit.


Lista de componente folosite

Arduino Uno R3

Arduino Uno R3 este o platforma de procesare open-source, bazata pe software si hardware flexibil si usor de folosit. Am ales acest tip de placă Arduino din mai multe considerente. Un prim motiv ar fi numărul foarte mare de proiecte realizate cât și resursele foarte bine documentate pentru acest tip de placă. Acest lucru m-a ajutat să duc proiectul la bun sfârșit fără să întâmpin prea multe impedimente pe parcurs. Un alt avantaj la Arduino Uno este reprezentat de dimensiunile acesteia care sunt foarte mici, astfel că nu am avut probleme cu spațiul disponibil pentru celelalte componente folosite (driverul, suportul de baterii, senzorul ultrasonic etc). Placa folosită de mine nu este însă un Arduino Uno R3 original, motiv pentru care a trebui să instalez un driver special folosit pentru USB to Serial Conversion Chip (o componentă care diferă de cea folosită pe Arduino-ul original și care, de altfel, este și mai ieftină) - CH340 este chipul folosit pentru placa cumpărată de mine.

Specificații

  • Microcontroller: ATmega328p
  • USB Chip: CH340G
  • Tensiune alimentare USB: 5V
  • Tensiune alimentare conector DC: 8-12V
  • Pini digitali I/O: 14 (6 suporta iesire PWM)
  • Pini analogici: 6
  • Curent maxim pe pin I/O: 40 mA
  • Memorie Flash: 32 KB (ATmega328) of which 0.5 KB used by bootloader
  • SRAM: 2 KB (ATmega328)
  • EEPROM: 1 KB (ATmega328)
  • Frecventa: 16 MHz

L298N Motor Driver

Aveam practic de ales între L298N și L293D. Am ales L298N din simplul motiv că acesta poate gestiona curent și tensiune mai mare deoarece inițial aș fi vrut să folosesc 2 baterii Li-On 18650 pentru alimentare. Pe lângă asta, regulatorul său este rapid și are protecție pentru scurt-circuit, și un radiator pentru a menține L298N la o temperatură normală de funcționare.

Specificatii:

  • Tensiune de operare: pana la 40V
  • Curent de operare: pana la 3A (25W in total)
  • Curent mic de saturatie
  • Protectie la supraincingere
  • Poate opera cu 2/4 motoare simultan
  • Imunitate mare la zgomot: Nivel logic “0” input pana la 1,5V
  • Incorporat regulator de tensiune 78M05. Pentru evitarea defectarii acestui integrat, folositi o sursa logica externa de 5 V, atunci cand tensiunea de alimentare depaseste 12 V

4 Motoare DC 5V cu Reductor + 4 roți compatibile

Am observat că acest tip de motoare este cel mai des utilizat în genul acesta de proiecte. Un motor este alimentat la 5v. Cuplul maxim este de 800gf/cm (la 3V). Demultiplicare 1:48 (fără sarcină la 3V).

Senzor cu ultrasunete HC-SR04

Senzorul HC–SR04 folosește unde sonice pentru a determina distanța până la un anumit obiect (similar cu ecolocația). Am ales modulul acesta deoarece oferă o acuratețe bună și are o distanță de funcționare mai mult decât suficientă pentru ce aveam eu nevoie (de la 2 până la 500cm).

Specificații

  • Putere: 5V DC
  • Pasiv curent: <2mA
  • Unghi eficace: <15 °
  • Distanța variind: 2cm – 500 cm / 1 „- 16ft
  • Rezoluție : 0,3 cm
  • Dimensiune : 45 x 20 x 15mm
  • Greutate: 8,5 g

Servo Motor 9G Micro

Modelul acesta de servomotor este unul de dimensiuni mici pentru controlul căruia se utilizează un semnal PWM standard. Este ideal pentru foarte multe proiecte ce folosesc Arduino și au nevoie de un mecanism de mișcare a senzorilor.

Cabluri DuPont tată-tată, tată-mamă

Folosite pentru legarea componentelor la Arduino, Motor Driver etc..

Baterie de 9V alcalină + 4 baterii AA

Bateria de 9V este conectată la DC Power Jack de la Arduino, cele 4 baterii sunt conectate la un DC Power Switch (întrerupător) și cu GND-ul la GND-ul de la Motor Driver.

2 Plăci Acrilice

Folosite pentru așezarea componentelor


Software Design

Activity Diagram

Biblioteci utilizate

  • Biblioteca Servo.h

Biblioteca Servo.h permite plăcilor Arduino să controleze o varietate mare de servomotoare. Se utilizeaza cu mare atenție timerele, biblioteca poate controla până la 12 servo-uri folosind un singur timer. Servourile standard permit, prin intermediul functiilor din bibliotecă, poziționarea axului la mai multe unghiuri, între 0 și 180 de grade. Poziționarea la un anumit unghi se realizează cu ajutorul funcției write cu parametrul reprezentând unghiul la care dorim să fie poziționat servo-ul.

În cadrul proiectului, servomotorul este folosit pentru mișcarea senzorului ultrasonic în stânga sau în dreapta, pentru a detecta direcția în care să se redirecționeze mașina la momentul detectării unui obstacol în față. Senzorul ultrasonic este fixat pe elicea de la servo pentru a se mișca odată cu aceasta.

  • Biblioteca NewPing.h

Este o bibliotecă ce facilitează lucrul cu senzori ultrasonici prin punerea la dispoziție a mai multe funcții ușor de folosit în orice proiect ce implică folosirea acestor senzori. Principala funcție folosită în proiect este ping_cm() care citește distanța până la cel mai apropiat obiect din fața senzorului ultrasonic și returnează valoarea acesteia în centimetri.

Explicații Cod

În primă fază se declară toate variabilele necesare pentru ca programul să funcționeze, și anume: pinii de control pentru L298N, pinii folosiți de senzor (A1 și A2), 2 obiecte de tip NewPing(pentru citirea distanțelor) și Servo (pentru servomotor).

În partea de setup() se configurează pinii de output (cei corespunzători motoarelor), se atașează variabila de tip Servo pinului 10 iar apoi se poziționează axul servo-ului la un unghi care să permită senzorului să citească distanțe în fața mașinii, pe direcția și sensul de mers ale acesteia.

În loop() comportamentul implicit al mașinii este să meargă cu fața până se va citi o distanță mai mică de 30cm față de obiectul din față, moment în care se va apela funcția moveStop(), ce oprește mașina, se va apela apoi moveBackward() ce va face mașina să meargă cu spatele și apoi din nou moveStop(). Se vor folosi apoi funcțiile lookRight() și lookLeft() pentru a citi distanțe față de posibilele obstacole din stânga și din dreapta mașinii. Mașina se va redirecționa apoi spre direcția în de care s-a detectat o distanță mai mare față de obiect și va repeta procesul descris mai sus.

lookRight() și lookLeft() → scriu valorile 30, respectiv 150 pe servo, citesc distanța iar apoi repoziționează servomotorul la un unghi de 95 grade (cel implicit, pentru direcția înainte).

turnRight(), turnLeft(), moveStop(), moveBackward(), moveForward() → setează pinii motoarelor pe HIGH/LOW în funcție de acțiunea dorită, de exemplu pentru turnRight() motoarele din stânga față și dreapta spate sunt puse pe HIGH, iar celelalte pe LOW.

readDistance() - citește distanța în cm față de obiectul din fața senzorului ultrasonic.


Rezultate Obținute

Bibliografie/Resurse

pm/prj2021/abirlica/smart_car.txt · Last modified: 2021/06/03 17:55 by nicusor.slabu
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