Kablosuz Eldiven ile Kontrol Edilen Arduino Robotik El

Kablosuz Eldiven ile Kontrol Edilen Arduino Robotik El
91,244 views
1,620   

Bu proje; 3D robot el montajı, servo kontrolü, flex sensör kullanımı, nRF24L01 ile kablosuz kontrol konularını içermektedir. Kısacası, bu projede bir robot elin kablosuz bir eldivenle nasıl kontrol edileceğini göreceğiz.

Gerekli Bileşen ve Donanımlar

Bu proje için gerekli tüm bileşenlere aşağıdaki bağlantılardan ulaşabilirsiniz.

Gerekli Araçlar (İsteğe Bağlı)

El ve Ön Kol 3D Modelleri

Bu projede kullanılan Robot El, InMoov adlı açık kaynaklı bir projenin parçasıdır. Montaj hakkında daha fazla bilgi için InMoov web sitesindeki “Montaj Eskizleri” ve “Montaj Yardımı” sayfalarını ziyaret edebilirsiniz.

Bu projede kullanılan tüm 3D parçaları bu bağlantıda bulabilirsiniz – http://bit.ly/2IeQK71

Parçaların Montajı

Robotik El parçalarının montajı oldukça detaylı ve karmaşıktır, bu nedenle montaj hakkında daha fazla ayrıntı için http://www.inmoov.fr/assembly-sketchs/ ve http://inmoov.fr/hand-and-forarm/ sayfalarını ziyaret edebilirsiniz. Montaj, InMoov web sitesinde daha detaylı bir şekilde açıklanmaktadır.

Doğru Parmak Açısı için Öneri

Parmakları birleştirirken, parçaların doğru yönde olduğunan emin olun. Servo motorları servo yatağına yerleştirmeden önce tüm servo motor açılarını 10 veya 170 derece olarak ayarlayın. Servo kasnaklarını monte ederken, parmak pozisyonlarını kapalı veya açık pozisyonda tutun. Ardından, örgü misina gerilene kadar servo kasnağı etrafına sarın.

Robotik El (Alıcı) Bağlantıları

  • Bu noktada, servolar önceden ön kolun içine monte edilmelidir. Onları güç kaynağına ve Arduino’ya bağlamak için küçük bir breadboard kullanabilirsiniz.
  • NRF24L01 + modülünün güç adaptörünü kullanmanızı tavsiye ederim. Aksi halde, yetersiz akım nedeniyle iletişim bozulabilir.
  • Bu problemlerle karşılaşırsanız; servo motorlarda titreşim, çalışmayan servo motorlar, iletişim arızaları ve benzer durumlarda, Arduino kartınızı harici güç (USB gibi) ile besleyin.
  • Yukarıda gösterilen pim girişlerinden farklı girişler kullandıysanız, bunları kod içerisinde de güncellemeyi unutmayın.

Eldiven (Verici) Bağlantıları

  • Esnek sensörler Arduino ile uyumlu olmaları için bir devre gerektirir. Flex sensörler değişken dirençlerdir, bu yüzden bir voltaj bölücü kullanmanızı öneririm. 10K direnç kullandım.
  • Devreyi eldivenin üzerine kolayca monte edilebilen küçük bir PCB üzerine lehimledim. PCB yerine mini breadboard üzerinde devre kurabilirsiniz.
  • Eldiven devresi için 9V pil kullanabilirsiniz.
  • Yukarıda gösterilen pim girişlerinden farklı girişler kullandıysanız, bunları kod içerisinde değiştirin.

Arduino Kaynak Kodları

Kaynak kodun doğru çalışması için önerileri takip edin:
  • RF24.h kütüphanesini indirin ve Arduino kütüphaneler klasörüne taşıyın. https://github.com/maniacbug/RF24
  • Esnek sensörler eldivene bağlandıktan sonra, her bir esnek sensörün algıladığı minimum ve maksimum değerleri okuyun ve not edin.
  • Ardından bu değerleri verici (eldiven) koduna girin.
  • Servo motorları tek tek kontrol ederek tüm parmaklarınızı kapalı ve açık konuma getirin.
  • Ardından servo motorlar için en iyi açıları elde edin (parmaklar kapalı ve açıkken servo açıları).
  • Servo motor açılarını ve esnek sensör değerlerini aşağıdaki gibi verici koduna girin.

“esnek sensör min. değer”, “esnek sensör max. değer”, “servo min. açı”, “servo maks. açı”

(flex_val = map (flex_val, 630, 730, 10, 170);

  • Alıcı kaynak kodunda sadece bir değişiklik var. Vericideki “hangi esnek sensör” alıcıdaki “hangi servo motoru” kontrol edecektir? Örneğin msg [0], 5 numaralı flex sensör verilerini göndersin, ardından 5 numaralı servo motor ise 5 numaralı flex sensör değerine göre hareket etsin, bunu ‘ servo5.write (msg [0])‘ yazarak yapabilirsiniz .

Alıcı Kaynak Kodu

//Receiver Code (Hand) - Mert Arduino and Tech

#include <Servo.h>    //the library which helps us to control the servo motor
#include <SPI.h>      //the communication interface with the modem
#include "RF24.h"     //the library which helps us to control the radio modem

//define the servo name
Servo myServo1;
Servo myServo3;
Servo myServo4;
Servo myServo2;
Servo myServo5;

RF24 radio(9,10);     /*This object represents a modem connected to the Arduino. 
                      Arguments 9 and 10 are a digital pin numbers to which signals 
                      CE and CSN are connected.*/

const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem,that will receive data from the Arduino.

int msg[5];

void setup(){

  //define the servo input pins
  myServo1.attach(15); //A1
  myServo2.attach(16); //A2
  myServo3.attach(17); //A3
  myServo4.attach(18); //A4
  myServo5.attach(19); //A5
  
  radio.begin();                    //it activates the modem.
  radio.openReadingPipe(1, pipe);   //determines the address of our modem which receive data.
  radio.startListening();           //enable receiving data via modem
  }


void loop(){
  if(radio.available()){
    bool done = false;
    while (!done){
    done = radio.read(msg, sizeof(msg));

    myServo1.write(msg[2]); //A1
    myServo2.write(msg[4]); //A2
    myServo3.write(msg[3]); //A3
    myServo4.write(msg[1]); //A4
    myServo5.write(msg[0]); //A5
    }
  }
}


Verici Kaynak Kodu

//Transmitter Code (Glove) - Mert Arduino and Tech

#include <SPI.h>                      //the communication interface with the modem
#include "RF24.h"                     //the library which helps us to control the radio modem

int msg[5]; //Total number of data to be sent (data package)

//define the flex sensor input pins
int flex_5 = A5;
int flex_4 = A4;
int flex_3 = A3;
int flex_2 = A2;
int flex_1 = A1;

//define variables for flex sensor values
int flex_5_val;
int flex_4_val;
int flex_3_val;
int flex_2_val;
int flex_1_val;

RF24 radio(9,10);                     //9 and 10 are a digital pin numbers to which signals CE and CSN are connected.
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem, that will receive data from Arduino.


void setup(void){
  Serial.begin(9600);
  radio.begin();                      //it activates the modem.
  radio.openWritingPipe(pipe);        //sets the address of the receiver to which the program will send data.
}

void loop(void){

  flex_5_val = analogRead(flex_5); 
  flex_5_val = map(flex_5_val, 630, 730, 80, 20);
  
  flex_4_val = analogRead(flex_4);
  flex_4_val = map(flex_4_val, 520, 710, 70, 175);
 
  flex_3_val = analogRead(flex_3);
  flex_3_val = map(flex_3_val, 510, 680, 140, 10);
 
  flex_2_val = analogRead(flex_2);
  flex_2_val = map(flex_2_val, 580, 715, 90, 175);
  
  flex_1_val = analogRead(flex_1);
  flex_1_val = map(flex_1_val, 550, 700, 90, 175);
  
  msg[0] = flex_5_val;
  msg[1] = flex_4_val;
  msg[2] = flex_3_val;
  msg[3] = flex_2_val;
  msg[4] = flex_1_val;
  radio.write(msg, sizeof(msg));
}



shares