Raspberry Pico İle LM35 Sıcaklık Sensörü Kullanımı

Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
12,195
Artık habire raspberry pico konusu açar dururum.

İş dönüşü lm35 sıcaklık sensörünü iki dakkada ayarlayıp yatayım dedim ama saat 02:00 oldu hala doğru sonucu alamadım.

LM35 sensörü harici 5v'a bağladım.
Piconun ADC2 pininden veriyi okudum.
Gelen veri "66" Arduinoda da 66 geliyordu. Demek ki okumada sorunumuz yok.
Devamında arduinodaki değerleri picoya göre değiştirerek 5v için yazdığım 5000.0 değerini pico için 3300.0 yazdım.
ADC arduinoda 10 bitti 1024 yazıyorduk, picoda 12 bit 4096 yazdım.
Başarılı olamayınca bir kaç kombinasyon daha denedim ama bir türlü mantıklı bir değere ulaşamadım.

Kod:
// LM35 Sıcaklık Sensörü
  for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
  {
    lm35 = lm35 + analogRead(lm35Pin);
    delay(1);
  }
  lm35 = lm35 / 350;
  //Serial.println(lm35);
  /*sicaklik_gerilim = (5000.0 / 1023.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;*/
  sicaklik_gerilim = (3300.0 / 4096.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;
  Serial.println(sicaklik_gerilim);
  ///////////////////////////////////
 
Artık habire raspberry pico konusu açar dururum.

İş dönüşü lm35 sıcaklık sensörünü iki dakkada ayarlayıp yatayım dedim ama saat 02:00 oldu hala doğru sonucu alamadım.

LM35 sensörü harici 5v'a bağladım.
Piconun ADC2 pininden veriyi okudum.
Gelen veri "66" Arduinoda da 66 geliyordu. Demek ki okumada sorunumuz yok.
Devamında arduinodaki değerleri picoya göre değiştirerek 5v için yazdığım 5000.0 değerini pico için 3300.0 yazdım.
ADC arduinoda 10 bitti 1024 yazıyorduk, picoda 12 bit 4096 yazdım.
Başarılı olamayınca bir kaç kombinasyon daha denedim ama bir türlü mantıklı bir değere ulaşamadım.

Kod:
// LM35 Sıcaklık Sensörü
  for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 50 kez okuma yapma
  {
    lm35 = lm35 + analogRead(lm35Pin);
    delay(1);
  }
  lm35 = lm35 / 350;
  //Serial.println(lm35);
  /*sicaklik_gerilim = (5000.0 / 1023.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;*/
  sicaklik_gerilim = (3300.0 / 4096.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;
  Serial.println(sicaklik_gerilim);
  ///////////////////////////////////
gerilim yerine 3300.0 yazarsak olmaz bence
3.3 ile değiştirmek gerekiyor sanki
 
volts = (value * 3.3) / 1024

Googlede yaptığım aramada 1024e bölündüğünü gördüm ama bizim adcmiz 4095e kadar çıkabiliyor yine kafam karıştı
 
volts = (value * 3.3) / 1024

Googlede yaptığım aramada 1024e bölündüğünü gördüm ama bizim adcmiz 4095e kadar çıkabiliyor yine kafam karıştı
Ben bir yerde şöyle birşey buldum;
Adam yine raspberry pico kullanmış ama adc yi "65535" yazmış. Birde dc offset eklemiş.
Ben tabi yine bunu da denedim ama nafile. Şu evdeki termometreyi bir bulayımda onu referans alayım.

Kod:
# declare constants
DIODE_OFFSET_VOLTAGE = 0.929  # unit : volt
led_green=Pin(25,Pin.OUT)
led_red=Pin(15,Pin.OUT)

# declaration of pin objects
analogInputPin = ADC(28) # only one positional argument
                          # which is pin id
                          

# main logic of the program
while True:
    # read raw analog signal value
    analogValue = ADC.read_u16(analogInputPin)
    
    # calculate sensor output voltage from raw Analog value
    sensor_voltage = (analogValue / 65535) * 3.3 # unit : Volt
    
    # convert to milli volts
    sensor_voltage = (sensor_voltage - DIODE_OFFSET_VOLTAGE ) * 1000 # unit : milli volt
    
    # calculate temperature from sensor voltage (in millivolt)
    # from datasheet
    # 1 degree celcius = 10 milli volt
        
    temperature = (sensor_voltage/10 ) # unit : degree celcius
 
Ben bir yerde şöyle birşey buldum;
Adam yine raspberry pico kullanmış ama adc yi "65535" yazmış. Birde dc offset eklemiş.
Ben tabi yine bunu da denedim ama nafile. Şu evdeki termometreyi bir bulayımda onu referans alayım.

Kod:
# declare constants
DIODE_OFFSET_VOLTAGE = 0.929  # unit : volt
led_green=Pin(25,Pin.OUT)
led_red=Pin(15,Pin.OUT)

# declaration of pin objects
analogInputPin = ADC(28) # only one positional argument
                          # which is pin id
                         

# main logic of the program
while True:
    # read raw analog signal value
    analogValue = ADC.read_u16(analogInputPin)
   
    # calculate sensor output voltage from raw Analog value
    sensor_voltage = (analogValue / 65535) * 3.3 # unit : Volt
   
    # convert to milli volts
    sensor_voltage = (sensor_voltage - DIODE_OFFSET_VOLTAGE ) * 1000 # unit : milli volt
   
    # calculate temperature from sensor voltage (in millivolt)
    # from datasheet
    # 1 degree celcius = 10 milli volt
       
    temperature = (sensor_voltage/10 ) # unit : degree celcius
ya bizim atladığımız birşey var. analog pini ınput olarak seçiyorsun değil mi?
 
ya bizim atladığımız birşey var. analog pini ınput olarak seçiyorsun değil mi?
analogRead(); olarak okuyorum. Bunun haricinde bir yerde input yapılmıyor diye biliyorum.
Şimdi direk arduinonun kodları ile denedim 1024 bit 5v da. 30 derece gösteriyor.
1024 bit 3.3v da denedim 0 derece gösteriyor. dur birde 3300 de deneyeyim yine.
 
Şu şekilde 20 derece almayı başardım. Bu reel değere oldukça yakın ama yinede evin içinin 20 derece olduğunu sanmıyorum. En fazla 15 derecedir.

Kod:
sicaklik_gerilim = (3300.0 / 1023.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;
 
Şu şekilde 20 derece almayı başardım. Bu reel değere oldukça yakın ama yinede evin içinin 20 derece olduğunu sanmıyorum. En fazla 15 derecedir.

Kod:
sicaklik_gerilim = (3300.0 / 1023.0) * lm35;
  sicaklik = sicaklik_gerilim / 10.0;
LM35'imi arıyorum aldığıma eminim ama bulamıyorum.
setup ksımına
pinMode(x, INPUT); yap analog pini giriş olarak seçelim
 
LM35'imi arıyorum aldığıma eminim ama bulamıyorum.
setup ksımına
pinMode(x, INPUT); yap analog pini giriş olarak seçelim
Yaptım hiç farketmedi.
Evin içi şuanda 16 derece. Bizim bulduğumuz 20.
Arada 4 derece fark var. Rakamlar ile oynayıp tutturmak kolay ama olması gereken gibi yapmak lazım.

20220323_102735.jpg
 
Yaptım hiç farketmedi.
Evin içi şuanda 16 derece. Bizim bulduğumuz 20.
Arada 4 derece fark var. Rakamlar ile oynayıp tutturmak kolay ama olması gereken gibi yapmak lazım.

16274 eklentisine bak
olsun biz nizama uyalım
giriş yapıyorsak giriş yazalım.
çıkış yapıyorsak çıkış yazalım.

elinle lm35i tutunca okuduğun ısı artıyor'mu
 
IMAGE2.jpg

programda sadece çıkış seçiyorum
hiçbir delay olmadan hıgh low yapınca
594.7khz bir çıkış aldım
 
osiloskop probum olmadığı için bu kadar dağınık bir sinyal okuduğumu düşünüyorum
 
LM35 den 67 bit alıyorum.
LM35'İ 5v a bağladığım için 5000.0 rakamını kullanıyorum.
Burada bizi etkileyen ADC nin bit değeri. 1024 yaparsak 32 derece, 4096 yaparsak 8 derece alıyoruz.
Yani aslında ADC yi 2048 bit alsak yaklaşık olarak doğru değeri tutturuyoruz.
ADC yi osiloskop ile ölçüp net olarak kaç bit olduğunu anlama şansımız var mı?
 
LM35 den 67 bit alıyorum.
LM35'İ 5v a bağladığım için 5000.0 rakamını kullanıyorum.
Burada bizi etkileyen ADC nin bit değeri. 1024 yaparsak 32 derece, 4096 yaparsak 8 derece alıyoruz.
Yani aslında ADC yi 2048 bit alsak yaklaşık olarak doğru değeri tutturuyoruz.
ADC yi osiloskop ile ölçüp net olarak kaç bit olduğunu anlama şansımız var mı?
bu beni aşar eğer @taydin abi müsaitse bize anlatabilir mi bunu bende bilmiyorum
 

Forum istatistikleri

Konular
7,234
Mesajlar
122,413
Üyeler
2,923
Son üye
birisim

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top