Tartalomjegyzék:

Zongoracsempe Robotkar: 5 lépés
Zongoracsempe Robotkar: 5 lépés

Videó: Zongoracsempe Robotkar: 5 lépés

Videó: Zongoracsempe Robotkar: 5 lépés
Videó: Дэннис Хонг: Мои семь видов робота 2024, Július
Anonim
Zongoracsempe Robot Arm
Zongoracsempe Robot Arm

A csoportot az UCN 2 automatizálási mérnöke alkotja, akik egy ragyogó ötlettel álltak elő, amire motiváltak vagyunk, hogy megtegyük és fejlesszük. Az ötlet egy Arduino táblán alapul, amely egy robotkart irányít. Az Arduino tábla a művelet agya, majd a művelet működtetője, a robotkar megteszi, amit kell. A részletesebb magyarázat később jön.

1. lépés: Felszerelés

Felszerelés
Felszerelés

Robot kar:

Phantomx Pincher robotkar készlet Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Szoftver a robothoz- https://www.arduino.cc/en/Main/OldSoftwareRelease… Színérzékelő kamera:

CMUcam5 Pixy kamera - (https://charmedlabs.com/default/pixy-cmucam5/)

Szoftver - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Lépés: Az Arduino beállítása

Arduino beállítás
Arduino beállítás

A beállításokat itt láthatja a táblán, ami nagyon egyszerű.

A bal oldalon található a tápegység.

A középső az első szervóhoz tartozik, amelyet később a többi szervóhoz csatlakoztatnak, szervóról szervóra.

Az alsó rész az, ahol PC -ről vagy laptopról irányítjuk a táblát, amelynek másik végén USB bemenet található.

3. lépés: Végső program

||| PROGRAM |||

#befoglalni

#include #include "poses.h" #include // Pixy Library #include

#define POSCOUNT 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; logikai IDCheck; logikai RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // állítsa az 1 -es számú közös regisztert 32 -re 50 -es sebességre. ax12SetRegister2 (2, 32, 50); // állítsa be a 2 -es számú közös regisztrációt a 32 -es sebességre. ax12SetRegister2 (3, 32, 50); // állítsa be a 3. számú 32 -es számú közös regisztrációt 50 -es sebességre. ax12SetRegister2 (4, 32, 50); // állítsa be a 4 -es számú közös regiszter 32 -es értékét az 50 -es sebességre. ax12SetRegister2 (5, 32, 100); // állítsa be az 5 -ös számú nyilvántartást 32 -től 100 -ig. // inicializálja a változókat id = 1; poz = 0; IDCheck = 1; RunCheck = 0; // soros port megnyitása Serial.begin (9600); késleltetés (500); Serial.println ("##########################" "); Serial.println ("Soros kommunikáció létrejött.");

// Check Lipo Battery Voltage CheckVoltage ();

// Szervók beolvasása, visszatérési pozíció MoveTest (); MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// olvassa el az érzékelőt: int inByte = Serial.read ();

switch (inByte) {

„1” eset: MovePose1 (); szünet;

„2” eset: MovePose2 (); szünet; „3” eset: MovePose3 (); szünet;

„4” eset: MovePose4 (); szünet;

„5” eset: MoveHome (); szünet; „6” eset: Grab (); szünet;

„7” eset: LEDTest (); szünet;

„8” eset: RelaxServos (); szünet; }}

void CheckVoltage () {// várjon, majd ellenőrizze a feszültséget (LiPO biztonság) úszó feszültség = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("##########################" "); Serial.print ("Rendszerfeszültség:"); Soros.nyomat (feszültség); Serial.println ("volt"); if (feszültség 10,0) {Serial.println ("Névleges feszültségszintek"); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("###########################"); }

void MoveHome () {delay (100); // ajánlott szünet bioloid.loadPose (Home); // töltse be a pózt a FLASH -ból a következőPose puffer bioloid.readPose (); // az aktuális szervo pozíciókban olvassa be a curPose puffert Serial.println ("############################"); Serial.println ("Szervók áthelyezése alaphelyzetbe"); Serial.println ("##########################" "); késleltetés (1000); bioloid.interpolateSetup (1000); // az interpoláció beállítása a jelenlegi-> következőből több mint 1/2 másodpercen keresztül (bioloid.interpolating> 0) {// ezt tedd, amíg el nem értük az új pózunkat bioloid.interpolateStep (); // szervók mozgatása, ha szükséges. késleltetés (3); } if (RunCheck == 1) {MenuOptions (); }}

void MovePose1 () {delay (100); // ajánlott szünet bioloid.loadPose (Pose1); // töltse be a pózt a FLASH -ból a következőPose puffer bioloid.readPose (); // az aktuális szervo pozíciókban olvassa be a curPose puffert Serial.println ("############################"); Serial.println ("Szervók áthelyezése az 1. pozícióba"); Serial.println ("##########################" "); késleltetés (1000); bioloid.interpolateSetup (1000); // az interpoláció beállítása a jelenlegi-> következőből több mint 1/2 másodpercen keresztül (bioloid.interpolating> 0) {// ezt tedd, amíg el nem értük az új pózunkat bioloid.interpolateStep (); // szervók mozgatása, ha szükséges. késleltetés (3); } SetPosition (3, 291); // állítsa a 3 -as csukló helyzetét '0' késleltetésre (100); // várja meg, amíg a csukló elmozdul, ha (RunCheck == 1) {MenuOptions (); }}

void MovePose2 () {delay (100); // ajánlott szünet bioloid.loadPose (Pose2); // töltse be a pózt a FLASH -ból a következőPose puffer bioloid.readPose (); // az aktuális szervo pozíciókban olvassa be a curPose puffert Serial.println ("############################"); Serial.println ("Szervók áthelyezése a 2. pozícióba"); Serial.println ("##########################" "); késleltetés (1000); bioloid.interpolateSetup (1000); // az interpoláció beállítása a jelenlegi-> következőből több mint 1/2 másodpercen keresztül (bioloid.interpolating> 0) {// ezt tedd, amíg el nem értük az új pózunkat bioloid.interpolateStep (); // szervók mozgatása, ha szükséges. késleltetés (3); } SetPosition (3, 291); // állítsa a 3 -as csukló helyzetét '0' késleltetésre (100); // várja meg, amíg a csukló elmozdul, ha (RunCheck == 1) {MenuOptions (); }} void MovePose3 () {delay (100); // ajánlott szünet bioloid.loadPose (Pose3); // töltse be a pózt a FLASH -ból a következőPose puffer bioloid.readPose (); // az aktuális szervo pozíciókban olvassa be a curPose puffert Serial.println ("############################"); Serial.println ("Szervók áthelyezése a 3. pozícióba"); Serial.println ("##########################" "); késleltetés (1000); bioloid.interpolateSetup (1000); // az interpoláció beállítása a jelenlegi-> következőből több mint 1/2 másodpercen keresztül (bioloid.interpolation> 0) {// ezt tedd, amíg el nem értük az új pózunkat bioloid.interpolateStep (); // szervók mozgatása, ha szükséges. késleltetés (3); } SetPosition (3, 291); // állítsa a 3 -as csukló helyzetét '0' késleltetésre (100); // várja meg, amíg a csukló elmozdul, ha (RunCheck == 1) {MenuOptions (); }}

void MovePose4 () {delay (100); // ajánlott szünet bioloid.loadPose (Pose4); // töltse be a pózt a FLASH -ból a következőPose puffer bioloid.readPose (); // az aktuális szervo pozíciókban olvassa be a curPose puffert Serial.println ("############################"); Serial.println ("Szervók áthelyezése a 4. pozícióba"); Serial.println ("##########################" "); késleltetés (1000); bioloid.interpolateSetup (1000); // az interpoláció beállítása a jelenlegi-> következőből több mint 1/2 másodpercen keresztül (bioloid.interpolation> 0) {// ezt tedd, amíg el nem értük az új pózunkat bioloid.interpolateStep (); // szervók mozgatása, ha szükséges. késleltetés (3); } SetPosition (3, 291); // állítsa a 3 -as csukló helyzetét '0' késleltetésre (100); // várja meg, amíg a csukló elmozdul, ha (RunCheck == 1) {MenuOptions (); }}

void MoveTest () {Serial.println ("##########################" "); Serial.println ("A mozgásjel teszt inicializálása"); Serial.println ("##########################" "); késleltetés (500); id = 1; poz = 512; while (id <= SERVOCOUNT) {Serial.print ("Mozgó szervo azonosító:"); Sorozat.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; késleltetés (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; késleltetés (10); }

// iterate to next servo ID id = id ++;

} if (RunCheck == 1) {MenuOptions (); }}

void MenuOptions () {Serial.println ("##########################" "); Serial.println ("Kérjük, adja meg az 1-5 opciót az egyes tesztek újbóli futtatásához."); Serial.println ("1) 1. pozíció"); Serial.println ("2) 2. pozíció"); Serial.println ("3) 3. pozíció"); Serial.println ("4) 4. pozíció"); Serial.println ("5) Otthoni pozíció"); Serial.println ("6) Ellenőrizze a rendszer feszültségét"); Serial.println ("7) LED teszt végrehajtása"); Serial.println ("8) Relax Servos"); Serial.println ("##########################" "); }

void RelaxServos () {id = 1; Serial.println ("##########################" "); Serial.println ("Pihentető szervók."); Serial.println ("##########################" "); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; késleltetés (50); } if (RunCheck == 1) {MenuOptions (); }}

void LEDTest () {id = 1; Serial.println ("##########################" "); Serial.println ("Futó LED teszt"); Serial.println ("##########################" "); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Sorozat.println (id); késleltetés (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Sorozat.println (id); késleltetés (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // állítsa az 1 -es csukló helyzetét "0" késleltetésre (100); // várja meg, amíg a csukló elmozdul

}

Programunkat a gyártók PincherTest programjára alapoztuk, néhány fontosabb változtatással a pozicionálás esetében. A pózok.h -t használtuk, hogy a robotnak legyenek pozíciói a memóriában. Először megpróbáltuk a játékkarunkat a Pixycam segítségével automatikusan létrehozni, de a fény és a kis képernyő problémák miatt ez nem történhetett meg. A robot alapvető otthoni pozícióval rendelkezik, a program feltöltése után teszteli a robotban található összes szervót. Beállítottuk a pózokat az 1-4 gombhoz, így könnyen megjegyezhető lesz. Nyugodtan használja a programot.

4. lépés: Videó útmutató

5. lépés: Következtetés

Összefoglalva, a robot egy szórakoztató kis projekt számunkra, és szórakoztató játék, amellyel játszhatunk és kísérletezhetünk. Javaslom, hogy próbálja ki és testreszabhatja azt is.

Ajánlott: