| Ваш IP: 3.237.186.116 | Online(22) - гости: 15, боты: 7 | Загрузка сервера: 0.2 ::::::::::::


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

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

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

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

  • Частотомер STM32 + индикатор на MAX7219 (Arduino)

    Частотомер STM32 + индикатор на MAX7219 (Arduino)

    На базе отладочной платы STM32 с использованием 8-и разрядного семисегментного индикатора на микросхеме MAX7219 можно собрать простой частотомер. Так же частотомер содержит простой усилитель — формирователь сигнала, который состоит из одного транзистора КТ3102 и нескольких пассивных элементов. На вход частотомера можно подавать синусоидальный или импульсный сигнал амплитудой от 0,5 до …Подробнее...
  • Выключатель света с задержкой

    Главная особенность выключателя с задержкой в том что после включения света, он гаснет через 1-2 минуты, такой выключатель целесообразно устанавливать в помещениях общего пользования, например в подъездах домов. Кнопку включения освещения целесообразно совместить с открыванием двери и каждый раз когда дверь будет открываться свет будет включаться и гореть 1-2 минуты, …Подробнее...
  • 4-х канальный УМЗЧ на LA4743B (45 Вт на канал)

    4-х канальный УМЗЧ на LA4743B (45 Вт на канал)

    Микросхема LA4743B является 4х канальным усилителем мощности, разработанная компанией SANYO для применения в автомобильных аудиосистемах. При номинальном напряжении питания от бортовой сети 14.4 В микросхема способна развить мощность до 45 Вт на каждый канал. Микросхема имеет встроенную защита от короткого замыкания выходов, защиту от перегрева, функцию ослабления сигнала, выключение в дежурный …Подробнее...
  • Электронный стимулятор мышц

    На рисунке показаны схемы электронного стимулятора мышц, схема состоит из двух частей, первая часть сам стимулятор мышц, вторая схема — таймер рассчитанный 10 минут. Основа стимулятора мышц это таймер на ИС 7555 которая генерирует импульсы с частотой 80 Гц. Использование потенциометра VR1 позволяет управлять интенсивностью тока на электродах. Уровень яркости …Подробнее...
  • Фазоуказатель

    Фазоуказатель

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