Pages: [1]   Go Down
Author Topic: Newbie: Arduino Mega (DFRduino MEAG2560) + URM37 V3.2  (Read 2901 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Gemeinde,
ich fange gerade an mich mit dem Arduino zu beschäftigen (Gestern per Post gekommen). Zwar habe ich etwas Erfahrung mit Elektronik, bin aber etwas eingerostet. Deshalb entschuldige ich mich schonmal für Anfängerfragen  smiley-roll-blue. Dazu kommt, dass mir schon die Augen tränen von der Suche im Netz über alle möglichen Aspekte der Entwicklung damit  smiley-eek.
Es ist sicher komisch, aber ich will wissen wie genau ich den URM37 an den MEGA anschliesse und ob die Library von Miguel Sanchez mit dem MEGA funktioniert. Hat jemand einen Link auf ein Projekt wo das genauer beschrieben ist?
Ich muss mich erstmal wieder reinfinden, daher vielen Dank für Eure Hilfe.

Vielen Dank
Gruss
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21661
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://milesburton.com/URM37_Ultrasonic_Distance_Measurement_Library
http://download.milesburton.com/Arduino/URM37/URM3.2_Mannual_Rev2.pdf
Der Sensor wird über eine serielle Schnitstelle angesteuert. Im obengenannten Beispiel/Bibliothek wird ein Arduino 2009 / UNO verwendet und muß deshalb über Software emuliert werden. Der Arduino Mega hat 4 serielle Schnittstellen und Du kannst eine der 3 freien Schnittstellen verwenden.
Grüße Uwe
« Last Edit: February 19, 2012, 06:02:32 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@uwefed: Vielen Dank. Ich versuche mal mein Glück. Werde berichten ...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, mit etwas Mut zur Lücke hat es funktioniert. Ich habe die Library von Miles Burton benutzt und den URM37 auf TTL umgestellt. Jetzt konnte ich sogar eine LED dann leuchten lassen wenn meine Hand in einer bestimmten Entfernung vom Sensor ist. Was ich noch nicht hinbekommen habe ist einen der anderen Serial-Ports auf dem MEGA für den Sensor zu nutzen. Das versuche ich noch zu verstehen.

Jetzt aber mal zu meiner Motivation. Ich träume davon eine Tricopter zu bauen und zwar nach dem Vorbild der Terminator 3 Flugroboter, die in der Gängen herumfliegen. Das Teil soll selbständig in einer bestimmten Höhe stehen bleiben und wenn man dem Teil zu nahe kommt, egal von welcher Seite, ausweichen.
In meinen stundenlangen Servesessions zum Thema Arduino und URM37, bin ich irgendwann darauf gestossen, dass es ja Quadrocopter und alle anderen Varianten schon gibt mit dem Arduino. Es gibt sogar "fertige" Bausätze für autonomes fliegen (DIY Drones). Dort habe ich auch eine Tricopter gesehen, der genau dem entspricht, was ich eigentlich bauen möchte:



Das Teil ist mit einem

https://store.diydrones.com/ArduPilot_Mega_kit_p/kt-apm-01.htm

gebaut.

Folgende Fragen stellen sich mir:
- Ist es mit diesem "fertigen" ArduPilot noch interessant? Oder wäre ein Aufbau aus Einzelkomponenten sowieso zu hoch für mich?
- Dieser Tricopter hat doch in der Regel zwei Propeller vorne, die starr sind und einen hinten, der gekippt werden kann zum lenken. Der aufgezeigte Tricopter hat die beiden vorderen Propeller auch schwenkbar. kann man das einfach dazu programmieren?

Klar, ich stehe ganz am Anfang und habe noch viel zu lernen. Aber es geht mir vorallem gerade darum abzuschätzen was ich wirklich für mein Projekt benötige. Ich habe mir ja einen DFRduino MEGA2560 gekauft, sehe aber jetzt, dass es sowas wie den ArduPilot gibt. Da ist ein MEGA schon enthalten. Genauso benötige ich für den tatsächlichen Copter Brushless Motoren. Eine Steuerung für diese sieht doch ganz anders aus als für normale DC-Motoren. Macht es trotzdem Sinn zum lernen des Prinzips mit den normalen DC-Motoren zu üben?

Ich würde mich freuen Eure Gedanken dazu zu lesen.

Vielen Dank
loby
Logged

Kiel
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo loby,
ich habe das gleiche Problem, wie Du zu Anfang beschrieben hast, komme aber nicht weiter, da ich schon beim
kompilieren Fehlermeldungen bekomme. Ich benutze Arduino 1.0 mit dem Mega2560 von DFRobot.

Wie hast Du das zum laufen bekommen, oder was übersehe ich???

Hier mal die Fehlermeldungen

In file included from MeasurementBySoftwareSerial.cpp:22:
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:40:20: error: wiring.h: No such file or directory
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:45:22: error: WProgram.h: No such file or directory
In file included from M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:42,
                 from MeasurementBySoftwareSerial.cpp:22:
M:\Arduino\arduino-1.0\libraries\URM37/NewSoftSerial.h:66: error: conflicting return type specified for 'virtual void NewSoftSerial::write(uint8_t)'
M:\Arduino\arduino-1.0\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
In file included from MeasurementBySoftwareSerial.cpp:22:
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:82: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:83: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:84: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:91: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:94: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:103: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:104: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:112: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:115: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:115: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:131: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:134: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:137: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:150: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:151: error: 'byte' has not been declared
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:153: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:154: error: 'byte' does not name a type
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:157: error: 'byte' has not been declared
MeasurementBySoftwareSerial.cpp: In function 'int getMeasurement()':
MeasurementBySoftwareSerial.pde:-1: error: 'class URMSerial' has no member named 'requestMeasurementOrTimeout'

Danke und Gruß
Ardumidi


Logged

Germany
Online Online
Edison Member
*
Karma: 47
Posts: 2321
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Antwort ist zum Greifen nah: http://arduino.cc/en/Main/ReleaseNotes

Quote
* The WProgram.h file, which provides declarations for the Arduino API,
  has been renamed to Arduino.h. To create a library that will work in
  both Arduino 0022 and Arduino 1.0, you can use an #ifdef that checks
  for the ARDUINO constant, which was 22 and is now 100.  For example:

  #if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
  #else
  #include "WProgram.h"
  #endif

Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Kiel
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke, habe ich in die Library eingefügt, leider bin ich immer noch nicht so ganz erfolgreich smiley-kiss
Aber die Fehlermeldungen werden schon mal weniger...

Hier mal der aktuelle Status:

In file included from MeasurementBySoftwareSerial.cpp:22:
M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:40:20: error: wiring.h: No such file or directory
In file included from M:\Arduino\arduino-1.0\libraries\URM37/URMSerial.h:42,
                 from MeasurementBySoftwareSerial.cpp:22:
M:\Arduino\arduino-1.0\libraries\URM37/NewSoftSerial.h:66: error: conflicting return type specified for 'virtual void NewSoftSerial::write(uint8_t)'
M:\Arduino\arduino-1.0\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

Ich geb die Hoffnung nicht auf, dass es irgendwann auch mir gelingt,
Danke für Deine Hilfe!!

Gruß Ardumidi
Logged

WW
Offline Offline
Jr. Member
**
Karma: 0
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1. Fehler - wiring.h:
Ist das gleiche wie mit "WProgram.h". "wiring.h" steckt nun auch in "Arduino.h".
2. Fehler - NewSoftSerial.h:
Durch "SoftwareSerial.h" ersetzen. Das steht ebenfalls unter http://arduino.cc/en/Main/ReleaseNotes
3. Fehler - Print.h:
In Deinem sketch must Du ".print(var,BYTE);" durch ".write(var);" ersetzen, natürlich mit dem, was da an Stelle von "var" steht. Das steht ebenfalls unter http://arduino.cc/en/Main/ReleaseNotes

Kleiner Tip für die Zukunft: Fehlermeldung kopieren und in der Lieblingssuchmaschine danach suchen, dann findet man eigentlich immer etwas brauchbares.
« Last Edit: February 21, 2012, 01:40:59 am by mime » Logged

Kiel
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, habe ich alles gemacht, bekomme aber dann neue Fehlermeldungen:

M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp: In constructor 'URMSerial::URMSerial()':
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:50: error: no matching function for call to 'SoftwareSerial::SoftwareSerial()'
M:\Arduino\arduino-1.0\hardware\arduino\cores\arduino/SoftwareSerial.h:83: note: candidates are: SoftwareSerial::SoftwareSerial(uint8_t, uint8_t, bool)
M:\Arduino\arduino-1.0\hardware\arduino\cores\arduino/SoftwareSerial.h:48: note:                 SoftwareSerial::SoftwareSerial(const SoftwareSerial&)
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp: In member function 'bool URMSerial::hasReading()':
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:58: error: 'serial' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp: In member function 'void URMSerial::readSerial()':
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:64: error: 'serial' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp: In member function 'void URMSerial::sendCommand(byte*)':
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:234: error: 'serial' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:234: error: 'BYTE' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:237: error: 'serial' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:237: error: 'BYTE' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp: In member function 'void URMSerial::begin(uint8_t, uint8_t, long int)':
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:261: error: 'serial' was not declared in this scope
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:261: error: expected type-specifier before 'NewSoftSerial'
M:\Arduino\arduino-1.0\libraries\URM37\URMSerial.cpp:261: error: expected `;' before 'NewSoftSerial'

ich kriegs nicht hin...

Hat nicht irgendjemand die UMR37 V3.2 Lib schon mal auf die neue Arduino1.0 IDE umgestrickt und könnte mir diese
bitte zukommen lassen?
Danke und Gruß
Logged

WW
Offline Offline
Jr. Member
**
Karma: 0
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Bibliothek ist seit 2009 nicht mehr gepflegt worden und Google spuckt auch nichts brauchbares aus. Wie wäre es, wenn Du eine alte IDE (0023) für diese Bibliothek verwendest. Wäre das eine Option?
« Last Edit: February 21, 2012, 07:11:19 pm by mime » Logged

Kiel
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erstmal vielen Dank an Alle, für die Hilfe, habe jetzt die 023er IDE installiert und bin dem Problem
damit aus dem Weg gegangen. Ist zwar nicht ganz befriedigend, aber es läuft damit immerhin.

Grüße
Ardumidi
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
hier mal ein Link zu einem Video, dass den aktuellen Stand bei mir zeigt. Insgesamt habe ich viel Zeit für den Umbau meines Testaufbaus gebraucht und heute mal endlich Ziet gefunden meine RC-Funke einzubinden. Der URM37-Sensor, der Wii-Plus Sensor und der BMA020 sind in diesem Programm gerade deaktiviert. Aber man kann glaube ich sehen auf was ich hinaus will. Der Arm auf dem Turm ist drehbar und kippbar. Der Motor ist auf einem schwenkbaren Teller aufgesetzt, der mit einem Servo gekippt werden kann.



Meine aktuellen Probleme:

- ich habe versucht einen interrupt für das auslesen des RC-Empfängers zu nutzen, leider bisher ohne Erfolg. Mit direktem Auslesen aus dem Loop heraus funktioniert es problemlos. Immer wenn ich den Sender einschalte, dann kommt irgendwie das Programm nicht mehr in den Loop.

Code:
//Debug data
#define DEBUG 0
#define BAUD 9600

// Define pin assignments
#define LEDPIN 13
#define THROTTLEPIN 2

// Define transmitter commands
#define THROTTLETIMEOUT 25000
#define PULSETIMEOUT 4500
volatile int throttle = 9999;
unsigned long previousTime = 0;
unsigned long deltaTime = 0;
unsigned long nowTime = 0;

void setup() {
  pinMode(LEDPIN, OUTPUT);
  pinMode(THROTTLEPIN, INPUT);
  attachInterrupt(0, readTransmitter, RISING);
}

void loop() {
  nowTime = millis();
  readTransmitter();

  digitalWrite(LEDPIN, HIGH);
  Serial.println(throttle);
  digitalWrite(LEDPIN, LOW);
}

void readTransmitter() {
  throttle = pulseIn(THROTTLEPIN, HIGH);
}  

Is there any idea to this?


- The values which I get from the sensors and the RC-receiver jumps a little bit. E.g. the servo trembles (you can here it on the video) if I send the values of the RC-receiver direct to the servo.
Could anyone give me a good algorithm to smooth the values?

Regards,
loby
« Last Edit: March 04, 2012, 01:33:14 pm by loby » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,

ein kurzer Update meines Projekts. Nachdem ich alle Teile jetzt auch im Programm vereinigt habe (RC-Receiver, URM37, BMA020, WiiMotionPlus, Servo) bin ich jetzt bei meinem Testturm etwas weiter gegangen. Ich habe zur Möglichkeit dass der Arm kippen und sich drehen kann, nun dem Arm die Bewegung nach oben ermöglicht. Jetzt muss ich noch einen Motor mit Propeller auf der anderen Seite des Arms anbringen.

Hier ein Video zum aktuellen Stand:


Meine Schwierigkeiten:
- Der WiiMotionPlus ist kein originaler von Nintendo. Der ist sehr nervös und gibt auch sehr schwankende Daten aus. Damit ist es nicht leicht was sinnvolles umzusetzen.
- Bisher habe ich noch keinen Erfolg mit Interrupts für die Sensoren. Das will einfach nicht.
- Die Verbindung der Sensordaten zur Steuerung des Motors (Speed) und des Servos sind noch sehr rudimentär in meinem Programm. Das ist ganz schön schwierig. Z.b. den Motor entsprechend sauber und smooth zu steuern (Speed) wenn der Warm die entsprechende Höhe laut dem URM37 Sensor erreicht hat, ist noch nicht perfekt. Der Arm wippt oft sehr stark. Allerdings haben ich das ja bisher nur mit einem Motor auf einer Seite des Arms ausprobiert.

Grüsse
loby
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi!


Ich hab die lib auf Arduino 1.0 geportet. Bei mir geht's - mehr hab ich nicht getestet....

https://bitbucket.org/sumpfgottheit/arduino-urm37-arduino1.0

lg,
florian
Logged

Pages: [1]   Go Up
Jump to: