Table of Contents

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>


Descriere generală

schema_bloc.jpg

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

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






  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.


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 pentru senzorul de distanta IR

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


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.

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

Rezultate Obţinute

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