Constantin ŞERBAN-RĂDOI - Mașinuță teleghidată prin Bluetooth

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul se dorește a fi o mașinuță de jucărie comandată prin Bluetooth, de pe telefonul mobil sau laptop.

Scopul este de a aduce bucurie în rândul copiilor și, mai ales al studenților Geek.

Inițial aveam de gând să fac un Line Follower, însă m-am gândit că e mai fun să te joci cu o mașinuță teleghidată.

Cred că proiectul este util deoarece sporește gradul de relaxare al oamenilor.

Descriere generală

Diagrama bloc

Proiectul este format din 3 module (plăcuțe):

  1. Plăcuța de etapa 1 - Conține microcontroller-ul ATMEGA324PA și reprezintă “creierul”
  2. Interfața Bluetooth - O plăcuță ce se ocupă de interfațarea între microcontroller și modulul Bluetooth HC-05
  3. Driverul de motoare - O plăcuță ce se ocupă de interfațarea între microcontroller și driver-ul de motoare L298N

Practic mașinuța este legată direct la Driver-ul de motoare (cele 2 motoare + alimentarea). Această plăcuță este legată la plăcuța cu microcontroller-ul, de la care primește input-ul. Partea de comandă este primită de către microcontroller de la modulul Bluetooth, prin interfața serială USART. Mai departe, informația se primește de la orice dispozitiv compatibil Bluetooth care are o aplicație capabilă să transfere comenzi pentru mașinuță (mesaje în care se trimite starea a 4 biți: forward, backward, left, right)

Hardware Design

Lista de piese pentru prima etapă:

Lista de piese pentru modulele Bluetooth și driverul de motoare:

Schema interfață modul Bluetooth:

Schema interfață driver L298N:

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Mediul de dezvoltare folosit a fost Eclipse (într-o mașină virtuală de Ubuntu căreia tot trebuia să-i dau suspend când vroiam să programez plăcuța, deoarece n-o recunoștea când era VMWare pornit :-()

Nu am folosit biblioteci third party.

Ca algoritm de implementat ar fi de fapt un mini-protocol de comunicație, prin Bluetooth. Protocolul constă în așteptarea unor pachete la modulul bluetooth de pe plăcuță care să descrie următoarele acțiuni:

  • Mers înainte
  • Mers înapoi
  • Viraj stânga
  • Viraj dreapta

Aceste acțiuni pot fi combinate 2 câte 2, de exemplu: stânga+față, dreapta+spate, etc.

Pentru acest lucru este nevoie de un singur octet care să reprezinte o mască de biți, fiecare bit reprezentând una din cele 4 acțiuni descrise mai sus. Evident, nu pot fi toți activi la un moment dat, dar este cel mai simplu de implementat așa.

Implementare: Din păcate nu am apucat să implementez partea de comunicație prin Bluetooth, însă am reușit să fac mașinuța să se miște înainte și înapoi în funcție de butonul PD6 de pe plăcuță:

while (1)
{
	if (!(PIND & (1 << PD6))) {// daca bitul corespunzator PD6 este 0
		PORTD |= (1 << PD7);    		// LED ON
		MOTOR_PORT &= ~(1 << MOTOR_IN3);
		MOTOR_PORT |= (1 << MOTOR_IN4);		// Go forward
 
		MOTOR_PORT &= ~(1 << MOTOR_IN1);	// Go left
		MOTOR_PORT |= (1 << MOTOR_IN2);
	}
	else {
		PORTD &= ~(1 << PD7);			// LED OFF
		MOTOR_PORT &= ~(1 << MOTOR_IN4);	// Go backward
		MOTOR_PORT |= (1 << MOTOR_IN3);
 
		MOTOR_PORT &= ~(1 << MOTOR_IN2);	// Go right
		MOTOR_PORT |= (1 << MOTOR_IN1);
	}
 
	_delay_ms(150);
}

Macro-urile corespunzătoare port-urilor sunt următoarele:

#define MOTOR_PORT (PORTA)
#define MOTOR_PORT_DIR (DDRA)
#define BLUETOOTH_TRANSMIT_PORT (PORTD)
#define BLUETOOTH_EXTRAS_PORT (PORTC)
 
#define ENA (PA2)
#define ENB (PA3)
 
#define MOTOR_IN1 (PA4)
#define MOTOR_IN2 (PA5)
#define MOTOR_IN3 (PA6)
#define MOTOR_IN4 (PA7)

Inițializarea direcțiilor am făcut-o după cum urmează, la începutul funcției main:

DDRD &= ~(1 << PD6);		// pinul PD6 va fi input
PORTD |= (1 << PD6);		// activam rezistenta de pull-up
DDRD |= (1 << PD7);		// LED as output
 
MOTOR_PORT_DIR |= (1 << ENA) | (1 << ENB) | (1 << MOTOR_IN1) | (1 << MOTOR_IN2) | (1 << MOTOR_IN3) | (1 << MOTOR_IN4);
 
MOTOR_PORT |= (1 << ENA) | (1 << ENB);	// Comanda motoarelor este pornită tot timpul. Acestea merg fie la turație maximă, fie la 0.

Rezultate Obţinute

Starea în care se afla ultima dată mașinuța

Concluzii

Proiectul a fost unul interesant. Mi-a dat destul de mult de furcă, în special partea cu design-ul plăcuțelor cu modulul Bluetooth și cel cu driverul de motoare, însă a fost o experiență interesantă.

Cred că am învățat pe parcursul proiectului ce nu învățasem la minunatele electronici din anul 2, într-un mod practic și drăguț.

Regret totuși că nu am reușit să termin de scris codul pentru comunicația prin Bluetooth. Ar fi fost interesant să controlez mașinuța de pe telefonul mobil sau de pe laptop :-)

Download

Jurnal

  1. Pregătire componente: Achiziționarea componentelor pentru plăcuța de etapa 1. Au fost în jur de 35 de lei toate componentele.
  2. “Coacere” plăcuță etapa 1: Aici am avut ceva mici peripeții, deoarece prima plăcuță a eșuat, partea de sus a circuitului fiind total corodată. Noroc cu un coleg care avea de rezervă o altă plăcuță cu fotorezist. (Încă 7 lei la costul componentelor deci)
  3. Lipire componente: În mare totul a decurs bine. Au fost mici scurt-uri care trebuiau corectate cu cutter-ul, dar în aproximativ 5-6 ore am terminat de lipit tot ce era de pus pe plăcuță.
  4. Achiziționat noi componente: M-am decis să fac mașinuța teleghidată prin Bluetooth, așa că primul pas a fost să achiziționez o mașinuță teleghidată (90 RON) și un modul bluetooth (35 RON).
  5. Achiziționat driver: Am cumpărat și driverul de motoare L298N (14 RON), urmând să fac o plăcuță care să-l facă utilizabil.
  6. Proiectat plăcuțe: Un proces destul de laborios și chinuitor, însă după vreo săptămână am reușit să le proiectez în Eagle.
  7. Achiziționat bulk de piese: Aproximativ 12 RON pe piese (rezistențe, diode, stabilizator), vreo 10 RON pe primele 2 PCB-uri, apoi încâ 16 RON pe alte două PCB-uri de 2 ori mai mari (să am rezerve), deoarece primele n-au ieșit bine. Au mai fost marker-ul vreo 5 RON și clorura ferică aproximativ 5 RON.
  8. Construcția: După multe ore de încercări, am reușit să printez circuitele celor două plăcuțe cu marker-ul, și după alte câteva ore să lipesc componentele pe ele.
  9. Last minute programming: Am reușit să fac mașinuța să se miște înainte/înapoi apăsând pe butonul programabil de pe plăcuță, chiar înainte să prezint proiectul

Bibliografie/Resurse

pm/prj2013/avoinescu/1.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