Cuprins:
- Pasul 1: Echipament
- Pasul 2: Configurare Arduino
- Pasul 3: Programul final
- Pasul 4: Ghid video
- Pasul 5: Concluzie
Video: Plăci de pian care joacă brațul robotului: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Grupul este format din 2 ingineri de automatizare de la UCN, care au venit cu o idee strălucită pe care suntem motivați să o facem și să o dezvoltăm. Ideea se bazează pe o placă Arduino care controlează un braț robot. Placa Arduino este creierul operației și apoi actuatorul operației, brațul robotizat, va face ceea ce trebuie. Explicația mai aprofundată va veni mai târziu.
Pasul 1: Echipament
Brațul robotului:
Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software pentru robot- https://www.arduino.cc/en/Main/OldSoftwareRelease… Camera de detectare a culorii:
Camera CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Pasul 2: Configurare Arduino
Puteți vedea configurarea pe tablă aici, ceea ce este foarte ușor.
În stânga este sursa de alimentare.
Cel din mijloc este pentru primul servo, care ulterior este conectat la celelalte servo, servo cu servo.
Cel de jos este locul în care controlăm placa de pe un PC sau laptop, care are o intrare USB la celălalt capăt.
Pasul 3: Programul final
||| PROGRAM |||
#include
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (1000000);
const int SERVOCOUNT = 5; int id; int pos; boolean IDCheck; boolean RunCheck;
void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // setați numărul articulației 1 registru 32 la viteza 50. ax12SetRegister2 (2, 32, 50); // setați numărul articulației 2 registru 32 la viteza 50. ax12SetRegister2 (3, 32, 50); // setați numărul de îmbinare 3 registru 32 la viteza 50. ax12SetRegister2 (4, 32, 50); // setați numărul de îmbinare 4 registru 32 la viteza 50. ax12SetRegister2 (5, 32, 100); // setați numărul de îmbinare 5 registru 32 până la viteza 100. // inițializează variabilele id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // deschideți portul serial Serial.begin (9600); întârziere (500); Serial.println ("#############################"); Serial.println („Comunicare serială stabilită”.);
// Verificați tensiunea bateriei Lipo Verificați tensiunea ();
// Scanați Servo-uri, reveniți la poziția MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }
void loop () {// citiți senzorul: int inByte = Serial.read ();
switch (inByte) {
cazul '1': MovePose1 (); pauză;
cazul '2': MovePose2 (); pauză; cazul '3': MovePose3 (); pauză;
cazul '4': MovePose4 (); pauză;
cazul '5': MoveHome (); pauză; cazul '6': Grab (); pauză;
cazul '7': LEDTest (); pauză;
cazul '8': RelaxServos (); pauză; }}
void CheckVoltage () {// așteptați, apoi verificați tensiunea plutitoare (siguranță LiPO) = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("#############################"); Serial.print ("Tensiunea sistemului:"); Serial.print (tensiune); Serial.println ("volți."); if (tensiune 10.0) {Serial.println ("Niveluri de tensiune nominale."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("############################"); }
void MoveHome () {întârziere (100); // pauza recomandată bioloid.loadPose (Acasă); // încărcați poza de la FLASH, în tamponul nextPose bioloid.readPose (); // citit în pozițiile servo actuale în buffer-ul curPose Serial.println ("#############################"); Serial.println („Mutarea servoarelor în poziția Acasă”); Serial.println ("#############################"); întârziere (1000); bioloid.interpolateSetup (1000); // configurare pentru interpolare de la curent-> următor peste 1/2 secundă în timp (bioloid.interpolare> 0) {// faceți acest lucru în timp ce nu am ajuns la noua noastră poză bioloid.interpolateStep (); // mutați servomotoarele, dacă este necesar. întârziere (3); } if (RunCheck == 1) {MenuOptions (); }}
void MovePose1 () {întârziere (100); // pauza recomandată bioloid.loadPose (Pose1); // încărcați poza din FLASH, în tamponul nextPose bioloid.readPose (); // citit în pozițiile curente ale servo-ului în buffer-ul curPose Serial.println ("#############################"); Serial.println ("Mutarea servoarelor în prima poziție"); Serial.println ("#############################"); întârziere (1000); bioloid.interpolateSetup (1000); // configurare pentru interpolare de la curent-> următor peste 1/2 secundă în timp (bioloid.interpolare> 0) {// faceți acest lucru în timp ce nu am ajuns la noua noastră poză bioloid.interpolateStep (); // mutați servomotoarele, dacă este necesar. întârziere (3); } SetPosition (3, 291); // setați poziția articulației 3 la „0” întârziere (100); // așteptați ca articulația să se miște dacă (RunCheck == 1) {MenuOptions (); }}
void MovePose2 () {întârziere (100); // pauza recomandată bioloid.loadPose (Pose2); // încărcați poza din FLASH, în tamponul nextPose bioloid.readPose (); // citit în pozițiile curente ale servo-ului în buffer-ul curPose Serial.println ("#############################"); Serial.println ("Mutarea servoarelor în poziția a 2-a"); Serial.println ("#############################"); întârziere (1000); bioloid.interpolateSetup (1000); // configurare pentru interpolare de la curent-> următor peste 1/2 secundă în timp (bioloid.interpolare> 0) {// faceți acest lucru în timp ce nu am ajuns la noua noastră poză bioloid.interpolateStep (); // mutați servomotoarele, dacă este necesar. întârziere (3); } SetPosition (3, 291); // setați poziția articulației 3 la „0” întârziere (100); // așteptați ca articulația să se miște dacă (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {întârziere (100); // pauza recomandată bioloid.loadPose (Pose3); // încărcați poza din FLASH, în tamponul nextPose bioloid.readPose (); // citit în pozițiile curente ale servo-ului în buffer-ul curPose Serial.println ("#############################"); Serial.println („Mutarea servoarelor în poziția a 3-a”); Serial.println ("#############################"); întârziere (1000); bioloid.interpolateSetup (1000); // configurare pentru interpolare de la curent-> următor peste 1/2 secundă în timp (bioloid.interpolare> 0) {// faceți acest lucru în timp ce nu am ajuns la noua noastră poziție bioloid.interpolateStep (); // mutați servomotoarele, dacă este necesar. întârziere (3); } SetPosition (3, 291); // setați poziția articulației 3 la „0” întârziere (100); // așteptați ca articulația să se miște dacă (RunCheck == 1) {MenuOptions (); }}
void MovePose4 () {întârziere (100); // pauza recomandată bioloid.loadPose (Pose4); // încărcați poza din FLASH, în tamponul nextPose bioloid.readPose (); // citit în pozițiile servo actuale în buffer-ul curPose Serial.println ("#############################"); Serial.println („Mutarea servoarelor în poziția a 4-a”); Serial.println ("#############################"); întârziere (1000); bioloid.interpolateSetup (1000); // configurare pentru interpolare de la curent-> următor peste 1/2 secundă în timp (bioloid.interpolare> 0) {// faceți acest lucru în timp ce nu am ajuns la noua noastră poză bioloid.interpolateStep (); // mutați servomotoarele, dacă este necesar. întârziere (3); } SetPosition (3, 291); // setați poziția articulației 3 la „0” întârziere (100); // așteptați ca articulația să se miște dacă (RunCheck == 1) {MenuOptions (); }}
void MoveTest () {Serial.println ("############################"); Serial.println ("Inițializarea testului semnului mișcării"); Serial.println ("#############################"); întârziere (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Servo ID mutare:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; întârziere (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; întârziere (10); }
// iterați la următorul ID servo id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
void MenuOptions () {Serial.println ("############################"); Serial.println ("Vă rugăm să introduceți opțiunea 1-5 pentru a rula testele individuale din nou."); Serial.println ("1) prima poziție"); Serial.println ("2) Poziția a doua"); Serial.println ("3) Poziția a 3-a"); Serial.println ("4) Poziția a 4-a"); Serial.println ("5) Poziția de origine"); Serial.println ("6) Verificați tensiunea sistemului"); Serial.println ("7) Efectuați testul LED"); Serial.println ("8) Relax Servos"); Serial.println ("#############################"); }
void RelaxServos () {id = 1; Serial.println ("#############################"); Serial.println ("Servicii relaxante"); Serial.println ("#############################"); while (id <= SERVOCOUNT) {Relaxează (id); id = (id ++)% SERVOCOUNT; întârziere (50); } if (RunCheck == 1) {MenuOptions (); }}
void LEDTest () {id = 1; Serial.println ("#############################"); Serial.println („Test LED rulat”); Serial.println ("#############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - ID servo:"); Serial.println (id); întârziere (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - ID servo:"); Serial.println (id); întârziere (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // setați poziția articulației 1 la „0” întârziere (100); // așteptați mișcarea articulației
}
Ne-am bazat programul pe programul PincherTest al producătorilor, cu câteva modificări majore în cazul poziționării. Am folosit poses.h pentru ca robotul să aibă pozițiile din memorie. În primul rând, am încercat să creăm brațul nostru de joc cu Pixycam pentru a fi automat, dar din cauza luminii și a problemelor mici ale ecranului, acest lucru nu s-a putut întâmpla. Robotul are o poziție de bază de bază, după ce a încărcat programul, va testa toate servo-urile găsite în robot. Am setat ipostazele pentru butoanele 1-4, așa că va fi ușor de reținut. Simțiți-vă liber să utilizați programul.
Pasul 4: Ghid video
Pasul 5: Concluzie
În concluzie, robotul este un mic proiect distractiv pentru noi și o distracție cu care să ne jucăm și să experimentăm. Vă încurajez să îl încercați și să îl personalizați și.
Recomandat:
Brațul robotului: 15 pași
Robot Arm: Sistem automat
Brațul robotului servo: 4 pași
Servo Robot Braț: Acesta este un braț servomotor simplu, care este capabil să ridice obiecte și să le plaseze într-o zonă desemnată. Acest proiect va necesita majoritatea timpului său pentru asamblare datorită importanței asigurării faptului că brațul este stabil și capabil să îndeplinească sarcini fără
Brațul robotului Bluetooth cu un singur motor: 3 pași
Brațul robotului Bluetooth folosind un singur driver de motor: Bine ați venit la Instructable. În acest instructable vă voi arăta cum să convertiți brațul robotului de control cu fir în brațul robotului Bluetooth utilizând un singur driver de motor. Acesta este un proiect de lucru de la domiciliu realizat în starea de acoperire. Așa că de data asta am un singur L29
Brațul robotului cu servomotor RC controlat de Fpga - Concurs Digilent: 3 pași
Brațul robotului cu servomotor RC controlat de Fpga - Concurs Digilent: brațul robotului cu servomotor controlat FPGA Scopul acestui proiect este de a crea un sistem programabil care poate efectua operațiuni de lipire pe placa de perfecționare. Sistemul se bazează pe placa de dezvoltare Digilent Basys3 și va fi capabil să lipească
Brațul robotului de paletizare miniatural UArm pentru Arduino: 19 pași (cu imagini)
Brațul robotului de paletizare miniatural UArm pentru Arduino: În 2014 am cumpărat online un braț robot de paletizare miniatural pentru Arduino, începând să experimentez și cu imprimarea 3D. Am început să ingineresc invers brațul pe care l-am cumpărat și să-l cercetez când l-am întâlnit pe David Beck făcând același lucru pe M