Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul constă în realizarea unei mașini teleghidate folosind Bluetooth.
Mi-am propus să realizez acest proiect deoarece mi s-a părut tare ideea de a controla o mașinuță folosind telefonul mobil sau calculatorul. Deoarece telecomenzile sunt limitate și se pot adapta greu pentru noi funcționalități ale mașinii, mi se pare un proiect fun cu multe posibilități de dezvoltare.
Un alt avantaj este prețul. Cu aproximativ 100RON am realizat o mașinuță care în magazine se găsește la un preț de 4 ori mai mare și merge doar pe iPhone :)
La plăcuță este conectat un modul Bluetooth Linvor Slave. Acesta trebuie să comunice cu un master ce implementează protocolul de comunicație al aplicației Android BlueBerry. Minimal, aceasta trimite comenzi s,speedLeft,speedRight pentru a controla roboți ce au câte un motor pe fiecare parte.
Prin două punți H, plăcuța va controla direcția de mers.
Android:
Windows:
Cod:
#include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h> #define CAR_PORT PORTC #define LEFT (1 << 7) #define RIGHT (1 << 6) #define FWD (1 << 4) #define REAR (1 << 5) #define STOP 0 void init_usart() { UCSR0A = 0; UCSR0B = _BV(RXEN0) | _BV(TXEN0); //enable RX si TX UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); //8 data bit int baud = 103; UBRR0= baud; } char get_data() { while (!(UCSR0A & (1<<RXC0))); return UDR0; } void send_data(char data) { while ( !( UCSR0A & (1<<UDRE0)) ); // Wait for empty transmit buffer UDR0 = data; // Put data into buffer, sends the data } void reply() { const char* p = "pmrulz"; int i; for (i = 0; i < 6; i++) send_data(p[i]); send_data('\n'); } int parse_int() { int value = 0; int sign = 1; while (1) { char c = get_data(); if (c == '\n' || c == '\0' || c == ',') { return sign * value; } else if (c == '-') { sign = -1; } else { value = value * 10 + c - '0'; } } return 0; } void get_values(int *ls, int *rs) { parse_int(); *ls = parse_int(); *rs = parse_int(); } int main(){ DDRC = 0xFF; DDRA = 0xFF; PORTA = 0; init_usart(); CAR_PORT = STOP; while (1) { /* Read command. */ char c = get_data(); if (c == 's') { /* Move command. */ int ls, rs; get_values(&ls, &rs); char state = STOP; if ((ls + rs) > 40) { state |= FWD; } if ((ls + rs) < -40) { state |= REAR; } if (ls - rs > 20) { state |= RIGHT; } if (rs - ls > 20) { state |= LEFT; } CAR_PORT = state; reply(); } else if (c == '\n') { /* Reply after every other command */ reply(); } } return 0; }
Am realizat o mașinuță ce poate fi controlată prin Bluetooth folosind Blueberry, un software Open Source pentru a controla diverse echipamente de la distanță.
Momentan nu mai pot incarca o noua versiune a programului pe placuta.
Interfațat cu bluetooth is cool. Am avut un fel de epifanie atunci când am reușit să aprind niște leduri de pe ecranul telefonului mobil. PM părea un iad din auzite, dar nu e chiar așa.
Cod Sursă: Arhiva
Am legat de controller driverul de motor al mașinii. Astfel, setând semnalul pe pini se poate comanda mașina înainte/înapoi stânga/dreapta folosind un API. Actually setând niște pini și folosind macrodefiniții.