Indholdsfortegnelse:
- Trin 1: Udstyr
- Trin 2: Arduino -opsætning
- Trin 3: Endeligt program
- Trin 4: Videoguide
- Trin 5: Konklusion
Video: Klaverfliser, der spiller robotarm: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Gruppen består af 2 automationsingeniører fra UCN, der kom med en genial idé, som vi er motiverede til at gøre og udvikle. Ideen er baseret på et Arduino -kort, der styrer en robotarm. Arduino -tavlen er hjernen i operationen, og derefter vil aktuatoren for operationen, den robotiske arm, gøre hvad den har brug for. Den mere detaljerede forklaring kommer senere.
Trin 1: Udstyr
Robotarm:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software til robotten- https://www.arduino.cc/en/Main/OldSoftwareRelease… Farvedetekteringskamera:
CMUcam5 Pixy kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Trin 2: Arduino -opsætning
Du kan se opsætningen på tavlen her, hvilket er meget let.
Til venstre er strømforsyningen.
Den midterste er til den første servo, som senere tilsluttes de andre servoer, servo for servo.
Den nederste er, hvor vi styrer kortet fra en pc eller bærbar computer, der har en USB -indgang i den anden ende.
Trin 3: Endeligt program
||| PROGRAM |||
#omfatte
#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 opsætning () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // indstil fælles nummer 1 register 32 til hastighed 50. ax12SetRegister2 (2, 32, 50); // indstil fælles nummer 2 register 32 til hastighed 50. ax12SetRegister2 (3, 32, 50); // indstil fælles nummer 3 -register 32 til hastighed 50. ax12SetRegister2 (4, 32, 50); // indstil fællesnummer 4 -register 32 til hastighed 50. ax12SetRegister2 (5, 32, 100); // indstil fælles nummer 5 -register 32 til hastighed 100. // initialiser variabler id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // åben seriel port Serial.begin (9600); forsinkelse (500); Serial.println ("############################"); Serial.println ("Seriel kommunikation etableret.");
// Kontroller Lipo batterispænding CheckVoltage ();
// Scan servoer, returner position MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// læs sensoren: int inByte = Serial.read ();
switch (inByte) {
sag '1': MovePose1 (); pause;
sag '2': MovePose2 (); pause; case '3': MovePose3 (); pause;
sag '4': MovePose4 (); pause;
sag '5': MoveHome (); pause; sag '6': Grib (); pause;
sag '7': LEDTest (); pause;
case '8': RelaxServos (); pause; }}
ugyldig CheckVoltage () {// vent, kontroller derefter spændingen (LiPO -sikkerhed) flydespænding = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("############################"); Serial.print ("Systemspænding:"); Seriel.print (spænding); Serial.println ("volt."); if (spænding 10.0) {Serial.println ("Nominelt spændingsniveau"); } hvis (RunCheck == 1) {MenuOptions (); } Serial.println ("#############################"); }
ugyldig MoveHome () {forsinkelse (100); // anbefalet pause bioloid.loadPose (Home); // indlæs posen fra FLASH i bioloid nextPose buffer.readPose (); // læses i aktuelle servopositioner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytning af servoer til udgangsposition"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // opsætning til interpolation fra nuværende-> næste over 1/2 sekund, mens (bioloid.interpolering> 0) {// gør dette, mens vi ikke har nået vores nye pose bioloid.interpolateStep (); // flyt servoer, hvis det er nødvendigt. forsinkelse (3); } hvis (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose1 () {forsinkelse (100); // anbefalet pause bioloid.loadPose (Pose1); // indlæs posen fra FLASH i bioloid nextPose buffer.readPose (); // læses i aktuelle servopositioner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytning af servoer til 1. position"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // opsætning til interpolation fra nuværende-> næste over 1/2 sekund, mens (bioloid.interpolering> 0) {// gør dette, mens vi ikke har nået vores nye pose bioloid.interpolateStep (); // flyt servoer, hvis det er nødvendigt. forsinkelse (3); } SetPosition (3, 291); // indstil leddet 3's position til '0' forsinkelse (100); // vent på, at leddet flyttes, hvis (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose2 () {forsinkelse (100); // anbefalet pause bioloid.loadPose (Pose2); // indlæs posen fra FLASH i bioloid nextPose buffer.readPose (); // læses i aktuelle servopositioner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytning af servoer til 2. position"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // opsætning til interpolation fra nuværende-> næste over 1/2 sekund, mens (bioloid.interpolering> 0) {// gør dette, mens vi ikke har nået vores nye pose bioloid.interpolateStep (); // flyt servoer, hvis det er nødvendigt. forsinkelse (3); } SetPosition (3, 291); // indstil leddet 3's position til '0' forsinkelse (100); // vent på, at leddet flyttes, hvis (RunCheck == 1) {MenuOptions (); }} ugyldig MovePose3 () {forsinkelse (100); // anbefalet pause bioloid.loadPose (Pose3); // indlæs posen fra FLASH i bioloid nextPose buffer.readPose (); // læses i aktuelle servopositioner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 3. position"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // opsætning til interpolering fra nuværende-> næste over 1/2 sekund mens (bioloid.interpolering> 0) {// gør dette, mens vi ikke har nået vores nye pose bioloid.interpolateStep (); // flyt servoer, hvis det er nødvendigt. forsinkelse (3); } SetPosition (3, 291); // indstil leddet 3's position til '0' forsinkelse (100); // vent på, at leddet flyttes, hvis (RunCheck == 1) {MenuOptions (); }}
ugyldig MovePose4 () {forsinkelse (100); // anbefalet pause bioloid.loadPose (Pose4); // indlæs posen fra FLASH i bioloid nextPose buffer.readPose (); // læses i aktuelle servopositioner til curPose -bufferen Serial.println ("############################"); Serial.println ("Flytter servoer til 4. position"); Serial.println ("############################"); forsinkelse (1000); bioloid.interpolateSetup (1000); // opsætning til interpolation fra nuværende-> næste over 1/2 sekund, mens (bioloid.interpolering> 0) {// gør dette, mens vi ikke har nået vores nye pose bioloid.interpolateStep (); // flyt servoer, hvis det er nødvendigt. forsinkelse (3); } SetPosition (3, 291); // indstil leddet 3's position til '0' forsinkelse (100); // vent på, at leddet flyttes, hvis (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Initialisering af bevægelsessignaltest"); 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); }
// gentag det næste servo -id id = id ++;
} hvis (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Angiv mulighed 1-5 for at køre individuelle tests igen."); Serial.println ("1) 1. position"); Serial.println ("2) 2. position"); Serial.println ("3) 3. position"); Serial.println ("4) 4. position"); Serial.println ("5) Hjemmeposition"); Serial.println ("6) Kontroller systemspænding"); Serial.println ("7) Udfør LED -test"); Serial.println ("8) Relax Servos"); Serial.println ("############################"); }
void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Afslappende servoer."); Serial.println ("############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; forsinkelse (50); } hvis (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Kørende LED -test"); Serial.println ("############################"); mens (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 ++; } hvis (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // indstil leddet 1's position til '0' forsinkelse (100); // vent på, at leddet flyttes
}
Vi har baseret vores program på producenternes PincherTest -program med nogle store tweaks i tilfælde af positionering. Vi brugte poserne. H for robotten til at have positionerne i hukommelsen. For det første forsøgte vi at skabe vores spillearm med Pixycam til at være automatisk, men på grund af lys og små skærmproblemer kunne det ikke ske. Robotten har en grundlæggende hjemmeposition, efter at have uploadet programmet, vil den teste alle de servoer, der findes i robotten. Vi har indstillet poserne til 1-4 knapperne, så det vil være let at huske. Brug gerne programmet.
Trin 4: Videoguide
Trin 5: Konklusion
Afslutningsvis er robotten et sjovt lille projekt for os og en sjov ting at lege med og eksperimentere med. Jeg opfordrer dig til også at prøve det og tilpasse det.
Anbefalede:
Arduino Pinball Machine, der spiller sig selv !: 13 trin (med billeder)
Arduino Pinball Machine, der spiller sig selv !: " En flipperspiller, der spiller sig selv, tager det ikke alt det sjove ud af det? &Quot; Jeg hører dig spørge. Måske hvis du ikke er til autonome robotter, kan det være. Mig, jeg handler dog meget om at bygge robotter, der kan lave fede ting, og denne
Prima - en robot der spiller klaver: 13 trin
Prima - en robot der spiller klaver: Tanken om en robot, der spiller et instrument, fascinerede mig altid, og jeg har altid ønsket at bygge et selv. Jeg havde dog aldrig megen viden om musik og musikinstrumenter, så jeg kunne aldrig finde ud af, hvordan jeg egentlig ville starte med det. Indtil r
Tchaibotsky (en klaver, der spiller robot): 12 trin (med billeder)
Tchaibotsky (en klaver, der spiller robot): Denne instruerbare blev oprettet for at opfylde projektkravet for Makecourse ved University of South Florida (www.makecourse.com) Tchaibotsky er en Arduino -drevet klaverspillerobot. Motivationen var at bygge noget, der kunne
Arduino - Klaverfliser: 16 trin (med billeder)
Arduino - Piano Tiles: Hej internetfolk, dette handler om, hvordan man laver det, der DEFINITIVT ikke er et rip off af et mobilspil på en arduino uno r3. Så for at starte, har du brug for alle delene, som er som følger ! 1x Arduino Uno r3 ($ 42) 2x LCD -tastaturskærm ($ 19 pr. Stk.) 5
Brug af LED'er og AT Tiny til at skabe en blinkende stjerne med Piezo, der spiller "Twinkle, Twinkle, Little Star": 6 trin
Brug af LED'er og AT Tiny til at skabe en blinkende stjerne med piezo, der spiller "Twinkle, Twinkle, Little Star": Dette kredsløb bruger LEDS, AT TINY og piezo til at producere en blinkende stjerne og musik af " Twinkle, Twinkle, little star " Se det næste trin for oversigt over og kredsløb