Innehållsförteckning:

Pianoplattor som spelar robotarm: 5 steg
Pianoplattor som spelar robotarm: 5 steg

Video: Pianoplattor som spelar robotarm: 5 steg

Video: Pianoplattor som spelar robotarm: 5 steg
Video: КАК НАСТРОИТЬ L4D2 2024, Juli
Anonim
Pianoplattor som spelar robotarm
Pianoplattor som spelar robotarm

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

Utrustning
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

Arduino -installation
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: