Autorul poate fi contactat la adresa: Login pentru adresa
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.
Proiectul este format din 3 module (plăcuțe):
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)
Lista de piese pentru prima etapă:
Lista de piese pentru modulele Bluetooth și driverul de motoare:
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:
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.
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