Table of Contents

Mihai BIVOL - BT Car

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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 :)

Descriere generală

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.

Hardware Design

bluetoothmodule2-1024x465.jpg

Software Design

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;
}

Rezultate Obţinute

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.

Concluzii

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.

Download

Cod Sursă: Arhiva

Jurnal

Media

Stage 1

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.

Resurse

Comenzi modul BT Cod arduino pentru BT