Sommario:
- Passaggio 1: attrezzatura
- Passaggio 2: configurazione di Arduino
- Passaggio 3: programma finale
- Passaggio 4: guida video
- Passaggio 5: conclusione
Video: Piastrelle per pianoforte che suonano il braccio robotico: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Il gruppo è composto da 2 Automation Engineer di UCN, che hanno avuto un'idea brillante che siamo motivati a realizzare e sviluppare. L'idea si basa su una scheda Arduino che controlla un braccio robotico. La scheda Arduino è il cervello dell'operazione e quindi l'attuatore dell'operazione, il braccio robotico, farà ciò di cui ha bisogno. La spiegazione più approfondita verrà in seguito.
Passaggio 1: attrezzatura
Braccio robotico:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software per il robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Telecamera rilevamento colore:
CMUcam5 Fotocamera Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Passaggio 2: configurazione di Arduino
Puoi vedere la configurazione sulla scheda qui, che è molto semplice.
Sulla sinistra c'è l'alimentatore.
Quello centrale è per il primo servo, che viene poi collegato agli altri servi, servo per servo.
Quello in basso è dove controlliamo la scheda da un PC o laptop, che ha un ingresso USB dall'altra parte.
Passaggio 3: programma finale
||| PROGRAMMA |||
#includere
#include #include "poses.h" #include //Libreria Pixy #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController(1000000);
const int SERVOCOUNT = 5; int id; posizione int; IDCheck booleano; RunCheck booleano;
void setup(){ pinMode(0, OUTPUT); ax12SetRegister2(1, 32, 50);//imposta il numero di giunto 1 registro 32 alla velocità 50. ax12SetRegister2(2, 32, 50);//imposta il numero di giunto 2 registro 32 alla velocità 50. ax12SetRegister2(3, 32, 50);//imposta il numero di giunto 3 registro 32 alla velocità 50. ax12SetRegister2(4, 32, 50);//imposta il numero di giunto 4 registro 32 alla velocità 50. ax12SetRegister2(5, 32, 100);//imposta il registro numero 5 di giunto 32 alla velocità 100. //inizializza le variabili id = 1; posizione = 0; IDCheck = 1; RunCheck = 0; //apri la porta seriale Serial.begin(9600); ritardo (500); Serial.println("###########################"); Serial.println("Comunicazione seriale stabilita.");
//Controlla la tensione della batteria Lipo CheckVoltage();
//Scansione servi, ritorno posizione MoveTest(); SpostaCasa(); MenuOpzioni(); RunCheck = 1; }
void loop(){ // legge il sensore: int inByte = Serial.read();
switch (in Byte) {
caso '1': MovePose1(); rottura;
caso '2': MovePose2(); rottura; caso '3': MovePose3(); rottura;
caso '4': MovePose4(); rottura;
caso '5': MoveHome(); rottura; caso '6': Grab(); rottura;
caso '7': LEDTest(); rottura;
caso '8': RelaxServos(); rottura; } }
void CheckVoltage(){ // attendere, quindi controllare la tensione (sicurezza LiPO) float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("###########################"); Serial.print ("Tensione di sistema: "); Serial.print (tensione); Serial.println (" volt."); if (tensione 10.0){ Serial.println("Livelli di tensione nominali."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("###########################"); }
void MoveHome(){ delay(100); // pausa consigliata bioloid.loadPose(Home); // carica la posa da FLASH, nel buffer nextPose bioloid.readPose(); // legge le posizioni dei servo correnti nel buffer curPose Serial.println("###########################"); Serial.println("Spostare i servi in posizione Home"); Serial.println("###########################"); ritardo(1000); bioloid.interpolateSetup(1000); // imposta l'interpolazione dalla corrente->prossima oltre 1/2 secondo while(bioloid.interpolating > 0){ // fallo finché non abbiamo raggiunto la nostra nuova posa bioloid.interpolateStep(); // sposta i servi, se necessario. ritardo (3); } if (RunCheck == 1){ MenuOptions(); } }
void MovePose1(){ delay(100); // pausa consigliata bioloid.loadPose(Pose1); // carica la posa da FLASH, nel buffer nextPose bioloid.readPose(); // legge le posizioni dei servo correnti nel buffer curPose Serial.println("###########################"); Serial.println("Spostare i servi in prima posizione"); Serial.println("###########################"); ritardo(1000); bioloid.interpolateSetup(1000); // imposta l'interpolazione dalla corrente->prossima oltre 1/2 secondo while(bioloid.interpolating > 0){ // fallo finché non abbiamo raggiunto la nostra nuova posa bioloid.interpolateStep(); // sposta i servi, se necessario. ritardo (3); } ImpostaPosizione(3, 291); //imposta la posizione del giunto 3 su '0' delay(100);//aspetta che il giunto si muova if (RunCheck == 1){ MenuOptions(); } }
void MovePose2(){ delay(100); // pausa consigliata bioloid.loadPose(Pose2); // carica la posa da FLASH, nel buffer nextPose bioloid.readPose(); // legge le posizioni dei servo correnti nel buffer curPose Serial.println("###########################"); Serial.println("Spostare i servi in 2a posizione"); Serial.println("###########################"); ritardo(1000); bioloid.interpolateSetup(1000); // imposta l'interpolazione dalla corrente->prossima oltre 1/2 secondo while(bioloid.interpolating > 0){ // fallo finché non abbiamo raggiunto la nostra nuova posa bioloid.interpolateStep(); // sposta i servi, se necessario. ritardo (3); } ImpostaPosizione(3, 291); //imposta la posizione del giunto 3 su '0' delay(100);//aspetta che il giunto si muova if (RunCheck == 1){ MenuOptions(); } } void MovePose3(){ delay(100); // pausa consigliata bioloid.loadPose(Pose3); // carica la posa da FLASH, nel buffer nextPose bioloid.readPose(); // legge le posizioni dei servo correnti nel buffer curPose Serial.println("###########################"); Serial.println("Spostare i servi in terza posizione"); Serial.println("###########################"); ritardo(1000); bioloid.interpolateSetup(1000); // imposta l'interpolazione dalla corrente->prossima oltre 1/2 secondo while(bioloid.interpolating > 0){ // fallo finché non abbiamo raggiunto la nostra nuova posa bioloid.interpolateStep(); // sposta i servi, se necessario. ritardo (3); } ImpostaPosizione(3, 291); //imposta la posizione del giunto 3 su '0' delay(100);//aspetta che il giunto si muova if (RunCheck == 1){ MenuOptions(); } }
void MovePose4(){ delay(100); // pausa consigliata bioloid.loadPose(Pose4); // carica la posa da FLASH, nel buffer nextPose bioloid.readPose(); // legge le posizioni dei servi correnti nel buffer curPose Serial.println("###########################"); Serial.println("Spostare i servi in 4a posizione"); Serial.println("###########################"); ritardo(1000); bioloid.interpolateSetup(1000); // imposta l'interpolazione dalla corrente->prossima oltre 1/2 secondo while(bioloid.interpolating > 0){ // fallo finché non abbiamo raggiunto la nostra nuova posa bioloid.interpolateStep(); // sposta i servi, se necessario. ritardo (3); } ImpostaPosizione(3, 291); //imposta la posizione del giunto 3 su '0' delay(100);//aspetta che il giunto si muova if (RunCheck == 1){ MenuOptions(); } }
void MoveTest(){ Serial.println("###########################"); Serial.println("Inizializzazione del test del segno di movimento"); Serial.println("###########################"); ritardo (500); ID = 1; posizione = 512; while(id <= SERVOCOUNT){ Serial.print("Moving Servo ID: "); Serial.println(id);
while(pos >= 312){ SetPosition(id, pos); pos = pos--; ritardo(10); }
while(pos <= 512){ SetPosition(id, pos); pos = pos++; ritardo(10); }
//itera all'ID servo successivo id = id++;
} if (RunCheck == 1){ MenuOptions(); } }
void MenuOptions(){ Serial.println("###########################"); Serial.println("Inserire l'opzione 1-5 per eseguire nuovamente i singoli test."); Serial.println("1) Prima posizione"); Serial.println("2) Seconda posizione"); Serial.println("3) Terza posizione"); Serial.println("4) Quarta posizione"); Serial.println("5) Posizione iniziale"); Serial.println("6) Verifica tensione di sistema"); Serial.println("7) Esegui test LED"); Serial.println("8) Rilassa i servi"); Serial.println("###########################"); }
void RelaxServos(){ id = 1; Serial.println("###########################"); Serial.println("Servizi rilassanti."); Serial.println("###########################"); while(id <= SERVOCOUNT){ Relax(id); id = (id++)%SERVOCOUNT; ritardo(50); } if (RunCheck == 1){ MenuOptions(); } }
void LEDTest(){ id = 1; Serial.println("###########################"); Serial.println("Test LED in esecuzione"); Serial.println("###########################"); while(id <= SERVOCOUNT){ ax12SetRegister(id, 25, 1); Serial.print("LED ACCESO - ID servo: "); Serial.println(id); ritardo (3000); ax12SetRegister(id, 25, 0); Serial.print("LED spento - ID servo: "); Serial.println(id); ritardo (3000); ID = ID++; } if (RunCheck == 1){ MenuOptions(); } }
void Grab(){ SetPosition(5, 800); //imposta la posizione del giunto 1 su '0' delay(100);//aspetta che il giunto si muova
}
Abbiamo basato il nostro programma sul programma PincherTest del produttore con alcune importanti modifiche in caso di posizionamento. Abbiamo usato poses.h affinché il robot avesse le posizioni in memoria. Per prima cosa abbiamo cercato di creare il nostro braccio di gioco con Pixycam in modo che fosse automatico, ma a causa di problemi di luce e schermo piccolo, ciò non è potuto accadere. Il robot ha una posizione iniziale di base, dopo aver caricato il programma, testerà tutti i servi trovati nel robot. Abbiamo impostato le pose per i pulsanti 1-4, quindi sarà facile da ricordare. Sentiti libero di usare il programma.
Passaggio 4: guida video
Passaggio 5: conclusione
In conclusione, il robot è un piccolo progetto divertente per noi e una cosa divertente con cui giocare e sperimentare. Vi incoraggio a provarlo e personalizzarlo pure.
Consigliato:
PlotClock, WeMos e Blynk suonano il jukebox AMI vintage: 6 passaggi (con immagini)
PlotClock, WeMos e Blynk Playing Vintage AMI Jukebox: quattro innovazioni tecniche hanno reso possibile questo progetto: il Rowe AMI Jukebox del 1977, il kit braccio robotico PlotClock, il microcontrollore WeMos/ESP 8266 e l'app Blynk/servizio cloud. NOTA: se non si dispone del Jukebox a portata di mano: non smettere di leggere! Questo progetto può
Il grosso braccio robotico stampato in 3D che imita il controller dei burattini: 11 passaggi (con immagini)
Molto braccio robotico stampato in 3D che imita il controller delle marionette: sono uno studente di ingegneria meccanica dall'India e questo è il mio progetto di laurea. Questo progetto è focalizzato sullo sviluppo di un braccio robotico a basso costo che è principalmente stampato in 3D e ha 5 DOF con un 2 dita pinza. Il braccio robotico è controllato con
Gioco del braccio robotico - Controller per smartphone: 6 passaggi
Gioco del braccio robotico - Controller per smartphone: Ciao! Ecco un divertente gioco estivo: Il braccio robotico controllato dallo smartphone !! Come puoi vedere nel video, puoi controllare il braccio con alcuni joystick sul tuo smartphone. Puoi anche salvare un modello, che il robot riprodurrà in loop, per
Pinza per braccio robotico: 3 passaggi (con immagini)
Pinza per braccio robotico: questa pinza robotica realizzata con stampante 3D può essere controllata con due servi economici (MG90 o SG90). Abbiamo usato lo scudo cerebrale (+Arduino) per controllare il morsetto e l'APP di controllo jjRobots per spostare tutto a distanza tramite WIFI ma puoi usare qualsiasi
Arduino - Piastrelle per pianoforte: 16 passaggi (con immagini)
Arduino - Piano Tiles: Ciao gente di Internet, questo sarà su come realizzare ciò che DEFINITEMENTE non è una fregatura di un gioco per cellulare su un arduino uno r3.quindi per iniziare, avrai bisogno di tutte le parti, che sono le seguenti !1x Arduino Uno r3 ($42)2x Scudo tastiera LCD ($19 ciascuno)5