Inhoudsopgave:
- Stap 1: Apparatuur
- Stap 2: Arduino-installatie
- Stap 3: Eindprogramma
- Stap 4: Videogids
- Stap 5: Conclusie
Video: Pianotegels die robotarm spelen - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
De groep bestaat uit 2 Automation Engineers van UCN, die met een briljant idee kwamen waar we gemotiveerd voor zijn om te doen en te ontwikkelen. Het idee is gebaseerd op een Arduino-bord dat een robotarm bestuurt. Het Arduino-bord is het brein van de operatie en dan zal de actuator van de operatie, de robotarm, doen wat hij moet doen. De uitgebreidere uitleg komt later.
Stap 1: Apparatuur
Robotarm:
Phantomx Pincher Robotarm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software voor de robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kleurdetectiecamera:
CMUcam5 Pixy-camera - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Stap 2: Arduino-installatie
Je kunt de opstelling hier op het bord zien, wat heel eenvoudig is.
Aan de linkerkant is de voeding.
De middelste is voor de eerste servo, die later servo voor servo met de andere servo's wordt verbonden.
De onderste is waar we het bord bedienen vanaf een pc of laptop, die aan de andere kant een USB-ingang heeft.
Stap 3: Eindprogramma
||| PROGRAMMA |||
#erbij betrekken
#include #include "poses.h" #include //Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int-ID; int. pos; booleaanse IDCheck; booleaanse RunCheck;
void setup(){ pinMode(0, OUTPUT); ax12SetRegister2(1, 32, 50);//stel verbindingsnummer 1 register 32 in op snelheid 50. ax12SetRegister2(2, 32, 50);//stel verbindingsnummer 2 register 32 in op snelheid 50. ax12SetRegister2(3, 32, 50);//set joint nummer 3 register 32 op snelheid 50. ax12SetRegister2(4, 32, 50);//set joint nummer 4 register 32 op snelheid 50. ax12SetRegister2(5, 32, 100);//set joint nummer 5 register 32 tot snelheid 100. // initialiseer variabelen id = 1; pos = 0; IDCheck = 1; RunCheck = 0; //open seriële poort Serial.begin (9600); vertraging (500); Serial.println("###########################"); Serial.println("Seriële communicatie tot stand gebracht.");
//Controleer Lipo-batterijspanning CheckVoltage ();
//Scan Servo's, terugkeerpositie MoveTest(); Verplaats Huis(); Menu opties(); RunCheck = 1; }
void loop () {// lees de sensor: int inByte = Serial.read ();
schakelaar (inByte) {
geval '1': MovePose1(); pauze;
geval '2': MovePose2(); pauze; geval '3': MovePose3(); pauze;
geval '4': MovePose4(); pauze;
geval '5': MoveHome(); pauze; geval '6': Grab(); pauze;
geval '7': LEDTest(); pauze;
geval '8': RelaxServos(); pauze; } }
void CheckVoltage () {// wacht, controleer dan de spanning (LiPO-veiligheid) float-spanning = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("###########################"); Serial.print ("Systeemspanning: "); Serieafdruk (spanning); Serial.println ("volt."); if (voltage 10.0){ Serial.println("Spanningsniveaus nominaal."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("###########################"); }
ongeldig MoveHome(){ vertraging(100); // aanbevolen pauze bioloid.loadPose (Home); // laad de pose van FLASH in de nextPose-buffer bioloid.readPose(); // lees de huidige servoposities in naar de curPose-buffer Serial.println ("###########################"); Serial.println ("Servo's naar startpositie verplaatsen"); Serial.println("###########################"); vertraging (1000); bioloid.interpolateSetup(1000); // setup voor interpolatie van stroom-> volgende meer dan 1/2 seconde while(bioloid.interpolating> 0){ // doe dit terwijl we onze nieuwe pose bioloid.interpolateStep(); // verplaats servo's, indien nodig. vertraging (3); } if (RunCheck == 1){ MenuOptions(); } }
ongeldig MovePose1(){ vertraging(100); // aanbevolen pauze bioloid.loadPose (Pose1); // laad de pose van FLASH in de nextPose-buffer bioloid.readPose(); // lees de huidige servoposities in naar de curPose-buffer Serial.println ("###########################"); Serial.println ("Servo's naar 1e positie verplaatsen"); Serial.println("###########################"); vertraging (1000); bioloid.interpolateSetup(1000); // setup voor interpolatie van huidige-> volgende meer dan 1/2 seconde while(bioloid.interpolating> 0){ // doe dit terwijl we onze nieuwe pose bioloid.interpolateStep(); // verplaats servo's, indien nodig. vertraging (3); } Positie instellen (3, 291); // stel de positie van gewricht 3 in op '0' vertraging (100);// wacht tot gewricht beweegt als (RunCheck == 1) { MenuOptions (); } }
ongeldig MovePose2(){ vertraging(100); // aanbevolen pauze bioloid.loadPose (Pose2); // laad de pose van FLASH in de nextPose-buffer bioloid.readPose(); // lees de huidige servoposities in naar de curPose-buffer Serial.println ("###########################"); Serial.println ("Servos naar 2e positie verplaatsen"); Serial.println("###########################"); vertraging (1000); bioloid.interpolateSetup(1000); // setup voor interpolatie van stroom-> volgende meer dan 1/2 seconde while(bioloid.interpolating> 0){ // doe dit terwijl we onze nieuwe pose bioloid.interpolateStep(); // verplaats servo's, indien nodig. vertraging (3); } Positie instellen (3, 291); // stel de positie van gewricht 3 in op '0' vertraging (100);// wacht tot gewricht beweegt als (RunCheck == 1) { MenuOptions (); } } ongeldig MovePose3(){ delay(100); // aanbevolen pauze bioloid.loadPose (Pose3); // laad de pose van FLASH in de nextPose-buffer bioloid.readPose(); // lees de huidige servoposities in naar de curPose-buffer Serial.println ("###########################"); Serial.println ("Servos naar 3e positie verplaatsen"); Serial.println("###########################"); vertraging (1000); bioloid.interpolateSetup(1000); // setup voor interpolatie van stroom-> volgende meer dan 1/2 seconde while(bioloid.interpolating> 0){ // doe dit terwijl we onze nieuwe pose bioloid.interpolateStep(); // verplaats servo's, indien nodig. vertraging (3); } Positie instellen (3, 291); // stel de positie van gewricht 3 in op '0' vertraging (100);// wacht tot gewricht beweegt als (RunCheck == 1) { MenuOptions (); } }
ongeldig MovePose4(){ vertraging(100); // aanbevolen pauze bioloid.loadPose (Pose4); // laad de pose van FLASH in de nextPose-buffer bioloid.readPose(); // lees de huidige servoposities in naar de curPose-buffer Serial.println ("###########################"); Serial.println ("Servos naar 4e positie verplaatsen"); Serial.println("###########################"); vertraging (1000); bioloid.interpolateSetup(1000); // setup voor interpolatie van stroom-> volgende meer dan 1/2 seconde while(bioloid.interpolating> 0){ // doe dit terwijl we onze nieuwe pose bioloid.interpolateStep(); // verplaats servo's, indien nodig. vertraging (3); } Positie instellen (3, 291); // stel de positie van gewricht 3 in op '0' vertraging (100);// wacht tot gewricht beweegt als (RunCheck == 1) { MenuOptions (); } }
void MoveTest(){ Serial.println("###########################"); Serial.println("Initialiseren van bewegingstekentest"); Serial.println("###########################"); vertraging (500); id = 1; pos = 512; while(id <= SERVOCOUNT){ Serial.print("Bewegende servo-ID: "); Serieel.println(id);
while(pos>= 312){ SetPosition(id, pos); pos = pos--; vertraging(10); }
while(pos <= 512){ SetPosition(id, pos); pos = pos++; vertraging(10); }
// herhaal naar de volgende servo-ID id = id ++;
} if (RunCheck == 1){ MenuOptions(); } }
void MenuOptions(){ Serial.println("###########################"); Serial.println("Voer optie 1-5 in om individuele tests opnieuw uit te voeren."); Serial.println("1) 1e positie"); Serial.println("2) 2e positie"); Serial.println("3) 3e positie"); Serial.println("4) 4e positie"); Serial.println("5) Thuispositie"); Serial.println ("6) Controleer systeemspanning"); Serial.println("7) LED-test uitvoeren"); Serial.println("8) Relax servo's"); Serial.println("###########################"); }
void RelaxServos(){ id = 1; Serial.println("###########################"); Serial.println("Ontspannende servo's."); Serial.println("###########################"); while(id <= SERVOCOUNT){ Relax(id); id = (id++)%SERVOCOUNT; vertraging (50); } if (RunCheck == 1){ MenuOptions(); } }
ongeldig LEDTest(){ id = 1; Serial.println("###########################"); Serial.println ("Lopende LED-test"); Serial.println("###########################"); while(id <= SERVOCOUNT){ ax12SetRegister(id, 25, 1); Serial.print ("LED AAN - Servo-ID: "); Serieel.println(id); vertraging (3000); ax12SetRegister(id, 25, 0); Serial.print ("LED UIT - Servo-ID: "); Serieel.println(id); vertraging (3000); id = id++; } if (RunCheck == 1){ MenuOptions(); } }
void Grab(){ SetPosition(5, 800); // stel de positie van gewricht 1 in op '0' vertraging (100);//wacht tot gewricht beweegt
}
We hebben ons programma gebaseerd op het PincherTest-programma van de fabrikant met enkele belangrijke aanpassingen in het geval van positionering. We gebruikten de poses.h voor de robot om de posities in het geheugen te hebben. Ten eerste hebben we geprobeerd om onze speelarm met Pixycam automatisch te maken, maar vanwege licht- en kleine schermproblemen kon dat niet gebeuren. De robot heeft een standaard startpositie, na het uploaden van het programma zal hij alle servo's in de robot testen. We hebben de poses voor de 1-4 knoppen ingesteld, zodat het gemakkelijk te onthouden is. Voel je vrij om het programma te gebruiken.
Stap 4: Videogids
Stap 5: Conclusie
Kortom, de robot is een leuk klein project voor ons en een leuk ding om mee te spelen en mee te experimenteren. Ik moedig je aan om het te proberen en het ook aan te passen.
Aanbevolen:
Hoe maak je een Ford audiofiele stereoradio om mp3-bestanden af te spelen: 7 stappen
Hoe maak je een Ford audiofiele stereoradio Speel mp3-bestanden af .: Deze instructable geeft je een paar belangrijke details over hoe je kunt voldoen aan de MP3 CD-R-compatibiliteitsvereisten van een Ford audiofiel (en waarschijnlijk een Mach 300, Shaker 500 en Shaker 1000 ) fabrieksstereo zodat u kunt branden en genieten van MP3-bestanden op een cd
Spelen met de hand-wandklok: 14 stappen
Spelen met hand-wandklok: Elektronische hand-wandklok (commerciële markeringskwarts) is tegenwoordig niets bijzonders. Het kan in veel winkels worden gekocht. In sommige zijn ze extreem goedkoop; met een prijs van ongeveer €2 (50CZK). Die lage prijs kan een motivatie zijn om de
Spelen met de tijd: 6 stappen
Spelen met de tijd: Het oorspronkelijke idee van dit project was: maak een cadeau, maak een origineel elektronisch circuit, gebruik een oude telefoon, geef een "steampunk" verschijning
NDS-spellen op uw pc spelen met DeSmuME: 4 stappen
NDS-spellen op uw pc spelen met DeSmuME: Howdy! Ik ben hier om mensen te leren hoe ze programma's (voornamelijk emulators) op hun computers kunnen gebruiken. Vandaag laat ik je zien hoe je een NDS-emulator genaamd DeSmuME gebruikt. Vraag me niet waarom het zo heet, ik weet het niet. Google het als je geïnteresseerd bent! Laten we beginnen
Arduino - pianotegels: 16 stappen (met afbeeldingen)
Arduino - Piano Tiles: Hallo internetmensen, dit gaat over hoe je kunt maken wat ZEKER geen afzetterij is van een mobiel spel op een arduino uno r3.Dus om te beginnen heb je alle onderdelen nodig, die als volgt zijn !1x Arduino Uno r3 ($42)2x LCD Keypad Shield ($19 per stuk)5