INHOUDSOPGAWE:
- Stap 1: Toerusting
- Stap 2: Arduino -opstelling
- Stap 3: Finale program
- Stap 4: Videogids
- Stap 5: Gevolgtrekking
Video: Klavierteëls speel robotarm: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Die groep bestaan uit 2 outomatiseringsingenieurs van UCN, wat 'n briljante idee gekry het wat ons gemotiveerd is om te doen en te ontwikkel. Die idee is gebaseer op 'n Arduino -bord wat 'n robotarm beheer. Die Arduino -bord is die brein van die operasie en dan sal die aktuator van die operasie, die robotarm, doen wat nodig is. Die meer diepgaande verduideliking sal later kom.
Stap 1: Toerusting
Robotarm:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Sagteware vir die robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kleuropsporingskamera:
CMUcam5 Pixy -kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Sagteware - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Stap 2: Arduino -opstelling
U kan die opstelling hier op die bord sien, wat baie maklik is.
Links is die kragtoevoer.
Die middelste is vir die eerste servo, wat later met die ander servo's verbind word, servo per servo.
Die onderste is waar ons die bord vanaf 'n rekenaar of skootrekenaar beheer, met 'n USB -ingang aan die ander kant.
Stap 3: Finale program
||| PROGRAM |||
#insluit
#include #include "poses.h" #include // Pixy Library #include
#definieer POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolean IDCheck; booleaanse RunCheck;
ongeldige opstelling () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // stel gesamentlike nommer 1 register 32 op spoed 50. ax12SetRegister2 (2, 32, 50); // stel gesamentlike nommer 2 register 32 op spoed 50. ax12SetRegister2 (3, 32, 50); // stel gesamentlike nommer 3 register 32 op spoed 50. ax12SetRegister2 (4, 32, 50); // stel gesamentlike nommer 4 register 32 op spoed 50. ax12SetRegister2 (5, 32, 100); // stel gesamentlike nommer 5 register 32 om 100 te versnel. // initialiseer veranderlikes id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // oop seriële poort Serial.begin (9600); vertraging (500); Serial.println ("############################"); Serial.println ("Serial Communication Gevestig.");
// Kontroleer Lipo -batteryspanning CheckVoltage ();
// Skandeer servo's, gee posisie terug MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
leemte -lus () {// lees die sensor: int inByte = Serial.read ();
skakelaar (inByte) {
geval '1': MovePose1 (); breek;
geval '2': MovePose2 (); breek; geval '3': MovePose3 (); breek;
geval '4': MovePose4 (); breek;
geval '5': MoveHome (); breek; geval '6': Gryp (); breek;
geval '7': LEDTest (); breek;
geval '8': RelaxServos (); breek; }}
ongeldig CheckVoltage () {// wag, kyk dan na die spanning (LiPO -veiligheid) vlotspanning = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Stelselspanning:"); Reeks.afdruk (spanning); Serial.println ("volts."); if (spanning 10.0) {Serial.println ("Spanningsvlakke nominaal."); } as (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }
nietig MoveHome () {vertraging (100); // aanbevole pouse bioloid.loadPose (Home); // laai die pose van FLASH af in die nextPose buffer bioloid.readPose (); // lees in huidige servoposisies na die curPose buffer Serial.println ("############################"); Serial.println ("Skuif servo's na tuisposisie"); Serial.println ("############################"); vertraging (1000); bioloid.interpolateSetup (1000); // opstel vir interpolasie vanaf huidige-> volgende meer as 1/2 sekonde (bioloid.interpolating> 0) {// doen dit terwyl ons nie ons nuwe pose bioloid.interpolateStep () bereik het nie; // skuif servo's, indien nodig. vertraging (3); } as (RunCheck == 1) {MenuOptions (); }}
nietig MovePose1 () {vertraging (100); // aanbevole pouse bioloid.loadPose (Pose1); // laai die pose van FLASH af in die nextPose buffer bioloid.readPose (); // lees in huidige servoposisies na die curPose buffer Serial.println ("############################"); Serial.println ("Skuif servo's na 1ste posisie"); Serial.println ("############################"); vertraging (1000); bioloid.interpolateSetup (1000); // opstel vir interpolasie vanaf huidige-> volgende meer as 1/2 sekonde (bioloid.interpolating> 0) {// doen dit terwyl ons nie ons nuwe pose bioloid.interpolateStep () bereik het nie; // skuif servo's, indien nodig. vertraging (3); } SetPosition (3, 291); // stel die posisie van gewrig 3 op '0' vertraging (100); // wag tot gewrig beweeg om te (ifCheck == 1) {MenuOptions (); }}
nietig MovePose2 () {vertraging (100); // aanbevole pouse bioloid.loadPose (Pose2); // laai die pose van FLASH af in die nextPose buffer bioloid.readPose (); // lees in huidige servoposisies na die curPose buffer Serial.println ("############################"); Serial.println ("Skuif servo's na 2de posisie"); Serial.println ("############################"); vertraging (1000); bioloid.interpolateSetup (1000); // opstel vir interpolasie vanaf huidige-> volgende meer as 1/2 sekonde (bioloid.interpolating> 0) {// doen dit terwyl ons nie ons nuwe pose bioloid.interpolateStep () bereik het nie; // skuif servo's, indien nodig. vertraging (3); } SetPosition (3, 291); // stel die posisie van gewrig 3 op '0' vertraging (100); // wag tot gewrig beweeg om te (ifCheck == 1) {MenuOptions (); }} ongeldig MovePose3 () {vertraging (100); // aanbevole pouse bioloid.loadPose (Pose3); // laai die pose van FLASH af in die nextPose buffer bioloid.readPose (); // lees in huidige servoposisies na die curPose buffer Serial.println ("############################"); Serial.println ("Skuif servo's na die derde posisie"); Serial.println ("############################"); vertraging (1000); bioloid.interpolateSetup (1000); // opstel vir interpolasie vanaf huidige-> volgende meer as 1/2 sekonde (bioloid.interpolating> 0) {// doen dit terwyl ons nie ons nuwe pose bioloid.interpolateStep () bereik het nie; // skuif servo's, indien nodig. vertraging (3); } SetPosition (3, 291); // stel die posisie van gewrig 3 op '0' vertraging (100); // wag tot gewrig beweeg om te (ifCheck == 1) {MenuOptions (); }}
nietig MovePose4 () {vertraging (100); // aanbevole pouse bioloid.loadPose (Pose4); // laai die pose van FLASH af in die nextPose buffer bioloid.readPose (); // lees in huidige servoposisies na die curPose buffer Serial.println ("############################"); Serial.println ("Skuif servo's na die vierde posisie"); Serial.println ("############################"); vertraging (1000); bioloid.interpolateSetup (1000); // opstel vir interpolasie vanaf huidige-> volgende meer as 1/2 sekonde (bioloid.interpolating> 0) {// doen dit terwyl ons nie ons nuwe pose bioloid.interpolateStep () bereik het nie; // skuif servo's, indien nodig. vertraging (3); } SetPosition (3, 291); // stel die posisie van gewrig 3 op '0' vertraging (100); // wag totdat die gewrig beweeg as (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Initialisering van bewegingstekentoets"); Serial.println ("############################"); vertraging (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
terwyl (pos> = 312) {SetPosition (id, pos); pos = pos--; vertraging (10); }
terwyl (pos <= 512) {SetPosition (id, pos); pos = pos ++; vertraging (10); }
// herhaal na die volgende servo ID id = id ++;
} as (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Voer asseblief opsie 1-5 in om individuele toetse weer uit te voer."); Serial.println ("1) 1ste posisie"); Serial.println ("2) 2de posisie"); Serial.println ("3) 3de posisie"); Serial.println ("4) 4de posisie"); Serial.println ("5) tuisposisie"); Serial.println ("6) Kontroleer stelsel spanning"); Serial.println ("7) Voer LED -toets uit"); Serial.println ("8) Relax Servos"); Serial.println ("############################"); }
leegte RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Ontspannende servo's."); Serial.println ("############################"); terwyl (id <= SERVOCOUNT) {Ontspan (id); id = (id ++)%SERVOCOUNT; vertraging (50); } as (RunCheck == 1) {MenuOptions (); }}
leegte LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Lopende LED -toets"); Serial.println ("############################"); terwyl (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); vertraging (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); vertraging (3000); id = id ++; } as (RunCheck == 1) {MenuOptions (); }}
leegte Gryp () {SetPosition (5, 800); // stel die posisie van gewrig 1 op '0' vertraging (100); // wag totdat die gewrig beweeg
}
Ons het ons program gebaseer op die PincherTest -program van die vervaardiger, met 'n paar belangrike aanpassings in die geval van posisionering. Ons gebruik die poses.h vir die robot om die posisies in die geheue te hê. Eerstens het ons probeer om ons speelarm met Pixycam outomaties te maak, maar weens ligte en klein skermprobleme kon dit nie gebeur nie. Die robot het 'n basiese tuisposisie, nadat hy die program opgelaai het, sal hy al die servo's in die robot toets. Ons het die posisies vir die 1-4 knoppies gestel, so dit is maklik om te onthou. Gebruik die program gerus.
Stap 4: Videogids
Stap 5: Gevolgtrekking
Ten slotte, die robot is 'n prettige klein projek vir ons en 'n lekker ding om mee rond te speel en mee te eksperimenteer. Ek moedig u aan om dit ook te probeer en aan te pas.
Aanbeveel:
Speel video met ESP32: 10 stappe (met foto's)
Speel video met ESP32: hierdie instruksies wys iets oor die speel van video en klank met ESP32
Speel Doom op u iPod in 5 maklike stappe !: 5 stappe
Speel Doom op u iPod in 5 maklike stappe !: 'n Stap-vir-stap gids oor hoe u Rockbox op u iPod kan dubbellaai om Doom en tientalle ander speletjies te speel. Dit is iets baie maklik om te doen, maar baie mense staan nog steeds verbaas as hulle sien hoe ek op my iPod doom speel en deurmekaar raak met die instruksies
Praat Arduino - 'N MP3 speel met Arduino sonder enige module - Speel MP3 -lêer vanaf Arduino met behulp van PCM: 6 stappe
Praat Arduino | 'N MP3 speel met Arduino sonder enige module | Mp3 -lêer speel vanaf Arduino met behulp van PCM: In hierdie instruksies leer ons hoe om 'n mp3 -lêer met arduino te speel sonder om 'n klankmodule te gebruik
Arduino - Klavierteëls: 16 stappe (met foto's)
Arduino - Piano Tiles: Hallo internetmense, dit gaan oor hoe om te maak wat beslis nie 'n afslag van 'n mobiele spel op 'n arduino uno r3 is nie. Om te begin, benodig u al die onderdele, wat soos volg is: ! 1x Arduino Uno r3 ($ 42) 2x LCD -sleutelbordskerm ($ 19 elk) 5
Hoe om 'n indrukwekkende robotarm van hout te monteer (DEEL 3: ROBOTARM)
Hoe om 'n indrukwekkende robotarm van hout te monteer (DEEL 3: ROBOTARM) - GEBASEER OP DIE MIKRO: BITN: Die volgende installasieproses is gebaseer op die voltooiing van die vermydende hindernismodus. Die installasieproses in die vorige afdeling is dieselfde as die installasieproses in die lynopsporingsmodus. Kom ons kyk dan na die finale vorm van A