Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:11
Gruppen består av 2 automationsingenjörer från UCN, som kom med en lysande idé som vi är motiverade att göra och utveckla. Idén bygger på att en Arduino -styrning styr en robotarm. Arduino -kortet är hjärnan för operationen och sedan kommer manöverdonet för operationen, robotarmen, att göra vad den behöver. Den mer ingående förklaringen kommer senare.
Steg 1: Utrustning
Robotarm:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Programvara för roboten- https://www.arduino.cc/en/Main/OldSoftwareRelease … Färgdetekteringskamera:
CMUcam5 Pixy -kamera - (https://charmedlabs.com/default/pixy-cmucam5/)
Programvara - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Steg 2: Arduino -installation
Du kan se installationen på tavlan här, vilket är väldigt enkelt.
Till vänster är nätaggregatet.
Den mellersta är för den första servon, som senare ansluts till de andra servon, servo för servo.
Den nedersta är där vi styr kortet från en dator eller bärbar dator, som har en USB -ingång i andra änden.
Steg 3: Slutprogram
||| PROGRAM |||
#omfatta
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; booleskt IDCheck; booleska RunCheck;
void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // ställ in gemensamt nummer 1 register 32 till hastighet 50. ax12SetRegister2 (2, 32, 50); // ställ in gemensamt nummer 2 register 32 till hastighet 50. ax12SetRegister2 (3, 32, 50); // ställ in gemensamt nummer 3 -register 32 till hastighet 50. ax12SetRegister2 (4, 32, 50); // ställ in gemensamt nummer 4 -register 32 till hastighet 50. ax12SetRegister2 (5, 32, 100); // ställ in gemensamt nummer 5 -register 32 till hastighet 100. // initiera variabler id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // öppen seriell port Serial.begin (9600); fördröjning (500); Serial.println ("############################"); Serial.println ("Seriell kommunikation etablerad.");
// Kontrollera Lipos batterispänning CheckVoltage ();
// Scan Servos, returposition MoveTest (); MoveHome (); Menyalternativ (); RunCheck = 1; }
void loop () {// läs sensorn: int inByte = Serial.read ();
switch (inByte) {
fall '1': MovePose1 (); ha sönder;
fall '2': MovePose2 (); ha sönder; fall '3': MovePose3 (); ha sönder;
fall '4': MovePose4 (); ha sönder;
fall '5': MoveHome (); ha sönder; fall '6': Grab (); ha sönder;
fall '7': LEDTest (); ha sönder;
fall '8': RelaxServos (); ha sönder; }}
void CheckVoltage () {// vänta, kontrollera sedan spänningen (LiPO -säkerhet) flottörspänning = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("############################"); Serial.print ("Systemspänning:"); Serial.print (spänning); Serial.println ("volt."); if (spänning 10.0) {Serial.println ("Spänningsnivåer nominella."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("#############################"); }
void MoveHome () {delay (100); // rekommenderad paus bioloid.loadPose (Hem); // ladda posen från FLASH, in i nextPose buffert bioloid.readPose (); // läs i nuvarande servopositioner till curPose -bufferten Serial.println ("############################"); Serial.println ("Flytta servon till utgångsläge"); Serial.println ("############################"); fördröjning (1000); bioloid.interpolateSetup (1000); // setup för interpolering från ström-> nästa över 1/2 sekund medan (bioloid.interpolering> 0) {// gör detta medan vi inte har nått vår nya pose bioloid.interpolateStep (); // flytta servon, om det behövs. fördröjning (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {delay (100); // rekommenderad paus bioloid.loadPose (Pose1); // ladda posen från FLASH, in i nextPose buffert bioloid.readPose (); // läs i nuvarande servopositioner till curPose -bufferten Serial.println ("############################"); Serial.println ("Flytta servon till första position"); Serial.println ("############################"); fördröjning (1000); bioloid.interpolateSetup (1000); // setup för interpolering från ström-> nästa över 1/2 sekund medan (bioloid.interpolering> 0) {// gör detta medan vi inte har nått vår nya pose bioloid.interpolateStep (); // flytta servon, om det behövs. fördröjning (3); } SetPosition (3, 291); // ställ in positionen för led 3 till '0' fördröjning (100); // vänta på att led ska flyttas om (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {delay (100); // rekommenderad paus bioloid.loadPose (Pose2); // ladda posen från FLASH, in i nextPose buffert bioloid.readPose (); // läs i nuvarande servopositioner till curPose -bufferten Serial.println ("############################"); Serial.println ("Flytta servon till andra position"); Serial.println ("############################"); fördröjning (1000); bioloid.interpolateSetup (1000); // setup för interpolering från ström-> nästa över 1/2 sekund medan (bioloid.interpolering> 0) {// gör detta medan vi inte har nått vår nya pose bioloid.interpolateStep (); // flytta servon, om det behövs. fördröjning (3); } SetPosition (3, 291); // ställ in positionen för led 3 till '0' fördröjning (100); // vänta på att led ska flyttas om (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // rekommenderad paus bioloid.loadPose (Pose3); // ladda posen från FLASH, in i nextPose buffert bioloid.readPose (); // läs i nuvarande servopositioner till curPose -bufferten Serial.println ("############################"); Serial.println ("Flytta servon till tredje position"); Serial.println ("############################"); fördröjning (1000); bioloid.interpolateSetup (1000); // setup för interpolering från ström-> nästa över 1/2 sekund medan (bioloid.interpolering> 0) {// gör detta medan vi inte har nått vår nya pose bioloid.interpolateStep (); // flytta servon, om det behövs. fördröjning (3); } SetPosition (3, 291); // ställ in positionen för led 3 till '0' fördröjning (100); // vänta på att led ska flyttas om (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {delay (100); // rekommenderad paus bioloid.loadPose (Pose4); // ladda posen från FLASH, in i nextPose buffert bioloid.readPose (); // läs i nuvarande servopositioner till curPose -bufferten Serial.println ("############################"); Serial.println ("Flytta servon till fjärde position"); Serial.println ("############################"); fördröjning (1000); bioloid.interpolateSetup (1000); // setup för interpolering från ström-> nästa över 1/2 sekund medan (bioloid.interpolering> 0) {// gör detta medan vi inte har nått vår nya pose bioloid.interpolateStep (); // flytta servon, om det behövs. fördröjning (3); } SetPosition (3, 291); // ställ in positionen för led 3 till '0' fördröjning (100); // vänta på att led ska flyttas om (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Initierar test av rörelseskyltar"); Serial.println ("############################"); fördröjning (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
medan (pos> = 312) {SetPosition (id, pos); pos = pos--; fördröjning (10); }
medan (pos <= 512) {SetPosition (id, pos); pos = pos ++; fördröjning (10); }
// iterera till nästa servo ID id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Ange alternativ 1-5 för att köra enskilda tester igen."); Serial.println ("1) 1: a position"); Serial.println ("2) 2: a position"); Serial.println ("3) 3: e position"); Serial.println ("4) 4: e position"); Serial.println ("5) Hemposition"); Serial.println ("6) Kontrollera systemspänning"); Serial.println ("7) Utför LED -test"); Serial.println ("8) Relax Servos"); Serial.println ("############################"); }
void RelaxServos () {id = 1; Serial.println ("############################"); Serial.println ("Relaxing Servos."); Serial.println ("############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; fördröjning (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("############################"); Serial.println ("Körande LED -test"); Serial.println ("############################"); medan (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); fördröjning (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); fördröjning (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // ställ in positionen för led 1 till '0' fördröjning (100); // vänta på att led ska flyttas
}
Vi har baserat vårt program på tillverkarens PincherTest -program med några stora tweaks när det gäller positionering. Vi använde poserna. H för roboten för att ha positionerna i minnet. Först försökte vi skapa vår spelarm med Pixycam för att vara automatisk, men på grund av ljus och små skärmproblem kunde det inte hända. Roboten har en grundläggande hemposition, efter att ha laddat upp programmet kommer den att testa alla servon som finns i roboten. Vi har ställt in poserna för 1-4 knapparna, så det blir lätt att komma ihåg. Använd gärna programmet.
Steg 4: Videoguide
Steg 5: Slutsats
Sammanfattningsvis är roboten ett roligt litet projekt för oss och en kul sak att leka och experimentera med. Jag uppmuntrar dig att prova det och anpassa det också.
Rekommenderad:
Arduino flipperspel som spelar sig själv !: 13 steg (med bilder)
Arduino flippmaskin som spelar sig själv !: " En flipperspel som spelar sig själv, tar inte allt roligt ur det? &Quot; Jag hör dig fråga. Kanske om du inte gillar autonoma robotar kan det vara så. Jag, jag handlar dock mycket om att bygga robotar som kan göra coola saker, och den här
Prima - en robot som spelar piano: 13 steg
Prima - en robot som spelar piano: Tanken på en robot som spelar ett instrument fascinerade mig alltid, och jag ville alltid bygga en själv. Jag hade dock aldrig mycket kunskap om musik och musikinstrument, så jag kunde aldrig komma på hur jag egentligen skulle börja med det. Tills r
Arduino - Pianoplattor: 16 steg (med bilder)
Arduino - Piano Tiles: Hej internetmänniskor, det här handlar om hur man gör det som DEFINITIVT inte är en rip off av ett mobilspel på en arduino uno r3. Så för att börja behöver du alla delar, som är följande ! 1x Arduino Uno r3 ($ 42) 2x LCD -knappsatsskydd ($ 19 styck) 5
Använda lysdioder och AT Tiny för att skapa en blinkande stjärna med Piezo som spelar "Twinkle, Twinkle, Little Star": 6 steg
Använda lysdioder och AT Tiny för att skapa en blinkande stjärna med piezo som spelar "Twinkle, Twinkle, Little Star": Denna krets använder lysdioder, AT TINY och piezo för att producera en blinkande stjärna och musik av " Twinkle, Twinkle, little star " Vänligen se nästa steg för och kretsöversikt
Hur man gör en autonom basketboll som spelar robot med hjälp av en IRobot Skapa som bas: 7 steg (med bilder)
Hur man gör en autonom basketboll som spelar robot med hjälp av en IRobot Skapa som bas: Detta är min post för iRobot Create -utmaningen. Den svåraste delen av hela processen för mig var att bestämma vad roboten skulle göra. Jag ville demonstrera de häftiga funktionerna i Create, samtidigt som jag lade till lite robo -stil. Alla mina