Zufällig las ich gerade bei Instructables einen Artikel über den Selbstbau eines Amboss aus einer Eisenbahnschiene. Da fiel mir ein, dass ich so etwas ähnliches vor gut dreißig Jahren auch mal gebaut habe. Da bei meiner Amboss-Version wohl keine ausführliche Anleitung nötig ist, um sie nachzubauen hier nur ein Foto:
 Aus einer Eisenbahnschiene selbst gebauter Amboss
Gut, man sieht ihm an, dass ein Amboss nicht unbedingt ein Werkzeug ist, dass ich täglich verwende, aber er hat mir über die Zeit schon häufig hilfreich zur Seite gestanden. Unter anderem ist auf diesem Amboss die Pflanzschaufel entstanden, die ich immer noch fast täglich benutze.
Siehe auch:
Weblinks:
Wenn bei mir irgendein Gerät nicht so arbeitet wie ich es erwarte, dann nehme ich es mir vor und baue es so zurecht, wie ich es gerne haben möchte. Und dabei ist mir vollkommen schnuppe, was der ursprüngliche Hertsteller des Geräts davon hält. Vollkommen schnuppe! Ist ja auch kaum vorstellbar, dass zum Beispiel der Hersteller meiner Tischbohrmaschine gerichtlich gegen mich vorgeht, weil ich seine Bohrmaschine entsprechend meinen Bedürfnissen verändert habe.
Wirklich?
Wie das Make Blog vor ein paar Tagen unter den Titel “Sony’s War on Makers, Hackers, and Innovators” berichtet, geht Sony in den Vereinigten Staaten gerade mit heftigsten juristischen Mitteln gegen Leute vor, die auf ihrer Playstation 3 Linux installieren wollen. Naja, was die Gerichtsbarkeit betrifft ist dort drüben in den USA bekanntlich so manches möglich. Da sind wir hier zum Glück vernünftiger.
Wirklich?
Sony Computer Entertainment hat es tatsächlich geschafft einen deutschen Richter davon zu überzeugen, dass es eine Straftat ist, die eigene Playstation zu erkunden und die Ergebnisse zu veröffentlichen. Gestern wurde durch richterlichen Beschluss die erste Wohnung eines Playstation-Besitzers durchsucht und sein Equipment beschlagnahmt.
Um die Arduino-IDE unter OpenSuse installieren zu können müssen eine Reihe von Abhängigkeiten erfüllt sein. Diese Abhängigkeiten kann man natürlich relativ leicht händisch auflösen – einfacher geht es aber, wenn man das OpenSuse Arduino-Repsitory benutzt. Hier eine Minianleitung zur Installation an der Konsole (das Gleiche funktioniert natürlich auch mit Yast). In der Konsole gibt man als root folgende 4 Befehle ein:
- zypper ar http://download.opensuse.org/repositories/home:/kwk:/arduino/openSUSE_11.3 arduino
- zypper ar http://download.opensuse.org/repositories/CrossToolchain:/avr/openSUSE_11.3 cross-avr
- zypper ref
- zypper in arduino
Wer das Ganze lieber mit der Hand macht – bei mir (Suse 11.3, 64 Bit, Gnome, …) mussten folgende Pakete installiert werden, um zuletzt die Arduino-IDE installieren zu können:
- uisp-20050207suse-144.1.x86_64
- gcc45-gij-4.5.0_20100604-1.9.x86_64
- cross-avr-gcc-4.3.3_20100125-28.10.x86_64
- cross-avr-binutils-2.19.1-33.5.x86_64
- avrdude-5.10-44.9.x86_64
- java-1_6_0-sun-1.6.0.u23-0.2.1.x86_64
- gcc-gij-4.5-4.2.x86_64
- rxtx-java-2.2pre2-4.6.x86_64
- avr-libc-1.7.0-3.5.noarch
- java-1_5_0-gcj-compat-1.5.0.0-114.1.x86_64
- arduino-0022-6.1.x86_64
Siehe auch:
Damit sich meine kleine Roboter-Platform auch aus etwas komplizierteren Lagen selbstständig heraus navigieren kann, muss sie nicht nur feststellen, ob sich vor ihr ein Hindernis befindet. Sie muss auch nachsehen, ob sich neben ihr Hindernisse befindet. Deshalb habe ich den den GP2D12 Entfernungssensor kipp- und schwenkbar montiert. Das Kippen und Schwenken des Sensors erfolgt über zwei Servos.
Meine Recherche zum Ansteuern von Servos mit dem Arduino ergab zunächst etwas verwirrende Ergebnisse. Offenbar war in der Entwicklungsumgebung früher (vor Version 0017) keine Servo-Library enthalten. Die Library, die damals zum Download bereit stand, musste etwas anders angesprochen werden als die Version, die seit 0017 im der Entwicklungsumgebung enthalten ist. Näheres hier: Arduino Playground – Servo.
In meinem kleinen Beispiels-Sketch werden zwei Servos (Pin 8 und Pin 9) über die Tasten 8, 4, 6, 2 (am Besten auf dem Nummernblock) gesteuert. Damit die im Roboter verbauten Servos nirgends anstoßen ist die Drehrichtung in beide Richtungen begrenzt.
— schnipp —
#include <Servo.h>
// Pins festlegen
int pin1 = 9;
int pin2 = 8;
// Servo-Objekt erzeugen
Servo servo1;
Servo servo2;
// Ausgangsposition in Winkelgraden
int pos1 = 90;
int pos2 = 45;
void setup()
{ servo1.attach(pin1);
servo2.attach(pin2);
Serial.begin(9600);
}
void loop()
{ // Drehung begrenzen
if(pos1 < 0) pos1 = 0;
if(pos1 > 180) pos1 = 180;
if(pos2 < 45) pos2 = 45;
if(pos2 > 130) pos2 = 130;
// Position setzen
servo1.write(pos1);
servo2.write(pos2);
delay(50);
if(Serial.available())
{ char ch = Serial.read();
switch(ch)
{ case '4': pos1-=45; break; // schwenken
case '6': pos1+=45; break; // schwenken
case '8': pos2-=10; break; // kippen
case '2': pos2+=10; break; // kippen
}
}
}
— schnapp —
Siehe auch:
Und wenn ich nun schon mal dabei bin Iframes in dieses Blog einzubinden (was ich eigentlich eher ungern mache), dann kann ich ja auch gleich die niegelnagelneue Dokumentation zur Geschichte des Arduino einbinden.
Arduino The Documentary (2010) English HD from gnd on Vimeo.
Inzwischen besitze ich zwei Stück von diesen Arduinos – einen Arduino Uno und einen Arduino Romeo. Ich muss also wohl nicht besonders betonen, dass ich dieses Open Source Hardware und Software Bündel ziemlich Klasse finde.
Ich weiß nicht, kann man heute eigentlich noch irgendwie beweisen, dass man existiert, wenn man keine Facebook Seite hat? Ach ja, Personalausweis! Naja, nach meinem Personalausweis hat allerdings schon lange niemand mehr gefragt. Nach meiner Facebook-Seite dagegen schon.
Egal, jedenfalls hat dieses Werkstatt-Blog nun auch eine Facebook Page. Wenn Du also gerade nichts anderes zu tun hast, dann solltest Du jetzt unbedingt den “Gefällt mir Button” klicken
Mit dem Entfernungssensor GP2D12 von Sharp lässt sich relativ sicher der Abstand zu Hindernissen ermitteln – zumindest im Bereich zwischen 10 und 80 Zentimeter. Der Anschluss des Sensors an den Arduino ist denkbar einfach – die Datenleitung wird mit einem der analogen Eingänge (in diesem Fall Pin 0) verbunden.
Etwas komplizierter ist es, die Messergebnisse in einen lesbaren Wert (z.B. Zentimeter) umzuwandeln. Der Werte des Sensors sind nicht linear, sondern sie müssen interpretiert werden. Ein brauchbarer Ansatz dafür stammt von Javier Valencia und ist an dieser Stelle dokumentiert.
Hier ein kleiner Sketch, mit dem ich die Werte vom Entfernungsmesser in lesbarer Form auf die serielle Schnittstelle ausgebe:
— schnipp —
/*
* Read values from GP2D12 infrared distance sensor; convert readings to centimeters
*
* Version: 0.1 2011.01.05
* Weblinks:
* http://www.hobby-werkstatt-blog.de/
* http://www.arduino.cc/playground/Main/ReadGp2d12Range
*/
int pinGp2D12=0;
/*
* This sensor should be used with a refresh rate of 36ms or greater.
* Inspired by: Javier Valencia, http://www.arduino.cc/playground/Main/ReadGp2d12Range
*/
float read_gp2d12()
{ int val = analogRead(pinGp2D12);
if (val < 3) return -1; // invalid value
float ret = (6787.0 /((float)val - 3.0)) - 4.0;
if(ret > 80.0)
return(80.0);
else
if(ret < 9.6) return(0.0);
else return(ret);
}
void setup()
{ pinMode(pinGp2D12, INPUT); // initialize the digital pin as an output
Serial.begin(9600);
}
void loop()
{ Serial.println( read_gp2d12());
delay(1000);
}
— schnapp —
Siehe auch:
Weblinks:
 Wheel-Encoder in der 4WD Roboter Platform
Meine 4WD Robotor Platform wurde mit zwei sogenannten Drehimpulsgeber (Wheel Encoder, auch Rotary Encoder) geliefert. Mit diesen Encodern kann man feststellen, um wie viel sich die Räder gedreht haben. Letztlich ist es damit also möglich aus der gefahrenen Strecke den Standort des Roboters zu bestimmen.
Soweit ich es einschätzen kann, ist der Schlupf der Reifen beim Wenden der Platform nicht genau reproduzierbar. Letztlich geben die Encoder also wohl nur zuverlässige Positionsdaten, bis die Platform zum ersten Mal gewendet wurde. Aber wenn man schon solche Sensoren an den Rädern hat, dann möchte man natürlich auch wissen, wie man deren Daten auslesen kann.
Die in der 4WD-Platform verwendeten Wheel Encoder (SEN0038) liefern ein digitales Signal, das ich auf die beiden Interrupt-Eingänge des Arduino (Digital Pin 2 und Digital Pin 3) gelegt habe. In den entsprechenden Interrupt Service Routinen (ISR) kann dann aus der Drehrichtung des Motors der aktuelle Fahrweg berechnet werden.
Bei einem Durchmesser der Räder von 65 Millimeter ergibt sich ein Umfang von etwa 204,2 Millimeter. Der Wheel-Encoder hat eine Auflösung von 20 PPR (points per revolution). Jeder Pegelwechsel beim Encoder entspricht also etwa einem Fahrweg von einem Zentimeter. Die Drehrichtung kann von den beschriebenen Encodern nicht bestimmt werden. Sie ergibt sich deshalb aus der Drehrichtung des Motors.
Hier ein kleiner Arduino-Sketch, in dem ich auf komplizierte weitergehende Berechnungen verzichte. Es werden einfach die Pegeländerungen von zwei Inkrementalgebern gezählt und über die serielle Schnittstelle ausgegeben.
— schnipp —
/*
* Simple example of analysis of the 4WD Platform wheel encoder
*
* Die Dateleitungen (grün) der Encoder gehören in Digital-Pin 2 und 3
* Die Richtung ergibt sich aus der Motordrehrichtung
*
* Version: 0.1 2011.01.05
* Copyleft: 2011 Heiner Otterstedt
* Weblinks: http://www.hobby-werkstatt-blog.de/
*/
volatile int cnt0 = 0;
volatile int cnt1 = 0;
void setup()
{ attachInterrupt(0, doCount0, CHANGE);
attachInterrupt(1, doCount1, CHANGE);
Serial.begin(9600);
}
void loop()
{ Serial.print(cnt0);
Serial.print(" - ");
Serial.println(cnt1);
delay(1000);
}
// Dummy interrupt functions
void doCount0() { cnt0++; }
void doCount1() { cnt1++; }
— schnapp —
Siehe auch:
 Infrarot-Receiver Module (DFR0094)
Momentan steuere ich meinen 4WD-Platform mit einer handelsüblichen Universal-Fernbedienung. Dafür habe ich mir ein digitales Infrarot Receiver Modul (DFR0094) besorgt. Dieses Modul besitzt einen IR-Detektor, der die Signale der Fernbedienung für den Arduino empfangbar macht. So ein Infrarot Receiver Modul kostet gerade mal 3.30 Euro – da konnte ich einfach nicht widerstehen.
Mit Hilfe der Multi-Protocol Infrared Remote Library for the Arduino (Download) von Ken Shirriff war es überhaut kein Problem den Fernbedienungs-Teil der 4WD-Platform zu realisieren. Damit kann ich die Platform nun einfach hin und her steuern. Und natürlich kann ich nun auch komplexere Funktionen aus der Entfernung starten.
Der Sensor erkennt die Signale der Fernbedienung bis zu einer Entfernung von etwa 6 bis 8 Meter sicher. Wenn die IR-Diode der Fernbedienung und der Sensor genau ausgerichtet sind, dann funktioniert es natürlich noch viel weiter.
Hier ein kleiner Beispiels-Sketch für die Verwendung des Infrarot Receiver Moduls:
— schnipp —
/*
* Receiving IR codes
*
* An IR detector/demodulator must be connected to the input pin 11
* IRremote library must be in place
* -> see http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
*
* Version: 0.1 2011.01.05
* Copyleft: 2011 Heiner Otterstedt
* Weblinks: http://hobby-werkstatt-blog.de/
*/
#include <IRremote.h>
int pinReceifer = 11;
IRrecv irrecv(pinReceifer);
decode_results results;
// Dummy motor control functions
void goForward() { Serial.println("going forward..."); }
void goBackward() { Serial.println("going backward..."); }
void goLeft() { Serial.println("turning left..."); }
void goRight() { Serial.println("turning right"); }
void goStop() { Serial.println("full stop!"); }
void setup()
{ Serial.begin(9600); // Start Serial communication
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{ int result;
if (irrecv.decode(&results))
{ result = results.value & 0x00ff;
switch(result)
{ case 0x0020: goForward(); break;
case 0x0021: goBackward(); break;
case 0x0010: goLeft(); break;
case 0x0011: goRight(); break;
case 0x000d: goStop(); break;
default:
goStop();
Serial.print("Unknown result: 0x");
Serial.print(result, HEX);
Serial.print(" (");
Serial.print(result, DEC);
Serial.println(")");
break;
}
irrecv.resume(); // Receive the next value
}
}
— schnapp —
Nachdem ich schon einige praktische Anwendungen für den Arduino zusammen und wieder auseinander gebaut habe (Kamera-Fernauslöser, Blumengießautomat usw.), soll das Teil nun mobil werden. Dafür habe ich mir eine DFRobot 4WD Roboter Platform zugelegt.
Es gibt eine Reihe von Videos und Forenbeiträgen, die sich mit dem Zusammenbau dieser Platform beschäftigen (siehe bei den Weblinks unten). Offenbar handelt es sich bei meiner Platform aber um ein neueres Modell, dass einige Unterschiede zu den beschriebenen Versionen aufweist. Deshalb hier ein paar Fotos vom Zusammenbau:

Zugegeben, der Aufbau sieht noch nicht so ganz hundertprozentig professionell aus, aber das Teil fährt schon fröhlich auf dem Tisch herum.
Weblinks:
|
Willkommen in der Werkstatt!
Hier kannst Du mitlesen, woran ich in meiner Freizeit gerade so herum bastle. Im Moment ist es zum Beispiel vorwiegend das Projekt Miranda - ein 12" Ritchey Chrétien Cassegrain Teleskop. Du kannst neue Beiträge abonnieren indem du auf das gelbe Symbol klickst.
Navigation, beliebte Artikel
Licence  Der Inhalt dieses Blogs steht unter einer Creative Commons-Lizenz. Dass heisst, du darfst den Inhalt vervielfältigen, verbreiten und öffentlich aufführen sowie Bearbeitungen anfertigen. Bedingung ist, dass du den Namen des Autors nennst und dass die Weitergabe unter gleichen Bedingungen erfolgt.
|