Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

29 Haziran 2021 Salı

DS18B20 Dijital Sıcaklık Sensörü ve Arduino ile kullanımı

 DS18B20 Dijital Sıcaklık Sensörü ve Arduino ile kullanımı

Arduino projenize sıcaklık algılama eklemenin en kolay ve ucuz yollarından biri DS18B20 1-Wire Sıcaklık Sensörünü kullanmaktır. Bu sensörler oldukça hassastır ve çalışmak için hiçbir harici bileşene ihtiyaç duymaz. Yani, sadece birkaç bağlantı ve bazı Arduino kodlarıyla, anında sıcaklığı algılayacaksınız!

DS18B20 1-Wire Sıcaklık Sensörü



DS18B20, Dallas Semiconductor Corp tarafından üretilen 1-Wire arayüz Sıcaklık sensörüdür Benzersiz 1-Wire® Arabirimi bir mikrodenetleyici ile iki yönlü iletişim için tek dijital pin gerektirir.



Sensör genellikle iki form faktöründe gelir TO-92 paketinde gelen, tam olarak sıradan bir transistöre benziyor. Uzakta, su altında veya yer altında bir şeyi ölçmeniz gerektiğinde daha kullanışlı olabilecek su geçirmez prob stilinde diğeri.

DS18B20 Sıcaklık Sensörü Türleri
DS18B20 Sıcaklık Sensörü Türleri

DS18B20 sıcaklık sensörü oldukça hassastır ve çalışmak için hiçbir harici bileşene ihtiyaç duymaz. ± 0.5 ° C Doğruluk ile -55 ° C ile + 125 ° C arasındaki sıcaklıkları ölçebilir .

Sıcaklık sensörünün çözünürlüğü kullanıcı tarafından 9, 10, 11 veya 12 bit olarak yapılandırılabilir. Ancak, açılışta varsayılan çözünürlük 12 bittir (yani 0,0625 ° C hassasiyet).

Sensör, 3V ila 5.5V güç kaynağı ile çalıştırılabilir ve aktif sıcaklık dönüşümleri sırasında yalnızca 1mA tüketir.

İşte tam teknik özellikler:

Güç kaynağı3V ila 5.5V
Anlık tüketim1mA
Sıcaklık aralığı-55 ile 125 ° C
Doğruluk± 0,5 ° C
çözüm9 ila 12 bit (seçilebilir)
Dönüşüm Zamanı<750 ms

Tek Veriyolunda Çoklu DS18B20

DS18B20'nin en büyük avantajlarından biri, birden fazla DS18B20'nin aynı 1-Wire veri yolunda bir arada bulunabilmesidir. Her bir DS18B20, fabrikada yazılmış benzersiz bir 64 bit seri koduna sahip olduğundan , bunları birbirinden ayırt etmek daha kolaydır.

Bu özellik, geniş bir alana dağılmış birçok DS18B20'yi kontrol etmek istediğinizde büyük bir avantaj olabilir.

Birden fazla DS18B20 sıcaklık sensöründen sıcaklığı nasıl okuyacağınızı öğrenmek için lütfen bu eğiticiye göz atın.

DS18B20 Sensör Pin Çıkışı

Su Geçirmez Sıcaklık Sensörü Dahil DS18B20 Pinout

GND bir toprak pimidir.

DQ 1-Wire Data Bus, mikrodenetleyicideki dijital bir pime bağlanmalıdır.

VDD pin, sensör için 3,3 ila 5V arasında olabilen güç sağlar.

DS18B20 Sıcaklık Sensörünün Arduino ya Kablolanması

Teori yeter, Let's Go Practical! DS18B20'yi Arduino'ya bağlayalım.

Bağlantılar oldukça basit. VDD'yi Arduino'daki 5V çıkış pinine ve GND'yi toprağa bağlayarak başlayın.

Sonra kalan dijital sinyal pini DQ'yu arduino'daki dijital pin 2'ye bağlayın. Veri aktarımını sabit tutmak için sinyal ve güç pimi arasına 4,7k çekme direncini de eklemeniz gerekir (arduino üzerindeki dahili pull-up'lar çalışmıyor)

DS18B20'yi doğru yoldan almak için dikkatli olun. Yanlış bir şekilde koyarsanız, ısınır ve sonra kırılır.

DS18B20 Sıcaklık Sensörünün Arduino ya Kablolanması
DS18B20 Sıcaklık Sensörünün Arduino ya Kablolanması

DS18B20'nin su geçirmez versiyonunu kullanıyorsanız, Kırmızı şeridi 5V'ye bağlayın, Siyah toprağa bağlanır ve Sarı Şerit, arduino'daki dijital pin 2'ye giden verilerdir. Verilerden 5V'a bir 4.7K pullup direnci bağlamanız gerekir.

Su geçirmez DS18B20 Sıcaklık Sensörünü Arduino ya Kablolama
Su geçirmez DS18B20 Sıcaklık Sensörünü Arduino ya Kablolama

DS18B20 için Kitaplığı Yükleme

Dallas 1-Wire protokolü biraz karmaşıktır ve iletişimi ayrıştırmak için bir sürü kod gerektirir. Bu gereksiz karmaşıklığı gizlemek için DallasTemperature.h kitaplığını yükleyeceğiz, böylece sensörden sıcaklık okumaları almak için basit komutlar verebiliriz.

Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin  Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.

Arduino Kitaplığı Kurulumu - Arduino IDE'de Kitaplıkları Yönetmeyi Seçme

Aramanızı ' ds18b20 ' yazarak filtreleyin Birkaç giriş olmalı. Miles Burton tarafından yazılan DallasTemperature'ı arayın Bu girişe tıklayın ve ardından Yükle'yi seçin.

Dallas Sıcaklık Kitaplığını Arduino IDE'ye Yükleme

Bu Dallas Temperature kitaplığı, daha düşük seviyeli işlevleri işleyen donanıma özgü bir kitaplıktır. Yalnızca DS18B20 ile değil, herhangi bir tek kablolu cihazla iletişim kurmak için Tek Telli Kitaplık ile eşleştirilmesi gerekir. Bu kitaplığı da kurun.

Arduino IDE'de OneWire Kitaplığını Kurma

Arduino Kodu

Aşağıdaki taslak, DS18B20 Sıcaklık Sensöründen sıcaklık okumalarının nasıl okunacağı konusunda tam bir anlayış sağlayacaktır ve daha pratik deneyler ve projeler için temel oluşturabilir.

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into digital pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire device
OneWire oneWire(ONE_WIRE_BUS);	

// Pass oneWire reference to DallasTemperature library
DallasTemperature sensors(&oneWire);

void setup(void)
{
  sensors.begin();	// Start up the library
  Serial.begin(9600);
}

void loop(void)
{ 
  // Send the command to get temperatures
  sensors.requestTemperatures(); 

  //print the temperature in Celsius
  Serial.print("Temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print((char)176);//shows degrees character
  Serial.print("C  |  ");
  
  //print the temperature in Fahrenheit
  Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0);
  Serial.print((char)176);//shows degrees character
  Serial.println("F");
  
  delay(500);
}

Seri monitörde çıkışın nasıl göründüğü aşağıda açıklanmıştır.

Seri Monitörde DS18B20 Sıcaklık Sensörü Çıkışı

Kod Açıklaması:

Taslak, OneWire.h ve DallasTemperature.h kitaplıklarını dahil ederek ve sensörün sinyal piminin bağlı olduğu Arduino pinini bildirerek başlar.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

Daha sonra sensörün sinyal pinini yapıcısına geçirerek tek telli bir nesne oluşturuyoruz. Bu tek kablolu nesne, sadece DS18B20 ile değil, herhangi bir tek kablolu cihazla iletişim kurmamıza izin veriyor. DS18B20 sensörü ile iletişim kurabilmek için, DallasTemperature kütüphanesinin nesnesini oluşturmamız ve tek telli nesnenin referansını parametre olarak geçirmemiz gerekir.

OneWire oneWire(ONE_WIRE_BUS);	
DallasTemperature sensors(&oneWire);

DallasTemperature nesnesi oluşturulduktan sonra, sensörle etkileşim kurmak için aşağıdaki basit komutları verebiliriz.

  • begin() fonksiyon, veri yolunda bağlı sensörleri arar ve her biri için bit çözünürlüğü (12 bit) ayarlar.
  • requestTemperatures() işlevi, bir sıcaklık dönüşümü gerçekleştirmek için veri yolundaki tüm sensörlere komut gönderir.
  • getTempCByIndex(deviceIndex)işlevi sensörden sıcaklık okumasını okur ve döndürür. deviceIndexsensörün otobüsteki konumundan başka bir şey değildir. Otobüste yalnızca bir DS18B20 kullanıyorsanız, bunu 0'a ayarlayın.

DallasTemperature.h kitaplığındaki diğer yararlı işlevler

DallasTemperature nesnesiyle kullanabileceğiniz birkaç yararlı işlev vardır. Bunlardan birkaçı aşağıda listelenmiştir:

  • setResolution() işlevi, sırasıyla 0,5 ° C, 0,25 ° C, 0,125 ° C ve 0,0625 ° C artışlara karşılık gelen DS18B20'nin dahili Analogdan Dijitale dönüştürücüsünün çözünürlüğünü 9, 10, 11 veya 12 bit olarak ayarlar.
  • bool getWaitForConversion()işlevi waitForConversion bayrağının değerini döndürür. Bir sıcaklık dönüşümünün tamamlanıp tamamlanmadığını kontrol etmek istediğinizde faydalı olabilir.
  • setHighAlarmTemp()setLowAlarmTemp()işlevi, bir cihaz için dahili yüksek ve düşük sıcaklık alarmlarını Santigrat derece cinsinden ayarlar. Geçerli aralık -55 ila 125 ° C'dir
  • bool hasAlarm() Sıcaklık yüksek ve düşük alarm sıcaklığı ayarını aştığında cihaz bir alarm durumuna sahipse işlev doğru olur.

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

Su Seviyesi Sensörü Nasıl Çalışır ve Arduino

 Su Seviyesi Sensörü Nasıl Çalışır ve Arduino

Bu Su Seviyesi Sensörü ile bunu yapabilirsiniz!

Bu sensör, su seviyesini ölçmek, bir çukur su derinliğini izlemek, yağmuru tespit etmek veya sızıntıyı tespit etmek için kullanılabilir.

Donanıma Genel Bakış

Sensör, beşi güç izleri ve beşi duyu izleri olmak üzere on adet açık bakır izine sahiptir.

Bu izler, her iki güç izi arasında bir duyu izi olacak şekilde iç içe geçmiştir.

Genellikle bu izler birbirine bağlı değildir, ancak suya daldırıldığında su ile köprülenir.

su seviyesi sensörü donanımına genel bakış

Kart üzerinde, karta güç verildiğinde yanacak bir Güç LED'i vardır.

Su Seviyesi Sensörü Nasıl Çalışır?

Su seviye sensörünün çalışması oldukça basittir.

Açıktaki paralel iletken serileri , direnci su seviyesine göre değişen değişken bir direnç (tıpkı bir potansiyometre gibi) görevi görür.

Dirençteki değişiklik, sensörün tepesinden su yüzeyine olan mesafeye karşılık gelir.

su seviye sensörü working.gif

Direnç, suyun yüksekliği ile ters orantılıdır:

  • Sensör ne kadar çok suya daldırılırsa, daha iyi iletkenlik sağlar ve daha düşük bir dirençle sonuçlanır.
  • Sensör ne kadar az suya daldırılırsa, zayıf iletkenliğe neden olur ve daha yüksek dirençle sonuçlanır.

Sensör, dirence göre bir çıkış voltajı üretir ve bunu ölçerek su seviyesini belirleyebiliriz.

Su Seviyesi Sensörü Pin Çıkışı

Su seviyesi sensörünün kullanımı çok kolaydır ve bağlanması gereken sadece 3 pime sahiptir.

su seviyesi sensörü pin çıkışı

S (Sinyal) pin, Arduino'nuzdaki analog girişlerden birine bağlanacak olan analog bir çıkıştır.

+ (VCC)pin sensör için güç sağlar. Sensöre 3,3V - 5V arasında güç sağlanması önerilir. Lütfen analog çıkışın sensör için sağlanan voltaja bağlı olarak değişeceğini unutmayın.

- (GND) bir toprak bağlantısıdır.

Arduino ile Kablolama Su Seviye Sensörü

Su seviye sensörünü Arduino ya bağlayalım.

Önce sensöre güç sağlamanız gerekir. Bunun için modül üzerindeki + (VCC) pinini Arduino'daki 5V'a ve - (GND) pinini toprağa bağlayabilirsiniz.

Ancak, bu sensörlerle ilgili yaygın olarak bilinen bir sorun, nemli bir ortama maruz kaldıklarında kısa ömürlülükleridir . Proba uygulanan gücün olması, korozyon oranını sürekli olarak önemli ölçüde hızlandırır.

Bunun üstesinden gelmek için, sensöre sürekli güç sağlamamanızı, sadece okumaları alırken ona güç vermenizi öneririz.

Bunu başarmanın kolay bir yolu, VCC pinini bir Arduino'nun dijital pinine bağlamak ve ihtiyacınıza göre YÜKSEK veya DÜŞÜK olarak ayarlamaktır. Bu yüzden, VCC pinini bir Arduino'nun 7 numaralı dijital pinine bağlayacağız.

Son olarak, S (Sinyal) pinini Arduino'nuzdaki A0 ADC pinine bağlayın.

Aşağıdaki çizim kablolamayı göstermektedir.

arduino ile kablolama su seviye sensörü

Su Seviyesi Algılama Temel Örneği

Devre kurulduktan sonra, aşağıdaki programı Arduino'nuza yükleyin.

// Sensor pins
#define sensorPower 7
#define sensorPin A0

// Value for storing water level
int val = 0;

void setup() {
	// Set D7 as an OUTPUT
	pinMode(sensorPower, OUTPUT);
	
	// Set to LOW so no power flows through the sensor
	digitalWrite(sensorPower, LOW);
	
	Serial.begin(9600);
}

void loop() {
	//get the reading from the function below and print it
	int level = readSensor();
	
	Serial.print("Water level: ");
	Serial.println(level);
	
	delay(1000);
}

//This is a function used to get the reading
int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);							// wait 10 milliseconds
	val = analogRead(sensorPin);		// Read the analog value form sensor
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;							// send current reading
}

Çizim yüklendikten sonra, Arduino'dan çıktıyı görmek için bir Seri Monitör penceresi açın. Sensör hiçbir şeye dokunmadığında bir 0 değeri görmelisiniz. Suyu algıladığını görmek için bir bardak su alabilir ve sensörü yavaşça içine koyabilirsiniz.

su seviyesi sensörü çıkışı

Sensör tamamen suya daldırılacak şekilde tasarlanmamıştır, sadece PCB üzerindeki açıkta kalan izler suyla temas edecek şekilde monte etmeye dikkat edin.

Açıklama:

Çizim, sensörün + (VCC) ve S (sinyal) pinlerinin bağlı olduğu Arduino pinlerinin beyanı ile başlar.

#define sensorPower 7
#define sensorPin A0

Ardından, valmevcut su seviyesini depolayan bir değişken tanımlıyoruz .

int val = 0;

Şimdi Kurulum bölümünde, önce sensöre giden güç bağlantısını çıkış olarak açıklıyoruz, ardından düşük ayarlıyoruz, böylece başlangıçta sensörden güç akışı olmaz. Seri monitörü de kurduk.

pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
Serial.begin(9600);

Döngü bölümünde, readSensor()bir saniye aralıklarla tekrar tekrar fonksiyonu çağırıyoruz ve döndürülen değeri yazdırıyoruz.

Serial.print("Water level: ");
Serial.println(readSensor());
delay(1000);

readSensor()Fonksiyonu mevcut su seviyesini elde etmek için kullanılır. Sensörü AÇIK konuma getirir, 10 milisaniye bekler, analog değer form sensörünü okur, sensörü KAPATIR ve ardından analog değeri döndürür.

int readSensor() {
	digitalWrite(sensorPower, HIGH);
	delay(10);
	val = analogRead(sensorPin);
	digitalWrite(sensorPower, LOW);
	return val;
}

Kalibrasyon

Su seviyesi sensörünüzden doğru okumalar almak için, önce onu izlemeyi planladığınız belirli su türü için kalibre etmeniz önerilir.

Bildiğiniz gibi saf su iletken değildir. Aslında onu iletken yapan sudaki mineraller ve safsızlıklardır. Bu nedenle, kullandığınız su türüne bağlı olarak sensörünüz az çok hassas olabilir.

Verileri kaydetmeye veya olayları tetiklemeye başlamadan önce, sensörünüzden gerçekte hangi okumaları aldığınızı görmelisiniz.

Yukarıdaki çizimi kullanarak, sensör tamamen kuru olduğunda -vs- kısmen suya daldırıldığında -vs- tamamen daldırıldığında sensörünüzün hangi değerleri çıkardığına dikkat edin.

Örneğin, yukarıdaki aynı devreyi kullandığınızda, seri monitörde sensör kuru olduğunda (0) ve kısmen suya daldırıldığında (~ 420) ve tamamen suya daldığında seri monitörde aşağıdaki değerlere yakın olduğunu göreceksiniz. (~ 520).

su seviye sensörü kalibrasyonu

Bu test biraz deneme yanılma alabilir. Bu okumaları iyi bir şekilde ele aldığınızda, bir eylemi tetiklemeyi düşünüyorsanız, bunları eşik olarak kullanabilirsiniz Bir sonraki örnekte, tam da bunu yapacağız.

Su Seviyesi Algılama Projesi

Bir sonraki örneğimiz için, su seviyesine göre LED'leri yakacak portatif bir su seviyesi sensörü yapacağız.

Kablolama

Devreyi önceki örnekten kullanacağız. Bu sefer sadece birkaç LED eklememiz gerekiyor.

Üç LED'i # 2, # 3 ve # 4 ile 220Ω akım sınırlayıcı dirençlere dijital pinlere bağlayın.

Devrenizi aşağıda gösterildiği gibi bağlayın:

led göstergeler ile su seviyesinin belirlenmesi

Arduino Kodu

Devre kurulduktan sonra, aşağıdaki çizimi Arduino'nuza yükleyin.

Bu taslakta iki değişken tanımlanmıştır, yani. lowerThresholdve upperThresholdBu değişkenler eşik seviyelerimizi temsil eder.

Alt eşiğin altındaki herhangi bir şey kırmızı LED'in yanmasını tetikleyecektir. Üst eşiğin üzerindeki herhangi bir şey yeşil LED'i açacaktır. Bunların arasında herhangi bir şey sarı LED'i açacaktır.

/* Change these values based on your calibration values */
int lowerThreshold = 420;
int upperThreshold = 520;

// Sensor pins
#define sensorPower 7
#define sensorPin A0

// Value for storing water level
int val = 0;

// Declare pins to which LEDs are connected
int redLED = 2;
int yellowLED = 3;
int greenLED = 4;

void setup() {
	Serial.begin(9600);
	pinMode(sensorPower, OUTPUT);
	digitalWrite(sensorPower, LOW);
	
	// Set LED pins as an OUTPUT
	pinMode(redLED, OUTPUT);
	pinMode(yellowLED, OUTPUT);
	pinMode(greenLED, OUTPUT);

	// Initially turn off all LEDs
	digitalWrite(redLED, LOW);
	digitalWrite(yellowLED, LOW);

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.