Forum: Compiler & IDEs Asuro mit Gyroskop


von frankfurter f. (frankfurter)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

Was soll denn der eine Asuro mit der Drehrate des anderen Asuro machen 
???

von frankfurter f. (frankfurter)


Lesenswert?

Danke zuerst für die Antwort, also 2 asuro tauschen Daten aus 
(Gyroskopdaten)
Das Kommunizieren soll via Bluetooth erfolgen.

von Silvan K. (silvan) Benutzerseite


Lesenswert?

frankfurter fra schrieb:
> jetzt soll ich ein Programm schreiben um
[...]

frankfurter fra schrieb:
> Hat jemand vielleicht  eine Idee?

Ich würde vorschlagen: du schreibst ein Programm.

von Karl H. (kbuchegg)


Lesenswert?

Silvan König schrieb:
> frankfurter fra schrieb:
>> jetzt soll ich ein Programm schreiben um
> [...]
>
> frankfurter fra schrieb:
>> Hat jemand vielleicht  eine Idee?
>
> Ich würde vorschlagen: du schreibst ein Programm.

Guter Vorschlag.
Ich würde sogar noch detaillieren:
  * der eine sendet
  * der andere empfängt


Ne, im Ernst, frankfurter: Was erwartest du?
Das dir hier jemand das Programm schreibt?

Hast du denn schon mal eine Kommunikation gemacht?
Wenn nein, dann man doch diesen Teil mal als erstes. Was in dieser Phase 
übertragen wird, ist ja völlig zweitrangig, Hauptsache es wird 
übertragen und am Empfänger kommt das an, was der Sender sendet.

Und wenn das dann klappt, dann machst du Teilprojekt 2A: Das Auslesen 
der Gyrodaten. Denn nur dadurch, dass du den angeschlossen hast, lesen 
sich die Daten ja nicht von alleine aus.

UNd wenn dann beide Teilprojekte klappen und du Erfahrung gesammelt 
hast, dann schreibst du Programm 3: Auslesen der Gyrodaten und 
Übertragen per Bluetooth.

von frankfurter f. (frankfurter)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Was erwartest du?
> Das dir hier jemand das Programm schreibt?

ich erwarte von niemandem was, ich sammle hier nur Erfahrungen und 
Ideen, mehr nichts...

Karl Heinz Buchegger schrieb:
> Hast du denn schon mal eine Kommunikation gemacht?

Natürlich, die Kommunikation funktioniert schon zwischen den beiden.
Das Auslesen der Gyrodaten muss ich noch erproben.

von Oliver S. (oliverso)


Lesenswert?

frankfurter fra schrieb:
> Natürlich, die Kommunikation funktioniert schon zwischen den beiden.

Was ist denn dann die Frage?

Oliver

von frankfurter f. (frankfurter)


Lesenswert?

die Daten des Gyro sollen ausgelesen werden und via bluetooth 
übertragen, das ist die Frage jetzt..

von Karl H. (kbuchegg)


Lesenswert?

frankfurter fra schrieb:
> die Daten des Gyro sollen ausgelesen werden und via bluetooth
> übertragen, das ist die Frage jetzt..


Na ja, aber der Bluetooth Teil funktioniert ja schon, wie du gesagt 
hast. D.h. die Frage ist "die Daten sollen ausgelesen werden". Und 
eigentlich ist das ja keine Frage sondern eine Aufgabenbeschreibung.

Wie werden die Daten vom Gyro ausgelesen?

Das wäre eine Frage!

> Hat jemand vielleicht  eine Idee?
Aber sicher doch. Das Datenblatt zum Gyro besorgen und da drinn 
studieren, welche Möglickeiten für dieses Auslesen zur Verfügung stehen.


(Lass dir doch nicht jeden Scheiss aus der Nase ziehen! Hier weiß kein 
Mensch, welchen Gyro du hast. Oder denkst du es gibt weltweit nur ein 
einziges MOdell?)

von frankfurter f. (frankfurter)


Lesenswert?

mein Gyro: L3G4200D

Karl Heinz Buchegger schrieb:
> Wie werden die Daten vom Gyro ausgelesen?

genau das will ich wissen??

von Chris (Gast)


Lesenswert?

Stellt sich die nächste Frage, wie ist er Angschlossen? SPI I2C?
Und wieder fehlen wichtige Angaben...

von Chris (Gast)


Lesenswert?

Ok sorry, steh ja ganz oben I2C. Dann stellt sich aber die Frage, hast 
du schon mal mit I2C gearbeite, also von Software seite?

von Oliver S. (oliverso)


Lesenswert?

frankfurter fra schrieb:
> genau das will ich wissen??

Steht im Datenblatt ??

Oliver

von frankfurter f. (frankfurter)


Lesenswert?

Chris schrieb:
> Ok sorry, steh ja ganz oben I2C. Dann stellt sich aber die Frage, hast
> du schon mal mit I2C gearbeite, also von Software seite?

nö leider noch nicht

von frankfurter f. (frankfurter)


Lesenswert?

ich guck mir das Datenblatt an
Danke

von Karl H. (kbuchegg)


Lesenswert?

Vom Fleury Peter gibt es einen I2C-Master Code.
Gibts sicher auch von anderen, aber die ist die, die mir als erstes 
einfällt.

http://homepage.hispeed.ch/peterfleury/avr-software.html

Ansonsten: In der Codesammlung wird man mit dem Stichwort I2C sicher 
auch fündig.

von Jürgen S. (jurs)


Lesenswert?

frankfurter fra schrieb:
> mein Gyro: L3G4200D

Warum fragst Du eigentlich nicht von Anfang an mit Angabe der genauen 
Typenbezeichnung?

Soweit ich das sehe, gibt es auf dieser Seite "Example Code" für dieses 
Gyro-Modul:
https://www.sparkfun.com/products/10612

Der Code ist zwar wohl für Arduino, aber wenn Du Dir den Code ansiehst, 
dürfte eine Umsetzung auf die Asuro I2C-Library dann wohl möglich sein 
(kenne Asuro nicht, aber soweit ich gesehen habe, unterstützt diese 
Roboter-Library auch I2C).

Falls Du bisher überhaupt noch nie auch nur irgendeinen billigeren 
I2C-Sensor programmiert hast, wäre es vielleicht auch keine schlechte 
Idee, Dir erstmal ein Programmbeispiel aus Deiner Asuro-Library für 
irgendeinen anderen direkt unterstüttzen I2C-Sensor genauer anzusehen, 
vielleicht einen einfachen Temperatursensor, um erst danach an die 
Code-Umsetzung für den neuen I2C-Gyrosensor zu gehen, wenn Du verstanden 
hast, wie die Asuro-I2C-Library generell funktioniert.

von frankfurter f. (frankfurter)


Lesenswert?

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:
1
#include "asuro.h"
2
#include "myasuro.h"
3
void fahren (
4
int distance,
5
int speed)
6
{
7
unsigned  long  enc_count;
8
int   tot_count = 0;
9
int   diff = 0;
10
int   l_speed = speed, r_speed = speed;
11
/* stop the motors until the direction is set */
12
MotorSpeed (0, 0);
13
/* if distance is NOT zero, then take this value to go ... */
14
if (distance != 0)
15
{
16
/* calculate tics from mm */
17
enc_count  = abs (distance) * 10000L;
18
    enc_count /= MY_GO_ENC_COUNT_VALUE;
19
    if (distance < 0)
20
      MotorDir (RWD, RWD);
21
    else
22
      MotorDir (FWD, FWD);
23
  }
24
  EncoderSet (0, 0);
25
  /* now start the machine */
26
  MotorSpeed (l_speed, r_speed);
27
  while (tot_count < enc_count)
28
  {
29
  SerPrint("C\n\r");
30
    tot_count += encoder [LEFT];
31
    diff = encoder [LEFT] - encoder [RIGHT];
32
    if (diff > 0)
33
    { /* Left faster than right */
34
      if ((l_speed > speed) || (r_speed > 244))
35
        l_speed -= 10;
36
      else
37
        r_speed += 10;
38
    }
39
    if (diff < 0)
40
    { /* Right faster than left */
41
      if ((r_speed > speed) || (l_speed > 244))
42
        r_speed -= 10;
43
      else
44
        l_speed += 10;
45
    }
46
    /* reset encoder */
47
    EncoderSet (0, 0);
48
    MotorSpeed (l_speed, r_speed);
49
    Msleep (1);
50
  }
51
  MotorDir (BREAK, BREAK);
52
  }
53
void fahren2 (
54
  int distance,
55
    int speed)
56
{
57
  unsigned  long  enc_count;
58
            int   tot_count = 0;
59
            int   diff = 0;
60
            int   l_speed = speed, r_speed = speed;
61
  /* stop the motors until the direction is set */
62
  MotorSpeed (0, 0);
63
  /* if distance is NOT zero, then take this value to go ... */
64
  if (distance != 0)
65
  {
66
    /* calculate tics from mm */
67
    enc_count  = abs (distance) * 10000L;
68
    enc_count /= MY_GO_ENC_COUNT_VALUE;
69
    if (distance < 0)
70
      MotorDir (RWD, RWD);
71
    else
72
      MotorDir (FWD, FWD);
73
  }
74
  /* ... else take the value degree for a turn */
75
  else
76
  {
77
    /*  calculate tics from degree */
78
    enc_count  = abs (degree) * MY_TURN_ENC_COUNT_VALUE;
79
    enc_count /= 360L;
80
81
    if (degree < 0)
82
      MotorDir (RWD, FWD);
83
    else
84
      MotorDir (FWD, RWD);
85
  }
86
  /* reset encoder */
87
  EncoderSet (0, 0);
88
  /* now start the machine */
89
  MotorSpeed (l_speed, r_speed);
90
  while (tot_count < enc_count)
91
  {
92
  SerPrint("V\n\r");
93
    tot_count += encoder [LEFT];
94
    diff = encoder [LEFT] - encoder [RIGHT];
95
96
    if (diff > 0)
97
    { /* Left faster than right */
98
      if ((l_speed > speed) || (r_speed > 244))
99
        l_speed -= 10;
100
      else
101
        r_speed += 10;
102
    }
103
    if (diff < 0)
104
    { /* Right faster than left */
105
      if ((r_speed > speed) || (l_speed > 244))
106
        r_speed -= 10;
107
      else
108
        l_speed += 10;
109
    }
110
    /* reset encoder */
111
    EncoderSet (0, 0);
112
    MotorSpeed (l_speed, r_speed);
113
    Msleep (1);
114
  }
115
  MotorDir (BREAK, BREAK);
116
  }
117
int main (void)
118
{
119
  Init();
120
  EncoderInit();
121
           unsigned char senden, abfang;
122
  unsigned char taste, taste2;
123
  int i = 0;
124
  senden = 0;   // sende-Variable auf null setzen
125
  while(1) {
126
    fahren(1000,0,180);
127
    fahren2(-1000,0,180);
128
    Msleep(200);
129
  }
130
  return 0;
131
}

Das Programm für den ASURO -Slave:
1
#include "asuro.h"
2
#include "myasuro.h"
3
void rechts (
4
int distance,
5
int degree,
6
int speed)
7
{
8
unsigned  long  enc_count;
9
int   tot_count = 0;
10
int   diff = 0;
11
int   l_speed = speed, r_speed = speed;
12
/* stop the motors until the direction is set */
13
MotorSpeed (0, 0);
14
/* if distance is NOT zero, then take this value to go ... */
15
if (distance != 0)
16
{
17
/* calculate tics from mm */
18
enc_count  = abs (distance) * 10000L;
19
enc_count /= MY_GO_ENC_COUNT_VALUE;
20
21
if (distance < 0)
22
MotorDir (RWD, RWD);
23
else
24
MotorDir (FWD, FWD);
25
}
26
/* ... else take the value degree for a turn */
27
else
28
{
29
/*  calculate tics from degree */
30
enc_count  = abs (degree) * MY_TURN_ENC_COUNT_VALUE;
31
enc_count /= 360L;
32
33
if (degree < 0)
34
      MotorDir (RWD, FWD);
35
    else
36
      MotorDir (FWD, RWD);
37
  }
38
  /* reset encoder */
39
  EncoderSet (0, 0);
40
  /* now start the machine */
41
  MotorSpeed (l_speed, r_speed);
42
  while (tot_count < enc_count)
43
  {
44
  tot_count += encoder [LEFT];
45
    diff = encoder [LEFT] - encoder [RIGHT];
46
    if (diff > 0)
47
    { /* Left faster than right */
48
      if ((l_speed > speed) || (r_speed > 244))
49
        l_speed -= 10;
50
      else
51
        r_speed += 10;
52
    }
53
    if (diff < 0)
54
    { /* Right faster than left */
55
      if ((r_speed > speed) || (l_speed > 244))
56
        r_speed -= 10;
57
      else
58
        l_speed += 10;
59
    }
60
    /* reset encoder */
61
    EncoderSet (0, 0);
62
    MotorSpeed (l_speed, r_speed);
63
    //Msleep (1);
64
  }
65
}
66
67
int main (void)
68
{
69
  Init();
70
  EncoderInit();
71
  unsigned char senden;
72
  while(1)
73
  {
74
    SerRead(&senden, 1,0);    // ein Zeichen empfangen
75
    
76
    if(senden == 'C'){
77
      GoTurn(0,360,150);
78
      BackLED(ON,ON);
79
    }
80
    else if(senden == 'V'){
81
      GoTurn(0,-360,150);
82
      BackLED(OFF,OFF);
83
      StatusLED(YELLOW);
84
    }
85
  }    
86
  return 0;
87
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.