Arduino ile bluetooth'lu voltmetre

Zafer ŞAHİN

Mahna Mahna ...
Katılım
29 Ağu 2013
Mesajlar
1,313
Tepkime puanı
2,194
Yaş
48
Konum
İstanbul
İlgi Alanı
Multikopter
Bu yazıda, bluetooth üzerinden ölçüm sonuçlarını gönderen ve arduino ile yapılan basit bir DC voltmetre yapıyor olacağız. Aslında sadece bluetooth üzerinden değil, arduino'nun bağlı olduğu (USB üzerinden)seri port üzerinden de aynı sonuçları gönderiyor olacak. Bluetooth adaptörü ve herhangi bir terminal emulatörü vasıtası ile bu değerleri okuyabilirsiniz.

- PC için çeşitli terminal emulatorleri
* Putty
* Hyperterm
* Terraterm

- Android için bluetooth destekli terminal emulatoru
* Blueterm

Aslında voltajı okumak için ekran da eklemeyi düşündüm ama 10 TL'ye voltmetre satılıyorken çok da mantıklı gelmedi, ben de biraz otantik bir şey yapayım dedim.

Bu RESMİ görmek için izniniz yok. Giriş yap veya üye ol


Kod:
// Voltaj olcer - 0.11

#include <SoftwareSerial.h>

SoftwareSerial btSerial(7, :coolxf:; // Yazilimsal seri port nesnesini sıra ile RX, TX pinleri ile olustur

int voltagePin = 2;  // Analog voltaj olcum pini
int vRefVal = 0;  // Referans voltaj degeri
float vTruVal = 0;  // Gercek voltaj degeri

void setup()  
{
  Serial.begin(9600); // Donanımsal seri portu 9600 Baud hizinda baslat
  btSerial.begin(9600); // Yazilimsal seri portu 9600 Baud hizinda baslat
}

void loop() {
  vRefVal = analogRead(voltagePin); // Voltaj pinini oku
  vRefVal = map(vRefVal, 0, 1023, 0, 5000); // Okunan 0-1023 arasındaki analog degeri, 0 - 5000 milivolt ile eslestir.
  vTruVal = ((float)vRefVal * 16) / 1000 ; //Bulunan ve milivolt cinsinden voltaj degerini, voltaj bolucudeki 16 kat degerine gore ayarla
  Serial.print(vTruVal); //Voltaj degerini seri port uzerinden bilgisayara gonder
  btSerial.print(vTruVal); //Voltaj degerini yazılımsal seri port uzerinden bluetooth a gonder
  Serial.println(" V"); // Voltaj degerinin sonuna "V" volt ibaresini ekle ve seri port uzerinden bilgisayara gonder
  btSerial.println(" V"); // Voltaj degerinin sonuna "V" volt ibaresini ekle ve yazılımsal seri port uzerinden bluetooth a gonder
  delay(100); // Voltajın oturması ve seri porta cok yuklenilmemesi icin 100 milisaniye bekle
}
 
Arduino ile bluetooth'lu voltmetre

Zafer bey ellerinize saglik Bluetooth uygulamamizda olmus oldu :bravo:

Fakat benim anlamadigim goruntuleme tarafi. Gerci PC emulator yukleyip biraz kurculamam lazim. Anlamadim nokta bluetooth gonderdigi deger nasil ekrana yansiyacak. Herhalde emulator de Bluetooth gelen degerleri surada goster seklinde bir ayar mi yapiliyor. Bir de birden fazla degisken olup olmadigini nasil biliyor :rolleyes: neyse ben bir kurup, kurcalayayim biraz :D
 
Arduino ile bluetooth'lu voltmetre

Şimdi tekrar bir mesaja baktığım zaman bir çok noktayı atladığımı farkettim :). Öncelikle bu devrenin maksimum 80V DC ölçebildiğini belirtmemişim. Ters kutuplama koruması bulunmuyor fakat gerilim bölücü dirençler nedeni ile 0,5mA ölçüm akımının zarar vereceğini pek zannetmiyorum. Ama gene de pil kutuplarına dikkat etmekte fayda var.

Logları okuma konusunda ise durum şu şekilde. Arduino'nun kendini bir COM Port ile ilişkilendirdiğini belirtmiştim.


Benzer bir şekilde bilgisayarınız ile eşleştirdiğiniz bluetooth adaptörleri de bilgisayar üzeinde kendini bir seri port ile eşleştirir.

[attachimg=1]

Putty veya herhangi bir terminal emulatoru ile bu seri porta bağlanıldığı zaman(doğru BAUD hızını da seçerek), bu seri port üzerinden gelen tüm dataları okuyabilirsiniz. Hatta Arduino IDE'nin "Serial Monitor" özelliği de aynı görevi görmektedir.

[attachimg=2]

Bizim devremizde ise durum şu şekilde:

- Arduino kodu, voltajı ölçerek hem bluetooth adaptörüne, hem de arduinonun bağlı olduğu seri porta ilgili voltaj değerini yollar.
- Arduinonun bağlı olduğu seri portu Arduino IDE'nin "Serial Monitor" özelliğini kullanarak izlediğimizde, ekrana 100 milisaniyede bir, okunan voltaj değerinin basıldığını görürüz.
- Gene benzer şekilde, Putty ile bluetooth'un ilişkilendirildiği seri portu izlersek, ekrana 100 milisaniyede bir, okunan voltaj değerinin basıldığını görürüz.

Şu videoda benzer bir mantıkla Arduino'dan gelen ısı ölçümü değeri Putty ile görüntüleniyor. Ama ben o videodakinden biraz faklı olarak, her okuduğum değeri bir alt satıra bastırıyorum.

Bu VIDEOYU görmek için izniniz yok. Giriş yap veya üye ol
 

Ekli dosyalar

  • bt-serial.png
    bt-serial.png
    36.1 KB · Görülme: 179
  • putty-serial.png
    putty-serial.png
    11.9 KB · Görülme: 180
Arduino ile bluetooth'lu voltmetre

Bu Arduino projelerini anlamaya çalışıyorum bugünlerde ama anlıyamıyorum.:laugh:

Elinize sağlık azminize hayranım valla. :thumbup:
 
Arduino ile bluetooth'lu voltmetre

Her zamanki gibi cok hizli ve harikasiniz Zafer bey :bravo: Ben programi PC kurup kurcalayip anlayinca kadar ilave bilgiler ile olayi acikliga kavusturmussunuz, ellerinize saglik :halay: :RCKolik:
 
Arduino ile bluetooth'lu voltmetre

Sümer Yamaner' Alıntı:
Adam bildiğin ayaklı Arduino kılavuzu... :)
Aynen dedigin gibi abi. Diger forumdan Zafer beyi nerede ise 3 yildir taniyorum ama bu ozelligini bizlerden iyi gizlemiş bunca senedir :laugh: :D
 
Arduino ile bluetooth'lu voltmetre

Şimdi bu ardunun yanına bir de sd kart shield eklediğimi ve ardunun sonuçları o sd karta gönderdiğini, benim de bunu helikopterin üstünde bırakıp sonradan uçuş sırasındaki voltajı incelediğimi düşündüm, çok hoşuma gitti :D Ancak kafama takılan, 12s pilin iki kutbu arasında duran totalde 160k direncin kızarıp kızarmayacağı. Bi sıkıntı olur mu??

Edit: Bir de bu kodu delay'siz nasıl yapabiliriz??
 
Arduino ile bluetooth'lu voltmetre

Emre Kaman' Alıntı:
Şimdi bu ardunun yanına bir de sd kart shield eklediğimi ve ardunun sonuçları o sd karta gönderdiğini, benim de bunu helikopterin üstünde bırakıp sonradan uçuş sırasındaki voltajı incelediğimi düşündüm, çok hoşuma gitti :D Ancak kafama takılan, 12s pilin iki kutbu arasında duran totalde 160k direncin kızarıp kızarmayacağı. Bi sıkıntı olur mu??

Edit: Bir de bu kodu delay'siz nasıl yapabiliriz??

12S = 50,4V ve R=160000 Ohm

WATT = (Volt x Volt) / R => Direnç üzerine düşen güç 16 miliwatt olacaktır. Ki kilosu 2 - 3 liraya satılan :) dirençler dahi 250 miliwatt dayanım değerine sahiptir.

"delay" sız kod için, "BlinkWithoutDelay" örneği ya da "Timer" veya "SimpleTimer" kütüphaneleri gayet faydalı olur...




Ha ben yapılmışını isterim dersen, bir lehime bakar :D. Şaka bir yana, delay'sız versiyonu fırsat bulunca yazarım ...
 
Arduino ile bluetooth'lu voltmetre

Blink without delay'i led flaşörde kullanmak istedim ama hep sabit aralık istediğim efekti vermiyor. Şunun delaysizini yapmak istiyorum

Kod:
void setup(){
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(13, HIGH);
  delay(150);
  digitalWrite(13,LOW);
  delay(200);
  digitalWrite(13, HIGH);
  delay(150);
  digitalWrite(13,LOW);
  delay(1000);
}

Timer konusunu daha işlemedik :D (Daha dün başladım) Bu ve bunun gibi küçük bir-iki parça görevi yaptırmak istiyorum, o yüzden delay kullanmamak niyetindeyim. Yardımları bekliyorum :D (Sıkışınca mesaj atarım :D)
 
Arduino ile bluetooth'lu voltmetre

Zafer Bey hemen bir soru...
Şimdi Blink Without Delay linkini inceledim. "loop" içinde hem herhangi bir kod çalışacak hem de timer okunup eğer istenilen interval geçtiyse LED durumu ters çevrilecek. Buraya kadar anladım. Ama...
Ya benim eşzamanlı çalışacak kodum öyle abartılı dallanmalar, if'ler, while'lar içeriyorsa ve orası tamamlanıncaya kadar LED için öngördüğüm yanıp sönme süresi aşılırsa ne olacak? Ya da bu fazlaca bir paranoya mıdır?
 
Arduino ile bluetooth'lu voltmetre

Sümer Yamaner' Alıntı:
Zafer Bey hemen bir soru...
Şimdi Blink Without Delay linkini inceledim. "loop" içinde hem herhangi bir kod çalışacak hem de timer okunup eğer istenilen interval geçtiyse LED durumu ters çevrilecek. Buraya kadar anladım. Ama...
Ya benim eşzamanlı çalışacak kodum öyle abartılı dallanmalar, if'ler, while'lar içeriyorsa ve orası tamamlanıncaya kadar LED için öngördüğüm yanıp sönme süresi aşılırsa ne olacak? Ya da bu fazlaca bir paranoya mıdır?
Konu LED ise sorun değil, konu servonun 1000 - 2000 mikrosaniye arasında ve kesin olması gereken HIGH süresi ise sorun :).
 
Arduino ile bluetooth'lu voltmetre

Kodun delay'siz halini sanırım becerebildim. Bir kontrol ediniz lütfen :D (Nedense çok eğleniyorum :lollol: )

Kod:
// Voltaj olcer - 0.11

#include <Event.h>
#include <Timer.h>
#include <SoftwareSerial.h>

SoftwareSerial btSerial(7, :coolxf:; // Yazilimsal seri port nesnesini sıra ile RX, TX pinleri ile olustur
Timer t;                       // Timer fonksiyonunu dahil ettik

int voltagePin = 2;  // Analog voltaj olcum pini
int vRefVal = 0;  // Referans voltaj degeri
float vTruVal = 0;  // Gercek voltaj degeri

void setup()  
{
  Serial.begin(9600); // Donanımsal seri portu 9600 Baud hizinda baslat
  btSerial.begin(9600); // Yazilimsal seri portu 9600 Baud hizinda baslat
  t.every(100, takeReading); // her 100ms'de bir okuma alacak
}

void loop() {
  t.update();
  vRefVal = analogRead(voltagePin); // Voltaj pinini oku
  vRefVal = map(vRefVal, 0, 1023, 0, 5000); // Okunan 0-1023 arasındaki analog degeri, 0 - 5000 milivolt ile eslestir.
  vTruVal = ((float)vRefVal * 16) / 1000 ; //Bulunan ve milivolt cinsinden voltaj degerini, voltaj bolucudeki 16 kat degerine gore ayarla
  }
  void takeReading() {   //100ms'de bir okuduğu değeri yazacak
  Serial.print(vTruVal); //Voltaj degerini seri port uzerinden bilgisayara gonder
  btSerial.print(vTruVal); //Voltaj degerini yazılımsal seri port uzerinden bluetooth a gonder
  Serial.println(" V"); // Voltaj degerinin sonuna "V" volt ibaresini ekle ve seri port uzerinden bilgisayara gonder
  btSerial.println(" V"); // Voltaj degerinin sonuna "V" volt ibaresini ekle ve yazılımsal seri port uzerinden bluetooth a gonder

}
 
Arduino ile bluetooth'lu voltmetre

Emre Kaman' Alıntı:
Nedense çok eğleniyorum :lollol:

Bu konulara hala Fransız olan, ama gördükçe hoşuna giden onlarca kişi vardır forumda :laugh: Anlamasak bile bizler de eğleniyoruz...

Ignorance is bliss ;D