Inhaltsverzeichnis:
- Schritt 1: Ausrüstung
- Schritt 2: Arduino-Setup
- Schritt 3: Endgültiges Programm
- Schritt 4: Videoanleitung
- Schritt 5: Fazit
Video: Klavierfliesen, die Roboterarm spielen - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Die Gruppe besteht aus 2 Automatisierungsingenieuren von UCN, die eine brillante Idee hatten, zu deren Umsetzung und Entwicklung wir motiviert sind. Die Idee basiert auf einem Arduino-Board, das einen Roboterarm steuert. Das Arduino-Board ist das Gehirn der Operation und dann wird der Aktor der Operation, der Roboterarm, tun, was er muss. Die ausführlichere Erklärung folgt später.
Schritt 1: Ausrüstung
Roboterarm:
Phantomx Pincher Roboterarm-Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software für den Roboter- https://www.arduino.cc/en/Main/OldSoftwareRelease… Farberkennungskamera:
CMUcam5 Pixy-Kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Schritt 2: Arduino-Setup
Sie können das Setup auf der Platine hier sehen, was sehr einfach ist.
Auf der linken Seite befindet sich das Netzteil.
Das mittlere ist für das erste Servo, das später Servo für Servo mit den anderen Servos verbunden wird.
Der untere ist der Ort, an dem wir das Board von einem PC oder Laptop aus steuern, der am anderen Ende einen USB-Eingang hat.
Schritt 3: Endgültiges Programm
||| PROGRAMM |||
#enthalten
#include #include "poses.h" #include //Pixy-Bibliothek #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController(1000000);
const int SERVOCOUNT = 5; int-ID; int-Position; boolesche IDCheck; boolescher RunCheck;
Void setup () { PinMode (0, AUSGANG); ax12SetRegister2(1, 32, 50); // Gelenknummer 1 Register 32 auf Geschwindigkeit 50 setzen. ax12SetRegister2 (2, 32, 50); // Gelenknummer 2 Register 32 auf Geschwindigkeit 50 setzen. ax12SetRegister2 (3, 32, 50);//setze Gelenknummer 3 Register 32 auf Geschwindigkeit 50. ax12SetRegister2 (4, 32, 50); // Setze Gelenknummer 4 Register 32 auf Geschwindigkeit 50. ax12SetRegister2(5, 32, 100); // Setze Gelenknummer 5 Register 32 bis 100. // Variablen initialisieren id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // serielle Schnittstelle öffnen Serial.begin (9600); Verzögerung (500); Serial.println("###########################"); Serial.println ("Serielle Kommunikation hergestellt.");
// Überprüfen Sie die Lipo-Batteriespannung CheckVoltage ();
// Servos scannen, Position zurückgeben MoveTest (); Nach Hause ziehen(); Menüpunkte(); RunCheck = 1; }
Void loop () {// den Sensor lesen: Int inByte = Serial.read ();
Schalter (inByte) {
Fall '1': MovePose1(); brechen;
Fall '2': MovePose2(); brechen; Fall '3': MovePose3(); brechen;
Fall '4': MovePose4(); brechen;
Fall '5': MoveHome(); brechen; Fall '6': Grab(); brechen;
Fall '7': LEDTest(); brechen;
Fall '8': RelaxServos(); brechen; } }
Void CheckVoltage () {// warten, dann überprüfen Sie die Spannung (LiPO-Sicherheit) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("###########################"); Serial.print ("Systemspannung: "); Seriendruck (Spannung); Serial.println ("Volt."); if (Spannung 10.0) {Serial.println ("Spannungspegel nominal."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("##########################"); }
Void MoveHome () { Verzögerung (100); // empfohlene Pause bioloid.loadPose(Home); // Laden Sie die Pose von FLASH in den nextPose-Puffer bioloid.readPose(); // aktuelle Servopositionen in den curPose-Puffer einlesen Serial.println ("############################"); Serial.println ("Servos in Ausgangsposition bewegen"); Serial.println("###########################"); Verzögerung (1000); bioloid.interpolateSetup(1000); // Setup für Interpolation von Current->Next über 1/2 Sekunde while(bioloid.interpolating > 0){ // Tun Sie dies, während wir unsere neue Pose noch nicht erreicht haben bioloid.interpolateStep(); // Servos bewegen, wenn nötig. Verzögerung(3); } if (RunCheck == 1){ MenuOptions(); } }
Void MovePose1 () { Verzögerung (100); // empfohlene Pause bioloid.loadPose(Pose1); // Laden Sie die Pose von FLASH in den nextPose-Puffer bioloid.readPose(); // aktuelle Servopositionen in den curPose-Puffer einlesen Serial.println ("############################"); Serial.println ("Servos in die 1. Position bewegen"); Serial.println("###########################"); Verzögerung (1000); bioloid.interpolateSetup(1000); // Setup für Interpolation von Current->Next über 1/2 Sekunde while(bioloid.interpolating > 0){ // Tun Sie dies, während wir unsere neue Pose noch nicht erreicht haben bioloid.interpolateStep(); // Servos bewegen, wenn nötig. Verzögerung(3); } SetPosition(3, 291); // die Position von Gelenk 3 auf '0' setzen delay (100); // warten, bis sich das Gelenk bewegt, wenn (RunCheck == 1) { MenuOptions (); } }
Void MovePose2 () { Verzögerung (100); // empfohlene Pause bioloid.loadPose (Pose2); // Laden Sie die Pose von FLASH in den nextPose-Puffer bioloid.readPose(); // aktuelle Servopositionen in den curPose-Puffer einlesen Serial.println ("############################"); Serial.println ("Servos in die 2. Position bewegen"); Serial.println("###########################"); Verzögerung (1000); bioloid.interpolateSetup(1000); // Setup für Interpolation von Current->Next über 1/2 Sekunde while(bioloid.interpolating > 0){ // Tun Sie dies, während wir unsere neue Pose noch nicht erreicht haben bioloid.interpolateStep(); // Servos bewegen, wenn nötig. Verzögerung(3); } SetPosition(3, 291); // die Position von Gelenk 3 auf '0' setzen delay (100); // warten, bis sich das Gelenk bewegt, wenn (RunCheck == 1) { MenuOptions (); aufrechtzuerhalten. aufrechtzuerhalten. Void MovePose3 () { Verzögerung (100); // empfohlene Pause bioloid.loadPose(Pose3); // Laden Sie die Pose von FLASH in den nextPose-Puffer bioloid.readPose(); // aktuelle Servopositionen in den curPose-Puffer einlesen Serial.println ("############################"); Serial.println ("Servos in die 3. Position verschieben"); Serial.println("###########################"); Verzögerung (1000); bioloid.interpolateSetup(1000); // Setup für Interpolation von Current->Next über 1/2 Sekunde while(bioloid.interpolating > 0){ // Tun Sie dies, während wir unsere neue Pose noch nicht erreicht haben bioloid.interpolateStep(); // Servos bewegen, wenn nötig. Verzögerung(3); } SetPosition(3, 291); // die Position von Gelenk 3 auf '0' setzen delay (100); // warten, bis sich das Gelenk bewegt, wenn (RunCheck == 1) { MenuOptions (); } }
Void MovePose4 () { Verzögerung (100); // empfohlene Pause bioloid.loadPose(Pose4); // Laden Sie die Pose von FLASH in den nextPose-Puffer bioloid.readPose(); // aktuelle Servopositionen in den curPose-Puffer einlesen Serial.println ("############################"); Serial.println ("Servos in die 4. Position verschieben"); Serial.println("###########################"); Verzögerung (1000); bioloid.interpolateSetup(1000); // Setup für Interpolation von Current->Next über 1/2 Sekunde while(bioloid.interpolating > 0){ // Tun Sie dies, während wir unsere neue Pose noch nicht erreicht haben bioloid.interpolateStep(); // Servos bewegen, wenn nötig. Verzögerung(3); } SetPosition(3, 291); // die Position von Gelenk 3 auf '0' setzen delay (100); // warten, bis sich das Gelenk bewegt, wenn (RunCheck == 1) { MenuOptions (); } }
Void MoveTest () { Serial.println ("##########################"); Serial.println ("Initializing Movement Sign Test"); Serial.println("###########################"); Verzögerung (500); id = 1; pos = 512; Während (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
while(pos>= 312){ SetPosition(id, pos); pos = pos--; Verzögerung(10); }
while (pos <= 512) { SetPosition (id, pos); pos = pos++; Verzögerung(10); }
// zur nächsten Servo-ID iterieren id = id++;
} if (RunCheck == 1){ MenuOptions(); } }
void MenuOptions () { Serial.println ("##########################"); Serial.println ("Bitte geben Sie Option 1-5 ein, um einzelne Tests erneut auszuführen."); Serial.println ("1) 1. Position"); Serial.println ("2) 2. Position"); Serial.println ("3) 3. Position"); Serial.println ("4) 4. Position"); Serial.println ("5) Ausgangsposition"); Serial.println("6) Systemspannung prüfen"); Serial.println("7) LED-Test durchführen"); Serial.println ("8) Relax-Servos"); Serial.println("###########################"); }
Void RelaxServos () { id = 1; Serial.println("###########################"); Serial.println ("Entspannende Servos."); Serial.println("###########################"); while(id <= SERVOCOUNT){ Relax(id); id = (id++)%SERVOCOUNT; Verzögerung (50); } if (RunCheck == 1){ MenuOptions(); } }
Void LEDTest () { id = 1; Serial.println("###########################"); Serial.println ("Laufender LED-Test"); Serial.println("###########################"); while (id <= SERVOCOUNT) { ax12SetRegister (id, 25, 1); Serial.print ("LED EIN - Servo-ID: "); Serial.println (id); Verzögerung (3000); ax12SetRegister(id, 25, 0); Serial.print ("LED AUS - Servo-ID: "); Serial.println (id); Verzögerung (3000); ID = ID++; } if (RunCheck == 1){ MenuOptions(); } }
Void Grab () { SetPosition (5, 800); // die Position von Gelenk 1 auf '0' setzen Verzögerung (100); // warten, bis sich das Gelenk bewegt
}
Wir haben unser Programm an das PincherTest-Programm des Herstellers angelehnt mit einigen großen Optimierungen bei der Positionierung. Wir haben die Poses.h verwendet, damit der Roboter die Positionen im Speicher hat. Zuerst haben wir versucht, unseren Spielarm mit Pixycam automatisch zu gestalten, aber aufgrund von Licht- und kleinen Bildschirmproblemen konnte das nicht passieren. Der Roboter hat eine grundlegende Ausgangsposition, nach dem Hochladen des Programms werden alle im Roboter gefundenen Servos getestet. Wir haben die Posen für die Tasten 1-4 festgelegt, damit Sie sie sich leicht merken können. Fühlen Sie sich frei, das Programm zu verwenden.
Schritt 4: Videoanleitung
Schritt 5: Fazit
Zusammenfassend ist der Roboter für uns ein lustiges kleines Projekt und eine lustige Sache zum Herumspielen und Experimentieren. Ich ermutige Sie, es auszuprobieren und es auch anzupassen.
Empfohlen:
Spielen Sie Doom auf Ihrem iPod in 5 einfachen Schritten!: 5 Schritte
Spielen Sie Doom auf Ihrem iPod in 5 einfachen Schritten!: Eine Schritt-für-Schritt-Anleitung zum Dual-Booten von Rockbox auf Ihrem iPod, um Doom und Dutzende anderer Spiele zu spielen. Es ist wirklich einfach zu tun, aber viele Leute sind immer noch erstaunt, wenn sie sehen, wie ich Doom auf meinem iPod spiele, und werden mit der Anleitung verwirrt
Mobiles Spielen: 5 Schritte
Mobile Gaming: Dies ist mein Programm Ich habe dieses Spiel mit dem App-Erfinder erstellt Ich kann es für andere veröffentlichen Kann es herunterladen
Verhindern Sie, dass Ihre Kinder während des Studiums spielen – wikiHow
Verhindern Sie, dass Ihre Kinder während des Studiums spielen: Das Spielen von Videospielen ist ein großes Problem, das Studenten haben, während sie studieren sollten. Viele Schüler leiden darunter, Spiele zu spielen, anstatt zu lernen, was ihnen schlechte Noten einbringt. Eltern sind wütend und sorgen sich um ihr Kind, also haben sie beschlossen
So installieren Sie Java, um Minecraft 1.12.2 zu spielen – wikiHow
So installieren Sie Java, um Minecraft 1.12.2 zu spielen: Wir alle wissen, dass Minecraft ein aus Java entwickeltes Spiel ist, wie es in seinem Logo von Version 1.12.2, Minecraft Java Edition, geschrieben steht. Auf diese Weise ist es notwendig, Java installiert und aktualisiert zu haben, um das Spiel zu spielen, wenn Sie Probleme mit Java haben
So bauen Sie eine Uhr, die die Zeit an die Wand projiziert – wikiHow
So bauen Sie eine Uhr, die Zeit an die Wand projiziert: Dieses Instructable zeigt Ihnen, wie Sie eine Projektoruhr bauen. Mit diesem Gerät können Sie die Zeit an die Wand projizieren. Basierend auf einem kleinen LCD-Wecker (nicht zu klein, sondern kann nicht projiziert und bearbeitet werden) ist dies eine gute Möglichkeit