
В данной статье подключим датчик DS18B20 к Arduino и выведем значения с датчика на сервис Народного мониторинга.
Для этого нам понадобится:
DS18b20 : http://ali.pub/kusf0
Arduino uno : http://ali.ski/gC_mOa
EthernetShield: http://ali.ski/tLocoy
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Вот так выглядит самый распространенный вид датчика DS18B20

Датчик DS18B20 работает по шине 1-Wire и у него есть несколько вариантов подключения вот несколько из них:



По схеме подключения видно что датчик подключен к 6 пину ардуино.
В программе FLProg настраивается все очень просто.
Вот схема устройств в программе FLProg:

Ссылка на готовую схему FLProg : https://yadi.sk/d/8OS4x6QN3E9cWt
Если не хотите пользоваться программой FLProg то необходимо скопировать программный код приведенный ниже и вставить его в программу Arduino IDE и загрузить этот программный код в саму плату Arduino.
#include <OneWire.h>
#include <SPI.h>
#include <EthernetUdp.h>
#include <Ethernet.h>
byte _d18x2x1Addr[8]={0x28, 0xFF, 0xCC, 0x27, 0x64, 0x16, 0x4, 0xA1};
OneWire _ow6(6);
byte ethernet_mac [] = {0x78, 0xAC, 0xC0, 0xC6, 0x02, 0x96};
bool _isCorrectLocalIp = 0;
EthernetUDP Udp;
IPAddress _NMC1SIp(94, 142, 140, 101);
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
unsigned long _NMC1SendTime = 0UL;
void setup()
{
if (! Ethernet.begin(ethernet_mac)== 0) {_isCorrectLocalIp = 1; }
delay(1000);
Udp.begin(8888);
}
void loop()
{
if (1) { if ( _isTimer(_NMC1SendTime, 330000)) {
Udp.beginPacket(_NMC1SIp, 8283);
Udp.print ("#78ACC0C6028A\n");
Udp.print ("#78ACCOC60284#");
Udp.print ((_d18x2x1O));
Udp.print ("\n");
Udp.print ("##\n");
Udp.endPacket();
_NMC1SendTime = millis();
}}if(_isTimer(_d18x2x1Tti, 1000)) {
_d18x2x1Tti = millis();
_d18x2x1O= _readDS18_ow6(_d18x2x1Addr, 0);}
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
int16_t raw = (data[1] << 8) | data[0];
if (type_s)
{
raw = raw << 3;
if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1;
}
return (float)raw / 16.0;
}
float _readDS18_ow6(byte addr[8], byte type_s)
{ byte data[12];
byte i;
_ow6.reset();
_ow6.select(addr);
_ow6.write(0xBE);
for ( i = 0; i < 9; i++) {
data[i] = _ow6.read();}
_ow6.reset();
_ow6.select(addr);
_ow6.write(0x44, 1);
return _convertDS18x2xData(type_s, data);}
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.