Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-23 14:38
Skupinu tvoří 2 automatizační inženýři z UCN, kteří přišli s geniálním nápadem, který jsme motivováni dělat a rozvíjet. Tato myšlenka je založena na desce Arduino ovládající robotickou ruku. Deska Arduino je mozkem operace a poté pohon operace, robotická ruka, udělá, co potřebuje. Hlubší vysvětlení přijde později.
Krok 1: Zařízení
Rameno robota:
Sada robotických ramen Phantomx Pincher Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)
Software pro robota- https://www.arduino.cc/en/Main/OldSoftwareRelease… Kamera pro detekci barev:
Fotoaparát CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)
Software - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)
Krok 2: Nastavení Arduina
Zde můžete vidět nastavení na desce, což je velmi snadné.
Vlevo je napájecí zdroj.
Prostřední je pro první servo, které je později připojeno k ostatním servům, servo za servem.
Ve spodní části ovládáme desku z počítače nebo notebooku, která má na druhém konci vstup USB.
Krok 3: Konečný program
||| PROGRAM |||
#zahrnout
#include #include "poses.h" #include // Pixy Library #include
#define POSECOUNT 5
BioloidController bioloid = BioloidController (10 000 000);
const int SERVOCOUNT = 5; int id; int pos; booleovský IDCheck; booleovský RunCheck;
neplatné nastavení () {pinMode (0, VÝSTUP); ax12SetRegister2 (1, 32, 50); // nastavení čísla spoje 1 registr 32 na rychlost 50. ax12SetRegister2 (2, 32, 50); // nastavení čísla spoje 2 registr 32 na rychlost 50. ax12SetRegister2 (3, 32, 50); // nastavení čísla spoje 3 registr 32 na rychlost 50. ax12SetRegister2 (4, 32, 50); // nastavení čísla spoje 4 registr 32 na rychlost 50. ax12SetRegister2 (5, 32, 100); // nastavení čísla spoje 5 registr 32 na rychlost 100. // inicializace proměnných id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // otevřený sériový port Serial.begin (9600); zpoždění (500); Serial.println ("################################"); Serial.println ("Sériová komunikace navázána.");
// Kontrola napětí baterie Lipo CheckVoltage ();
// Scan serv, návrat pozice MoveTest (); MoveHome (); Možnosti nabídky (); RunCheck = 1; }
void loop () {// přečtěte si senzor: int inByte = Serial.read ();
switch (inByte) {
případ '1': MovePose1 (); přestávka;
případ '2': MovePose2 (); přestávka; případ '3': MovePose3 (); přestávka;
případ '4': MovePose4 (); přestávka;
případ '5': MoveHome (); přestávka; případ '6': Grab (); přestávka;
případ '7': LEDTest (); přestávka;
případ '8': RelaxServos (); přestávka; }}
void CheckVoltage () {// počkejte, pak zkontrolujte napětí (bezpečnost LiPO) float napětí = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10,0; Serial.println ("###############################"); Serial.print ("Napětí systému:"); Serial.print (napětí); Serial.println ("volty."); if (napětí 10,0) {Serial.println ("Úrovně napětí nominální."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("################################"); }
neplatné MoveHome () {zpoždění (100); // doporučená pauza bioloid.loadPose (Home); // načtěte pózu z FLASH, do bufferu nextPose bioloid.readPose (); // čtení v aktuálních pozicích serv do vyrovnávací paměti curPose Serial.println ("##############################"); Serial.println ("Přesun serv do výchozí polohy"); Serial.println ("###############################"); zpoždění (1000); bioloid.interpolateSetup (1000); // nastavení pro interpolaci z proudu-> další více než 1/2 sekundy, zatímco (bioloid.interpolation> 0) {// proveďte to, dokud jsme nedosáhli naší nové pozice bioloid.interpolateStep (); // v případě potřeby přesuňte serva. zpoždění (3); } if (RunCheck == 1) {MenuOptions (); }}
neplatné MovePose1 () {zpoždění (100); // doporučená pauza bioloid.loadPose (Pose1); // načtěte pózu z FLASH, do bufferu nextPose bioloid.readPose (); // čtení v aktuálních pozicích serva do vyrovnávací paměti curPose Serial.println ("##############################"); Serial.println ("Přesun serv na 1. pozici"); Serial.println ("###############################"); zpoždění (1000); bioloid.interpolateSetup (1000); // nastavení pro interpolaci z proudu-> další více než 1/2 sekundy, zatímco (bioloid.interpolation> 0) {// proveďte to, dokud jsme nedosáhli naší nové pozice bioloid.interpolateStep (); // v případě potřeby přesuňte serva. zpoždění (3); } NastavitPozici (3, 291); // nastavte polohu spoje 3 na zpoždění '0' (100); // počkejte, až se kloub pohne, pokud (RunCheck == 1) {MenuOptions (); }}
neplatné MovePose2 () {zpoždění (100); // doporučená pauza bioloid.loadPose (Pose2); // načtěte pózu z FLASH, do bufferu nextPose bioloid.readPose (); // čtení v aktuálních pozicích serv do vyrovnávací paměti curPose Serial.println ("##############################"); Serial.println ("Přesun serv na 2. pozici"); Serial.println ("###############################"); zpoždění (1000); bioloid.interpolateSetup (1000); // nastavení pro interpolaci z proudu-> další více než 1/2 sekundy, zatímco (bioloid.interpolation> 0) {// proveďte to, dokud jsme nedosáhli naší nové pozice bioloid.interpolateStep (); // v případě potřeby přesuňte serva. zpoždění (3); } SetPosition (3, 291); // nastavte polohu spoje 3 na zpoždění '0' (100); // počkejte, až se kloub pohne, pokud (RunCheck == 1) {MenuOptions (); }} neplatné MovePose3 () {zpoždění (100); // doporučená pauza bioloid.loadPose (Pose3); // načtěte pózu z FLASH, do bufferu nextPose bioloid.readPose (); // čtení v aktuálních pozicích serv do vyrovnávací paměti curPose Serial.println ("##############################"); Serial.println ("Přesun serv na 3. pozici"); Serial.println ("###############################"); zpoždění (1000); bioloid.interpolateSetup (1000); // nastavení pro interpolaci z proudu-> další více než 1/2 sekundy, zatímco (bioloid.interpolation> 0) {// proveďte to, dokud jsme nedosáhli naší nové pozice bioloid.interpolateStep (); // v případě potřeby přesuňte serva. zpoždění (3); } NastavitPozici (3, 291); // nastavte polohu spoje 3 na zpoždění '0' (100); // počkejte, až se kloub pohne, pokud (RunCheck == 1) {MenuOptions (); }}
neplatné MovePose4 () {zpoždění (100); // doporučená pauza bioloid.loadPose (Pose4); // načtěte pózu z FLASH, do bufferu nextPose bioloid.readPose (); // čtení v aktuálních pozicích serv do vyrovnávací paměti curPose Serial.println ("##############################"); Serial.println ("Přesun serv na 4. pozici"); Serial.println ("###############################"); zpoždění (1000); bioloid.interpolateSetup (1000); // nastavení pro interpolaci z proudu-> další více než 1/2 sekundy, zatímco (bioloid.interpolation> 0) {// proveďte to, dokud jsme nedosáhli naší nové pozice bioloid.interpolateStep (); // v případě potřeby přesuňte serva. zpoždění (3); } SetPosition (3, 291); // nastavte polohu spoje 3 na zpoždění '0' (100); // počkejte, až se kloub pohne, pokud (RunCheck == 1) {MenuOptions (); }}
neplatné MoveTest () {Serial.println ("##############################"); Serial.println ("Test inicializace pohybového znamení"); Serial.println ("###############################"); zpoždění (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Moving Servo ID:"); Serial.println (id);
while (pos> = 312) {SetPosition (id, pos); pos = pos--; zpoždění (10); }
while (pos <= 512) {SetPosition (id, pos); pos = pos ++; zpoždění (10); }
// iterovat na další servo ID id = id ++;
} if (RunCheck == 1) {MenuOptions (); }}
neplatné MenuOptions () {Serial.println ("##############################"); Serial.println („Chcete-li jednotlivé testy spustit znovu, zadejte prosím možnost 1-5.“); Serial.println ("1) 1. pozice"); Serial.println ("2) 2. pozice"); Serial.println ("3) 3. pozice"); Serial.println ("4) 4. pozice"); Serial.println („5) Výchozí pozice“); Serial.println ("6) Zkontrolujte napětí systému"); Serial.println ("7) Proveďte test LED"); Serial.println ("8) Relax Servos"); Serial.println ("###############################"); }
neplatné RelaxServos () {id = 1; Serial.println ("###############################"); Serial.println („Relaxační serva“); Serial.println ("###############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; zpoždění (50); } if (RunCheck == 1) {MenuOptions (); }}
neplatné LEDTest () {id = 1; Serial.println ("###############################"); Serial.println ("Test spuštěné LED"); Serial.println ("###############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED svítí - ID serva:"); Serial.println (id); zpoždění (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED VYPNUTO - ID serva:"); Serial.println (id); zpoždění (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}
void Grab () {SetPosition (5, 800); // nastavte polohu spoje 1 na zpoždění '0' (100); // počkejte, až se kloub pohne
}
Náš program jsme založili na programu výrobců PincherTest s několika zásadními vylepšeními v případě polohování. Použili jsme pózy.h, aby robot měl pozice v paměti. Nejprve jsme se snažili, aby naše hrací rameno s Pixycam bylo automatické, ale kvůli problémům se světlem a malou obrazovkou se to nemohlo stát. Robot má základní výchozí polohu, po nahrání programu otestuje všechna serva nalezená v robotu. Nastavili jsme pozice pro tlačítka 1-4, takže si ji snadno zapamatujete. Neváhejte program použít.
Krok 4: Průvodce videem
Krok 5: Závěr
Na závěr je robot pro nás zábavný malý projekt a zábavné hraní a experimentování. Doporučuji vám to vyzkoušet a také přizpůsobit.
Doporučuje:
Robotické rameno s chapadlem: 9 kroků (s obrázky)
Robotické rameno s drapákem: Sklizeň citroníků je považována za těžkou práci, kvůli velké velikosti stromů a také kvůli horkému podnebí v oblastech, kde jsou vysazeny citroníky. Proto potřebujeme něco jiného, abychom zemědělským pracovníkům pomohli dokončit jejich práci více
3D robotické rameno s krokovými motory ovládanými Bluetooth: 12 kroků
3D robotické rameno s krokovými motory ovládanými Bluetooth: V tomto tutoriálu uvidíme, jak vyrobit 3D robotické rameno s krokovými motory 28byj-48, servomotorem a 3D tištěnými díly. Deska s plošnými spoji, zdrojový kód, elektrické schéma, zdrojový kód a spousta informací jsou obsaženy na mých webových stránkách
Kapesní robotické rameno MeArm V0.4: 20 kroků (s obrázky)
Kapesní robotické rameno MeArm V0.4: MeArm je kapesní robotické rameno. Je to projekt zahájený v únoru 2014, který díky projektu Otevřený vývoj jako otevřený hardware měl fantasticky rychlou cestu do současného stavu. Verze 0.3 byla uvedena na Instructables zpět
DIY robotika - Vzdělávací 6osé robotické rameno: 6 kroků (s obrázky)
DIY robotika | Vzdělávací 6osé robotické rameno: Vzdělávací buňka DIY-Robotics je platforma, která obsahuje 6osé robotické rameno, elektronický řídicí obvod a programovací software. Tato platforma je úvodem do světa průmyslové robotiky. Prostřednictvím tohoto projektu si DIY-Robotics přeje
Arduino - klavírní dlaždice: 16 kroků (s obrázky)
Arduino - Piano Tiles: Dobrý den, internetoví lidé, bude to o tom, jak udělat to, co DEFINITIVNĚ není odtržení mobilní hry na arduino uno r3.takže pro začátek budete potřebovat všechny části, které jsou následující ! 1x Arduino Uno r3 (42 $) 2x štít klávesnice LCD (19 $ každý) 5