LM35DZ датчик температуры
- Войдите на сайт для отправки комментариев
Ср, 19/08/2015 - 15:07
Подскажите почему 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();
}
}
подключал так как на картинке
Если не ошибаюсь, то тут вообще нет вычисления данных по LM35. LM35 отдает 10 mB на 1 градус Цельсия а это аналоговое значение которое нужно обработать, что бы потом вывести куда-то.
Я чет вообще нихрена не понял. Вы температуру от DS18B20 читаете, а подключаете аналоговый датчик. Его на аналоговый пин вешают. Смотрите здесь
на аналоговом пине он вапще не показывает а анологе он 1 грд кажет
"почему LM35 показывает всего 1 градус когда во всех примерах он показывает 28 градусов а вот в этом скетче не хочет"
А может просто дохлый как в теме выше.
"почему LM35 показывает всего 1 градус когда во всех примерах он показывает 28 градусов а вот в этом скетче не хочет"
А может просто дохлый как в теме выше.
нет не дохлый он же работает когда его подключаешь через порт смотришь 28 град как так может все таки в скетче нужно исправить?
Еще раз повторяю, скетч для цифрового датчика серии DS18. (на вид они одинаковые), а у вас аналоговый. Ваш скетч его никак читать не может!!!!
http://www.instructables.com/id/ARDUINO-TEMPERATURE-SENSOR-LM35/
Пин свой поменяйте......
В сериал выведет- тогда разбирайтесь с выводом на ЖКИ.
http://arduino.ru/forum/apparatnye-voprosy/lm35dz-ne-rabotaet-s-arduino-...
http://www.instructables.com/id/ARDUINO-TEMPERATURE-SENSOR-LM35/
Пин свой поменяйте......
В сериал выведет- тогда разбирайтесь с выводом на ЖКИ.
http://arduino.ru/forum/apparatnye-voprosy/lm35dz-ne-rabotaet-s-arduino-nano#new
Уже разобрался там всего то нужно было дабавить 4.7 ком резистор так что все работает, а за ссылку спс ))
Вы таки хотите сказать, что LM35 заработал с кодом из первого поста после подключения резистора. Ню ню))))
Может у него всё-таки Даллас.... раз заработал с резистором
Просто человек думает что ЛМ35? Ему так кто-то сказал.....
Буквы на ТО92 мелкие, а лупы нет...... ;)
Так ведь говорит, что на каких то примерах 28град казал, правда примеры и схему не приводит))))
Может у него всё-таки Даллас.... раз заработал с резистором
Просто человек думает что ЛМ35? Ему так кто-то сказал.....
Буквы на ТО92 мелкие, а лупы нет...... ;)
нет у меня LM35 а не dalas и почемуто он 20 сек работал а потом опять ( не работает странно
вот такие примеры и схемы подключал только что разные датчики темп и все.
float temp; int tempPin=0; void setup() { Serial.begin(9600); } void loop() { temp = analogRead(tempPin) * 5.0/1024 * 100; Serial.println(temp); delay(1000); }Аналоговые входы находятся на правой сторон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); }вот такие примеры и схемы подключал только что разные датчики темп и все.
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 (аналог). Вы хоть понимаете разницу между ними?
Откуда вы достаете такие громоздкие по памяти и скорости обработки процессором скетчи?
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 вольт. Писал и тестировал сам лично. Ставим + в рейтинг - это ваше спасибо! Пользуйтесь на здоровье.