Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
Gruppen består av 2 automatiseringsingeniører fra UCN, som kom med en strålende idé som vi er motiverte til å gjøre og utvikle. Ideen er basert på et Arduino -bord som styrer en robotarm. Arduino -brettet er hjernen til operasjonen, og deretter vil aktuatoren for operasjonen, robotarmen, gjøre det den trenger. Den mer grundige forklaringen kommer senere.
Trinn 1: Utstyr
Robotarm:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Programvare for roboten- https://www.arduino.cc/en/Main/OldSoftwareRelease… Fargedetekteringskamera:
CMUcam5 Pixy -kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Programvare - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Trinn 2: Arduino -oppsett
Du kan se oppsettet på brettet her, noe som er veldig enkelt.
Til venstre er strømforsyningen.
Den midterste er for den første servoen, som senere kobles til de andre servoene, servo for servo.
Den nederste er hvor vi styrer brettet fra en PC eller bærbar datamaskin, som har en USB -inngang i den andre enden.
Trinn 3: Sluttprogram
||| PROGRAM |||
#inkludere
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolsk IDCheck; boolsk RunCheck;
ugyldig oppsett () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // sett felles nummer 1 register 32 til hastighet 50. ax12SetRegister2 (2, 32, 50); // sett felles nummer 2 register 32 til hastighet 50. ax12SetRegister2 (3, 32, 50); // sett felles nummer 3 register 32 til hastighet 50. ax12SetRegister2 (4, 32, 50); // sett felles nummer 4 register 32 til hastighet 50. ax12SetRegister2 (5, 32, 100); // sett felles nummer 5 register 32 til hastighet 100. // initialiser variabler id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // åpen serieport Serial.begin (9600); forsinkelse (500); Serial.println ("############################"); Serial.println ("Seriell kommunikasjon etablert.");
// Sjekk Lipo batterispenning CheckVoltage ();
// Skann servoer, returposisjon MoveTest (); MoveHome (); Menyvalg (); RunCheck = 1; }
void loop () {// les sensoren: int inByte = Serial.read ();
bytte (inByte) {
sak '1': MovePose1 (); gå i stykker;
sak '2': MovePose2 (); gå i stykker; sak '3': MovePose3 (); gå i stykker;
sak '4': MovePose4 (); gå i stykker;
sak '5': MoveHome (); gå i stykker; sak '6': Grab (); gå i stykker;
sak '7': LEDTest (); gå i stykker;
sak '8': RelaxServos (); gå i stykker; }}
ugyldig CheckVoltage () {// vent, kontroller deretter spenningen (LiPO -sikkerhet) flytespenning = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Systemspenning:"); Serial.print (spenning); Serial.println ("volt."); if (spenning 10.0) {Serial.println ("Nominell spenningsnivå."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }
ugyldig MoveHome () {forsinkelse (100); // anbefalt pause bioloid.loadPose (Home); // last posen fra FLASH, inn i nextPose buffer bioloid.readPose (); // les i nåværende servoposisjoner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til hjemmeposisjon"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // oppsett for interpolasjon fra nåværende-> neste over 1/2 sekund mens (bioloid.interpolering> 0) {// gjør dette mens vi ikke har nådd vår nye pose bioloid.interpolateStep (); // flytt servoer, om nødvendig. forsinkelse (3); } if (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose1 () {forsinkelse (100); // anbefalt pause bioloid.loadPose (Pose1); // last posen fra FLASH, inn i nextPose buffer bioloid.readPose (); // les i nåværende servoposisjoner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 1. posisjon"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // oppsett for interpolasjon fra nåværende-> neste over 1/2 sekund mens (bioloid.interpolering> 0) {// gjør dette mens vi ikke har nådd vår nye pose bioloid.interpolateStep (); // flytt servoer, om nødvendig. forsinkelse (3); } SetPosition (3, 291); // sett posisjonen til leddet 3 til '0' forsinkelse (100); // vent på at leddet skal flyttes hvis (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose2 () {forsinkelse (100); // anbefalt pause bioloid.loadPose (Pose2); // last posen fra FLASH, inn i nextPose buffer bioloid.readPose (); // les i nåværende servoposisjoner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 2. posisjon"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // oppsett for interpolasjon fra nåværende-> neste over 1/2 sekund mens (bioloid.interpolering> 0) {// gjør dette mens vi ikke har nådd vår nye pose bioloid.interpolateStep (); // flytt servoer, om nødvendig. forsinkelse (3); } SetPosition (3, 291); // sett posisjonen til leddet 3 til '0' forsinkelse (100); // vent på at leddet skal flyttes hvis (RunCheck == 1) {MenuOptions (); }} ugyldig MovePose3 () {forsinkelse (100); // anbefalt pause bioloid.loadPose (Pose3); // last posen fra FLASH, inn i nextPose buffer bioloid.readPose (); // les i nåværende servoposisjoner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 3. posisjon"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // oppsett for interpolasjon fra nåværende-> neste over 1/2 sekund mens (bioloid.interpolering> 0) {// gjør dette mens vi ikke har nådd vår nye pose bioloid.interpolateStep (); // flytt servoer, om nødvendig. forsinkelse (3); } SetPosition (3, 291); // sett posisjonen til leddet 3 til '0' forsinkelse (100); // vent på at leddet skal flyttes hvis (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose4 () {forsinkelse (100); // anbefalt pause bioloid.loadPose (Pose4); // last posen fra FLASH, inn i nextPose buffer bioloid.readPose (); // les i nåværende servoposisjoner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 4. posisjon"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // oppsett for interpolasjon fra nåværende-> neste over 1/2 sekund mens (bioloid.interpolering> 0) {// gjør dette mens vi ikke har nådd vår nye pose bioloid.interpolateStep (); // flytt servoer, om nødvendig. forsinkelse (3); } SetPosition (3, 291); // sett posisjonen til leddet 3 til '0' forsinkelse (100); // vent på at leddet skal flyttes hvis (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Initialiserer bevegelsessignaltest"); Serial.println ("############################"); forsinkelse (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
mens (pos> = 312) {SetPosition (id, pos); pos = pos--; forsinkelse (10); }
mens (pos <= 512) {SetPosition (id, pos); pos = pos ++; forsinkelse (10); }
// iterere til neste servo ID id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Skriv inn alternativ 1-5 for å kjøre individuelle tester igjen."); Serial.println ("1) 1. posisjon"); Serial.println ("2) 2. posisjon"); Serial.println ("3) 3. posisjon"); Serial.println ("4) 4. posisjon"); Serial.println ("5) Hjemmeposisjon"); Serial.println ("6) Kontroller systemspenning"); Serial.println ("7) Utfør LED -test"); Serial.println ("8) Relax Servos"); Serial.println ("############################"); }
void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Avslappende servoer."); Serial.println ("############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; forsinkelse (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Kjører LED -test"); Serial.println ("############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); forsinkelse (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); forsinkelse (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // sett posisjonen til leddet 1 til '0' forsinkelse (100); // vent på at leddet skal bevege seg
}
Vi har basert vårt program på produsentene PincherTest -programmet med noen store tilpasninger ved posisjonering. Vi brukte poses.h for roboten for å ha posisjonene i minnet. For det første prøvde vi å lage vår spillarm med Pixycam til å være automatisk, men på grunn av lys og små skjermproblemer kunne det ikke skje. Roboten har en grunnleggende hjemmeposisjon, etter å ha lastet opp programmet, vil den teste alle servoene som finnes i roboten. Vi har angitt posene for 1-4 knappene, så det blir lett å huske. Bruk gjerne programmet.
Trinn 4: Videoveiledning
Trinn 5: Konklusjon
Avslutningsvis er roboten et morsomt lite prosjekt for oss og en morsom ting å leke og eksperimentere med. Jeg oppfordrer deg til å prøve det og tilpasse det også.
Anbefalt:
Arduino Pinball -maskin som spiller seg selv !: 13 trinn (med bilder)
Arduino flipperspill som spiller seg selv !: " En flipperspill som spiller seg selv, tar ikke det all moroa ut av det? &Quot; Jeg hører deg spørre. Kanskje hvis du ikke liker autonome roboter, kan det være det. Meg, men jeg handler veldig mye om å bygge roboter som kan gjøre kule ting, og denne
DVD -spiller: Forklar deler og hva som er verdt å redde: 9 trinn
DVD -spiller: Forklar deler og hva som er verdt å berge: I dag tar vi en titt på denne gamle DVD -spilleren. Det fungerte ikke som det skal, så jeg bestemte meg for å åpne det og se hva som er inne. Problemet var at den stadig åpnet og lukket og at den ikke ville lese fra platen. Jeg vil forklare det grunnleggende
Deler som skal reddes fra en DVD/CD -spiller: 10 trinn
Deler til berging fra en DVD/CD -spiller: Vi har alle gamle foreldede enheter liggende. Hvis du har tid, så er det å åpne dem og redde deler en effektiv måte å lære mye på, og også samle noen sjeldne deler. Det var på tide å ta farvel med en gammel DVD -spiller. Jeg lagde t
HVORDAN MONTERE EN IMPONERENDE TRE ROBOTARM (DEL 3: ROBOTARM) - BASERT PÅ MIKROEN: BITN: 8 trinn
HVORDAN MONTERE EN IMPRESSIV TRE ROBOTARM (DEL 3: ROBOTARM) - BASERT PÅ MIKROEN: BITN: Den neste installasjonsprosessen er basert på fullføring av hindringsmodus. Installasjonsprosessen i forrige seksjon er den samme som installasjonsprosessen i linjesporingsmodus. Så la oss ta en titt på den endelige formen for A
Bruk et hvilket som helst 5.1 høyttalersystem med en hvilken som helst MP3 -spiller eller datamaskin, til en billig penge: 4 trinn
Bruk et hvilket som helst 5.1 høyttalersystem med hvilken som helst MP3 -spiller eller datamaskin, til en rimelig pris! Jeg brukte det med skrivebordet mitt som hadde et 5.1 lydkort (PCI). Deretter brukte jeg den sammen med min bærbare datamaskin som hadde en