Home > Technologie > Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Advertisement

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Diese Instructable wird Ihnen beibringen, wie man magnetische Roboter, die vertikale Flächen zu schaffen zu schaffen. Diese Roboter können auf jeder metallischen Wände, einschließlich Aufzüge, Whiteboards, Kühlschränke oder Metalltüren zu bewegen.

Die Roboter sind mit mehreren Lichtsensoren ausgestattet, so dass sie auf einfache Benutzerinteraktionen reagieren können. Meine Implementierung unterstützt 3 Roboter "Persönlichkeiten", die durch die Bedeckung des obersten Lichtsensors geändert werden können:
Rote Roboter bewegen sich schnell und gehen in Richtung Objekte (wie menschliche Hände oder andere Roboter)
Grüne Roboter bewegen sich langsamer und drehen sich von Gegenständen
Gelbe Roboter bewegen den langsamsten und stoppen ganz, wenn Bewegungen oder Objekte erkannt werden

Diese instructable Details mein erster Prototyp. In Zukunft werde ich in komplexeren, autonomen Verhaltensweisen aufbauen. Ich werde diese Roboter verwenden, um Menschen in öffentlichen Räumen wie Aufzügen oder Fluren zu engagieren. Dabei hoffe ich, das kreative Zusammenspiel von Mensch und Technik im Alltag zu erleichtern.

Stacey Kuznetsov
[email protected]
Institut für Human Computer Interaction
Carnegie Mellon Universität

Für Making Things Interactive, Frühling '09

*** UPDATE ***
Ich habe vor kurzem eine weitere Version dieses Projektes mit kontinuierlichen Servos von sparkfun und eine benutzerdefinierte Cut-PCB. Der neue Roboter ist viel stabiler:

http://www.youtube.com/watch?v=DtwVwc91XYs

Schritt 1: Sammeln Sie Materialien

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Um einen Roboter zu machen, benötigen Sie:

2 Servomotoren http://www.rctoys.com/rc-toys-and-parts/DF-SRV-6G/RC-PARTS-DRAGANFLY-SERVOS.html?utm_source=googlebase_froogle&utm_medium=US&utm_term=DF-SRV-6G
4 Lichtsensoren http://www.goldmine-elec-products.com/prodinfo.asp?number=G14025
4 2,2 K Widerstände
4 10K Widerstände
1 100 Ohm Widerstände
1 Arduino Mini http://www.arduino.cc/en/Main/ArduinoBoardMini
6 Magnetplatten http://www.kjmagnetics.com/proddetail.asp?prod=R8201
1 RGB LED http://www.superbrightleds.com/pdfs/RGB-1WS.pdf
1 leichte Batterie http://www.sparkfun.com/commerce/product_info.php?products_id=731
Einige harte Draht (nicht leicht biegbar)
Elektrisches Klebeband
Draht
Schrumpfschlauch
Karton oder Papier
Heißkleber oder Epoxidharz

Sie benötigen außerdem Zugang zu:
Lötkolben
Heißklebepistole (oder Epoxidharz)
Schere
Kabelschneider
Exacto Messer

Schritt 2: Hacken der Servomotoren für kontinuierliche Rotation (Teil 1)

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Off-the-shelf Servos ermöglichen eine feste Bewegung. Wir wollen eine kontinuierliche Rotation, um die Roboterbewegung zu kontrollieren. Sie müssen 2 einfache Modifikationen an jedem Servo vornehmen: Entfernen Sie die physikalischen Rotationsbarrieren und hacken Sie das Potentiometer immer in ein konstantes Signal.

Der schwarze Teil des Motors ist entworfen, um die Bewegung nach 180 Grad zu stoppen. Dies geschieht physisch - es gibt zwei Kunststoff-Knöpfe, die kontinuierliche Bewegung zu verhindern.

1. Öffnen Sie das Servogehäuse
2. Die Zahnräder auseinandernehmen
3. Die Drähte vom schwarzen Gehäuse abschneiden (der nächste Schritt erklärt, was mit ihnen zu tun ist)
4. Klemmen Sie die kleinen Kunststofflager ab, die eine kontinuierliche Drehung behindern

Schritt 3: Hacken der Servomotoren für kontinuierliche Rotation (Teil 2)

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Jetzt 'Trick' das Potentiometer immer immer kontinuierliches Signal
1. Schneiden Sie die roten, grünen und gelben Drähte vom schwarzen Gehäuse ab (dies sollten Sie im vorherigen Schritt getan haben)
2. Löten Sie einen 2.2K Widerstand zwischen dem grünen Draht und dem gelben Draht.
3. Löten Sie einen 2.2K Widerstand zwischen dem roten Draht und dem gelben Draht.

Schritt 4: Drehen Sie die Drehung eines der Motoren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Servos drehen sich gewöhnlich in derselben Richtung, wenn dasselbe analoge Signal gegeben wird. Wir müssen sie symmetrisch auf dem Roboter anordnen, also müssen wir eine von ihnen umkehren. Dies kann in Code oder Hardware (Ich habe Hardware b / c Ich bin faul mit Code) getan werden.

So führen Sie eine Hardware-Richtungsumkehr durch:
1. schneiden Sie die roten und blauen Drähte, die vom Motor zum Motor des Boards gehen
2. Löten Sie das Rot auf das Blau und das Blau auf das Rot (kreuzen Sie die Drähte)

Schritt 5: Motoren wieder zusammenbauen

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Dieser Schritt ist einfach! Ziehen Sie die Drähte vorsichtig in das Gehäuse der Servos zurück und montieren Sie die Zahnräder wieder. Ich konnte nicht das Gehäuse zu passen, nachdem ich die Widerstände hinzugefügt, so habe ich alles wieder mit Klebeband tapete.

Schritt 6: Befestigen Sie die Magnetfelder an jedem Motor

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Ich benutzte Heißkleber, um die "Befestigung" zu tun, aber jede Art von starkem Kleber sollte funktionieren.

1. Schneiden Sie 2 gleiche Stücke des harten Drahtes. Es sollte etwa 1 Zoll lang für jedes Rad.
2. Heben Sie jeden Draht in den oberen Gang jedes Servos. Achten Sie darauf, dass der Draht zentriert ist.
3. Heißen Kleber 3 magnetische Scheiben auf das Ende jedes Drahtes *. Achten Sie darauf, dass die Platten zentriert sind.

* Eigentlich habe ich festgestellt, dass, sobald die Magnete aufgeklebt sind, die Arbeit mit dem Servos wird wirklich ärgerlich - der Stick an alles. Vielleicht möchten Sie halten und tun dies am Ende.

Schritt 7: Schließen Sie die Servos an die Arduino-Platine an

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Ich benutze die Arduino Servo-Bibliothek, so dass ich Pins 9 und 10, um die Motoren zu fahren. Also mein Setup sieht so aus:

Pin 9 -> Orange Leitung des Servo 1
Pin 10 -> Orange Leitung des Servo 2

Masse -> Schwarze Drähte der Servos 1 und 2
VCC -> Rote Leitungen der Servos 1 und 2

Schritt 8: Befestigen Sie die Photowiderstände am Arduino

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Befestigen Sie jeden Photowiderstand (Lichtsensor) am Arduino. Es gibt 4 Sensoren für die linke, rechte, vordere und obere des Roboters.

Der Schaltplan für jeden Lichtsensor ist unten gezeigt. Ein Draht des Sensors geht zu VCC (Leistung). Das andere Kabel verbindet sich mit den Widerständen 10K und 100Ohm. Der Widerstand 10K ist mit Masse verbunden. Der 100ohm Widerstand schließt an den Eingangsstift an. Der Eingang (grüner Draht) jedes Sensors geht zu den Analog Pins auf dem Mini (A0, A1, A2, A3).

In meinem Code habe ich es so eingerichtet:
Analog 0 -> Oberster Sensor
Analog 1 -> Linker Sensor
Analog 2 -> Frontsensor
Analog 3 -> Rechter Sensor

Schritt 9: Verbinden Sie die RGB-LED mit dem Arduino

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Sie können eine beliebige RGB-LED verwenden und diese an einen der PWM-Pins des Arduino anschließen. Ich verwende nur grüne und rote Farben, also ist mein Setup:

Rot-> Stift 5
Grün -> Pin 6
Boden -> Boden

Sie können einen Widerstand zwischen jeden Pin und die LED (in der Größenordnung von 200 Ohm) setzen. Ich habe nicht diese bc meine LED kann viel höheren Strom als die Arduino liefern kann, so wird es nicht ausbrennen.

Schritt 10: Schließen Sie den Akku an

Grundsätzlich wird jede Batterie, die rund 3-4volts liefert arbeiten, desto leichter desto besser. Ich habe die sparkfun Lithium-Batterie. Das Anbringen ist einfach. Boden geht zu Boden, Energie geht zu rohem VCC auf dem arduino.

Schritt 11: Laden Sie den Code auf den Arduino

Ich bin kleben mein Code unten. Jeder Sensor wird abgetastet, und der Roboter bewegt sich, je nachdem, welcher Sensor eine menschliche Hand erkennt und ob er rot, grün oder gelb ist (falls er sich wegbewegt oder zu Gegenständen bewegt).

aufrechtzuerhalten.
Benutzername
Stacey Kuznetsov
6. Mai 2009
Für Making Things Interactive, Frühling '09

Dieses ist der grundlegende Code, zum der Roboterbewegung von 2 sevo Motoren zu fahren, die auf Eingang basieren
Von 4 Lichtsensoren. Motion unterstützt mehrere Einstellungen, die auf dem Robotermodus basieren.
Rote Roboter bewegen sich schnell zu Objekten (wenn Lichtsensoren Dunkelheit erkennen)
Grüne Roboter bewegen sich mit mittlerer Geschwindigkeit, weg von Objekten (weg von dunkleren Bereichen)
Gelbe Roboter bewegen sich langsamer und stoppen, um zu blinken, wenn Objekte erkannt werden

Der Zweck dieser Roboter ist es, auf Wänden mit magnetischen Rädern zu bewegen.
Die unterstützte Bewegung umfasst die Richtungen rechts, links und vorwärts. Mehrere
Geschwindigkeiten basierend auf dem Robotermodus implementiert werden.

Die Lichtsensoren kalibrieren automatisch beim Neustart oder wenn der obere Sensor abgedeckt ist
Länger als 3 Sekunden.

* /

#include <Servo.h>

// Servos rechts und links
Servoservo1;
Servoservo2;

// Lichtsensoren
Int topSensor = 0; // 700
Int leftSensor = 1; /// Threshhold ist 400
Int frontSensor = 2; // 400
Int rightSensor = 3; // 300

// Hardcodierte Schwellenwerte (nicht verwendet, weil wir automatisch kalibrieren)
Int topThreshhold = 400;
Int leftThreshhold = 550;
Int frontThreshhold = 200;
Int rightThreshhold = 650;

// Aktueller Robotertyp (rot grieß oder gelb)
Int STATE = 0;

// Zustandswerte
Int RED = 0;
Int GREEN = 1;
Int ORANGE = 2;

// Pins, um die oberste dreifarbige LED zu fahren
Int redPin = 5;
Int greenPin = 6;

// Werte für Sensorablesungen
Int Front;
Int rechts;
Int links;
Int top;

// Lichtsensorschwellen automatisch kalibrieren
Void kalibrieren () {
Serial.println ( "KALIBRIERUNG");
Lang int val = 0;
(Int i = 0, i <5; i ++) {
Val + = analogRead (FrontSensor);
Verzögerung (10);
aufrechtzuerhalten.
FrontThreshhold = (val / 5) - 80;
Val = 0;

(Int i = 0, i <5; i ++) {
Val = val + analogRead (topSensor);
Serial.println (analogRead (topSensor));
Serial.println (val);
Verzögerung (10);
aufrechtzuerhalten.

TopThreshhold = (val / 5) -200;

Val = 0;
(Int i = 0, i <5; i ++) {
Val + = analogRead (rechtsSensor);
aufrechtzuerhalten.
RightThreshhold = (val / 5) - 100;
Val = 0;
(Int i = 0, i <5; i ++) {
Val + = analogRead (leftSensor);
aufrechtzuerhalten.
LeftThreshhold = (val / 5) - 100;

// Druckschwellenwerte für Debug
Serial.print ( "top:");
Serial.println (topThreshhold);
Serial.print ( "rechts:");
Serial.println (rechtsThreshhold);
Serial.print ( "left:");
Serial.println (leftThreshhold);
Serial.print ( "front:");
Serial.println (frontThreshhold);

aufrechtzuerhalten.

Void setup ()
{
// Pin 13 für Debug einschalten
PinMode (13, AUSGANG);
DigitalWrite (13, HIGH);
// Sensorstifte einrichten
(Int i = 0, i <4; i ++) {
PinMode (i, INPUT);
aufrechtzuerhalten.
Serial.begin (9600);
kalibrieren();
// erzeugen einen zufälligen Zustand
STATE = zufällig (0, 3);
SetColor (STATE);
aufrechtzuerhalten.

// MOTORFUNKTIONEN

Void turnLeft ()
{
Serial.println ( "LEFT");

Anfang();
Verzögerung (20);
(Int i = 0, i <20; i ++) {
Servo2.write (179);
Servo1.write (1);
Verzögerung (20);
aufrechtzuerhalten.
halt();
Verzögerung (20);
aufrechtzuerhalten.

Void turnRight () {
Serial.println ( "RIGHT");
Anfang();
Verzögerung (20);
(Int i = 0, i <20; i ++) {

Servo2.write (1);
Servo1.write (179);
Verzögerung (20);
aufrechtzuerhalten.
halt();
Verzögerung (20);
aufrechtzuerhalten.

Void goForward (int del = 20) {
Serial.println ( "FORWARD");
Anfang();
Verzögerung (20);
(Int i = 0, i <20; i ++) {
Servo1.write (179);
Servo2.write (179);
Verzögerung (del);
aufrechtzuerhalten.
halt();
Verzögerung (20);
aufrechtzuerhalten.

Void stop () {
Servo1.detach ();
Servo2.detach ();
Verzögerung (10);
aufrechtzuerhalten.

Void start () {
Servo1.attach (10);
Servo2.attach (9);

aufrechtzuerhalten.

// Die Farbe der oberen Dreifarben-LED entsprechend dem aktuellen Zustand einstellen
Void setColor (int color) {
Wenn (Farbe == ROT) {
DigitalWrite (greenPin, 0);
AnalogWrite (redPin, 180);
aufrechtzuerhalten.
Sonst if (color == GREEN) {
DigitalWrite (redPin, 0);
AnalogWrite (greenPin, 180);
aufrechtzuerhalten.
Sonst if (Farbe == ORANGE) {
AnalogWrite (redPin, 100);
AnalogWrite (greenPin, 100);
aufrechtzuerhalten.
aufrechtzuerhalten.

// Blink die gelbe Farbe (wenn Roboter verwechselt wird)
Void blinkOrange () {
(Int i = 0, i <5; i ++) {
AnalogWrite (redPin, 100);
AnalogWrite (greenPin, 100);
Verzögerung (300);
DigitalWrite (redPin, 0);
DigitalWrite (greenPin, 0);
Verzögerung (300);
aufrechtzuerhalten.

AnalogWrite (redPin, 100);
AnalogWrite (greenPin, 100);

aufrechtzuerhalten.

Void Schleife ()
{

Top = analogRead (topSensor);
Lange intzeit = millis ();
Während (analogRead (topSensor) <topThreshhold) {
Verzögerung (10); //, während es eine Armwelle vom Benutzer gibt, tun nichts
aufrechtzuerhalten.
Wenn ((Millis () - Zeit)> 3000) {
// Wenn der Sensor länger als 3 Sekunden abgedeckt war, neu kalibrieren
kalibrieren();
aufrechtzuerhalten.

// Wenn der obere Sensor abgedeckt ist, ändern wir den Zustand
If (top <topThreshhold) {
STATE = (STATE + 1)% 3;
SetColor (STATE);
Serial.print ( "CHANGED STATE:");
Serial.println (STATE);
aufrechtzuerhalten.

// Lesen Sie die anderen Sensoren
Rechts = analogRead (rechtsSensor);
Left = analogRead (leftSensor);
Front = analogRead (frontSensor);

Wenn (STATE == RED) {
// auf Objekte zugehen
Wenn (front <frontThreshhold) {
vorwärts gehen();
} Else if (rechts <rightThreshhold) {
biegen Sie rechts ab();
} Else if (links <leftThreshhold) {
Biegen Sie links ab();
} Else {
vorwärts gehen();
aufrechtzuerhalten.
aufrechtzuerhalten.
Wenn (STATE == GREEN) {
// gehe von Objekten weg
Wenn (front <frontThreshhold) {
Int dir = zufällig (0,2);
If (dir == 0 && right> rightThreshhold) {
biegen Sie rechts ab();
} Else if (dir == 1 && left> leftThreshhold) {
Biegen Sie links ab();
aufrechtzuerhalten.
} Else if (rechts <rightThreshhold) {
If (left> leftThreshhold) {
Biegen Sie links ab();
} Else {
vorwärts gehen();
aufrechtzuerhalten.
} Else if (links <leftThreshhold) {
Wenn (rechts> rightThreshhold) {
biegen Sie rechts ab();
} Else {
vorwärts gehen();
aufrechtzuerhalten.
} Else {
vorwärts gehen();
aufrechtzuerhalten.
Verzögerung (200);
aufrechtzuerhalten.

Wenn (STATE == ORANGE) {
// nur bewegen, wenn es keine Handbewegungen gibt - sonst blinkt
Int dir = zufällig (0, 3);
If (left <leftThreshhold || right <rightThreshhold ||
Vorne <leftThreshhold) {
BlinkOrange ();
} Else {
If (dir == 0) {
vorwärts gehen();
} Else if (dir == 1) {
biegen Sie rechts ab();
} Else if (dir == 2) {
Biegen Sie links ab();
aufrechtzuerhalten.
Verzögerung (1000);
aufrechtzuerhalten.
Verzögerung (10);
aufrechtzuerhalten.
aufrechtzuerhalten.

Schritt 12: Erstellen Sie das Robotergehäuse

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Wallbots: Autonome magnetische Roboter, die vertikale Oberflächen durchqueren

Da sich dieser Roboter vertikal bewegt, ist es wichtig, das Gehäuse möglichst leicht zu machen. Ich verwendete Pappe, aber Papier oder leichter Plastik arbeitet auch.

Bevor Sie diesen Schritt ausführen, stellen Sie sicher, dass der Code funktioniert und Sie können sagen, welcher Servo richtig ist und welcher noch übrig ist.

Ich heizte die Servos auf den Kartonboden und arrangierte die Sensoren oben, rechts, links oder vorne des Roboters. Ich habe dann "Wände" des Gehäuses mit mehr Pappe erstellt. Ich schneide die Löcher für Lichtsensoren und Motorräder aus. Die Oberseite meines Roboters ist gerade ein Stück Papier!

... und du bist fertig!

Related Reading