LM35DZ датчик температуры

zugni
Offline
Зарегистрирован: 14.06.2015
Подскажите почему LM35 показывает всего 1 градус когда во всех примерах он показывает 28 градусов а вот в этом скетче не хочет помогите решить задачку(.
 
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
extern uint8_t term[];
extern uint8_t grad[];

#include <DS1302.h>
DS1302 rtc(2, 3, 4);
Time t;

#include <OneWire.h>
OneWire ds(8);

int x = 0;


void setup() {
  
  myOLED.begin();
  rtc.halt(false);
  //rtc.setDOW(WEDNESDAY);
 // rtc.setTime(15, 12, 0);
  //rtc.setDate(19, 8, 2015);
}

void loop()                     //ротации циклов 
{
  
  if (x >= 10) {
    temp();
    x=0;
  }
  else
  {
    watch();
  }
  x++;
}
void watch()                  //отображаeт время
{
  myOLED.setFont(RusFont);
  t = rtc.getTime();
  switch (t.dow)
  {
    case 1:     myOLED.print("GJYTLTKMYBR", CENTER, 0);    break;
    case 2:     myOLED.print("DNJHYBR", CENTER, 0);        break;
    case 3:     myOLED.print("CHTLF", CENTER, 0);          break;
    case 4:     myOLED.print("XTNDTHU", CENTER, 0);        break;
    case 5:     myOLED.print("GZNYBWF", CENTER, 0);        break;
    case 6:     myOLED.print("CE<<JNF", CENTER, 0);        break;
    case 7:     myOLED.print("DJCRHTCTYMT", CENTER, 0);    break;
  }
  String stringOne = rtc.getTimeStr();
  myOLED.setFont(MegaNumbers);
  myOLED.print(stringOne.substring(0, 2), 4, 12);
  myOLED.print("/", 51, 12);
  myOLED.print(stringOne.substring(3, 5), 75, 12);
  myOLED.setFont(RusFont);
  switch (t.mon)
  {
    case 1:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("ZYDFHZ", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 2:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("ATDHFKZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
    case 3:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("VFHNF", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 4:
      myOLED.print(String(t.date), 30, 57);
      myOLED.print("FGHTKZ", CENTER, 57);
      myOLED.print(String(t.year), 88, 57);
      break;
    case 5:
      myOLED.print(String(t.date), 36, 57);
      myOLED.print("VFZ", CENTER, 57);
      myOLED.print(String(t.year), 82, 57);
      break;
    case 6:
      myOLED.print(String(t.date), 35, 57);
      myOLED.print("B>YZ", CENTER, 57);
      myOLED.print(String(t.year), 81, 57);
      break;
    case 7:
      myOLED.print(String(t.date), 35, 57);
      myOLED.print("B>KZ", CENTER, 57);
      myOLED.print(String(t.year), 81, 57);
      break;
    case 8:
      myOLED.print(String(t.date), 28, 57);
      myOLED.print("FDUECNF", CENTER, 57);
      myOLED.print(String(t.year), 90, 57);
      break;
    case 9:
      myOLED.print(String(t.date), 24, 57);
      myOLED.print("CTYNZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 94, 57);
      break;
    case 10:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("JRNZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
    case 11:
      myOLED.print(String(t.date), 28, 57);
      myOLED.print("YJZ<HZ", CENTER, 57);
      myOLED.print(String(t.year), 90, 57);
      break;
    case 12:
      myOLED.print(String(t.date), 26, 57);
      myOLED.print("LTRF<HZ", CENTER, 57);
      myOLED.print(String(t.year), 92, 57);
      break;
  }
  myOLED.update();
  delay(450);
  myOLED.setFont(MegaNumbers);
  myOLED.print("-", 51, 12);
  myOLED.update();
  delay(450);
}

void temp() {                        //считывания и отображения температуры
  for(int x = 0; x < 10; x++){
  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  delay(150);
  ds.reset();
  ds.write(0xCC);
  ds.write(0xBE);
  data[0] = ds.read();
  data[1] = ds.read();
  int Temp = (data[1] << 8) + data[0];
  Temp = Temp >> 4;
  
  String stringOne = rtc.getTimeStr();
  
  myOLED.clrScr();
  myOLED.setFont(SmallFont);
  myOLED.print(stringOne.substring(0, 5), 98, 0);
  myOLED.print(rtc.getDateStr(), 0, 0);
  myOLED.setFont(RusFont);
  myOLED.print("NTVGTHFNEHF", CENTER, 57);
  myOLED.drawBitmap(4, 12, term, 19, 40);
  myOLED.setFont(MegaNumbers);
  myOLED.print(String(Temp), CENTER, 12);
  myOLED.drawBitmap(92, 12, grad, 13, 12); 
  myOLED.update();
  myOLED.clrScr();
  }
}

 

 

zugni
Offline
Зарегистрирован: 14.06.2015

 подключал так как на картинке

aleksey_ua
Offline
Зарегистрирован: 19.08.2015

Если не ошибаюсь, то тут вообще нет вычисления данных по LM35. LM35 отдает 10 mB на 1 градус Цельсия а это аналоговое значение которое нужно обработать, что бы потом вывести куда-то. 

bwn
Offline
Зарегистрирован: 25.08.2014

Я чет вообще нихрена не понял. Вы температуру от DS18B20 читаете, а подключаете аналоговый датчик. Его на аналоговый пин вешают. Смотрите здесь

zugni
Offline
Зарегистрирован: 14.06.2015

на аналоговом пине он вапще не показывает а анологе он 1 грд кажет 

 

bwn
Offline
Зарегистрирован: 25.08.2014

"почему LM35 показывает всего 1 градус когда во всех примерах он показывает 28 градусов а вот в этом скетче не хочет"

А может просто дохлый как в теме выше.

zugni
Offline
Зарегистрирован: 14.06.2015

bwn пишет:

"почему LM35 показывает всего 1 градус когда во всех примерах он показывает 28 градусов а вот в этом скетче не хочет"

А может просто дохлый как в теме выше.

нет не дохлый он же работает когда его подключаешь через порт смотришь 28 град как так может все таки в скетче нужно исправить?

bwn
Offline
Зарегистрирован: 25.08.2014

Еще раз повторяю, скетч для цифрового датчика серии DS18. (на вид они одинаковые), а у вас аналоговый. Ваш скетч его никак читать не может!!!!

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

http://www.instructables.com/id/ARDUINO-TEMPERATURE-SENSOR-LM35/

Пин свой поменяйте......
В сериал выведет- тогда разбирайтесь с выводом на ЖКИ.

http://arduino.ru/forum/apparatnye-voprosy/lm35dz-ne-rabotaet-s-arduino-...

zugni
Offline
Зарегистрирован: 14.06.2015

trembo пишет:

http://www.instructables.com/id/ARDUINO-TEMPERATURE-SENSOR-LM35/

Пин свой поменяйте......
В сериал выведет- тогда разбирайтесь с выводом на ЖКИ.

http://arduino.ru/forum/apparatnye-voprosy/lm35dz-ne-rabotaet-s-arduino-nano#new

 

Уже разобрался там всего то нужно было дабавить 4.7 ком резистор так что все работает, а за ссылку спс ))

bwn
Offline
Зарегистрирован: 25.08.2014

Вы таки хотите сказать, что LM35 заработал с кодом из первого поста после подключения резистора. Ню ню))))

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Может у него всё-таки Даллас.... раз заработал с резистором
Просто человек думает что ЛМ35?  Ему так кто-то сказал.....
Буквы на ТО92 мелкие, а лупы нет...... ;)

bwn
Offline
Зарегистрирован: 25.08.2014

Так ведь говорит, что на каких то примерах 28град казал, правда примеры и схему не приводит))))

zugni
Offline
Зарегистрирован: 14.06.2015

trembo пишет:

Может у него всё-таки Даллас.... раз заработал с резистором
Просто человек думает что ЛМ35?  Ему так кто-то сказал.....
Буквы на ТО92 мелкие, а лупы нет...... ;)

нет у меня LM35 а не dalas и почемуто он 20 сек работал а потом опять ( не работает странно

zugni
Offline
Зарегистрирован: 14.06.2015

вот такие примеры и схемы подключал только что разные датчики темп и все.

float temp;
int tempPin=0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  temp = analogRead(tempPin) * 5.0/1024 * 100;
  Serial.println(temp);
  delay(1000);
}

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Аналоговые входы находятся на правой сторонe платы и подписаны как: A0, A1, A2, A3, A4........
Так и пишем :  A0
И подключаем датчик  к A0

И входы А6 и А7  не работают как цифровые.
A6 and A7 are only inputs available to the mux in front of the ADC.  There is no digital hardware behind the pins.

И резистор для ЛМ35 не нужен: датчик выдаёт напряжение.
Может с ним не справится....


#define tempPin  A0
float temp;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  temp = analogRead(tempPin) * 5.0/1024 * 100;
  Serial.println(temp);
  delay(1000);
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

zugni пишет:

вот такие примеры и схемы подключал только что разные датчики темп и все.

float temp;
int tempPin=0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  temp = analogRead(tempPin) * 5.0/1024 * 100;
  Serial.println(temp);
  delay(1000);
}

 

Супер, теперь вы цифровой датчик читаете скетчем для LM35 (аналог). Вы хоть понимаете разницу между ними?

madalexfiesta
madalexfiesta аватар
Offline
Зарегистрирован: 30.03.2016

Откуда вы достаете такие громоздкие по памяти и скорости обработки  процессором скетчи?

long temp;
#define tempPin 1
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  temp = analogRead(tempPin); 
  long b =(long)((temp<<10)-((temp<<5)-(temp<<3)));
  int temp1=b>>11;
  long temp2=b%2048;
  temp2=((temp2<<7)-((temp2<<5)-(temp2<<2)))>>11;
  Serial.print("TEMPRATURE = ");
  Serial.print(temp1);
  Serial.print(",");
  Serial.print(temp2);
  Serial.print("*C");
  Serial.println();
  delay(1000);
//2 732 байта
}

Опорные 5 вольт. Писал и тестировал сам лично. Ставим + в рейтинг - это ваше спасибо! Пользуйтесь на здоровье.