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

  • Bluetooth Linvor

bluetoothmodule2-1024x465.jpg

  • Plăcuță PM
  • Circuit integrat pentru RX-2B

  • Mașină Teleghidată (40 RON din Cora)

Software Design

Android:

  • BlueBerry. Software Open Source pentru a controla roboți de pe un device Android

Windows:

  • Programmer's Notepad + GVIM
  • BootloaderHID

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

  • ??-??-???? ??:?? Plăcuțiada
  • ??-??-???? ??:?? (la câteva săptămâni după plăcuțiadă) Achizitionat Bluetooth Linvor
  • ??-??-???? ??:?? Testat Bluetooth pe un Raspberry PI (Mergea)
  • 13-05-2013 14:00 Achiziționat mașină
  • 13-05-2013 16:00 Reverse engineering pe mașinuță
  • 13-05-2013 20:00 Încercare de a da 3.3V pe punțile H
  • 14-05-2013 03:00 Am constatat că am ars ceva la plăcuță. Nu mai pot boota nimic
  • 14-05-2013 10:00 Andrei Voinescu îmi spune să nu fac ce tocmai am făcut. Pot arde plăcuța.
  • 14-05-2013 ??:?? Plăcuța nu merge. Am refăcut lipiturile. Mașina poate fi controlată de pe altă plăcuță
  • 15-05-2013 ??:?? Am descoperit Blueberry. Instalat bootloader plăcuță. Mașina mergea seara.
  • 16-05-2013 ??:?0 Alimentat plăcuța din pack-ul de baterii de pe mașină. Mașina mergea
  • 16-05-2013 ??:?5 Mașina a căzut pe jos. S-a stricat
  • 17-05-2013 ??:?? Reparat mașină. Thanks at Răzvan Dobre

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

pm/prj2013/avoinescu/mihai-bivol-bluetooth-car.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