İçindekiler:

Piyano Fayansları Oynayan Robot Kolu: 5 Adım
Piyano Fayansları Oynayan Robot Kolu: 5 Adım

Video: Piyano Fayansları Oynayan Robot Kolu: 5 Adım

Video: Piyano Fayansları Oynayan Robot Kolu: 5 Adım
Video: Konuşan tom 2024, Kasım
Anonim
Piyano Fayansları Oynayan Robot Kolu
Piyano Fayansları Oynayan Robot Kolu

Grup, yapmaya ve geliştirmeye motive olduğumuz parlak bir fikir bulan UCN'den 2 Otomasyon Mühendisinden oluşuyor. Fikir, robotik bir kolu kontrol eden bir Arduino kartına dayanıyor. Arduino kartı, operasyonun beynidir ve daha sonra operasyonun aktüatörü olan Robotik kol, ihtiyacı olanı yapacaktır. Daha ayrıntılı açıklama daha sonra gelecek.

Adım 1: Ekipman

Teçhizat
Teçhizat

Robot kol:

Phantomx Pincher Robot Kol Kiti Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Robot için yazılım- https://www.arduino.cc/en/Main/OldSoftwareRelease… Renk algılama kamerası:

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

Yazılım - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Adım 2: Arduino Kurulumu

Arduino Kurulumu
Arduino Kurulumu

Kurulumu burada tahtada görebilirsiniz, bu çok kolay.

Solda Güç Kaynağı var.

Ortadaki, daha sonra diğer servolara servo ile bağlanan ilk servo içindir.

En alttaki, kartı diğer ucunda USB girişi olan bir PC veya Dizüstü bilgisayardan kontrol ettiğimiz yerdir.

Adım 3: Nihai Program

||| PROGRAM |||

#Dahil etmek

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

#define POSECOUNT 5

BioloidController bioloid = BioloidController(1000000);

const int SERVOCOUNT = 5; int kimliği; int konum; boole IDCheck; boole RunCheck;

void setup(){ pinMode(0, OUTPUT); ax12SetRegister2(1, 32, 50);//eklem numarası 1 kaydı 32'yi hız 50'ye ayarla. ax12SetRegister2(2, 32, 50);//eklem numarası 2'yi hız 50'ye ayarla.;//eklem numarası 3 kaydı 32'yi hız 50'ye ayarla. ax12SetRegister2(4, 32, 50);//eklem numarası 4 kaydı 32'yi hız 50'ye ayarla. ax12SetRegister2(5, 32, 100);//eklem numarası 5 kaydı ayarla 32'den 100'e kadar. //değişkenleri başlat id = 1; konum = 0; IDCheck = 1; RunCheck = 0; // seri bağlantı noktasını aç Serial.begin(9600); gecikme (500); Serial.println("##########################"); Serial.println("Seri İletişim Kuruldu.");

//Lipo Pil Voltajını Kontrol EtVoltage();

//Servoları tara, dönüş pozisyonu MoveTest(); MoveHome(); Menü seçenekleri(); RunCheck = 1; }

void loop(){ // sensörü oku: int inByte = Serial.read();

geçiş (inByte) {

durum '1': MovePose1(); kırmak;

durum '2': MovePose2(); kırmak; durum '3': MovePose3(); kırmak;

durum '4': MovePose4(); kırmak;

durum '5': MoveHome(); kırmak; durum '6': Grab(); kırmak;

durum '7': LEDTest(); kırmak;

durum '8': RelaxServos(); kırmak; } }

void CheckVoltage(){ // bekleyin, ardından voltajı kontrol edin (LiPO güvenliği) float voltajı = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println("##########################"); Serial.print ("Sistem Voltajı: "); Serial.print (voltaj); Serial.println (" volt."); if (voltaj 10.0){ Serial.println("Voltaj seviyeleri nominal."); } if (RunCheck == 1){ MenuOptions(); } Serial.println("#########################"); }

void MoveHome(){ gecikme(100); // önerilen duraklama bioloid.loadPose(Home); // pozu FLASH'den nextPose arabelleğine yükleyin bioloid.readPose(); // mevcut servo konumlarını curPose arabelleğine oku Serial.println("##########################"); Serial.println("Servoları Ana konuma taşıma"); Serial.println("##########################"); gecikme(1000); bioloid.interpolateSetup(1000); // akımdan enterpolasyon için kurulum->bir saniyeden fazla while(bioloid.interpolating > 0){ // yeni pozumuza ulaşmamışken bunu yapın bioloid.interpolateStep(); // gerekirse servoları hareket ettirin. gecikme(3); } if (RunCheck == 1){ MenuOptions(); } }

void MovePose1(){ gecikme(100); // önerilen duraklama bioloid.loadPose(Pose1); // pozu FLASH'den nextPose arabelleğine yükleyin bioloid.readPose(); // mevcut servo pozisyonlarını curPose arabelleğine oku Serial.println("##########################"); Serial.println("Servoları 1. konuma taşıma"); Serial.println("##########################"); gecikme(1000); bioloid.interpolateSetup(1000); // akımdan enterpolasyon için kurulum->bir saniyeden fazla while(bioloid.interpolating > 0){ // yeni pozumuza ulaşmamışken bunu yapın bioloid.interpolateStep(); // gerekirse servoları hareket ettirin. gecikme(3); } SetPosition(3, 291); //eklem 3'ün konumunu '0' gecikmesine ayarlayın(100);//eklem hareket etmesini bekleyin if (RunCheck == 1){ MenuOptions(); } }

void MovePose2(){ gecikme(100); // önerilen duraklama bioloid.loadPose(Pose2); // pozu FLASH'den nextPose arabelleğine yükleyin bioloid.readPose(); // mevcut servo konumlarını curPose arabelleğine oku Serial.println("##########################"); Serial.println("Servoları 2. konuma taşıma"); Serial.println("##########################"); gecikme(1000); bioloid.interpolateSetup(1000); // akımdan enterpolasyon için kurulum->bir saniyeden fazla while(bioloid.interpolating > 0){ // yeni pozumuza ulaşmamışken bunu yapın bioloid.interpolateStep(); // gerekirse servoları hareket ettirin. gecikme(3); } SetPosition(3, 291); // eklem 3'ün konumunu '0' gecikmesine ayarlayın(100);//eklem hareket etmesini bekleyin if (RunCheck == 1){ MenuOptions(); } } void MovePose3(){ gecikme(100); // önerilen duraklama bioloid.loadPose(Pose3); // pozu FLASH'den nextPose arabelleğine yükleyin bioloid.readPose(); // mevcut servo konumlarını curPose arabelleğine oku Serial.println("##########################"); Serial.println("Servoları 3. konuma taşıma"); Serial.println("##########################"); gecikme(1000); bioloid.interpolateSetup(1000); // akımdan enterpolasyon için kurulum->bir saniyeden fazla while(bioloid.interpolating > 0){ // yeni pozumuza ulaşmamışken bunu yapın bioloid.interpolateStep(); // gerekirse servoları hareket ettirin. gecikme(3); } SetPosition(3, 291); // eklem 3'ün konumunu '0' gecikmesine ayarlayın(100);//eklem hareket etmesini bekleyin if (RunCheck == 1){ MenuOptions(); } }

void MovePose4(){ gecikme(100); // önerilen duraklama bioloid.loadPose(Pose4); // pozu FLASH'den nextPose arabelleğine yükleyin bioloid.readPose(); // mevcut servo konumlarını curPose arabelleğine oku Serial.println("##########################"); Serial.println("Servoları 4. konuma taşıma"); Serial.println("##########################"); gecikme(1000); bioloid.interpolateSetup(1000); // akımdan enterpolasyon için kurulum->bir saniyeden fazla while(bioloid.interpolating > 0){ // yeni pozumuza ulaşmamışken bunu yapın bioloid.interpolateStep(); // gerekirse servoları hareket ettirin. gecikme(3); } SetPosition(3, 291); // eklem 3'ün konumunu '0' gecikmesine ayarlayın(100);//eklem hareket etmesini bekleyin if (RunCheck == 1){ MenuOptions(); } }

void MoveTest(){ Serial.println("##########################"); Serial.println("Hareket İşareti Testini Başlatma"); Serial.println("##########################"); gecikme(500); kimlik = 1; konum = 512; while(id <= SERVOCOUNT){ Serial.print("Hareketli Servo Kimliği: "); Seri.println(id);

while(konum >= 312){ SetPosition(id, konum); konum = konum--; gecikme(10); }

while(konum <= 512){ SetPosition(id, konum); konum = konum++; gecikme(10); }

//bir sonraki servo kimliğine geç id = id++;

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

void MenuOptions(){ Serial.println("##########################"); Serial.println("Tek tek testleri tekrar çalıştırmak için lütfen 1-5 seçeneğini giriniz."); Serial.println("1) 1. Konum"); Serial.println("2) 2. Konum"); Serial.println("3) 3. Konum"); Serial.println("4) 4. Konum"); Serial.println("5) Ana Konum"); Serial.println("6) Sistem Voltajını Kontrol Edin"); Serial.println("7) LED Testini Gerçekleştirin"); Serial.println("8) Servoları Rahatlatın"); Serial.println("##########################"); }

void RelaxServos(){ id = 1; Serial.println("##########################"); Serial.println("Rahatlatıcı Servolar."); Serial.println("##########################"); while(id <= SERVOCOUNT){ Rahatla(id); id = (id++)%SERVOCOUNT; gecikme(50); } if (RunCheck == 1){ MenuOptions(); } }

void LEDTest(){ id = 1; Serial.println("##########################"); Serial.println("Çalışan LED Testi"); Serial.println("##########################"); while(id <= SERVOCOUNT){ ax12SetRegister(id, 25, 1); Serial.print("LED AÇIK - Servo Kimliği: "); Seri.println(id); gecikme(3000); ax12SetRegister(id, 25, 0); Serial.print("LED KAPALI - Servo Kimliği: "); Seri.println(id); gecikme(3000); kimlik = kimlik++; } if (RunCheck == 1){ MenuOptions(); } }

void Grab(){ SetPosition(5, 800); // eklem 1'in konumunu '0' gecikmesine ayarlayın(100);//eklem hareketini bekleyin

}

Programımızı, konumlandırma durumunda bazı önemli değişikliklerle birlikte üreticilerin PincherTest programına dayandırdık. Robotun pozisyonları hafızada tutması için pozlar.h kullandık. İlk olarak oyun kolumuzu Pixycam ile otomatik olarak oluşturmaya çalıştık ancak hafif ve küçük ekran problemlerinden dolayı bu mümkün olmadı. Robotun temel bir ana konumu vardır, programı yükledikten sonra robotta bulunan tüm servoları test eder. 1-4 düğmeleri için pozları belirledik, böylece hatırlaması kolay olacak. Programı kullanmaktan çekinmeyin.

4. Adım: Video Kılavuzu

Adım 5: Sonuç

Sonuç olarak, robot bizim için eğlenceli küçük bir proje ve oynaması ve denemesi eğlenceli bir şey. Denemenizi ve özelleştirmenizi tavsiye ederim.

Önerilen: