Cuprins:

Plăci de pian care joacă brațul robotului: 5 pași
Plăci de pian care joacă brațul robotului: 5 pași

Video: Plăci de pian care joacă brațul robotului: 5 pași

Video: Plăci de pian care joacă brațul robotului: 5 pași
Video: Cum scrii când începi un caiet nou 2024, Iulie
Anonim
Plăci de pian care joacă brațul robotului
Plăci de pian care joacă brațul robotului

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

Echipament
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

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