Schaltungen

So bauen Sie eine weitere unbrauchbare Maschine: Einfach herzustellen und schwer zu bedienen !: 9 Schritte (mit Bildern)

DIY Eismaschine aus Pappkarton🍦

DIY Eismaschine aus Pappkarton🍦

Inhaltsverzeichnis:

Anonim

Es werden so viele unnütze Maschinen gebaut, warum noch eine? Einfach, es macht wirklich Spaß :), es macht Spaß zu bauen und es macht Spaß, damit zu spielen.
Ich habe versucht, dieser Version einen Charakter zu geben, da ich immer das Gefühl hatte, es gibt jemanden, der "in der Kiste denkt", und hier habe ich versucht, ich hoffe, es ist mir gelungen, "ihr" ein Leben zu geben!
Ich freue mich sehr, alle Schritte mit Ihnen zu teilen, mit der Hoffnung, dass Sie leicht Ihre bauen und ihr einen bitteren oder besseren Charakter verleihen können! Meine Version basiert auf Arduino, Sie mögen denken, dass es ein Overkill ist, aber angesichts der Flexibilität, die es mir gegeben hat, denke ich, dass es sich lohnt.
Hier ist ein Video von allem zusammen. Später werden wir uns den Teilen, Schritten, Schaltplänen und dem Code zuwenden
Lassen Sie mich Ihre Kommentare und / oder Fragen wissen, falls vorhanden.
Ich hoffe dir gefällt es!
f.

Zubehör:

Schritt 1: Wie es funktioniert?

Alles ist mit einer Arduino-Karte verbunden, die Karte wartet, bis der Schalter auf logisch HIGH gestellt ist, dh, wenn Sie den Schalter betätigen, signalisiert die Karte zwei Servomotoren, sich auf eine bestimmte Weise zu bewegen (dazu später mehr) Wenn das an die "Hand" angeschlossene Servo den Schalter wieder in die AUS-Position zurückstellt und in die Box zurückkehrt, gefolgt vom "Tür" -Servo. dann wiederholt sich alles.
Wenn Sie das obige Video gesehen haben, reagiert die Maschine jedes Mal, wenn der Schalter umgeschaltet wird, auf unterschiedliche Weise. Dazu werden einfach verschiedene Funktionen mit unterschiedlichen Timings in den Arduino-Code geschrieben (ich nenne sie "Moves"). Jedes Mal, wenn der Schalter umgeschaltet wird, rufe ich einen neuen Zug auf, bis alles erledigt ist. Ich fange von vorne an. Beachten Sie, dass ich in Schritt 9 eine andere Version des Codes bereitgestellt habe, die zufällige Bewegungen anstelle von sequentiellen auswählt. Sie können so viele Züge hinzufügen, wie Sie möchten, solange Sie genug Speicher auf dem Arduino haben.
Der Arduino ist immer eingeschaltet. Aus diesem Grund habe ich einen Schalter für die Batterie hinzugefügt, um Strom zu sparen, wenn die Maschine nicht verwendet wird. Ich plane bereits, anstelle der derzeitigen einfachen HIGH / LOW-Erkennung einen Interrupt auf dem Switch zu verwenden und ihn mit dem Schlafmodus zu koppeln. Dies spart Strom, wenn die Maschine nicht in Gebrauch ist, und ermöglicht auch, dass sie immer einsatzbereit ist (dies erschwert jedoch auch den Code). Im Moment handelt es sich also nur um einen einfachen EIN / AUS-Schalter, und die Platine wird immer mit Strom versorgt .

Schritt 2: Die Teile

Du wirst brauchen:
Verpflichtend:
1. Eine Kiste
2. Jedes Arduino-Board mit PWM-Ausgängen (ich habe zufällig ein altes herumliegen, die Diecimila)
3. Zwei Standard-RC-Servomotoren (ich habe den Futaba-S3003 verwendet, sie haben ein Drehmoment von 3,2 kg / cm, mehr als genug, um die Tür oder die Hand zu bewegen)
4. Eine 6-12 V Batterie (ich habe meine AR-Drohnenbatterie verwendet, es ist eine 11,1 V / 1000 mA)
3. Ein SPTT- oder SPST-Schalter für den Auslöser (grundsätzlich jeder Schalter, der zu Ihnen passt!)
5. Ein weiterer Schalter für die Batterie
6. Ein Druckknopf zum Zurücksetzen des Arduino, falls Sie die Bewegungen / den Code von oben neu starten möchten.
7. Einige Überbrückungskabel

Wahlweise:
Wenn Sie einen Zug entwerfen möchten, der das Bewegen des Kastens umfasst (wie der letzte Zug im Video), können Sie Folgendes erhalten:
1. Ein Arduino-Motorschutz, der auch für andere Projekte nützlich ist (oder Sie können eine H-Brücke selbst entwerfen und suchen)
2. Ein billiges RC-Car, damit Sie seinen Gleichstrommotor und sein Getriebe mitnehmen können
Außerdem habe ich noch im Abschnitt "Optional" eine Hardware-De-Bounce-Schaltung eingebaut, um einen sauberen Trigger zu haben, wenn der Schalter ein- / ausgeschaltet wird. Dies kann übersprungen und einfach mithilfe von Verzögerungen oder Timern in der Arduino-Software implementiert werden. Ich habe die Hardware-Entprellung durchgeführt, da ich den Code bald ändern werde, um Interrupts zu verwenden, und da letztere die zuverlässige Verwendung von Verzögerungs- / Zeitgeberfunktionen in der Routine nicht zulassen, musste ich eine einfache Entprellungsschaltung für die zukünftige Verwendung aufbauen . Wenn Sie diesen Teil überspringen möchten, schließen Sie einfach einen einfachen Schalter / Widerstand an Pin 2 des Arduino an und implementieren Sie eine Software-Entprellroutine.
Für das Hardware-Debounce:
1. 10mF Elektrolytkondensator
2. 10K Widerstand
3. Ein logisches NICHT-Gatter, d. H. Ein Inverter (Chip 74HC04) Dies hat sechs Inverter, aber Sie benötigen nur einen.
Lass es uns bauen …

Schritt 3: Aufbau der Box

Sie können jede geeignete Box verwenden. Ich habe meine gebaut, vielleicht nicht perfekt, aber immer noch sehr persönlich :)
1. Ich habe 2 BALSA-Holzplatten von 5 mm verwendet, die mit einem Cutter sehr einfach zu verarbeiten sind und aufgrund ihres unglaublichen geringen Gewichts relativ stark sind.
2. Verbraucht 5 Tuben Cyanoacrylat-Kleber (auch bekannt als stark schnell wirkende Klebstoffe)
Hier ist es:
EIN 22 x 14 x 14 cm Box

Schritt 4: Schema

Oben ist das Schema (gezeichnet mit Fritzing) zu sehen:
Oberer Teil: Die Arduino-Hauptplatine, 2 Servos und Switch-Konnektivität. Beachten Sie, dass Sie, wie bereits erwähnt, die gesamte Entprellungsschaltung (oben rechts) durch einen einfachen Widerstand / Schalter ersetzen können.
Sowohl "Tür" - als auch "Hand" -Servos werden direkt über den 5-V-Pin des Arduino mit Strom versorgt. Die Signaldrähte sind mit Pin 9 bzw. 10 verbunden. Diese Pins unterstützen PWM, daher verwende ich sie, um den Winkel / die Position des Servos zu steuern (von 0 bis maximal 180 Grad).
Hinweis: Der rote Druckknopf ist nur ein Reset (ähnlich dem auf der Vorderseite des Arduino-Boards). Ich habe es hinzugefügt, um jederzeit einen schnellen Zugriff zum Zurücksetzen der Karte / Software zu haben, ohne die Box zu öffnen. Verbinden Sie einfach den RESET-Pin mit Masse, um den Reset durchzuführen.
Unterteil: Wird benötigt, wenn Sie einen Gleichstrommotor verwenden und die Maschine bewegen möchten. Dies ist die Arduino-Motorabschirmung. Sie ist oben auf dem Arduino montiert, sodass alle Stifte beider Platinen miteinander verbunden sind. Ich zeige sie unten aus Gründen der Übersichtlichkeit als getrennt! Dieser Schirm kann mit unglaublicher Leichtigkeit bis zu 2 Gleichstrommotoren (2 Kanäle A / B) steuern. Ich benutze jetzt nur einen. Hiermit können Sie den Code, die Richtung, die Geschwindigkeit und die Pausen aller verfügbaren 2 Kanäle / Motoren einstellen. Ich benutze Kanal B wie unten gezeigt. wo pin
13 für die Richtung, Pin 11 für die Geschwindigkeit und Pin 8 für die Bremsensteuerung.
Die Batterie ist ein 11,1 / 1000 mA, der mit der Abschirmung verbunden ist und so den Gleichstrommotor, die Haupt-Arduino-Platine und die Servos speist. Wenn Sie die Abschirmung nicht verwenden, können Sie die Batterie direkt an die Stromquelle auf der Haupt-Arduino-Platine anschließen.

Schritt 5: Reparieren der Servos

Hier sind die Hand- und Türservos installiert:
Sie müssen zuerst die Servos an den richtigen Stellen installieren. Dies erfordert einige Versuche, bis Sie die erforderliche Bewegung erhalten. Sie können das in der arduino IDE bereitgestellte Servo-Beispiel verwenden, um die Servos und das Ausmaß der jeweils erforderlichen Auslenkung zu testen und so die endgültige Positionierung und Armlänge für die Tür- und Handservos festzulegen.
Die Arme sind einfach aus Balsaholz, ich habe sie dicker gemacht, um ein bisschen zu reißen.
Hier ist, wie ich es gemacht habe. Nur eine Anmerkung zum Handservo. Die Servowelle muss sich direkt unter der Kante der Abdeckung befinden (siehe Abbildung unten), um zu vermeiden, dass es schwierig wird, eine Hand zu erstellen, die den Schalter erfolgreich betätigt, und um in die Box zurückzukehren.


Schritt 6: Anschließen des Schalters, der Servos und des Arduino

Stellen Sie alle im schematischen Schritt gezeigten Verbindungen her und versuchen Sie, alle in die Schachtel zu legen, ähnlich wie oben gezeigt:

Schritt 7: Optional: Der Gleichstrommotor und die Batterie

Oben ist zu sehen, wie ich das DC-Motor-Getriebe (aus einem billigen RC-Car) einbaue, wobei auch die Platzierung der Batterie und des Schalters zu sehen ist.
Stellen Sie sicher, dass das Zahnrad so zentriert wie möglich ist, um das Gleichgewicht der Box zu halten. Möglicherweise müssen Sie nach der Endmontage etwas Gewicht in die Box legen, um das Gleichgewicht zu halten, da die verwendete Batterie etwas schwer ist (100 g) und leicht wackelt beim wechseln oder verschieben der box.
Beachten Sie, dass der Gleichstrommotor Geschwindigkeit wird durch Stift gesteuert 11, Richtung durch Stift 13, und bremsen auf pin 8, Diese werden als Kanal B auf dem Arduino-Motorschild betrachtet.
Während der gesamten Montage habe ich versucht, alle Kabelschalter und andere Komponenten zu verstecken, um eine einfache, authentische Box zu erhalten. Dies gilt für die Räder. Deshalb habe ich eine Felge um sie herum angefertigt, die sowohl die Räder als auch die Batterie aufnimmt und den Zugriff auf den roten Reset-Knopf ermöglicht.

Schritt 8: Der Code

Um Code für Arduino zu schreiben, benötigen Sie die Arduino-IDE (hier herunterladen)
Ich verwende die Version 1.0.5, stelle nur sicher, dass der richtige COM-Port (Windows) und der richtige Kartentyp in der IDE ausgewählt sind, verwende dann den folgenden Code und klicke auf Upload.
HINWEIS: Die Werte, die ich im Code zur Einstellung der maximalen Auslenkung der Servos verwendet habe, sind unter Berücksichtigung der Servopositionierung, der Achse und der Winkel genau für dieses Feld festgelegt. Ich habe das durch Gerichtsverfahren bekommen. Sie müssen also Ihre eigenen Werte entsprechend Ihrer Box und Ihren Vorstellungen definieren Servopositionierung.
Als Referenz sind unten die Min / Max-Werte aufgeführt, die ich für jedes Servo verwendet habe, da Sie sie im Code sehen werden:
Die Tür:
80 versteckt, 155 voll geöffnet
Die Hand:
0 verstecken, 129 Schalter drücken

Hier ist der Code (es ist besser, die diesem Schritt angehängte Datei herunterzuladen, anstatt sie von unten zu kopieren / einzufügen):
#umfassen
Servo doorServo;
Servo handServo;
int switch_pin = 2; // Schalter auf Pin 2 stellen
// Motorvariablen
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // Auswahl bewegen
int Testmove = 0; // Testmodus: Legen Sie die Bewegungsnummer fest, um nur eine ausgewählte Bewegung zu testen
// (auf Null setzen, um normal zu laufen, d. h .: Roundrobbin bei Amm-Bewegungen)
void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // Türservo auf Pin 9 PWM setzen
handServo.attach (10); // Handservo auf Pin 10 PWM stellen
doorServo.write (80); // Tür in Versteckstellung bringen
handServo.write (0); // Hand in Versteckstellung bringen

// Kanal B einrichten, (da Kanal A für Tür- und Handservos reserviert ist und nicht gleichzeitig verwendet werden kann)
PinMode (MotorDirection, OUTPUT); // Leitet Pin B des Motorkanals ein
pinMode (motorBrake, OUTPUT); // Leitet den Pin von Bremskanal B ein

}

leere Schleife ()
{
if (Testmove! = 0) {
selectedMove = Testmove;
}

// Wenn der Schalter eingeschaltet ist, bewegen Sie die Tür und die Hand, um sie auszuschalten …
if (digitalRead (switch_pin) == HIGH)
{

if (selectedMove> 10) {selectedMove = 0; } // Wenn alle Züge gespielt sind, wiederholen Sie die Züge von Anfang an
// unten sind alle "Moves", die ich bisher entworfen habe, jede ist eine Funktion, die unten im Code geschrieben ist, führe die Namen aus, etwas seltsam? ja, da einige in arabisch geschrieben sind
if (selectedMove == 0) {switchoff (); }
sonst if (selectedMove == 1) {switchoff (); }
sonst if (selectedMove == 2) {switchoffbitaraddod (); }
sonst if (selectedMove == 3) {crazydoor (); }
sonst if (selectedMove == 4) {crazyslow (); }
sonst if (selectedMove == 5) {m7anika7anika (); }
sonst wenn (selectedMove == 6) {m3alla2 (); }
sonst if (selectedMove == 7) {switchoff (); }
sonst if (selectedMove == 8) {matrix (); }
sonst if (selectedMove == 9) {sneak (); }
sonst if (selectedMove == 10) {zee7 (); }

if (Testmove == 0) {
selectedMove ++; // zum nächsten Zug wechseln, wenn nicht im Testmodus
}
}
}

// Bibliothek von Zügen
// Grundzug
stornieren abschalten ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

// bewege 3: öffne und warte, dann bewege die Hand und warte, dann schalte aus und verstecke dich
nichtig switchoffbitaraddod ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (800);
// Hand bewegen
für (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (1000);
für (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);


}

}

// bewege dich 4: öffne die Tür, schließe sie dann mehrmals, warte, dann wieder und schalte sie aus und verstecke dich.

nichtig crazydoor ()
{

// Tür bewegen
für (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür bewegen
für (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (700);
// Tür bewegen
für (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (700);
// Tür verstecken
für (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
Verzögerung (15);
}

// ---- von Schalter von ---- //
// Tür bewegen
für (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
Verzögerung (15);
}

}

// bewege 5: öffne die Tür, dann bewege die Hand sehr langsam vor und zurück, um dich sehr langsam zu verstecken, und schließe dann schnell die Tür
void crazyslow ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
Verzögerung (30);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
Verzögerung (30);
}

// Tür verstecken
für (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
Verzögerung (30);
}
Verzögerung (100);
für (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
Verzögerung (15);
}

}
// bewege 6:
nichtig m7anika7anika () {
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (800);


// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

handServo.write (40);
Verzögerung (1000);

// Hand bewegen
für (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}


für (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
Verzögerung (15);
}



}
nichtig m3alla2 () {
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (2000);

für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

für (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
für (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (500);
// Hand verstecken
für (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

leere Matrix ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

für (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}
Verzögerung (300);

für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (10);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

}
nichtig schleichen ()
{
// Tür bewegen
für (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
Verzögerung (30);
}
Verzögerung (2000);

// Hand bewegen
für (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}

Verzögerung (500);

für (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);

für (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (500);
// Hand verstecken
für (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);
für (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);
für (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);

für (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}


nichtig zee7 ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (2000);
// Vorwärts mit halber Geschwindigkeit nach links
digitalWrite (motorDirection, LOW); // Legt die RECHTE Richtung von Kanal B fest
digitalWrite (motorBrake, LOW); // Löse die Bremse für Kanal B
analogWrite (motorThrottle, 100); // Dreht den Motor auf Kanal B mit voller Geschwindigkeit
Verzögerung (300);
digitalWrite (motorBrake, HIGH); // Die Bremse für Kanal B betätigen
Verzögerung (2000);

// rückwärts mit halber Geschwindigkeit nach rechts
digitalWrite (motorDirection, HIGH); // Legt die LINKE Richtung von Kanal B fest
digitalWrite (motorBrake, LOW); // Löse die Bremse für Kanal B
analogWrite (motorThrottle, 100); // Dreht den Motor auf Kanal B mit halber Geschwindigkeit
Verzögerung (300);
digitalWrite (motorBrake, HIGH); // Die Bremse für Kanal B betätigen
Verzögerung (1000);

// Hand bewegen
für (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}


Schritt 9: Optionales Update: Bewegungserkennung

Ich habe heute einen Näherungssensor (GP2Y0A21), daher kann ich ihn jetzt verwenden, um die Maschine zu bewegen, wenn sich der Benutzer dem Kippschalter nähert :)
Für diesen zusätzlichen Schritt gehe ich davon aus, dass Sie die Räder bereits für die Bewegung gebaut haben (siehe optionalen Schritt 8). Jetzt müssen Sie nur noch den Sensor hinzufügen und einige Änderungen am Code für die Bewegungserkennung vornehmen.
Der Sensor hat 3 Drähte, an die das gelbe Signalkabel angeschlossen ist Pin 3 auf Arduino, während die rot und schwarz sind verbunden mit v5 und Boden jeweils auf dem Brett.
Ich habe den Sensor, wie in der Abbildung gezeigt, unter der Tür versteckt platziert, sodass er die Bewegung des Benutzers nur dann "sehen" kann, wenn sich die Tür öffnet. genau das was ich brauche!
Ich musste auch den Code ein wenig ändern (hier), um eine Bewegungserkennungsroutine zu implementieren (siehe Code in Funktion) zee7 () ), so dass sich das Kästchen bei erkannter Bewegung zuerst nach rechts, dann nach links bewegt und die Hand den Schalter umlegt und sich versteckt. Der Code ist stark kommentiert, ich hoffe, ich habe es nicht übertrieben!
Den aktualisierten Code finden Sie weiter unten. Beachten Sie auch, dass die Maschine die Bewegungen zufällig auswählt. Dies kann durch einfaches Einstellen auf sequentiell zurückgesetzt werden boolean randomize = false;
Vielen Dank an ALLE für eure tollen Vorschläge!
Der Code (Es ist besser, die diesem Schritt angehängte Datei herunterzuladen, anstatt sie von unten zu kopieren / einzufügen.):
#umfassen
Servo doorServo;
Servo handServo;
vorzeichenloser langer TimerA, TimerB; // Timer für die Bewegungserkennungsroutine
int switch_pin = 2; // Schalter auf Pin 2 stellen
// Motorvariablen
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// Entfernungsvariablen
int motionPin = 3; // Pin des Bewegungssensors an Analog 0
int lastDist = 0; // um sich die letzte Distanz zu merken
int currentDist = 0;
int thresh = 200; // Bewegungsschwelle (stellen Sie diese so ein, dass Sie die gewünschte Sensibilität für die Bewegungserkennung erhalten)

int pos = 0;
int selectedMove = 0; // Auswahl bewegen
int Testmove = 0; // Testmodus: Legen Sie die Bewegungsnummer fest, um nur eine ausgewählte Bewegung zu testen
// (auf Null setzen, um normal zu laufen, d. h .: Roundrobbin bei allen Zügen)
boolean randomize = true; // Wenn true, werden die Bewegungen der Box zufällig ausgeführt. Wenn false festgelegt wird, werden die Bewegungen der Reihe nach von 1 bis 10 ausgeführt

void setup ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // Türservo auf Pin 9 PWM setzen
handServo.attach (10); // Handservo auf Pin 10 PWM stellen
doorServo.write (80); // Tür in Versteckstellung bringen
handServo.write (0); // Hand in Versteckstellung bringen
// Kanal B einrichten, da Kanal A für Tür- und Handservos reserviert ist und nicht gleichzeitig verwendet werden kann
PinMode (MotorDirection, OUTPUT); // Leitet Pin B des Motorkanals ein
pinMode (motorBrake, OUTPUT); // Leitet den Pin von Bremskanal B ein

}

leere Schleife ()
{
// Wenn der Schalter eingeschaltet ist, bewegen Sie die Tür und die Hand, um sie auszuschalten …
if (digitalRead (switch_pin) == HIGH)
{

if (Testmove == 0)
{

if (randomize == false)
{
if (selectedMove> 10)
{
selectedMove = 0; // Wenn alle Züge gespielt sind, wiederholen Sie die Züge von Anfang an
}
}
sonst
{
selectedMove = random (11);
}
}
sonst
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (selectedMove == 0) {switchoff (); }
sonst if (selectedMove == 1) {switchoff (); }
sonst if (selectedMove == 2) {switchoffbitaraddod (); }
sonst if (selectedMove == 3) {crazydoor (); }
sonst if (selectedMove == 4) {crazyslow (); }
sonst if (selectedMove == 5) {m7anika7anika (); }
sonst wenn (selectedMove == 6) {m3alla2 (); }
sonst if (selectedMove == 7) {switchoff (); }
sonst if (selectedMove == 8) {matrix (); }
sonst if (selectedMove == 9) {sneak (); }
sonst if (selectedMove == 10) {zee7 (); }

if (Testmove == 0 && randomize == false) {
selectedMove ++; // Zum nächsten Zug wechseln, wenn nicht im Testmodus
}
}
}
// Bibliothek von Zügen
// Grundzug
stornieren abschalten ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

// bewege 3: öffne und warte, dann bewege die Hand und warte, dann schalte aus und verstecke dich
nichtig switchoffbitaraddod ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (800);
// Hand bewegen
für (pos = 0; pos <100; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (1000);
für (pos = 100; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);


}

}

// bewege dich 4: öffne die Tür, schließe sie dann mehrmals, warte, dann wieder und schalte sie aus und verstecke dich.

nichtig crazydoor ()
{

// Tür bewegen
für (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür bewegen
für (pos = 80; pos <110; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (700);
// Tür bewegen
für (pos = 80; pos <125; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (700);
// Tür verstecken
für (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (pos);
Verzögerung (15);
}

// ---- von Schalter von ---- //
// Tür bewegen
für (pos = 80; pos <155; pos = 8)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 3)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (pos);
Verzögerung (15);
}

}

// bewege 5: öffne die Tür, dann bewege die Hand sehr langsam vor und zurück, um dich sehr langsam zu verstecken, und schließe dann schnell die Tür
void crazyslow ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 1)
{
doorServo.write (pos);
Verzögerung (30);
}

// Hand bewegen
für (pos = 0; pos <129; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (pos);
Verzögerung (30);
}

// Tür verstecken
für (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (pos);
Verzögerung (30);
}
Verzögerung (100);
für (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (pos);
Verzögerung (15);
}

}
// bewege 6:
nichtig m7anika7anika () {
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <70; pos = 1)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (800);


// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

handServo.write (40);
Verzögerung (1000);

// Hand bewegen
für (pos = 40; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}


für (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (pos);
Verzögerung (15);
}



}
nichtig m3alla2 () {
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <127; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (2000);

für (pos = 130; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

für (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
für (pos = 140; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (500);
// Hand verstecken
für (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

leere Matrix ()
{
// Tür bewegen
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

// Hand bewegen
für (pos = 0; pos <80; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

für (pos = 80; pos <129; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}
Verzögerung (300);

für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (10);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}

}
nichtig schleichen ()
{
// Tür bewegen
für (pos = 80; pos <130; pos = 1)
{
doorServo.write (pos);
Verzögerung (30);
}
Verzögerung (2000);

// Hand bewegen
für (pos = 0; pos <40; pos = 1)
{
handServo.write (pos);
Verzögerung (30);
}

Verzögerung (500);

für (pos = 130; pos <155; pos = 4)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);

für (pos = 40; pos <90; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (500);
// Hand verstecken
für (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);
für (pos = 70; pos <90; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);
für (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
Verzögerung (100);

für (pos = 70; pos <129; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

für (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}
// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

// Diese Bewegung öffnet die Tür und wartet auf Bewegung, wenn sie in der Nähe des Schalters erkannt wird.
// Die Box bewegt sich zuerst nach rechts und dann nach links, und schließlich bewegt sich die Hand und schaltet den Schalter aus
nichtig zee7 ()
{

//offene Tür
für (pos = 80; pos <155; pos = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
Verzögerung (1200); // Warten Sie nach dem Öffnen der Tür, bis sich die Sensorwerte stabilisiert haben

// Timer einstellen und Sensor auslesen
// auf eine Bewegung warten, die die Schwelle überschreitet oder wenn der Timer abläuft (5 Sek.),
lastDist = analogRead (motionPin);
TimerA = Millis ();

while (millis () - TimerA <= 5000)
{
currentDist = analogRead (motionPin);

// Weicht die aktuelle Entfernung um mehr als den Schwellenwert von der letzten Entfernung ab?
// Wenn ja, dann verschiebe das Kästchen nach rechts
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// Vorwärts mit halber Geschwindigkeit nach links (wählen Sie die Geschwindigkeit und die Verzögerung
//(i.e Verzögerung (300) je nach Box und Batteriespannung, so dass der Bewegungswurf erwünscht ist)
digitalWrite (motorDirection, LOW); // Legt die RECHTE Richtung von Kanal A fest
digitalWrite (motorBrake, LOW); // Löse die Bremse für Kanal B
analogWrite (motorThrottle, 100); // Dreht den Motor auf Kanal B mit voller Geschwindigkeit
Verzögerung (300);
digitalWrite (motorBrake, HIGH); // Die Bremse für Kanal B betätigen
brechen;
}
lastDist = currentDist;
}

// Timer einstellen und Sensor auslesen
// auf eine Bewegung warten, die die Schwelle überschreitet oder wenn der Timer abläuft (5 Sek.),
Verzögerung (1200); // Warten Sie nach dem Öffnen der Tür, bis sich die Sensorwerte stabilisiert haben
lastDist = analogRead (motionPin);
TimerB = Millis ();
while (millis () - TimerB <= 5000)
{
currentDist = analogRead (motionPin);
// Hat sich die Box bereits nach rechts bewegt und die aktuelle Distanz weicht mehr als der Schwellenwert von der letzten Distanz ab?
// Wenn ja, dann gehe nach links
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// rückwärts mit halber Geschwindigkeit nach rechts (Geschwindigkeit und Verzögerung wählen)
//(i.e Verzögerung (300) je nach Box und Batteriespannung, so dass der Bewegungswurf erwünscht ist)
digitalWrite (motorDirection, HIGH); // Legt die LINKE Richtung von Kanal B fest
digitalWrite (motorBrake, LOW); // Löse die Bremse für Kanal B
analogWrite (motorThrottle, 100); // Dreht den Motor auf Kanal B mit halber Geschwindigkeit
Verzögerung (300);
digitalWrite (motorBrake, HIGH); // Die Bremse für Kanal B betätigen
brechen;
}

lastDist = currentDist;

}
Verzögerung (100);
// Hand bewegen
für (pos = 0; pos <130; pos = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Hand verstecken
für (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (pos);
Verzögerung (15);
}

// Tür verstecken
für (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (pos);
Verzögerung (15);
}
}

3 Leute haben dieses Projekt gemacht!

  • AndyC159 hat es geschafft!

  • SamL84 hat es geschafft!

  • melton1313 hat es geschafft!

Hast du dieses Projekt gemacht? Teile es mit uns!

Empfehlungen

  • Schneckensortiermaschine

  • PCB BOT (Linienverfolgung, Hindernisvermeidung und Bluetooth-gesteuerter Roboter auf einer einzigen Platine)

  • Klasse Internet der Dinge

  • Farben des Regenbogenwettbewerbs

  • Fandom Contest

  • Party Challenge

194 Diskussionen

0

versuchen Sie

Vor 4 Jahren bei Introduction

Danke dafür! Ich habe mein erstes Arduino-Projekt basierend auf dieser Anweisung erstellt: Ein nutzloser Drache!

4 Antworten 0

Ajannversuchen Sie

Antworten vor 3 Jahren

Ihre Drachenmaschine ist fantastisch. !!! Künstlerisch

0

TJAOkevinversuchen Sie

Antworten vor 3 Jahren

Genial!!!!!

0

Riachiversuchen Sie

Antworten vor 4 Jahre auf Introduction

Du bist toll :) !!!

Großartige Persönlichkeit für einen Drachen! Ich wünschte, Sie könnten das Video wiederholen, während der Drache direkt auf die Kamera gerichtet ist (Draufsicht). Ich denke, das wird lustig, also sehen Sie, wie sich die Zunge herausschleicht!

Danke, dass du dein Video geteilt hast und ich bin froh, dass ich geholfen habe

0

versuchen SieRiachi

Antworten vor 4 Jahre auf Introduction

Ich habe es in einem früheren Stadium mit der Draufsicht versucht, aber es hat nicht funktioniert (ich habe zu viel von den unordentlichen Innenseiten gesehen), also habe ich es abgewiesen, als ich dieses Video aufgenommen habe. Ich denke, Sie haben Recht: Im Endstadium hätte es großartig ausgesehen! Leider habe ich den Drachen schon verschenkt … Also weiter zum nächsten Projekt!

0

br1pro

vor 4 Jahren

Sehr lustig! harte Arbeit die Servos zu reparieren und die Hand zu entwerfen. Danke für dieses instructable!

1 Antwort 0

Riachibr1pro

Antworten vor 4 Jahre auf Introduction

Großartige Arbeit, Mann! wirklich schön :) irgendein Video?

0

Lincoln

vor 5 Jahren

Schau dir zuerst das Video an und dann lach dich aus

1 Antwort 0

TobiasVLincoln

Antworten vor 4 Jahre auf Introduction

Ich weiß, dass ich es getan habe! : D

0

Rileyw

vor 5 Jahren

Super cool das Video ließ es scheinen, als hätte es einen eigenen Verstand

0

Elitekilla117

Vor 5 Jahren auf Einführung

Meine nutzlose Maschine mit Arduino- und Riachis-Code! Von Dr.who zu einer Tardis verarbeitet. :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 Antworten 0

RiachiElitekilla117

Antworten vor 5 Jahren auf Introduction

LIEBE ES!!!! :)) Wirklich gut gemacht, Mann, so glücklich, deine Bombenkiste lebend zu sehen! Ich habe auch die Dramatisierung und die Musik: p kann mich einfach nicht aufhalten, 3 kleine Modifikationen vorzuschlagen, wenn ich darf :)?
- Es wäre großartig, die Maschine in eine stehende Position zu bringen. Ich weiß, dass dadurch die Schwerkraft zum Schließen der Tür verloren geht. Eine einfache Lösung besteht jedoch darin, 2 Gummibänder an der Innenseite der Tür auf einer Seite anzubringen und zu befestigen Auf der Innenseite des Kastens für das andere Ende schließt sich die Tür, wenn sich das Türservo schließt. Überprüfen Sie meine Bauschritte. In Schritt 6 sehen Sie das Gummiband.
- Auch wenn Sie die Hände schwarz streichen, wird es schlauer und glatter
! Auch die Handspitze kann blutrot lackiert oder mit einem verrückten Gesicht oder ähnlichem verziert werden.
- entferne den letzten Zug, da nichts darin passiert (soll der sein, der die Kiste bewegt) und schreibe deinen eigenen Zug …
Vergessen Sie trotzdem die Vorschläge, ich habe Ihren machineeee geliebt! Und danke für die vielen Dankeschöns, bitte können Sie sie reduzieren und das Video auf die Maschine fokussieren :)
Hoffe es hat deiner Freundin gefallen!

0

Elitekilla117Riachi

Antworten vor 5 Jahren auf Introduction

Hahah Danke für die Komplimente :) Eigentlich wollte ich noch viel mehr tun, aber wegen der Zeitnot konnte ich nicht viele Details einfügen, die ich wollte. Ich möchte den Armen etwas Farbe verleihen, hatte aber keine Zeit dafür. Und ich wollte mit einem Filzstift ein Gesicht auf den Arm zeichnen, aber es ist bereits eingepackt und bereit, es ihr zu Weihnachten zu geben. Hehehe. Ich denke, sie wird es lieben. Ich wollte es auch aufstehen lassen, hatte aber Angst, dass die Gummibänder den Servos zu viel Gewicht geben würden. Die Tür ist schon ziemlich schwer. Der letzte Schachzug, den ich gemacht habe, weil er Sie in Atem hält und darauf wartet, dass er herauskommt. Hahaha aber ich schätze all die hilfe mein freund! Es lohnt sich auf jeden Fall!

0

chuckletushy

vor 5 Jahren

Das muss ich machen … es ist großartig

0

wrs715

Vor 5 Jahren auf Einführung

Dies ist das erste Projekt, das ich mit einem Arduino gesehen habe, bei dem ich dachte: "Ja, das ist es wert. Jetzt muss ich mir eines zulegen." Fantastischer Job!

0

siliconghost

Vor 5 Jahren auf Einführung

Wow, genial, nimm ein gemeinsames Projekt auf! Lieben Sie es, es interessanter zu machen!

0

bob3030

vor 5 Jahren

Das unbrauchbare Gerät eines Mannes ist das absolut großartige eines anderen, nicht von dieser Welt, wir werden es uns überlegen, es macht Spaß, es von vielen unbrauchbaren Geräten begehrt zu haben. Vielen Dank für Ihre Updates zum Projekt. Danke fürs Schreiben.

0

Wackler

Vor 5 Jahren auf Einführung

Gedanke 1: Ein Arduino dafür zu verwenden ist einfach lächerlich übertrieben
Gedanke 2: Nach dem Anschauen des Videos mit einem Arduino ist dies einfach Genie pur!
Ich verneige mich vor deiner Kreativität!

0

stolpern

Vor 5 Jahren auf Einführung

Das ist wirklich großartig! Erinnert mich irgendwie an eine Wall-E Persönlichkeit. Vielen Dank für ein so tolles Projekt!

0

Gazillabytes

Vor 5 Jahren auf Einführung

Wirklich nutzlos! Nizza ist möglich. Ich bin begeistert und muss eine für meinen Schreibtisch bauen. Vielen Dank.