Re: Цифровой датчик температуры на Carduino.
отлично, мне более и не надо) посмотрим как будут вести себя датчики, ведь у меня их 4 шт и весят параллельно
Re: Цифровой датчик температуры на Carduino.
Цитата:
Сообщение от
SBorovkov
Ниже приведенный код делает следующее: берет температуру с каждого из датчиков ds18
B20, выводит ее на LCD экран и печатает инфу в UART.
Мог маленько накосячить, ибо из сурсов выкидывал еще обработку сервы.
Стоит отметить, что на arduino.cc есть несколько библиотек для однопроводной связи и не все из них работают с большим количеством параллельно подключенных датчиков.
lcd4bit же использован потому, что штатная библиотека по-моему не умеет работать с более чем однострочными экранами.
Код:
#include <LCD4Bit.h>
#include <OneWire.h>
#include "WProgram.h"
void setup(void);
void loop(void);
LCD4Bit lcd = LCD4Bit(2); // две строки. Пины описаны в LCD4Bit.cpp.
OneWire ds(3); // on pin 3
void setup(void) {
pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat
lcd.init();
Serial.begin(9600);
}
void loop(void)
{
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp;
if ( !ds.search(addr)) {
//Serial.print("No more addresses.\n");
ds.reset_search();
return;
}
Serial.print("R="); //R=28 Not sure what this is
for( i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
Serial.print(" ");
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if ( addr[0] != 0x28) {
Serial.print("Device is not a DS18S20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print("P=");
Serial.print(present,HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature
Temp=Temp;//divide by 16 to get pure celcius readout
Serial.print("T=");//output the temperature to serial port
Serial.print(Temp/16);
Serial.print(".");
Serial.print(((Temp%16)*100)/16);
Serial.print(" ");
Serial.print(" CRC=");
Serial.print( OneWire::crc8( data, 8), HEX);
Serial.println();
lcd.clear();
for ( i = 0; i < 8; i++) {
if (addr[i]<16) {
lcd.print("0");
}
lcd.print(addr[i],HEX);
}
lcd.cursorTo(2, 0); //line=2, x=0.
lcd.print("Temp=");
lcd.print(Temp/16,DEC);
lcd.print(".");
lcd.print(((Temp%16)*100)/16,DEC);
lcd.print("S ");
}
по поводу библиотеки "LCD4Bit.h": читал на офф сайте, то она устаревшая и лучше использовать "LiquidCrystal.h". Недавно написал один проект так он тормозит ужасно, думаю что именно из-за нее так получается. на днях попробую передать под стандартную библиотеку, как сделаю - отпишусь
Re: Цифровой датчик температуры на Carduino.
Подскажите, как и на что нужно(?) крепить датчики, например для правильного замера температуры воздуха? В моем конкретном случае интересует температура в сухом террариуме размером 100х50х50см. Есть теплый и холодный углы (в теплом лампа накаливания). Повесил оба датчика на высоте в 2-3 сантиметра от грунта. Показания были 28 и 26 градуов.
Что бы не был оффотпик давайте будем считать, что замеряем температуру в салоне :)
Re: Цифровой датчик температуры на Carduino.
Датчики повесь там где нужно измерять температуру.
А ты дал время датчикам для того что бы они полностью уравнялись с температурой окружающей среды?
Re: Цифровой датчик температуры на Carduino.
Время опроса n датчиков DS1821 ~7 мс (периодичность опроса 1с) и практически не зависит от количества (подключены к портам параллельно). Но на такое подключение расходуются порты. Поэтому рассматриваю возможность использования DS18x20. Но поскольку при опросе этих датчиков используется уникальный 64 битный адрес, боюсь время опроса существенно возрастёт (актуально для разработок с использованием нескольких прерываний). Кто нибудь замерял минимальное время опроса датчика(ов) DS18x20? Разве необходимо каждый раз программировать режим работы и запуск измерения!? В DS1821 есть режим непрерывного измерения, т.е. раз запустил и считывай, пока не решил изменить режим работы.
Re: Цифровой датчик температуры на Carduino.
Из-за писецовой задержки опроса 18b20 был вынужден от них отказаться совсем.
Возможно, что-то криво было написано, но перепробовав кучу вариантов, плюнул.
Перешел на LM335. Но у меня задачи элементарные.
Re: Цифровой датчик температуры на Carduino.
Цитата:
Сообщение от
Chip
Удобство цифрового датчика в том , что его показания не зависят от изменения напряжения питания и прочих парамметров, не требует калибровки, прост в реализации и повторяем.
Подключаем датчик DS18B20 к
Carduino nano(Arduino) по приведенной ниже схеме
Вложение 5459
Без библиотеки
DallasTemperature компилироватся не будет.
Скачиваем и распаковываем
Библиотеку, потом кладем ее в папку
\arduino-0018\libraries\DallasTemperature
Скачать программу для PC.
Код для Carduino Nano.
PHP код:
#include <DallasTemperature.h>
DallasTemperature tempSensor;
void setup(void)
{
Serial.begin(115200);
tempSensor.begin(12); //Вешаем Датчик на 12 порт
}
void loop(void)
{
switch(tempSensor.isValid())
{
case 1:
Serial.println("Invalid CRC");
tempSensor.reset(); // сбросить девайс
return;
case 2:
Serial.println("Invalid device");
tempSensor.reset(); // сбросить девайс
return;
}
Serial.print(tempSensor.getTemperature()); //отправить температуру
Serial.println(); //перенос строки
}
Наверно дуратский вопрос, но все таки куда ложить библиотеку написано в arduino-0018\libraries\DallasTemperature у меня таких папок нет! нужно ещё что то ставить?
Мои действия подключил к компу Carduino Nano к нему подключил датчик DS18B20 без резистора пока, скачал прогу запускаю вылетает ошибка. Что ещё нужно поставить что бы заработало, первый раз пробую Carduino Nano!
Re: Цифровой датчик температуры на Carduino.
Папка ...\libraries есть? Какая версия IDE?
Re: Цифровой датчик температуры на Carduino.
Цитата:
Сообщение от
Chip
Папка ...\libraries есть? Какая версия IDE?
Есть, туда положил, но выдает ошибки
Цитата:
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:32:24: error: WConstants.h: No such file or directory
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp: In member function 'virtual float BSeries::getTemperature(NewOneWire*)':
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:43: error: 'byte' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:43: error: expected `;' before 'lowByte'
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:44: error: expected `;' before 'highByte'
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:48: error: 'highByte' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\DallasTemperature\BSeries. cpp:48: error: 'lowByte' was not declared in this scope
IDE использую последнею http://arduino.cc/en/Main/Software
Может есть инструкция для совсем новичков, какие IDE ставить и тд
Re: Цифровой датчик температуры на Carduino.
Скачал версию arduino-0018 скетч вроде бы загрузился, резистора 4.7К под рукой не нашлось, повесил на 27К вроде за показывало, вопрос из за резистора я так понимаю будет неправильно?