Pages: [1] 2   Go Down
Author Topic: arrexx roboter fahrgestell soll auf geräusch losfahren  (Read 2395 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
wir müssen im NWT Unterricht ein Projekt mit einem Arduino Uno machen.
Einige Grundkenntnisse haben wir schon.
Wir haben einen Arduino Uno und ein ARX-CH09 Chassis Fahrgestell --> http://www.reichelt.de/Robotik/ARX-CH09/3/index.html?;ACTION=3;LA=2;ARTICLE=102236;GROUPID=5728;artnr=ARX-CH09;SID=11UMDEMX8AAAIAAFLHfc0bb8301f20e9257dba51131d26b40ceb6

Wir möchten, dass der Arexx auf Geräusch fährt z.B. auf Klatschen
Wir haben den Arduino schon mit den Motoren verbunden..jedoch haben wir noch Probleme bei einem Programm, da wir nur die Grundkentnisse besitzen.
Wir brauchen dringend Hilfe, da wir nur wenig Zeit haben. ( in 2 Wochen sollte es fertig sein )

Wir wären euch sehr dankbar für euere Hilfe (:
Danke schon mal!
« Last Edit: December 11, 2012, 06:13:47 am by blumensmili » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habt Ihr Euch das Projekt selbst ausgedacht, oder was das eine Vorgabe?
Ihr schreibt, das Ihr schon wißt, wie Ihr alles verkablen müßt.
Das bedeutet also Ihr habt schon eine Schaltung um die Motoren zu steuern und eine Hardware die auf das Klatschen reagiert?

Wie habt Ihr getestet, ob Eure Verkabelung funktioniert? Dazu muss es ja schon ein Programm geben.

Was habt Ihr denn bereits an Programm fertig?

Hier wird Euch sicher keiner Euer Projekt fertig programmieren, aber helfen wenn es klemmt, können wir schon.

Postet doch mal den Code den Ihr schon habt und wie Eure Schaltung für die Motoren und die "Geräuscherkennung" am Arduino aussieht.

Mario.
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn die Motoren schon auf einem Steckbrett verkabelt sind, könnt Ihr doch damit anfangen die beiden Motoren zu steuern. Wie sind denn die Motoren an den Arduino angeschlossen? Also welche Pins, wie sieht die Spannungsversorgung aus etc.

Habt Ihr denn schon irgendwas mal auf den Arduino geladen? Z.B. den Blink-Sketch der die LED des Arduino blinken läßt?

Ohne Details kann Euch hier keiner helfen.

Habt Ihr Euch denn schon mal Gedanken über die Struktur des Programms gemacht. Dabei geht es nicht um die Details, sondern eine ungefähre Vorstellung was wann wie passieren soll. Sowas nennt man Programmablaufplan: http://de.wikipedia.org/wiki/Programmablaufplan
Damit kann man sich erstmal in Ruhe mit der Lösung eines Problems beschäftigen, ohne sich mit den Details der Programmiersprache herum zu ärgern.
Logged

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

Du solltest die Informationen liefern, die auch gefordert wurden:
Postet doch mal den Code den Ihr schon habt und wie Eure Schaltung für die Motoren und die "Geräuscherkennung" am Arduino aussieht.
Immerhin gibt es schon die Angabe, dass ihr einen L293D verwendet.
Habt Ihr Euch denn schon mal Gedanken über die Struktur des Programms gemacht. Dabei geht es nicht um die Details, sondern eine ungefähre Vorstellung was wann wie passieren soll.
Wie soll der Roboter reagieren. Bei Geräuschen einfach geradeaus fahren? Im Bogen? Vorwärts? Rückwärts? Wenn ja, wie lange? Eine bestimmte Zeit? Solange das Geräusch anhält? Ich hoffe, ihr versucht keine Sprachsteuerung zu integrieren... smiley-wink

Logged

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

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bevor jetzt immer neue Ideen kommen, was der Roboter alles machen soll, wäre es gut, erstmal überhaupt was zu haben. Also, her mit dem Code den es schon gibt und überlegt euch ein Konzept und einen Ablauf Eures Programms.
Am Anfang in "Funktionsblöcken". Orientiert Euch dabei schon daran, das es beim Arduino ein setup() gibt, das einmal an Anfang aufgerufen wird und ein loop(), das endlos immer wieder aufgerufen wird. Dort packt Ihr Eure Funktionsblöcke rein (sowas wie "Klatschen erkannt", "stop", "geradeaus fahren", "linkskurve", "rechtskurve" etc.). Ihr könnt am Ende nicht einfach drauflos programmieren, mit etwas Planung wird es einfacher und übersichtlicher.
ABER WIR BRAUCHEN DEN CODE DEN IHR SCHON HABT.
 
Logged

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

Also fehlt euch nach wie vor die Hardware zur Auswertung der Geräusche?  smiley-eek Was habt ihr denn seit dem 6.12. geschafft?
Ich würde vorschlagen, dass ihr zur Geräuschauswertung auf die Schaltung zurückgrift, wie sie im Schaltplan zum Arduino Esplora verbaut ist. Da kann man zumindest davon ausgehen, dass diese funktioniert:
http://arduino.cc/en/uploads/Main/arduino-esplora-schematic.pdf (Darstellung oben rechts). Den Ausgang der Teilschaltung könnt ihr dann direkt an einen Analogeingang legen, der Umweg über den Multiplexer/Demultiplexer wie beim Esplora entfällt. Dann einfach einen Schwellwert definieren und darüber ein Fahren-Flag setzen. Beim nächsten Klatschen kehrt man das Flag einfach wieder um.
Für den Doppelklatsch wertet man die Zeitdifferenz zwischen der ersten und der zweiten Schwellwertüberschreitung aus. Ist diese klein genug (z.B. 500 ms), kann man kurzzeitig lenken, in eurem Fall werden sich wohl beide Antriebsräder unterschiedlich schnell drehen.

Dann mal ran ans Werk! smiley-wink
Logged

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

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vllt. hilft der link weiter: http://www.arduino.cc/en/Tutorial/KnockSensor. Ist eine Anleitung, wie man aus einem 10ct Piezo-element einen Klatschsensor macht.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vllt. hilft der link weiter: http://www.arduino.cc/en/Tutorial/KnockSensor. Ist eine Anleitung, wie man aus einem 10ct Piezo-element einen Klatschsensor macht.

Nach dem von mir gelernten Englisch ist ein "knock sensor" aber ein "Klopfsensor".
D.h. wenn der Sensor an ein Gehäuse oder an ein Türblatt geschraubt wird, kann man erkennen, ob jemand anklopft.

Ein Klatschsensor wäre ein "clap sensor". Wenn es also funktionieren soll, ohne dass man dem Roboter erst einen Klaps auf den Allerwertesten geben muss, würde ich eher nach Basteleien mit "clap sensor" als mit "knock sensor" Ausschau halten.
Logged

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

Nach dem von mir gelernten Englisch ist ein "knock sensor" aber ein "Klopfsensor".
D.h. wenn der Sensor an ein Gehäuse oder an ein Türblatt geschraubt wird, kann man erkennen, ob jemand anklopft.
Kann ich durch eigene Erfahrung bestätigen. Ziel war es bei mir, diese Schaltung nachzubasteln: http://blog.makezine.com/2010/11/25/how-to-arduino-high-speed-photograp/
Dort wird ein Piezo-Element verwendet, um bei lauten Geräusche den Blitz einer Kamera auszulösen. Wie gesagt, ich habs nachgebaut aber es funktionierte nicht. Beim direkten Klopfen, selbst bei kleinen Berührungen hatte ich ein Signal vom Sensor, der Schall hingegen bewirkte nichts. Daher ist der Piezo wohl nicht die beste Wahl für dieses Projekt.
Logged

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

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

das knock nicht gleich Klatschen ist, ist mir schon klar...
ich hatte nur mal an anderer Stelle gelesen, dass man mit Piezos auch rudimentär Schallwellen wahrnehmen kann, daher die Idee.
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@mkl0815
Wir haben noch kein Programm geschrieben, da wir erst recherchiert haben und den Roboter zusammen gebaut haben.. Nun haben wir erst den Lautsprecher getestet und kommen nun zum programmieren..aber da wir nur die Grundkenntnisse haben fälllt uns dies sehr schwer!
void setup und void loop kennen wir, da wir (wie oben genannt) schon Beispiele ( LED blinkt etc. ) programmiert haben.
Aber das ist doch auch schon mal eine Aussage. Es gibt also noch gar nichts. OK, nicht gut, aber dann eben von Null an.
Teilt Ihr Euch in die Arbeit ein (jeder arbeitet an etwas anderem) oder macht Ihr die Arbeiten immer zusammen (beide arbeiten am gleichen)?

Um am Ende ein einigermaßen funktionierendes Programm zu haben, müßt Ihr noch einige Teilprobleme lösen. Da die meisten davon unabhängig sind, kann man die auch unabhängig voneinander lösen.
z.b.
  • "geradeaus fahren" : Was muss dafür gemacht werden? Beide motoren mit gleicher Drehzahl fahren. Wie macht man das?
  • "kurve fahren" : Wie macht man das? ...
  • "klatschen erkennen" ...
  • "wie erkenne ich das doppelt geklatscht wurde?"
  • wie halte ich an und vor allem wann?
Das sind die Funktionsblöcke die ich meine. Es gibt sicher noch weitere die Euch da einfallen.
Diese Funktionsblöcke nehmt ihr dann und baut Euch einen Abaufplan für Euer Programm. Das hat noch nichts mit programmieren zu tun, hilft Euch aber später ungemein, weil Ihr schrittweise vorgehen könnt.
In diesem Ablaufplan werden dann die einzelnen Funktionen miteinander verknüpft.

Beispiel: Roboter soll bei einmal klatschen losfahren und nach 10 sekunden von alleine wieder stehenbleiben. Wird geklatscht während der Roboter fährt, soll er auch stehenbleiben.
  • loop() - Anfang
  • prüfen ob klatschen erkannt wurde
  • klatschen erkannt - ja -> prüfe ob motor an (1)
  • klatschen erkannt - nein -> prüfe ob 10 sekunden abgelaufen (2)
  • (1) prüfe ob motor an:
  •  - motor an -> motor aus
  •  - motor aus -> motor an, sekundenzähler auf null setzen
  • (2) prüfe ob sekunden abgelaufen:
  •  - 10 sekunden rum? -> motor aus
  • loop() - Ende -> loop() Anfang
Das ist nur ein einfaches Beispiel, das Euch zeigen soll, was ich meine. Damit könnt Ihr auch ohne die Hardware schon einiges für Euer Programm machen. Euer Ablaufplan wird etwas komplizierter, da ihr ja auch das doppelt klatschen bercksichtigen müßt.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3006
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@sth77
Also seit dem 6.12 haben wir es erst mal nur mit dem Lautsprecher getestet:

Lautsprecher ist gut, das ist quasi ein umgekehrtes "dynamisches Mikrofon".

Leider wird das Ausgangssignal (Spannung) zu klein sein, um es ohne eine vorherige Verstärkung am Arduino messen zu können.

Ich würde den Lehrer mal fragen nach:
- Mini-Verstärkerschaltung (um die Spannung des Lautsprecher-Mikrofons zu verstärken)
- einem Kondensator 1 bis 100 Mikrofarad
- einer Gleichrichter-Diode
Den Kondensator und die Diode zum Ankoppeln des Signals an den Arduino.

Ich habe mal kurz mit dieser Schaltung getestet: Ein Draht vom Arduino Analogeingang zu einem Kondensator 100 uF zu einem Lautsprecheranschluss und ein Draht von Ground zum anderen Lautsprecheranschluss.

Code:
#define INPUTPIN A5
void setup ()
{
  Serial.begin(9600);
}

void loop ()
{
    if ( analogRead(INPUTPIN)>20 ) Serial.println("Klapp");
}

Eine Gleichrichterdiode habe ich gerade nicht zur Hand.

Der Code funktioniert nur, wenn man direkt mit dem Finger auf die Lautsprechermembrane tippt.

Wenn man direkt vor dem Lautsprecher in die Hände klatscht, passiert gar nichts.
Da fehlt eine Verstärkung!

Bei mir im Raum liefert analogRead(INPUTPIN) im ruhigen Raum meistens "11" als Wert.
Wenn ich statt 20 nur 12 als Erkennungsschwelle im Programm setze:
 if ( analogRead(INPUTPIN)>12 ) Serial.println("Klapp");
dann funktioniert es mit Klatschen direkt vor dem Lautsprecher gerade so eben.

Den notwendigen Verstärkungsfaktor für eine gute Erkennung am Arduino schätze ich mal auf 100 bis 500.
Vielleicht eine Transistorverstärkung?




« Last Edit: December 13, 2012, 06:23:49 am by jurs » Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich würde für die Geräuscheerkennung folgendes Analog Sound Module benutzen:
http://www.komputer.de/zen/index.php?main_page=product_info&cPath=24&products_id=65

Und zwar in folgender Konfiguration:


Damit man nicht nur erkennen kann ob es ein Geräusch gibt, sondern um auch dessen Richtung erkennen zu können !

Falls die Benutzung eines solchen Fertigmoduls im Projekt erlaubt sein sollte !

Falls nicht, vielleicht hilft euch dann die Schematik der Schaltung:
http://www.dfrobot.com/image/data/DFR0034/DFR0034_SoundSensor_SC.pdf

Den LM358 gibt es auch als DIP-Version und ist recht günstig im Preis:
http://www.ebay.de/itm/10-x-LM358-LM358N-DUAL-LOW-POWER-OP-DIL8-TOP-NEU-/380158231325?pt=Bauteile&hash=item588332431dLM358-LM358N-DUAL-LOW-POWER-OP-DIL8-TOP-NEU-/380158231325?pt=Bauteile&hash=item588332431d
« Last Edit: December 15, 2012, 05:17:02 pm by Megaionstorm » Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Falls ein Geräusch zu kompliziert ist, nehmt doch einfach einen Fototransistor oder einen LDR (lichtempfindlicher Widerstand) und steuert den Roboter über eine Taschenlampe. Das dürfte deutlich einfacher werden.
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wäre es nicht einfacher das Auto einfach anzupusten, damit es losfährt?  smiley-twist
Der Kraftaufwand ist vermutlich der gleiche :-)

Aber Scherz beiseite, wenn Ihr das Auto nur fahren lassen wollt, wenn ein Ton erkannt wird, erleichtert das die Programmierung ungemein.
Denn wenn "Ton an" -> "Motor an", ansonsten "Motor aus".

Das ist doch dann schon überschaubar. Vor allem könnt Ihr beide gleichzeitig an Eurem Problem arbeiten.

Eine erstellt das Programm um die Motoren zu steuern. Am Anfang kann man das z.B. mit einem Taster machen, oder im einfachsten Fall einfach zwei lange Drähte. Einen an Masse / GND einen an ein Arduino-Pin. Mehr braucht man nicht. Dann noch pinMode(PIN,INPUT_PULLUP) im setup, um das Pin zum Eingang zu machen. Mit digitalRead(PIN) fragt man das pin dann ab. Liefert die Funktion HIGH sind die Drähte nicht verbunden, liefert die Funktion LOW sind die Drähte verbunden. Das wertet man dann erstmal als "Ton erkannt" und läßt das Auto losfahren.

Die zweite von Euch beiden kümmert sich in der Zwischenzeit um die Schaltung zum Erkennen Eurer Tröte. Daraus wird dann am Ende eine Funktion z.B. "int readTroete(int pin);" die ein HIGH liefert, wenn ein Ton erkannt wurde oder ein LOW, wenn nicht.
Diese Funktion setzte man dann an Stelle des digitalRead(pin) von oben ein, achtet darauf das sich die Logik von "Low == losfahren" zu "HIGH == losfahren" geändert hat und ist im Prinzip fertig.
Logged

Pages: [1] 2   Go Up
Jump to: