PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibobee Advanced



gateway
03.01.2014, 18:23
Hallo Leute,

da dieses Forum immer ein hilfreicher Begleiter auf meinem Roboterweg war, möchte ich jetzt mal, im Rahmen meiner Möglichkeiten, ein bißchen was zurückgeben.
Ich habe die Nibobee mit folgenden Erweiterungen ausgestattet:



SRF-8 Ultraschallmodul (I2C) auf HS-55 Servo
2 Zellen Lipo mit 78S05CV stabilisiert und mit LipoSaver überwacht
BTM-222 Modul (UART) zur Kommunikation mit PC und Android
DSCP01 E-Kompass (I2C)
2 superhelle blaue Scheinwerfer LEDs
Filz auf den Stützball geklebt
Getriebeschutz aus Kunststoff


So sieht mein Bienchen derzeit aus:

27052


Diese Aufgabenstellungen hab ich behandelt:




Schneller Linienfolger -> Finite State Machine mit PD-Regler kombiniert
Rekonstruktion einer gefahrenen Linie -> Algorithmus von oben kombiniert mit E-Kompass bzw. Odometrie und an gnuplot gesendet
Navigieren im Raum und Hindernisse erkennen -> Servo und Ultraschall
Radar -> Servo und Ultraschall
Kommunikation mit PC und Handy -> BTM-222 und putty bzw. BluetoothSPP Pro


Den Code, die Dokumentation und Videos gibts hier
http://www.gateways-home.org/wb/pages/myrobots/--nibobee.php

Leider ist die Dokumentation eher dürftig, aber mehr habe ich leider nicht mehr gefunden ;)
Bei Bedarf stehe ich erstens selbst für Fragen zur Verfügung und zweitens kann ich, wenn wirklich Interesse besteht, noch ein klein wenig mehr dokumentieren.

Der Code ist wie auf der Seite erwähnt mein unbereinigter Arbeitscode, also setzt euch hin, bevor ihr die Datei öffnet.

Hoffe es ist die eine oder andere Anregung für jemanden dabei.

Liebe Grüße aus Österreich!

vohopri
05.01.2014, 13:04
Servus,

das ist ja eine hübsche Plattform und du hast da schon einiges durchgearbeitet. Das gefällt mir gut.

Persönlich würden mich die Schaltpläne und Details der Bluetooth Verbindung interessieren. Einerseits auf dem Bot und andrerseits am PC. Geht das da über die Serielle, über USB und welch api Funktionen sprechen die Verbindung an?

Auch die Logik des Verbindungsaufbaus hätte mich interssiert.

gateway
05.01.2014, 17:25
Hi vohopri,

danke schön.

Schaltplan ist recht einfach, auf der Nibobee sind bereits Stiftleisten mit diversen Ports des ATMega16 verbunden. Unter anderem ist dort am Connector X5 RXD und TXD der UART des Chips ausgeführt. Die hab ich über Widerstände an ein BTM-222 angeschlossen (Weil verschiedene Pegel BTM222 3,3V und Nibobee 5V). Mit einem 3,3V Stabi-IC wird das Modul versorgt. Status LEDs kann man am Modul anschließen, muss man aber nicht.

Die Software dazu:



void writeChar(uint8_t data )
{
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = data;
}

void writeString(char *string)
{
while(*string)
writeChar(*string++);
}

/*void uart_init(void) ATMEGA16
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRB |= (1<<RXEN); // UART RX einschalten
UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1

UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
}*/

void uart_init(void) //ATMEGA1284
{
UCSR0B |= (1<<TXEN0); // UART TX einschalten
UCSR0B |= (1<<RXEN0); // UART RX einschalten
UCSR0C |= (1<<USBS0)|(3<<UCSZ00); // Asynchron 8N1

UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
}

uint8_t uart_getc_nb(void) //non blocking
{
if (!(UCSR0A & (1<<RXC0))) {
return 0;
} else {
return UDR0;
} // Zeichen aus UDR an Aufrufer zurueckgeben
}

uint8_t uart_getc(void)
{
while (!(UCSR0A & (1<<RXC0))) // warten bis Zeichen verfuegbar
;
return UDR0; // Zeichen aus UDR an Aufrufer zurueckgeben
}

void uart_gets( char* Buffer, uint8_t MaxLen )
{
uint8_t NextChar;
uint8_t StringLen = 0;

NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen

// Sammle solange Zeichen, bis:
// * entweder das String Ende Zeichen kam
// * oder das aufnehmende Array voll ist
while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
*Buffer++ = NextChar;
StringLen++;
NextChar = uart_getc();
}

// Noch ein '\0' anhängen um einen Standard
// C-String daraus zu machen
*Buffer = '\0';
}


Es gibt Anleitungen im Netz dazu aber so ganz haben die dann doch nicht funktioniert. Deswegen hab ich dann die Grundfunktionen einfach nach dem Datenblatt nach implementiert.