Arduino Tek Kablo Üzerinden Haberleşme

Başlatan veliusta, 30 Ocak 2015, 03:01:59

veliusta



Merhaba. ISIS'te çizdiğim gibi devresi.
Amaç: Haberleşme koparsa led sürekli sönük kalacak.

Arduino'da hangi komutu kullanacağımı bilmiyorum. Bende CCS C kullanarak yaptım.

ALICI:
boolean KONTROL=0;

void setup() {
  pinMode(9, INPUT);
  pinMode(3, OUTPUT);
}

void loop(){
  if(getch()=='V'){
   if(getch()=='E'){
    if(getch()=='L'){
     if(getch()=='I'){
      if(KONTROL==0){
      digitalWrite(3, HIGH);
    }
    else{
      KONTROL=1;
     digitalWrite(3, LOW);
    }
   }
  }
 }
}
}


VERİCİ:

void setup() {
  pinMode(9, OUTPUT);
}

void loop(){
  putc('V');
  putc('E');
  putc('L');
  putc('I');
}


<VirtualWire.h> veya <SoftwareSerial.h> kütüphaneleri kullanarak mı yapacağım. Nasıl yapabilirim? Yardım edin.

muhendisbey

1-wire diye aramalısın. Bunun en basit örneği DS18B20 ve ibutton (namı değer akbil) uygulamalarıdır. 2 arduino için de kullanabilirsin.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

Kabil ATICI

GND hatlarını da birleştirmen gerekir. 1 wire olayında gnd haricinde 1 kablo olduğunu tanımlar.
Tek yönlü haberleşme yapacaksan UART haberleşmesini de kullanabilirsin. 0. ve 1. bacaklar.
Örneğin UART ile ilgili örnek Arduino programın örnekleri içinde var. Türkçe karakter kullanma sıkıntı yapar.  sadece bu seri port aynı zamanda programlama icin kullanılır.
uart için verici örneği koyuyorum gerisin sen tamamla.

void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.print("VELI");
}
ambar7

hasankara

uart modülü ile de one wire (tek data hattı ile çift yönlü iletişim) yapabilirsin.

veliusta

#4
ambar7 hocam dediğinizi yaptım fakat RX veya TX bir kabloyu çıkartırsam haberleşme duruyor.
#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX
char deger;

void setup(){
  Serial.begin(9600);
  Haberlesme.begin(9600);
}

void loop(){
 if (Haberlesme.available()>0){
   deger = Haberlesme.read();
   Serial.print(deger);
  }
 }


mesaj birleştirme:: 30 Ocak 2015, 23:22:26

Verici kısmıda böyleydi;

#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX

void setup(){
  Haberlesme.begin(9600);
}

void loop(){
 Haberlesme.write("V");
 Haberlesme.write("E");
 Haberlesme.write("L");
 Haberlesme.write("I");
 }

Kabil ATICI

#5
Kablo fark etmiyorsa, orasını bilmem (GND hattının birbirine bağlı olduğunu varsayıyorum). Yalnız benim söylediğim doğrudan UART modülün olduğu yer.0 ve.1 bacaklar. donanım UART.
ambar7

veliusta

Alıntı yapılan: ambar7 - 30 Ocak 2015, 09:33:21
Kablo fark etmiyorsa, orasını bilmem (GND hattının birbirine bağlı olduğunu varsayıyorum). Yalnız benim söylediğim doğrudan UART modülün olduğu yer.0 ve.1 bacaklar. donanım UART.

Denedim aynı olmadı. İki kablo bağlı olmadığı sürece duruyor.

muhendisbey

UART'ta olsa SPI'da olsa 1-Wire da olsa referans değerin anlaşılması (siz bunu devrenin tamamlanması için olarak da düşünebilirsiniz. )için her zaman GND veya VCC bağlantısından en az birinin olması gereklidir. Genelde GND tercih edilir. Söylemeye gerek olmadığını düşünmüştüm.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

Kabil ATICI

Alıcı:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(3,OUTPUT); //3 nolu bacak üzerindeki LED
  digitalWrite(3,LOW);

}

void loop() {
  digitalWrite(3,LOW);
  // put your main code here, to run repeatedly:
   while (Serial.available() > 0) {
     if (Serial.read() == 'A') {
    digitalWrite(3,HIGH);  
    delay(100);
    }
}

}


verici:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("A");
}


bu sistem bu şekilde çalışıyor. sadece delay bölümünü ayarlama gerekiyor.

1. arduino                   2.arduino

RX---------------------TX
GND-------------------GND
ambar7

veliusta

#9
Evet oluyor fakat Tek Kablo kullanmam gerekiyor. IR Alıcı Vericilerini inceleyeceğim.

mesaj birleştirme:: 30 Ocak 2015, 11:01:43

Alıntı yapılan: muhendisbey - 30 Ocak 2015, 10:09:32
UART'ta olsa SPI'da olsa 1-Wire da olsa referans değerin anlaşılması (siz bunu devrenin tamamlanması için olarak da düşünebilirsiniz. )için her zaman GND veya VCC bağlantısından en az birinin olması gereklidir. Genelde GND tercih edilir. Söylemeye gerek olmadığını düşünmüştüm.

Ah evet doğru. O zaman optikuplör ile yapsaydık nasıl yapardık ?

Kabil ATICI

Tek kablo ile iletişim yapabileceğin tek olay radyo frekansı sistemleridir. Yoksa her halükarda 2 kablo gerekir ki biri GND'dir.

İllede tek kablo üzerinden iletişim diyorsan fiberoptik sistemleri deneyebilirsin.
ambar7

veliusta

#11


Peki böyle olur mu?

mesaj birleştirme:: 30 Ocak 2015, 11:21:15

Hocam birde şunu sorayım bu kodun anlamı ne " (Serial.available() > 0) "

polleme

Bu optokupler elemanı iki tel ile çalıştığından ve ayrılamadığından neticede iki kart arasında yine iki tel kullanılmış oluyor.

(Serial.available() > 0) komutu, seri portta bir data olup olmadığını kontrol etmek içindir, data varsa değerin sıfırdan büyük demektir, bu durumda olan değer okunur. Data yoksa okuma yapmanın da anlamı olmaz.

muhendisbey

@veliusta aslında istediğin şey parazitik beslemeli 1-wire. 2 arduino arasında kurabilir misin, kurarsan verim alabilir misin açıkçası hiç denemedim.
1 wire hattına pull up direnci bağlıyorsun (1k~10k) ve bu yöntemle haberleşiyorsun. 18B20 sensörünün bir özelliğiydi bu.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

baran123

Vericiden bir pininden high gondersen diger tatafta bir pinde baksan high mi diye degilse islem yapsan olmaz mi ?