Проблема с измерением температуры DS18B20

sazn
Offline
Зарегистрирован: 24.09.2013

Всем привет. Народ нужна ваша помощь. Ставлю стандартный скечь для измерения температуры датчиком DS18B20. http://cxem.net/arduino/arduino17.php вот делаю все так. Температуру измеряет только врет. градусах на 20-25 вроде все ок, но если мерить температуру воды на 70-80 градусах датчик уже занижмет температуру на 5-6 градусов, а на 100 уже где то 10. Сравнивал показания с ртутным градусником и эл. градусников, у них показания одинаковые, а вот датчик на ардуино врет ((( 

sazn
Offline
Зарегистрирован: 24.09.2013

Пробывал уже на 3 датчиках. Все то же самое. (((

kolganoff
Offline
Зарегистрирован: 26.09.2013

А что если обратиться. к первоисточникам?

sazn
Offline
Зарегистрирован: 24.09.2013

А именно? 

kolganoff
Offline
Зарегистрирован: 26.09.2013

Есть библиотека. В ней есть примеры. С них и надо начинать.

sazn
Offline
Зарегистрирован: 24.09.2013

Это для меня темный лес ))) . А так спасибо за помощь. )

sazn
Offline
Зарегистрирован: 24.09.2013

Хотя скечь пооду взят из библиотеки 

 

kolganoff
Offline
Зарегистрирован: 26.09.2013

Под рукой только планшет, но примерно так:
В IDE Arduino файл - примеры - onewire -bla-bla
Прошиваешь скетч и смотришь результат.

sazn
Offline
Зарегистрирован: 24.09.2013

Ок спасибо сейчас попробую ))

 

sazn
Offline
Зарегистрирован: 24.09.2013

В примере скечь практически такой же ((

 

kolganoff
Offline
Зарегистрирован: 26.09.2013

М.б. ты их голыми в кипяток опускаешь?

sazn
Offline
Зарегистрирован: 24.09.2013

Ну да )))). Чуть ниже контчктов что бы не позамыкало ))). Не совсем в кипяток . А как надо тогда? ))))

 

sazn
Offline
Зарегистрирован: 24.09.2013

Проблема решена!!! Заменой кабеля на экранированный и впайкой напрямую на ардуино )))

MaksMS
Offline
Зарегистрирован: 11.03.2013

Какое расстояние от датчика до ардуины ? При длинной линии паразитное питание не пойдет и надо использовать полноценное..

artemmaster1
Offline
Зарегистрирован: 01.10.2013

такая проблема делаю как всё как описано из ресурса ту что ссылается аавтор но постоянно выскакивает ошибка 

Arduino: 1.5.3 (Windows 7), Board: "Arduino Uno"

C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:66:24: error: WConstants.h: No such file or directory
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In constructor 'OneWire::OneWire(uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:75: error: 'digitalPinToPort' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:76: error: 'digitalPinToBitMask' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:77: error: 'portOutputRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:78: error: 'portInputRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:79: error: 'portModeRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::reset()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:97: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:97: error: 'pinMode' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:100: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:101: error: 'digitalRead' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:103: error: 'digitalWrite' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:104: error: 'OUTPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:105: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::write_bit(uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:125: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::read_bit()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:140: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::write(uint8_t, uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:163: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:163: error: 'pinMode' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:164: error: 'digitalWrite' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::depower()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:203: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:203: error: 'pinMode' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.

MaksMS
Offline
Зарегистрирован: 11.03.2013

C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:66:24: error: WConstants.h: No such file or directory --

используется старая библиотека - вот и ошибкаа такая ,упоминание  WConstants.h в коде библиотеки надо заменить на Arduino.h 

artemmaster1
Offline
Зарегистрирован: 01.10.2013

а чем править библеотеку чтобы не напортачить с кодировкой, в блокноте можно?

MaksMS
Offline
Зарегистрирован: 11.03.2013

можно

RainMan
Offline
Зарегистрирован: 21.06.2011

Кстати я наблюдал тоже некоторые проблемы с этими датчиками. При использовании DC-DC преобразователя для питания ардуины и датчика, с датчиком неоднократно терялась связь или он переставал инициализироваться, учитывая то, что подключение датчика было полноценное, по 3 проводам.

ourlive
Offline
Зарегистрирован: 26.05.2012

обзавёлся и я проблемой на пустом месте

01#include <OneWire.h>
02 
03// DS18B20 Temperature chip i/o
04OneWire ds(2);  // пин подключения датчика
05int pin_test_ds=4;     //пин для проверки готовности датчика
06int pin_power_ds=3;    //пин подачи питания
07 
08void setup() {
09  Serial.begin(9600);
10  pinMode(pin_power_ds, OUTPUT);    
11  digitalWrite(pin_power_ds, HIGH);
12  pinMode(pin_test_ds, INPUT);
13}
14 
15void loop() {
16 temperature();
17   
18  }
19   
20   
21void temperature() {  //чтение температуры
22  byte i;
23  byte present = 0;
24  byte type_s;
25  byte data[12];
26  byte addr[8];
27  float t;
28   
29  if ( !ds.search(addr)) {            //поиск адресов
30    ds.reset_search();
31    delay(250);
32    Serial.println();
33    return;
34  }
35  String id=String(addr[0], HEX); for ( i = 1; i < 7; i++) {id=id+'.'+String(addr[i], HEX);} //выделениие идентификатора из имени
36   
37  if (OneWire::crc8(addr, 7) != addr[7]) {   //проверка контрольной суммы
38      Serial.print('#');
39      Serial.print(id);
40      Serial.println("error");
41      return;
42  } else {
43   
44     switch (addr[0]) { // определение типа датчика
45      case 0x10: //DS18S20
46      type_s = 1; break;
47      case 0x28: //DS18B20
48      type_s = 0; break;
49      case 0x22: //DS1822
50      type_s = 0; break;
51      default: Serial.println("unknown_device"); return;
52    }
53 
54    ds.reset();
55    ds.select(addr);
56    ds.write(0x44, 1);        //команда на начало конвертации температуры
57    while (!digitalRead(pin_test_ds)) {} // задержка конвертации 0-конвертация, 1-окончание конвертации
58   
59    present = ds.reset(); //-------------------------------
60    ds.select(addr);   
61    ds.write(0xBE);         // Read Scratchpad
62 
63    for ( i = 0; i < 9; i++) { data[i] = ds.read();}          // чтение данных
64  
65    int16_t raw = (data[1] << 8) | data[0]; //смещение разрядности и сложение байт
66    if (type_s) {
67      raw = raw << 3; // 9 bit resolution default
68      if (data[7] == 0x10) {
69        // "count remain" gives full 12 bit resolution
70        raw = (raw & 0xFFF0) + 12 - data[6];
71      }
72    } else {
73      byte cfg = (data[4] & 0x60);
74      // at lower res, the low bits are undefined, so let's zero them
75      if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
76      else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
77      else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
78      //// default is 12 bit resolution, 750 ms conversion time
79    }
80    t = (float)raw / 16.0;
81    Serial.print(id);
82    Serial.print("  t= ");
83    Serial.print(t);
84    Serial.println();
85    Serial.flush();
86  }
87} //------temperature()

Датчики зацеплены по 3х проводной схеме, плюс дополнительный контрольный пин(см. строку 57 скетча) к информационной линии. По даташиту после команды на конвертации данных нужно дождаться окончания и после появления высокого уровня можно начинать чтение данных. На макетке с мегой всё отлично заработало (4 датчика). Начал перетаскивать на нану и паять распределительный шлейф для разноса датчиков по заданным точкам. Получилось вот что, всё работает до касания любой части схемы (даже пальцем), оно обрывает чтение данных на некоторое время. Замена строки ожидания на delay проблему решает полностью. Но так как на этом же контроллере будут и иные устройства, то delay вариант плохой.

Т.к. информационная линия по даташиту же притянута к +5 через 4.7кОм, то почему не удаётся читать статус датчика непонятно. Ради интереса попробовал зацепить нану к заземлённому компу и к планшету, эффект одинаковый. Есть ли у вас какие нибудь предложения как это побороть?

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

А чем этот вайл от делая отличается ? В обоих случаях программа висит в ожидании. Можно применять псевдомультизадачность , у мня замечательно работает http://blog.ksduino.org/post/42862084042/pseudo-multitasking-using-timer-in-arduino-sketch

Датчики надо вешать  гирляндой , но не звездой. На каждый датчик по питанию полезно навесить 0.1 мкф керамику и 10 мкф  электролит. Подтяжку надо ставить на самом дальнем датчике. Провод применять лучше всего двупарную витую пару. Одна пара - питание , вторая пара - дата и земля.

и еще ... Можно один раз толкнуть Все датчики на измерение, потом подождать секунду и опрашивать подряд без задержек, но, для такого режима надо смотреть напругу питания на дальнем датчике - может просесть (выдать 87 градусов) тогда надо увеличивать электролит в конце.

ourlive
Offline
Зарегистрирован: 26.05.2012

разница в том, что while фактически несколько миллисекунд для тех датчиков которые у меня есть, но если появятся датчики из иной партии, то может быть и 500мс. Само собой не о какой многозадачности и речи быть не может, если будет выставлен delay по наихудшему датчику (4 датчика это уже 2 секунды, много). Ожидается использование иных 1-wire устройств,  будет пара серв. Точно нужно будет следить за serial и по запросу или выполнять что сказано или отдавать данные. Короче первое же устройстов не должно хавать столько временных ресурсов контроллера.

Код конечно я перепишу и скорее всего датчики будут читаться по индивидуальному запросу. Кстати спасибо за идею, вероятно вероятно данные конвертить лучше всего разом.

А почему звездой нельзя?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Наверно звездой можно, но сбоит нещадно от косого взляда...

Использую 12 -ю точность, потому время преобразования 0.75 сек. Мне достаточно данных по температуре не чаще раза в 1 сек. Потому в псевдомульте я делаю так : в сетупе толкаю первый раз на преобразоаание, потом выставляю для процесса термо следующий запуск через секунду ( это произойдет по прерыванию от таймера) и занимаюсь прочими делами, пока Все датчики преобразовывают одновременно и независимо от того, чем занимается программа( тупо ждет, или обслуживает  там и интернет и сервы и всеЧтоУгодно) но, через секунду, запускается процесс термо, считывает температуры с датчиков, распихивает по глобальным ( не забыть volatile) переменным , толкает запуск преобразования и завершается.  РАДУЮСЬ ;)

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

Поставьте 1 - 1.5 килоома виесто 4.7 .......

И желательно не делать " звезду " , а подключать разные шлейфы к разным пинам....

ourlive
Offline
Зарегистрирован: 26.05.2012

"к разным пинам" а смысл в 1-wire тогда?  Так бы я элементарными терморезисторами обошелся.

А про звезду разъясниет подробнее, мне природа проблемы не понятна. Электрический контакт всё равно один и тот же, что в гирлянде, что в звезде. На макетке датчики грубо говоря тоже звездой тыкаются.

Про многозадачность, я понимаю, что оптимизировать можно любую проблему. Но штука в том, что если фича с единицей на линии по окончанию конвертации в даташите есть, то хотелось бы понимать почему как задано не работает. По своей сути для 1-wire мелкая статика и наводки страшны быть не должны, а тут на тебе.. Когда доберусь до работы, проверю, может элементарно дуинка у меня подгорелая...

inspiritus
Offline
Зарегистрирован: 17.12.2012

Природа тут вторична. Шлейфом у меня около 60 датчиков на 80 метровом кабеле в окружении кучи железа работают идеально , подключенные как описано выше, и сбоят только когда варят электричеством рядом. 

Со звездой экспериментируйтe сами, получится расскажете ;)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

ourlive пишет:
А про звезду разъясниет подробнее, мне природа проблемы не понятна. Электрический контакт всё равно один и тот же, что в гирлянде, что в звезде. На макетке датчики грубо говоря тоже звездой тыкаются

Контакт один и тот же, а маршрут сигнала разный. 1-wire это линейная сеть. Грубо говоря, при линейной топологии один сигнал идет от контроллера и, пройдя всю линию, в виде паразитного "эха" возвращается обратно к МК, затем приходит ответ от датчиков. Протоколом это предусмотрено, поэтому коллизии очень редки.
При топологии "звезда" один сигнал уходит от МК и несколько паразитных приходит (лучей-то несколько), причём с разными временными задержками, забивая таймслоты, которые МК держит для ответа. И в это время приходят ответы от датчиков - а двери-то уже закрыты. Имеем пропуски полезного сигнала.
На макетке расстояния сантиметры, эхо даже в звезде успевает пройти раньше ответа от датчиков, на обьекте расстояния в метрах, эхо накладывается на ответ от датчиков. Так понятно?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Tomasina пишет:
1-wire это линейная сеть.

Это не так. Читайте первоисточники.

ourlive
Offline
Зарегистрирован: 26.05.2012

Скорость света 300 000 000 м/с, эхо с 10 метров 300 000 000 /10 /2=15 МГц (это без учёта неизвестного коэффициента укорочения). Про уровни отраженного сигнала несогласованной линии и вовсе можно умолчать, до логической единици он даже в теории дотянуть не сможет. А свой косяк я нашел, в монтаже. Так что способ замены dalay из строки 57 является действенным и стабильным. delay из строки 31 был также удалён. Опрос единичного датчика проходит быстрее чем за 50мс (забыл померить точно). Причём если не печатать такую уйму данных в ком-порт, то интервал между чтением следующего датчика совершенно не существенный. Конвертация данных в датчике занимает где то в 2-3 раза меньше времени, чем само чтение этих данных контроллером. Видимо дополнительную оптимизацию в этом направлении проводить не нужно. Завтра наверное проверю идею звезда/гирлянда на линиях более 10м (причём обязательно в помещении сильно замусоренном паразитными излучениями разных диаппазонов).

artemmaster1
Offline
Зарегистрирован: 01.10.2013

один вопрос, может не втему...  а как подключить 2 и более (Ds18b20 иди DS18S20) в герлянду... сшемотехнику я кажится понял а как к ним обрашаться... програмна... 

ourlive
Offline
Зарегистрирован: 26.05.2012

artemmaster1 пишет:

один вопрос, может не втему...  а как подключить 2 и более (Ds18b20 иди DS18S20) в герлянду... сшемотехнику я кажится понял а как к ним обрашаться... програмна... 

взгляд немного выше, может заметите скетч и даже с описанием и русскими комментариями..

artemmaster1
Offline
Зарегистрирован: 01.10.2013

я этот скец использова... но там только один дачик работае... когда второй включаю все встает...

 

ourlive
Offline
Зарегистрирован: 26.05.2012

Можно попробовать включить правильно. У вас должно быть гирлянда советская, последовательная, а надо по европейскому образцу, параллельную.

inspiritus
Offline
Зарегистрирован: 17.12.2012

По сцылке хорошая статья, в которой в тч есть и про подключение датчиков.

http://habrahabr.ru/post/161359/

... Да сам сайт интереснн.

ourlive
Offline
Зарегистрирован: 26.05.2012

Отчитываюсь по подключениям датчиков по разным схемам. Испытания проводились в аппаратном зале FM-передатчиков. Нарыл на складе три мотка аккустического провода разного качества (витухи отрезками не нашлось, а от бухты резать не стал). На информационный линию у дуины зацепил осцилограф. Подтягивающий резистор в 4.7к был напаян на дуине. Тут же выяснилось, что шумы всего на одном шлейфе в 10 метров очень даже не слабые, хотя два датчика гирляндой читались. Пришлось заземлиться как положено (ну почти как положено). Добавление ещё одного шлейфа без датчика в случае звезды полный срыв синхронизации, в случае гирлянды частичный срыв (контрольная сумма не сходилась). В итоге (по рекомендациям выше) был добавлен ещё один резистор 4.7к на дальний край линии (т.е. выпаивать первый мне лень было, но сопрротивление снизил и дальний край нагрузил). В итоге из 3х шлейфов (4 датчика) были собраны все доступные комбинации (звезда, дерево, гирлянда). Чтение данных во всех комбинациях стабильное, безразрывное. Наличие или отсутствие конденсаторов (для 3х проводной линии) видимого эффекта не давало. Общая длина шлейфов была 30-40 метров. Для квартирного применения этого с запасом хватит.

dts
Offline
Зарегистрирован: 01.04.2013

как заземлились?

Резистор на дальнем конце сильно уменьшил шум?

Я так и не смог заставить работать больше 4-х датчиков на одной линии, причем длина хоть 20, хоть 120 метров - всё одно.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я вешаю резистор ( терминатор) только в конце линии. Получено тестированием на новой бухте витухи ( порядка 300м) 

конденсаторы при такой длине тоже актуальны - керамика от вч помех, электролит в качестве буфера питания при большом количестве датчиков .

dts
Offline
Зарегистрирован: 01.04.2013

что есть терминатор? Резистор между DATA и GND? Какой номинал?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Терминирующим устройством я называю резистор подтяжки на плюс и конденсаторы по питанию, собранные в конструктивный моноблок на разъеме rj-45 , фтыкаемые на конце линии с датчиками ( по аналогии с терминаторами на коаксиальных 10 мбт ethernet-ах начала 90гг)

ourlive
Offline
Зарегистрирован: 26.05.2012

Заземлился элементарно, там всё же промышленное здание, РЕ-шина даже до большей части настольных ламп дотянута, накрутил канатик на ближайшую и дотянул до осцилографа, а он в свою очередь через щуп до дуины на grn. Резюк на дальнем конце погасил шумы значительно. Проблема ещё в том, что когда датчик отдаёт данные, его логический уровень падает (хотя вроде бы при наличии линии питания не должен). Очень заметны были сетевые наводки 50Гц (но при использовании витухи оно не должно быть актуально).

inspiritus
Offline
Зарегистрирован: 17.12.2012

Для того , чтобы при преобразовании и ответе лог единица не проседала я и ставлю на питание электролит, типа водонапорной башни, которая поддерживает давление ( напряжение ) в системе. Надеюсь никто не использует паразитное питание ?

вообщетто надо питание подавать 12в отдельным проводом, а 5в делать на месте, около датчика с помощью lm7805. При этом исключаются просадки питания на длинном проводе.

ourlive
Offline
Зарегистрирован: 26.05.2012

По ссылке на харбу использовали паразитное.. Да и датчик не создаёт нагрузки на линии, когда тыкал кондёры, форма проседания не менялась, оно случается скорее всего из за разряда внутреннего кондёра. А так как он по структуре зацеплен через диоды, то разница напряжений между полуразряженным внутренним и линией обязана быть. Питать отдельными напряжениями с преобразованием на месте это уже промышленный подход, где предполагаются не только датчики, но и исполнительные устройства. Большинству здесь оно не нужно, не пугайте сложностями, пожгут ведьне одну дуинку после таких советов.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Когда я начинал, то тоже пробовал паразитное, однако количество сбоев было удручающее...

artemmaster1
Offline
Зарегистрирован: 01.10.2013

такая вот проблема, 

01Arduino: 1.5.3 (Windows 7), Board: "Arduino Uno"
02 
03sketch_dec21b.ino: In function 'void temperature()':
04sketch_dec21b:35: error: call of overloaded 'String(byte&, int)' is ambiguous
05D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:73: note: candidates are: String::String(double, int)
06D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:72: note:                 String::String(float, int)
07D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:71: note:                 String::String(long unsigned int, unsigned char)
08D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:70: note:                 String::String(long int, unsigned char)
09D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:69: note:                 String::String(unsigned int, unsigned char)
10D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:68: note:                 String::String(int, unsigned char)
11D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:67: note:                 String::String(unsigned char, unsigned char)
12sketch_dec21b:35: error: call of overloaded 'String(byte&, int)' is ambiguous
13D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:73: note: candidates are: String::String(double, int)
14D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:72: note:                 String::String(float, int)
15D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:71: note:                 String::String(long unsigned int, unsigned char)
16D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:70: note:                 String::String(long int, unsigned char)
17D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:69: note:                 String::String(unsigned int, unsigned char)
18D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:68: note:                 String::String(int, unsigned char)
19D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:67: note:                 String::String(unsigned char, unsigned char)
20 
21  This report would have more information with
22  "Show verbose output during compilation"
23  enabled in File > Preferences.

 

dts
Offline
Зарегистрирован: 01.04.2013

Arduino: 1.5.3 это нестабильная ветка среды

dinamitch1
Offline
Зарегистрирован: 15.12.2013

Помогите у меня чтото не так , я как новичёк в этом и делаю всё как в данной статье http://cxem.net/arduino/arduino17.php , подключяю всё как по схемме и у меня выскакивает ошыбка

 

http://i.imgur.com/yIumCIt.jpg

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

у тебя не подключена библиотека OneWire

Первая строчка должна быть не #include , а #include <OneWire.h>

    

dinamitch1
Offline
Зарегистрирован: 15.12.2013

ОК спосибо, попробую а температуру будет показывать в мониторе порта да? только эту библеотеку подключять?

dinamitch1
Offline
Зарегистрирован: 15.12.2013

Tomasina ничего не получяется, вот что выдаёт монитор порта

http://i.imgur.com/Js8OS0N.jpg

01#include <OneWire.h>
02  
03/*
04 * получаем температуру от DS18S20
05 */
06  
07OneWire  ds(10);  // линия 1-Wire будет на pin 10
08  
09void setup(void)
10{
11  Serial.begin(9600);
12}
13  
14  
15void loop(void)
16{
17  byte i;
18  byte present = 0;
19  byte data[12];
20  byte addr[8];
21    
22  if ( !ds.search(addr)) {
23      //Serial.print("No more addresses.\n");
24      ds.reset_search();
25      return;
26  }
27    
28  /*Serial.print("R=");
29  for( i = 0; i < 8; i++) {
30    Serial.print(addr[i], HEX);
31    Serial.print(" ");
32  }*/
33  
34  if ( OneWire::crc8( addr, 7) != addr[7]) {
35      Serial.print("CRC is not valid!\n");
36      return;
37  }
38    
39  if ( addr[0] != 0x10) {
40      Serial.print("Device is not a DS18S20 family device.\n");
41      return;
42  }
43  
44  ds.reset();
45  ds.select(addr);
46  ds.write(0x44,1);         // запускаем конвертацию
47    
48  delay(5000);     // скорее всего достаточно 750ms
49  // we might do a ds.depower() here, but the reset will take care of it.
50    
51  present = ds.reset();
52  ds.select(addr);   
53  ds.write(0xBE);         // считываем ОЗУ датчика
54  
55  /*Serial.print("P=");
56  Serial.print(present,HEX);
57  Serial.print(" ");*/
58  for ( i = 0; i < 9; i++) {           // обрабатываем 9 байт
59    data[i] = ds.read();
60    //Serial.print(data[i], HEX);
61    //Serial.print(" ");
62  }
63  /*Serial.print(" CRC=");
64  Serial.print( OneWire::crc8( data, 8), HEX);
65  Serial.println();*/
66    
67  // высчитываем температуру :)
68  int HighByte, LowByte, TReading, Tc_100;
69  LowByte = data[0];
70  //Serial.print("LB= ");Serial.print(LowByte,HEX);
71  HighByte = data[1];
72  //Serial.print(" HB= ");Serial.print(HighByte,HEX);
73  TReading = (HighByte << 8) + LowByte;
74  Tc_100 = TReading/2;
75  Serial.print(" T = ");Serial.print(Tc_100);
76  Serial.println();
77}

Мне кажется код из статье левый,  там написанно DS18B20 а в коде DS18S20 , 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Поставьте библиотеку DallasTemperature (ссылка, справа кнопка Download ZIP) и проверьте гарантированно работающий скетч из примеров (Файл - Примеры - Dallas...)
Если работает - значит датчик исправный и можно двигаться дальше.

appconwireless
Offline
Зарегистрирован: 05.12.2013
Существует еще один впечатляющий решение вызывается непосредственно датчик чтение: RF5151 & RF4432S. RF5151 модуль интегрируется 12bit высоким разрешением АЦП, который может использоваться для подключения различных типов аналоговых или цифровых датчиков - PT1000 (тонкий платинового фильм), Даллас Полу / Максим DS18B20 (цифровой термометр), Sensirion SHT21/25 (влажности / температуры) и т.д. Пользователям не нужно писать коды между датчиком и модулем RF5151, и никакого внешнего MCU или другие компоненты не требуются. 
Для простейшие приложения пользователи смогут припаять датчик к выводам модуля RF5151 построить беспроводную систему передающий датчик легко. Модуль может собирать данные с датчиков и отправить его на спутник Модуль приемника RF4432S в настраиваемых интервалах, что минимизирует затраты на комплектующие и уменьшает время разработки новых проектов. RF4432S поддерживает прием мутил RF5151s построить беспроводную сенсорную сеть. Один RF4432S может обрабатывать около макс данных датчиков 50 RF5151s в сети.