PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro bluetooth



frankfurter
02.10.2012, 15:17
Hallo zusammen
Ich bin neu hier;) , möchte gerne etwas mit Asuro experementieren, und zwar 2 Asuros programmieren dass sie via bluetooth kommunizieren und sensordaten austauschen.
ich weiss nicht was ich dazu brauche, Asuro habe ich schon zusammengebaut..
mfg

m.a.r.v.i.n
03.10.2012, 15:04
Hallo,
da würde sich evtl. das Arexx Bluetooth Kit ARX-BT03 anbieten. Gibt es bei ELV oder dem großen C. Allerdings müssen dazu der Liniensensor, Front LED, IR Receiver und IR LED ausgelötet und durch Buchsenleisten ersetzt werden.
Zudem weiß ich nicht, ob das Modul Master/Slave fähig ist. Wenn du 2 Asuros über BT verbinden willst, muß ein BT Modul Master, das andere Slave sein.

frankfurter
08.10.2012, 09:35
Hallo,
vielen Dank für die Antwort, ich habe jetzt eine Frage zum Gyroscope, ich möchte eins auf asuro einbauen, und ich weiss nicht welches am besten passt!
hat jemand eine Idee??

m.a.r.v.i.n
08.10.2012, 12:52
Hallo,
der Asuro läuft mit 5V, Gyros normalerweise mit 3.3V. Hier würde sich ein Gyroboard mit Onboard Spannungsregler anbieten, z.B. das IDG500 dual Gyro (http://www.watterott.com/de/Breakout-Board-IDG500-Dual-500-degree/sec). Anschluss analog anstelle der Liniensensoren. Brauchst du ein 1 oder 2 Achsen Gyro?
Nochmal zum Bluetooth Board. Da keine ausreichenden Unterlagen zum Arexx ARX-BT03 verfügbar sind, würde ich davon abraten. Es wird nur von Verbindung zwischen Smartphone und Roboter gesprochen, das deutet auf ein BT Slave-Board hin.

frankfurter
10.10.2012, 11:17
Hi,
mir reicht 1 Achse-Gyro, was bittet sich da am besten an??
mfg

frankfurter
10.10.2012, 11:25
Ich habe das hier: Gyro Breakout - LISY300AL 300 °/sec
und Das:ADXRS620 Breakout
was soll ich am besten nehmen?

m.a.r.v.i.n
10.10.2012, 12:58
Hier würde ich den billigeren LISY300AL vorziehen. Dazu brauchst du dann aber noch einen kleinen (100mA) 3V o. 3.3V Low drop Spannungsregler. Der ADXRS620 läuft zwar mit 5V, aber der Asuro hat selbst keinen Spannungsregler. Die Versorgungsspannung schwankt deshalb zu sehr, nicht gut für solche Sensoren.

frankfurter
10.10.2012, 22:48
Hallo,
ich hab mir für "3-Achsen Gyro L3G4200D Breakout" entschieden wegen dem digitalen Ausgang, mal sehen wie es mit dem Asuro passt???
ich hoffe die 2 Achsen kann ich irgendwie deaktivieren!

Valen
12.10.2012, 00:08
Ignorieren reicht. Nur 1er der 3 Achsen ist nicht wirklich nötig. Weil Asuro nicht so schnell auf seine Rücke rollt. Mit die 2te Achse könntest du Ihn balancieren lassen auf seine Rädern. (Steigern Achse) Aber dazu muss das Schwerpunkt weiter nach hinten. Zbs. durch ein 4xAA Akkublock (statt den 4xAAA) ganz hinter der Platine zu basteln.

Mit die 3te Achse könntes du Richtungsänderungen bemerken und ausregeln mittels unterschiedliche Motor-starke.

frankfurter
31.10.2012, 12:31
Hallo,
jetzt habe ich endlich die 2 Gyros (L3G4200D)bekommen , und kanns los gehen..
ich weiss es aber nicht wie ich die richtig aufm Asuro einbauen kann, ich will nichts riskieren die Teile sind nicht gerade billig.
2359223592
Mit bestem Dank

Valen
31.10.2012, 18:09
Zuche nach I2C und Asuro. Leider ist die Hardware I2C Schnitstelle im Atmega8 chip schon durch den Tastermessung und Batteriespannungmessung besetzt. Du muss dadurch mit den noch freie Pins an dem Liniensensor Stelle in Software die I2C communication simulieren. (Bit-banging (http://de.wikipedia.org/wiki/Bit-Banging)) Das Buch "Mehr Spass mit Asuro, Band 2" erklärt ganz gut wie Asuro den LCD-erweiterung anspricht mittels I2C. Diesen Code wurde dich sicher helfen. Wie man genau mit diesen Gyros kommuniziert soll in deren Datasheet stehen.

- - - Aktualisiert - - -

Das sind diesen, richtig?

http://www.pololu.com/catalog/product/1272

frankfurter
01.11.2012, 16:51
danke
ja das ist das Gyro, das ich habe.
ich muss mir das Buch besorgen dann gucke ich mal..

m.a.r.v.i.n
01.11.2012, 17:47
Hiermal ein Schnellschuß für die Verdrahtung (deshalb ohne Gewähr). 4 Drähte sind notwendig VIN (5V), GND, SDA an ADC3, SCL an ADC2 des Erweiterungs Port. Die Liniensensoren müssen raus. Die aktuelle Asuro Lib (http://sourceforge.net/projects/asuro/) unterstützt I2C. Dort kann man auch einstellen welcher ADC Port SDA, bzw SCL sein soll.

frankfurter
06.11.2012, 10:19
danke für die Antwort ,ich versuche mal

frankfurter
19.11.2012, 16:22
Hallo,
jetzt habe ich das Gyro mit dem Asuro verbunden und zwar so:

Gyro Asuro
---------------
VIN ==> 5V
GND ==> GND
SDA ==> Pin 28
SCL ==> Pin 27

jetzt soll ich ein Programm schreiben um sensordaten(Gyroskop)auszutauschen zwischen 2 Asuros.
Datenaustasch erfolgt via Bluetooth (BTM222) // Bluetooth ist schon auf Asuro montiert.
Hat jemand vielleicht eine Idee?
MfG

- - - Aktualisiert - - -

237882378923790

frankfurter
23.11.2012, 11:19
Danke für deine Antwort,
ich habe jetzt zwei programme geschrieben ,allerdings ohne gyro und ich weiss nicht genau wie und was ich integrieren kann um die Daten vom Gyro auszulesen und zum andern Asuro zu senden ??
//Der Master-ASURO soll nach dem Einschalten einen Meter vor und zurückfahren und sendet ständig das Signal an den Slave-ASURO. Wenn der ASURO-Slave in der Nähe(im Piconetz) ist, dann kann er das Signal empfangen und dreht sich im Kreis. Sobald der Master ausgeht oder nicht mehr in Reichweite ist, stoppt der ASURO-Slave sich bewegen und macht nach zwei Sekunden macht er eine Halbkreis Drehung und bleibt dann Stehen. Der Programmablauf wiederholt sich wenn man den ASURO-Master wieder eingeschalte//

Das Programmteil für den ASURO-Master:


#include "asuro.h"
#include "myasuro.h"
void fahren (
int distance,
int speed)
{
unsigned long enc_count;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
/* stop the motors until the direction is set */
MotorSpeed (0, 0);
/* if distance is NOT zero, then take this value to go ... */
if (distance != 0)
{
/* calculate tics from mm */
enc_count = abs (distance) * 10000L;
enc_count /= MY_GO_ENC_COUNT_VALUE;
if (distance < 0)
MotorDir (RWD, RWD);
else
MotorDir (FWD, FWD);
}
EncoderSet (0, 0);
/* now start the machine */
MotorSpeed (l_speed, r_speed);
while (tot_count < enc_count)
{
SerPrint("C\n\r");
tot_count += encoder [LEFT];
diff = encoder [LEFT] - encoder [RIGHT];
if (diff > 0)
{ /* Left faster than right */
if ((l_speed > speed) || (r_speed > 244))
l_speed -= 10;
else
r_speed += 10;
}
if (diff < 0)
{ /* Right faster than left */
if ((r_speed > speed) || (l_speed > 244))
r_speed -= 10;
else
l_speed += 10;
}
/* reset encoder */
EncoderSet (0, 0);
MotorSpeed (l_speed, r_speed);
Msleep (1);
}
MotorDir (BREAK, BREAK);
}
void fahren2 (
int distance,
int speed)
{
unsigned long enc_count;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
/* stop the motors until the direction is set */
MotorSpeed (0, 0);
/* if distance is NOT zero, then take this value to go ... */
if (distance != 0)
{
/* calculate tics from mm */
enc_count = abs (distance) * 10000L;
enc_count /= MY_GO_ENC_COUNT_VALUE;
if (distance < 0)
MotorDir (RWD, RWD);
else
MotorDir (FWD, FWD);
}
/* ... else take the value degree for a turn */
else
{
/* calculate tics from degree */
enc_count = abs (degree) * MY_TURN_ENC_COUNT_VALUE;
enc_count /= 360L;

if (degree < 0)
MotorDir (RWD, FWD);
else
MotorDir (FWD, RWD);
}
/* reset encoder */
EncoderSet (0, 0);
/* now start the machine */
MotorSpeed (l_speed, r_speed);
while (tot_count < enc_count)
{
SerPrint("V\n\r");
tot_count += encoder [LEFT];
diff = encoder [LEFT] - encoder [RIGHT];

if (diff > 0)
{ /* Left faster than right */
if ((l_speed > speed) || (r_speed > 244))
l_speed -= 10;
else
r_speed += 10;
}
if (diff < 0)
{ /* Right faster than left */
if ((r_speed > speed) || (l_speed > 244))
r_speed -= 10;
else
l_speed += 10;
}
/* reset encoder */
EncoderSet (0, 0);
MotorSpeed (l_speed, r_speed);
Msleep (1);
}
MotorDir (BREAK, BREAK);
}
int main (void)
{
Init();
EncoderInit();
unsigned char senden, abfang;
unsigned char taste, taste2;
int i = 0;
senden = 0; // sende-Variable auf null setzen
while(1) {
fahren(1000,0,180);
fahren2(-1000,0,180);
Msleep(200);
}
return 0;
}


Das Programm für den ASURO -Slave:


#include "asuro.h"
#include "myasuro.h"
void rechts (
int distance,
int degree,
int speed)
{
unsigned long enc_count;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
/* stop the motors until the direction is set */
MotorSpeed (0, 0);
/* if distance is NOT zero, then take this value to go ... */
if (distance != 0)
{
/* calculate tics from mm */
enc_count = abs (distance) * 10000L;
enc_count /= MY_GO_ENC_COUNT_VALUE;

if (distance < 0)
MotorDir (RWD, RWD);
else
MotorDir (FWD, FWD);
}
/* ... else take the value degree for a turn */
else
{
/* calculate tics from degree */
enc_count = abs (degree) * MY_TURN_ENC_COUNT_VALUE;
enc_count /= 360L;

if (degree < 0)
MotorDir (RWD, FWD);
else
MotorDir (FWD, RWD);
}
/* reset encoder */
EncoderSet (0, 0);
/* now start the machine */
MotorSpeed (l_speed, r_speed);
while (tot_count < enc_count)
{
tot_count += encoder [LEFT];
diff = encoder [LEFT] - encoder [RIGHT];
if (diff > 0)
{ /* Left faster than right */
if ((l_speed > speed) || (r_speed > 244))
l_speed -= 10;
else
r_speed += 10;
}
if (diff < 0)
{ /* Right faster than left */
if ((r_speed > speed) || (l_speed > 244))
r_speed -= 10;
else
l_speed += 10;
}
/* reset encoder */
EncoderSet (0, 0);
MotorSpeed (l_speed, r_speed);
//Msleep (1);
}
}

int main (void)
{
Init();
EncoderInit();
unsigned char senden;
while(1)
{
SerRead(&senden, 1,0); // ein Zeichen empfangen

if(senden == 'C'){
GoTurn(0,360,150);
BackLED(ON,ON);
}
else if(senden == 'V'){
GoTurn(0,-360,150);
BackLED(OFF,OFF);
StatusLED(YELLOW);
}
}
return 0;
}

frankfurter
26.11.2012, 16:00
hallo,
ich flashe mein prog auf atmel atmega8 aber Asuro macht immer das Selbe, egal was ich mache.
woran kann das liegen??

Valen
26.11.2012, 22:06
Und was ist das Problem? Was ist "Selbe"? Und was hast du gemacht? Welcher änderungen sind gemacht ohne Erfolg?

Ich habe nur die folgende Merkwürdigkeiten gefunden:

Ist dein Master Programm eigentlich richtig Compiliert? Deine Funktionen "fahren" und "fahren2" haben beide 2 Parametern (distance, speed). Aber in den main Funktion werden sie mit 3 Parametern angerufen ( +/- 1000, 0 und 180). Da musste es doch eigentlich Compiler Fehler gegeben haben.

In dem Slave Programm benutzt du den Odometrie. Aber auch die BackLEDs werden an geschaltet. Das geht nicht zusammen. Nur in EncoderInit werden die BackLEDs aus geschaltet und die Odometrie LEDs angeschaltet. Sonnst wird dort nicht genug IR-licht auf den Scheiben fallen. EncoderInit wird nur Einmal am Anfang der Slave Main Funktion angerufen. Konklusion: in die 2te Durchlauf von GoTurn werden die Encoderticks nicht richtig erkannt. Das erklärt vielleicht wieso der Slave nur ein Halbkreis macht. Die 2 Sekunden kann ich nicht erklären. (Bluetooth Verbindung wieder erstellen vielleicht?)

Ich habe auch aber nog einige weitere Fragen an dich. Verstehst du eigentlich was passiert in die fahren, fahren2 und GoTurn Funktionen? In den Master Funktionen sendest du ein 'C' oder 'V' bei jeder Durchlauf der While-schleife die den Abfahrt kontrolliert. Wie lange dauert einer While-rundgang nach deiner Idee? Wie oft wird ein C oder V gesendet? Und wie lange braucht den Slave Asuro einer diesen 2 Kommando Zeichen ab zu arbeiten? Wie lange braucht er für ein ganzen Kreis zu machen?

Bitte vergesse das Gyro jetzt. Sicher in einer Kombination mit Master-Slave Kommunikation. Ich empfehle dich erst mit ein einziges Programm rum zu spielen das die Odometriefahrt genau so macht wie du das erwartest. Und wenn es nicht macht was du versuchst, du das genauer analysiert. Verwende den Bluetooth als Debugge-meldung Stelle. Sende den geänderte Variablen und Programm Zustanden über die Serielle Schnittstelle zu den PC. Dann kannst du besser beobachten was ein Programm genau macht. (Oder wichtiger, worauf er sein Entscheidungen basiert!) Vielleicht muss du den Baudrate dafür etwas höher einstellen. Mit 2400 baud kostet ein Zeichen schon eine ganze Weile. Ungefähr 4 Milisekunden. In diesen Zeit sind schon 20 Odometrie Beleuchtungswerten gemessen in den ADC.

frankfurter
27.11.2012, 09:43
[QUOTE=Valen;565194]Und was ist das Problem? Was ist "Selbe"? Und was hast du gemacht? Welcher änderungen sind gemacht ohne Erfolg?
ich habe mit einem simplen Prog. versucht (gerade aus fahren), und aud dem ersten Asuro geflasht und er dreht sich immer im Kreis auf dem anderen fährt eine krze strecke und dreht sich auch , danach habe ich mit einem anderen prog. probiert, und die machen immer die gleiche Bewegung.
P.S. auf einen dritten Auro ohne Bluetooth und Gyro funktierts es gut.

Valen
28.11.2012, 12:13
[QUOTE=Valen;565194]Und was ist das Problem? Was ist "Selbe"? Und was hast du gemacht? Welcher änderungen sind gemacht ohne Erfolg?
ich habe mit einem simplen Prog. versucht (gerade aus fahren), und aud dem ersten Asuro geflasht und er dreht sich immer im Kreis auf dem anderen fährt eine krze strecke und dreht sich auch , danach habe ich mit einem anderen prog. probiert, und die machen immer die gleiche Bewegung.
P.S. auf einen dritten Auro ohne Bluetooth und Gyro funktierts es gut.Diese Fragen habe ich gestellt damit du vielleicht etwas Präziser wird in deine Erklärungen. Leider ist meiner Magi Glaskugel im Reparaturshop. Und danach hat es Weihnacht/Neujahr Ferien.

Was ist die Code von diese genannte "simplen" Programmen? Deine 2 Programmen oben wurde ich nicht als simpel/einfach kennzeichnen. Die Interaktion zwischen der Master und Slave Programm (eben einseitige Interaktion Ma->Sl) macht das kompliziert weil die Timing nicht übereinstimmt.

Jeder Asuro Robot ist verschieden in seine Bau. Das gilt auch für die Elektronik Teilen. Also, braucht jeder Asuro seine eigene Asuro-Bibliothek wo seine Werten (zbs. die Odometrie Beleuchtung Grenzwerten in myasuro.h) mit rein kompiliert werden. Oder man schreibt ein Programm/Lib erweiterung das die 'persönliche' Werten bei Anfang kalibriert und später in dein Programm verwendet. Die letzte Lösung ist Universal, aber auch viel mehr aufwand.

Wenn es auf eine andere Asuro ohne Bluetooth und Gyro gut fünktioniert gibt es 3 Mögliche Ursachen:



Diese 3te Asuro ist Speziel ge-eignet für die Werten in dem Lib.
Die Bluetooth Hardware ist auf ein Art angeschlossen das die andere Asuro Funktionen stört.
Die Gyro Hardware ist auf ein Art angeschlossen das die andere Asuro Funktionen stört.


Von außen beobachten von Asuro's verhalten wirst du nicht viel weiter helfen. Eine ganze menge von Überlegungen, Berechnungen und Beürteilungen gehen rund in Asuro's kopf. Und dabei, auch noch Rasend-schnell. Wies schon gesagt, benutze die Bluetooth Übertragung für die Ermittelung seine inneren Gedanken. Sonnst ist es nur Raten was er macht. Oder warum er es nicht macht.