В данной статье подключим датчик 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);}
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.