10 Ağustos 2013 Cumartesi

Arduino UNO R3 - Arduino MEGA 2560 Arasında Basit bir İletişim Kurulması

Hamza Öztaş Share:
Image Hosted by ImageShack.us

Image Hosted by ImageShack.us

Image Hosted by ImageShack.us

Image Hosted by ImageShack.us
Image Hosted by ImageShack.us

Image Hosted by ImageShack.us

Image Hosted by ImageShack.us


Merhabalar bugünkü uygulamamız, Arduino UNO R3 ile Arduino MEGA 2560 arasında basit bir iletişim kurmaya yönelik bir çalışmadır. Daha önceki HC-SR04 mesafe ölçer sensorü ile led yakmak isimli yazmış olduğum uygulamanın bi  benzeri olacak, peki bunu ondan farkı nedir. Fark şudur, bi önceki yazımda mesafe ölçme işlemi ve LED yakma işlemi aynı kontrolcü üzerinde yani Arduino UNO R3 ile yapılmıştı. Bu uygulamada ise mesafe ölçme işlemi Arduino UNO R3 ile yapılıp LED yakma-söndürme işlemi Arduino MEGA 2560 ile yapılacaktır. Mantık olarak Arduino UNO'dan output alınıp, ArduinoMEGA 2560'a input olarak atanacaktır.
  • HC-SR04 mesafe sensorü kullanılmasının bir sebebi yoktur, farklı sensörler kullanılabilir. Buradaki amaç input - output 'u açıklamaktır.
  • HC-SR04 mesafe sensorü Arduino UNO R3' e bağlandı
  • Arduino UNO R3-Arduino MEGA 2560- HC-SR04 mesafe sensorünün +5V ve GND pinleri birleştirildi.
  • Aruino UNO yada MEGA 2560' dan birisini direkt pc üzerinde besleyebilirsiniz.
  • Arduino UNO R3'ün digital 2. pini output olarak ayarlandı
  • Arduino MEGA 2560'ın digital 52. pini input olarak ayarlandı
  • Arduino UNO R3'ün digital 2. pini ile MEGA 2560'ın digital 52. pini birleştirildi
  • Arduino UNO-Mesafe sensorü 30 cm- 40 cm arasında ölçüm yaptığında digital 2. pin çıkış verecek,
    • yani digital 2. pin lojik-1 olacaktır.
    • ölçülen mesafe 30 cm-40 cm dışında bir değerse 2. pin lojik 0 olacak
  • Arduİno MEGA 2560'ın 52. pini çıkış alacak
    • yani UNO'nun digital 2. pini lojik-0-1 olduğunda MEGA'nın digital 52. pinide lojik-0-1 olacak
    • sesnsorün o aralıkta ölçüm yaptığını Arduino MEGA' a bu şekilde iletmiş olduk ;)
  • Daha sonra Arduino MEGA 2560'ın digital 52. pini okuyacağız eğer lojik-1 ise digital 13. pine bağlı olan LED'i yak, değilse söndür.
  • Output için Arduino UNO'nun digital 2. pini, input için Arduino MEGA'nın digital 52. pini seçilmiştir,
    • istege bağlı olarak bu pinleri değiştirebilirsniz, sadece dikkat etmeniz gereken digital pin olacak, PWM pinlerini seçemeyiniz.
Peki neden böyle bir şey yapalım ki diyebilirsiniz, aynı kontrolcü üzerinde daha kolay bir şekilde yapmak varken neden iki farklı kontrolcü kullanalım. Buradaki amaç iki farklı kontrolcü arasında basit bir şekilde iletişim kurmaktır. Size daha önce başıma gelen bir  durumdan kısaca bahsedeyim. Bir projem için Arduino MEGA 2560 ve çok sayıda Servo motor ve çeşitli sensorler kullanıyordum, servo motor ve  sensörlerin çoğunu Arduino MEGA'ya bağladım ve bir kaç sensorüm için MEGA üzerinde boşta pin kalmadı fakat, servo motorların çalışma pozisyonları o sensore göre olacaktı ve o sensorü de motorlarla birlikte aynı kartta kullanmam gerekiyordu. Bu durumda başka bir kart, Arduino UNO kullanmam gerekti ve sensorün bilgilerini MEGA' a aktarmam gerekiyordu, bunun içinde Arduino UNO'dan output alarak bunuda Arduino MEGA'a input olarak atayarak iletişim kurmuş olduk. Sizde ileride buna benzer projelerinizde birden fazla kontrolcü kullandığınızda bu şekilde basit bir şekilde iletişim kurabilirsiniz.

Biraz karışık gibi görünüyor ama en basit şekilde anlatmaya çalıştım, umarım anlatabilmişimdir. sorularınız için sayfa altına mesaj bırakabilirsiniz.


Arduino Kod [ Arduino UNO R3 İçin ]

//http://www.depositericrobotic.com/

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin

int output = 2; // Arduino UNO ' nun digital 2. pini Arduino MEGA için çıkış olarak seçildi

long duration, distance; 

void setup(){
  
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(output, OUTPUT);
}
void loop() {
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);

 distance = duration/58.2;
 //Mesafe 30 cm ile 40 cm arasında ise çıkış ver

 if(distance >=30 && distance <=40){ 
   digitalWrite(output,HIGH);
   delay(100); 
 }
 else{
 digitalWrite(output,LOW);
 delay(100);
 }

 }


Arduino Kod [ Arduino MEGA 2560 İçin ]


//http://www.depositericrobotic.com/

int input = 52;//Arduino MEGA ' nun digital 52. pini Arduino MEGA için İNPUT olarak seçildi
int val;
int led   = 13;

void setup(){
  pinMode(input, INPUT);
  pinMode(led, OUTPUT );  
}

void loop() {

  val= digitalRead(input);
  if ( val == HIGH){
    digitalWrite(led, HIGH);
    delay(1000);
  }
  else {
  digitalWrite(led, LOW);  
  delay(1000);
  }
}

Tarafından Yayınlandı >> Hamza Öztaş

Hamza Öztaş'ı google plus'ta takip etmek için Google'a tıklayın;
Google+.

2
replies
  1. Teşekkürler faydalı ve faklı bir bakış açısı getirdiğiniz bir paylaşım olmuş. 6 bacaklı örümcek robot yapmaktayım fakat PWM çıkışları yetersiz olduğu için şimdilik 4 bacaklı yaptım(her bacakta 3 servo motor aktif). Bu yüzden benim şu anda üzerinde ilgilendiğim bir konu ve bu şekilde değilde bir PWM leri çoğaltacak bir kart arayışı içerisine girmiştim. Merak ettiğim konu ise şu, daha önce projenizde 18 servo yada daha fazla PWM e ihtiyaç duyup bunu uyguladığınızda aldığınız verim nasıldı, yani ben bağladığım motorlara 40 derece dön komutunu yolladığım zaman tüm motorların sapmasız aynı anda sonmesını istiyorum, bu noktada bir gecikme söz konusu mu ? Bunu merak ediyorum. Teşekkür ederim.

    YanıtlaSil
  2. 74hc595 incele sadece 1 tanesi ile bile 8 adet çıkış alabiliyorsunuz son araştırmama göre arduino uno r3 modeli ile bile 160 adet role kontrol edilebiliyor diye biliyorum
    link : http://www.mcmajan.com/mcmajanwpr/?p=2141

    YanıtlaSil

Get Updates in your Email
Complete the form below, and we'll send you our best of articles.

İletişim

© >> |
TOP