Ana Sayfa Arduino Arduino ile Dokunmaya Duyarlı Esnek Robotik Deri

Arduino ile Dokunmaya Duyarlı Esnek Robotik Deri

7 min read
0
1
1,133

Arkadaşlar bu ilk yazımda size MyRobotLab topluluğunda InMoov robot geliştirme çalışmalarına katkı çerçevesinde gerçekleştirdiğim bir projeyi sunmak istedim… Konu, Arduino kullanarak dokunmaya hassas bir robotik deri tasarlamak.. Öyle ki esnek ve ince, robotun kuluna felan sarılabilecek, dokunulan noktayı algılamasını sağlayacak bir sentetik deri.Projeyi bildiğimiz ince yapışkan kaplama kağıdı, ince yapışkan bakır (vitray gibi şeylerde kullanılan), ve anti-statik torbalarda kullanılan velostat ile gerçekleştirdim.Yapışkan bakır bantlar 8 sıra halinde ve 8 kolon halinde x,y koordinatlarını oluşturuyor.Aralarında bir velostat levha var ki bu çok ince ve esnek levha 2 bakır bant arasında resistive bir yüzey oluşturuyor.Velostat aynı zamanda flex sensörlerin yapımında kullanılır ve çok iyi netice verir.

Kullanılan Malzemeler

Malzemeler
Malzemeler
Arduino schematic
Arduino schematic
Touch Sensitive Skin
Touch Sensitive Skin

Projede Arduino Nano kullandım, nedeni ise hem ufak hem de fazladan 2 analog pini var. 8 digital ve 8 analog pin ile 8×8=64 dokunma noktası elde ettim. Sonuçta çok esnek ve ince, robotun her yerinde kullanılabilir bir sentetik deri elde ettim.Özellikle iş robotlarında kolun istenmeyen yerlere dokunması ve sakınılması böylece gerçeklenebilir. Arduino kodunu kendim yazdım. Hassasiyetin artırılması amaçlı 12 bit software ADC kullandım (24bite kadar kullanılabilir ancak yavaş oluyor). Sistemin çalışması Processing ile PC de görsellenebiliyor. Proje detayları için web siteme ve MyRobotLab bloguma bakabilirsiniz.

Arduino kodu ekte…

/*
  8x8 matrix read analog values of keypad at 12bit precision
  Reads analog inputs on A0-A5, prints the result to the serial monitor.
  Matrix outputs on digital pins 2-9 
  Dincer Hepguler 2015
  http://borsaci06.com
 */
//include the library
#include <eRCaGuy_analogReadXXbit.h>
 
//instantiate an object of this library class; call it "adc"
eRCaGuy_analogReadXXbit adc;
 
//Global constants
//const uint8_t pin = A0; //analogRead pin
//const uint8_t pin = A1; //analogRead pin
//const uint8_t pin = A2; //analogRead pin
//const uint8_t pin = A3; //analogRead pin
//const uint8_t pin = A4; //analogRead pin
//const uint8_t pin = A5; //analogRead pin
//constants required to determine the voltage at the pin; 
//BE SURE YOU USE THE CORRECT ONE OF THESE WHEN CALCULATING THE VOLTAGE FROM A READING! Take notes of how these constants are used below.
const float MAX_READING_10_bit = 1023.0;
const float MAX_READING_11_bit = 2046.0;
const float MAX_READING_12_bit = 4092.0;
const float MAX_READING_13_bit = 8184.0;
const float MAX_READING_14_bit = 16368.0;
const float MAX_READING_15_bit = 32736.0;
const float MAX_READING_16_bit = 65472.0;
 
// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(57600);
  //pin definitions
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(A3,INPUT);
  pinMode(A4,INPUT);
  pinMode(A5,INPUT);
  pinMode(A6,INPUT);
  pinMode(A7,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  //digitalWrite(2,HIGH);
  //digitalWrite(3,HIGH);
  //digitalWrite(4,HIGH);
  //digitalWrite(5,HIGH);
  //digitalWrite(6,HIGH);
  //digitalWrite(7,HIGH);
  //digitalWrite(8,HIGH);
  //digitalWrite(9,HIGH);
}
 
// the loop routine runs over and over again forever:
void loop() {
  //Local variables
  unsigned long num_samples=10;
  uint8_t bits_of_precision=12; //bits of precision for the ADC (Analog to Digital Converter)
  //float analog_reading; //the ADC reading
  float V; //Voltage calculated on the analog pin
  
  // read the input on analog pins
  float sensorValue0 = adc.analogReadXXbit(A0,bits_of_precision,num_samples);
  float sensorValue1 = adc.analogReadXXbit(A1,bits_of_precision,num_samples);
  float sensorValue2 = adc.analogReadXXbit(A2,bits_of_precision,num_samples);
  float sensorValue3 = adc.analogReadXXbit(A3,bits_of_precision,num_samples);
  float sensorValue4 = adc.analogReadXXbit(A4,bits_of_precision,num_samples);
  float sensorValue5 = adc.analogReadXXbit(A5,bits_of_precision,num_samples);
  float sensorValue6 = adc.analogReadXXbit(A4,bits_of_precision,num_samples);
  float sensorValue7 = adc.analogReadXXbit(A5,bits_of_precision,num_samples);
  // print out the values you read as CSV  
  
  Serial.print(sensorValue0);
  Serial.print(',');
  Serial.print(sensorValue1);
  Serial.print(',');
  Serial.print(sensorValue2);
  Serial.print(',');
  Serial.print(sensorValue3);
  Serial.print(',');
  Serial.print(sensorValue4);
  Serial.print(',');
  Serial.print(sensorValue5);
  Serial.print(',');
  Serial.print(sensorValue6);
  Serial.print(',');
  Serial.print(sensorValue7);
  Serial.println();
  delay(100);        // delay in between reads for stability
}

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Konuk Yazar
Daha Fazla Göster -  Arduino

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

RoboRace From Ege ’17

IEEE Ege Üniversitesi Öğrenci Kolu, Robotics and Automation Society tarafından ilk kez düz…