Introducere

Proiectul meu este o reprezentare practica a conceptului de “Cruise Control Adaptiv” introdus de marile firme de automobile. O mica demonstratie a ideii din spatele acestui proiect:
<flash center 425×344 http://www.youtube.com/v/CkEipB8lvOA> hl en_US fs 1 allowFullScreen true allowscriptaccess always </flash>


  • Un astfel de sistem ajuta la condusul automobilului in conditii de autostrada, unde viteza ramane constanta o perioada lunga de timp.
  • Primele sisteme de pilot automat pastrau doar viteza dorita de sofer, fara a tine cont de ceea ce se petrece in fata masinii. Fata de acestea, un “Cruise Control Adaptiv” detecteaza viteza masinilor din fata si adapteaza viteza automobilului in consecinta, incetinind sau chiar oprind in caz de pericol imediat.
  • Acest sistem este util in primul rand pentru demonstrarea la scara redusa a sistemului de control al vitezei (pilot automat). In al doilea rand, de la acest proiect se poate pleca cu o implementare intr-un automobil real sau in concursuri de robotica.

Descriere generală

schema_bloc.jpg

Din punct de vedere logic, proiectul este compus din urmatoarele:

  • ATMega16
  • LCD alfanumeric 16×2
  • Controller de motoare L298N
  • Senzor de distanta analog cu IR (4-30cm) Sharp
  • motor curent continuu
  • sursa de alimentare

Ca punct de plecare s-a folosit o masinuta de jucarie cumparata din comert care a oferit atat spatiul pentru bateriile care alimenteaza motorul, cat si spatiul de prindere al placii si mai ales angrenajul pentru motor. Am folosit o baterie de 9V pentru a alimenta partea digitala a circuitului (printr-un regulator de tensiune 7805) si un set de 6 baterii de 1.5V legate in serie pentru a asigura o autonomie mai mare. Capacitatea unei baterii standard de 9V este de ~10 ori mai mica decat a unui grup de 6 baterii de 1.5V legate in serie.

Mod de functionare

Initial, utilizatorul trebuie sa selecteze viteza dorita. Aceasta se face prin intermediul a 3 butoane, 2 pentru crestere/descrestere a vitezei si unul pentru a confirma alegerea facuta. LCD-ul ofera constant feedback asupra setarilor curente.

  1. Rezultatele de la senzorul de distanta se primesc prin intermediul convertorului A/D de pe microcontroller.
  2. Senzorul trimite la iesire o tensiune cu un interval de 2.2V, unde pragul maxim reprezinta un obiect situat la 4cm, iar valoarea minima un obiect situat la 30 cm. (Valorile absolute depind de opacitatea obiectului)
  3. Ajustarea vitezei se face in functie de variatia distantei pana la obstacol, pe 3 intervale de distanta. Motorul este controlat printr-un semnal PWM .

Hardware Design

Principalele piese folosite

  1. ATMega 16
  2. Driver de motoare L298
  3. Senzor Sharp de distanta
  4. LCD alfanumeric 16×2



  • Schema generala



  • Alimentarea circuitului digital


  1. Nu puteti alimenta circuitul digital (microcontroller-ul si celelalte intrari logice) din aceeasi sursa de curent din care veti alimenta si motoarele.
  2. JP4 este un header cu 2 pini la 90 grade. La el voi conecta prima sursa de tensiune (>=7V pentru ca regulatorul de tensiune (7805) sa poata functiona).
  3. Am montat un condensator de 1mF pentru a asigura o tensiune cat se poate de constanta regulatorului. Acelasi rol il are si condensatorul mai mic, de dupa regulator.


  • Conectorul pt LCD

Header-ul de pini la care va fi conectat LCD-ul

  1. Primi 2 pini sunt Ground si Vcc.
  2. Pinul 3 regleaza contrastul, pentru contrast maxim l-am conectat la masa.
  3. Pinii 15 si 16 sunt (+) si (-) pentru backlight-ul LCD-ului. Se foloseste o rezistenta intocmai ca la un LED normal.


  • Conectorul pt senzorul de distanta IR

Conectorul pentru senzorul de distanta IR

  1. Pinul 1 reprezinta alimentarea
  2. Pinul 2 masa
  3. Pinul 3 va furniza tensiunea pentru convertorul A/D.


  • Driverul L298

Driver-ul de motoare L298

  1. Driver-ul este unul DUAL, ceea ce inseamna ca poate fi folosit pentru a comanda 2 motoare
  2. Viteza motoarelor se poate controla folosind PWM. Este foarte usor de implementat (3 linii de cod) si da rezultate foarte bune.
  3. Alimentarea motorului se face printr-un set de 6 baterii conectate la JP1 si mai departe la pinul 4. Eu am folosit 6 baterii de 1.5V legate in serie cu o capacitate ~2000mAh, fata de 200mAh cat are o baterie de 9V pe care o gasiti in comert.
  4. Pinul 11 (ENABLE B) va primi semnalul PWM care va controla efectiv viteza masinutei.
  5. Pinii 10 si 12 (INPUTs) primesc semnal logic. Cand au valori opuse, masinuta merge intr-o anumita directie. Daca ambii au aceeasi valoare si pinul de ENABLE are valoare logica 1, atunci se realizeaza franare activa.
  6. Diodele au rolul de a proteja driver-ul. Se recomanda diode rapide/ultra-rapide cu timpi de comutatie cat mai mici.
  7. Recomand citirea cu atentie a datasheet-ului, va scuteste de foarte multe neplaceri.
  • Piesele le-am procurat in principal de la Syscom si Farnell. Am avut o tentativa cu Adelaida, dar dupa ce mi-au intarziat cu 1 saptamana proiectul, am renuntat. Farnell sunt cei mai buni si va recomand sa luati toate piesele de la ei, mai ales daca stiti exact de ce aveti nevoie. Mie si inca unui coleg (comenzi separate) ne-au ajuns toate piesele in o singura zi, din momentul in care am dat comanda. Ambalarea este profesionist facuta, nu va faceti griji ca se deterioreaza pe parcursul transportului.
  • De mare ajutor in realizarea proiectului au fost simularile in Proteus alaturi de care am lucrat pas cu pas. Orice lucru implementat pe placuta era mai intai simulat pentru a ma asigura de corectitudinea schemelor.
  • La fel de mult m-a ajutat faptul ca am realizat o placuta imprimata, nu am incercat sa realizez tot circuitul pe o placuta de test. Desi este un pic mai mult de munca, in final veti aprecia ca nu trebuie sa lipiti zeci de fire pentru a va realiza circuitul.
  • Mare atentie totusi la schema electrica. E recomandat sa fie facuta bine pentru ca modificarile pe PCB sunt relativ greu de facut (in functie de greseala facuta) si un moment de neatentie poate avea consecinte nefaste.

Greseli facute pe parcurs

Cauza Efect Solutie
Conectarea butoanelor la pinii programatorului USB Nu mai mergeau nici programatorul, nici butoanele Legarea butoanelor pe alti pini decat cei folositi de programatorul USB.
Alimentarea ambelor circuite de la 2 baterii conectate in paralel Introducerea motorului in circuit reseta microcontrollerul Separarea circuitelor de alimentare.
Alegerea unui senzor cu o distanta de detectie mult prea mica Masinuta nu poate accelera foarte mult pentru ca raza de detectie nu ii ofera suficient timp sa opreasca. Cumpararea unui senzor nou.

Software Design

Codul l-am scris in Programmer's Notepad si Notepad++ folosindu-ma de laboratoarele implementate la PM si de tutoriale/sfaturi de pe internet.

Singura biblioteca externa folosita este cea de interfatare a LCD-ului din laboratorul 1. O problema intalnita in comunicarea cu LCD-ul a fost atunci cand se activau intreruperile (apelul sei(); ). In acel moment display-ul se reseta si nu mai afisa nimic. Cea mai simpla solutie mi s-a parut adaugarea unui ISR care sa trateze toate intreruperile ce nu au propriul macro de tratare:

ISR(__vector_default)
{
// Bad interrupt code goes here
}  

Algoritm

  • La fiecare pas, este citita valoarea distantei de la convertorul A/D. Aceasta poate fi interpretata foarte usor ca o distanta, exprimata in cm.
  • In functie de aceasta distanta am stabilit 3 intervale
    • Daca se intalneste vreun obstacol in intervalul 0-20cm
      • Masinuta se opreste
    • Daca obstacolul este prezent in intervalul 20-25cm
      • Masinuta accelereaza cu o valoare dp cu variatia distantei intre ultimele 2 masuratori
    • Daca obstacolul este la peste 25cm
      • Se accelereaza cu o valoare predefinita
  • Dupa cum am mai spus, un senzor cu o raza de detectie mai mare ar fi permis stabilirea unor intervale mai realiste si o functionare mai buna a masinii.

Rezultate Obţinute

  • In ciuda unor probleme aparute pe parcurs, proiectul este functional.
  • Masinuta detecteaza obstacolele din intervalul 4-30cm si ia deciziile asa cum este prezentat in sectiunea 'Algoritm'.
  • Mentine o viteza constanta in spatele unui obiect ce se deplaseaza in fata ei.
  • Singura problema apare in cazul unei opriri bruste cand intervalul mic de detectie nu ii permite sa reactioneze suficient de repede.
  • Functiile de selectare a vitezei cu ajutorul LCD-ului si a butoanelor functioneaza perfect.

image_200.jpg image_202.jpg

Concluzii

  1. A fost o experienta extrem de interesanta si recomand tuturor sa se apuce si sa termine acest proiect.
  2. Mi-am imbogatit cunostintele de electronica si am invatat sa lucrez cu programe de design al PCB-urilor.
  3. Pornesti de la o idee, incepi si te documentezi, realizezi schemele, implementezi hardware-ul si codul. Testezi.
  4. Senzatia pe care o ai la sfarsit cand vezi ca ce a pornit ca o idee vaga s-a transformat intr-un proiect functional este extraordinara. GARANTAT!

Download

Arhiva cu surse si schema electrica: cruisecontrol_complet.zip

Jurnal

Data Progres
7-9 mai Documentare, stabilire in principiu a modului cum va functiona
10-13 mai Realizare scheme electrice.
13 mai - 21 mai Alergat dupa piese, realizat PCB-ul si cumparat intr-un final toate piesele importante
21 mai - 24 mai Implementat hardware. Descoperit 1.000 de probleme. Peticit placa. Am terminat partea de selectie a vitezei
24 mai Descoperit ca nu merge L298. Schimbat cu altul. Aceeasi problema. Multi nervi.
25 mai Aflat de ce nu merge L298. Neatentie mare la corespondenta dintre ce am desenat in Eagle si cum am asezat L298-ul pe placa.
25 mai - 31 mai Pauza.
1 iunie - 2 iunie Terminat hardware-ul. Facut conectori si cabluri. Primele teste pe module individuale
3 iunie Scris codul. Prezentat. Totul a fost ok!

Bibliografie/Resurse

Software:

  1. http://elf.cs.pub.ro/pm/wiki/ - laboratoarele sunt bine scrise, iar codul este usor de adaptat pentru proiecte
  2. http://www.avrfreaks.net/ - forum-ul este foarte util. Sigur veti mai gasi pe cineva cu o problema asemanatoare

Hardware:

  1. http://elf.cs.pub.ro/pm/wiki/ - foarte utile sunt schemele de la placuta programator, placuta folosita in laborator si alte detalii despre hardware pe care le veti gasi in laboratoare
pm/prj2010/pgp/cruise.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