| Ваш IP: 3.236.96.157 | Online(37) - гости: 26, боты: 11 | Загрузка сервера: 1.47 ::::::::::::


Arduino HC-06 + DS18B20 (Терморегулятор)

При помощи Bluetooth модуля HC-06 и платы Arduino можно осуществить управление различными исполнительными механизмами c помощью смартфона. В данном случае речь пойдет от терморегуляторе. В качестве датчика температуры используется цифровой датчик DS18B20, температура регулируется при помощи реле (модуля реле) которое управляет нагревательным элементом.

На плате Arduino осуществляется измерение температуры и регулировка температуры срабатывания реле, а так же передача текущей температуры и температуры регулирования в Android приложение. Android приложение в свою очередь осуществляет соединение с Bluetooth модулем HC-06, изменение температуры регулирования и получение данных от платы Arduino о текущей температуре и температуре регулирования. Фактически плата Arduino работает автономно, измеряет температуру, управляет реле и хранит в памяти значение температуры регулирования. При изменении температуры регулирования на экран смартфона выводится уже подтвержденная и принятая платой Arduino температура.

Схема всего уст-ва очень простая, она содержит плату Arduino Nano (Uno), Bluetooth модуль HC-06 (подключение) и датчик DS18B20 показания которого передаются на вход A0. Выход управления реле (D13) и подключение датчика температуры можно изменить.

Для установки приложения на смартфон скачайте архив 18b20regapk.zip, распакуйте архив приложения и установите его.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
 
int buff[2],i,dig,arr[2],w=1,w1,reg;
int k;
int gis=1; // гистерезис 1 градус
unsigned long times;
 
void setup(){ Serial.begin(9600);Serial.setTimeout(50);
   pinMode(13, OUTPUT);// P1
   temp.begin(); 
   temp.setResolution(9);//12 бит 
   reg = EEPROM.read(0);
   pinMode(13, OUTPUT); // выход реле
}
 
void loop() {
 
  /////// ПРИЕМ ДАННЫХ С SERIAL PORT /////////////////////////
  while (Serial.available()>0){ 
   for (i=0;i<1;i++) { 
     buff[0] = Serial.parseInt(); 
     buff[1] = Serial.parseInt();}    
     w=1;w1=1;times=millis();}
 
 ///////////// обработка команд /////////////////// 
 if(buff[0]>10&&w==1){ w=0; 
     if(buff[0]==102){reg++;if(reg>125){reg=125;}}
     if(buff[0]==101){reg--;if(reg<0){reg=0;}}}
    /// EEPROM   
 if(w1==1&&millis()-times>10000){w1=0;EEPROM.update(0,reg);}
   /// измерение температуры
   temp.requestTemperatures();
   k = temp.getTempCByIndex(0);
   /// отправка днный в android
   Serial.print(k*10);
   Serial.println(reg);
 
   if(reg >= k + gis){digitalWrite(13,HIGH);}
   if(reg <= k - gis){digitalWrite(13,LOW);}   
 
}

Библиотеки:

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=111


Доработка терморегулятора

Изменения:

  • Увеличена точность датчика DS18B20 до 11 бит
  • Добавлен десятичный знак температуры
  • Индикатор вкл/выкл нагревателя
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
 
int buff[2],i,dig,arr[2],w,w1,reg,nakal;
float k;
int gis=1; // гистерезис 1 градус
unsigned long times,temp_time;
 
void setup(){ Serial.begin(9600);Serial.setTimeout(50);
   pinMode(13, OUTPUT);// P1
   temp.begin(); 
   temp.setResolution(11);//12 бит 
   reg = EEPROM.read(0);
   pinMode(13, OUTPUT); // выход реле
}
 
void loop() {
 
  /////// ПРИЕМ ДАННЫХ С SERIAL PORT /////////////////////////
  while (Serial.available()>0){ 
   for (i=0;i<1;i++) { 
     buff[0] = Serial.parseInt(); 
     buff[1] = Serial.parseInt();}    
     w=1;w1=1;times=millis();}
 
 ///////////// обработка команд /////////////////// 
 if(buff[0]>10&&w==1){ w=0; temp_time=millis();
     if(buff[0]==102){reg++;if(reg>125){reg=125;}}
     if(buff[0]==101){reg--;if(reg<0){reg=0;}}}
    /// EEPROM   
 if(w1==1&&millis()-times>10000){w1=0;EEPROM.update(0,reg);}
   /// измерение температуры
 if(millis()-temp_time>1000){  
   temp.requestTemperatures();
   k = temp.getTempCByIndex(0);
   temp_time=millis();}
   /// отправка днный в android
   Serial.print(k,1);
   Serial.print(":");
   Serial.print(reg);
   Serial.print(":");
   Serial.println(nakal);
 
   if(reg >= k + gis){digitalWrite(13,HIGH);nakal=1;}
   if(reg <= k - gis){digitalWrite(13,LOW);nakal=0;}   
 
}

Приложение — 18b20_reg_02.apk.zip

Исходники — 18b20_reg_02.zip

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=616#p616


#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
 
int buff[2],i,dig,arr[2],w,w1,reg,nakal;
float k;
int gis=1; // гистерезис 1 градус
unsigned long times,temp_time;
 
void setup(){ Serial.begin(9600);Serial.setTimeout(50);
   pinMode(13, OUTPUT);// P1
   temp.begin(); 
   temp.setResolution(11);//12 бит 
   reg = EEPROM.read(0);
   pinMode(13, OUTPUT); // выход реле
}
 
void loop() {
 
  /////// ПРИЕМ ДАННЫХ С SERIAL PORT /////////////////////////
  while (Serial.available()>0){ 
   for (i=0;i<1;i++) { 
     buff[0] = Serial.parseInt(); 
     buff[1] = Serial.parseInt();}    
     w=1;w1=1;times=millis();}
 
 ///////////// обработка команд /////////////////// 
 if(buff[0]>10&&w==1){ w=0; temp_time=millis();
 
  if(buff[0]>=10000){dig=buff[0];arr[0]=dig/1000;arr[1]=dig%1000;}
  if(buff[0]<10000&&buff[0]>=1000){dig=buff[0];arr[0]=dig/100;arr[1]=dig%100;} 
  if(buff[0]<1000){dig=buff[0];arr[0]=dig/10;arr[1]=dig%10;}   
     if(arr[0]== 11){reg = arr[1];}
     }
    /// EEPROM   
 if(w1==1&&millis()-times>10000){w1=0;EEPROM.update(0,reg);}
   /// измерение температуры
 if(millis()-temp_time>1000){  
   temp.requestTemperatures();
   k = temp.getTempCByIndex(0);
   temp_time=millis();}
   /// отправка днный в android
   Serial.print(k,1);
   Serial.print(":");
   Serial.print(reg);
   Serial.print(":");
   Serial.println(nakal);
 
   if(reg >= k + gis){digitalWrite(13,HIGH);nakal=1;}
   if(reg <= k - gis){digitalWrite(13,LOW);nakal=0;}   
}

Добавлен датчик влажности DHT11

 

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=1721#p1721


Добавлен регулятор влажности

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=1790#p1790

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • ФНЧ для сабвуфера

    ФНЧ для сабвуфера

    На рисунке показана простая схема ФНЧ для сабвуфера. В схеме используется ОУ ua741. Схема достаточно проста, имеет низкую стоимость и не нуждается в настройке после сборки. Частота среза ФНЧ 80 Гц. Для работы ФНЧ для сабвуфера необходим двухполярный источник питания ±12 В.Подробнее...
  • Игра «Электронный лототрон»

    Игра «Электронный лототрон»

    На рис. 1 изображена принципиальная схема лототрона. Она содержит задающий генератор на частоту несколько килогерц (DD1.1-DD1.3), счетчик DD2, дешифратор DD3, к выходам которого подключен цифровой индикатор HG1. Пока кнопка SB1 не нажата, импульсы с выхода задающего генератора подаются на счетчик DD2 и многократно его переполняют. В результате светятся все сегменты …Подробнее...
  • HI-FI усилитель с эквалайзером для аудиоцентра

    HI-FI усилитель с эквалайзером для аудиоцентра

    Усилитель с эквалайзером может питаться напряжением от 6 до 18В, но надо учитывать то обстоятельство что мощность усилителя напрямую зависит от напряжения, поэтому только при напряжении 18В усилитель будет выдавать полную мощность. Основные характеристики: Максимальная мощность на нагрузке 2Ом при напряжении питания 18В — 2*30Вт Максимальная мощность на нагрузке 4Ом …Подробнее...
  • РАБОТА ТРЕХФАЗНОГО АСИНХРОННОГО ДВИГАТЕЛЯ ОТ CEТИ ОДНОФАЗНОГО ТОКА, СПОСОБЫ ПУСКА

    РАБОТА ТРЕХФАЗНОГО АСИНХРОННОГО ДВИГАТЕЛЯ ОТ CEТИ ОДНОФАЗНОГО ТОКА, СПОСОБЫ ПУСКА

    Трехфазный асинхронный двигатель нормального исполнения может создавать вращающий момент без принятия специальных мер при питании от сети однофазного тока. Предположим, что цепь одного из проводов работающего двигателя, присоединенного к трехфазной сети, разомкнулась (например, вследствие перегорания плавкой вставки предохранителя). Машина, оказавшаяся в однофазном режиме с последовательным или последовательно-параллельным соединением обмоток статора …Подробнее...
  • К1460УД2х — СДВОЕННЫЙ МОЩНЫЙ ОПЕРАЦИОННЫЙ УСИЛИТЕЛЬ

    К1460УД2х — СДВОЕННЫЙ МОЩНЫЙ ОПЕРАЦИОННЫЙ УСИЛИТЕЛЬ

    К1460УД2х – интегральная микросхема представляет собой сдвоенный мощный операционный усилитель, пригодная для использования в качестве мощного ОУ в широком диапазоне областей применения, хорошо подходит для управления индуктивными нагрузками, в частности, для управления электродвигателями постоянного тока. Микросхема К1460УД2Рх является прямым аналогом микросхемы TCA0372 фирмы «MOTOROLA». ОСОБЕННОСТИ • Выходной ток до 1.0 А • Скорость нарастания …Подробнее...