| Ваш IP: 3.227.2.246 | Online(26) - гости: 14, боты: 12 | Загрузка сервера: 0.59 ::::::::::::


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;}   
}

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

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

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

  • 10 полосный графический эквалайзер

    10 полосный графический эквалайзер

    Графический эквалайзер способен избирательно обрезать отдельные частоты акустического спектра. Таким образом мы можем адаптировать музыкальное произведение, характеристики пространства, под окружающую обстановку в которой прослушиваем музыкальное произведение.Схема должна быть на две части, то есть правый и левый канал. С помощью переключателя S1 мы включаем и выключаем эквалайзер, а с помощью регуляторов …Подробнее...
  • Метроном от 40 до 208 ударов в минуту

    Примечания: VT1 и VT2 обеспечивают линейную перестройку частоты таймера NE555 при изменении сопротивления VR1. VT1 обеспечивает мощность звучания похожую на стандартный метроном. Используйте 12В напряжение питания для получения достаточной мощности звучания метронома. Поверните ручку регулятора VR1 в направлении R2, установите R1 в положение соответствующую 40 ударам в минуту (для сравнения …Подробнее...
  • Стабилизатор напряжения 0…25,5 В с регулируемой защитой по току Открыть

    Этот стабилизатор напряжения предназначен для питания радиолюбительских конструкций в процессе их налаживания. Он вырабатывает постоянное стабилизированное напряжение от 0 до 25,5В, которое можно изменять с шагом 0,1В. Ток срабатывания защиты от перегрузки можно плавно менять от 0,2 до 2А. Схема устройства показана на рис 1, счетчики DD2 DD3 формируют цифровой …Подробнее...
  • Простой микрофонный усилитель

    Простой микрофонный усилитель

    Предложенная схема предназначена для конденсаторного микрофона. Ус-во питается от источника питания 9В (крона), сама схема может быть встроена в корпус микрофона, а громкоговоритель должен быть внешним. Схема состоит из каскада предварительного усиления на транзисторе 2N3904 и усилителя мощности на ОУ LM386. Схема проста в изготовлении, в настройке не нуждается.   Источник — http://www.eleccircuit.com/pre-mic-audio-amplifier-with-ic-lm386/Подробнее...
  • Стерео усилитель 2*5.8Вт на TA8208H

    Стерео усилитель 2*5.8Вт на TA8208H

    Микросхема TA8208H предназначена для использования в автомобильных усилителях мощности. В микросхеме имеются тепловая защита, защита от перенапряжения, защита от короткого замыкания выходов на шину питания и на корпус. Усилитель на базе TA8208H имеет следующие технические характеристики: Напряжение питания от +9 до +18В Номинальное напряжение питания 13,2В Ток покоя 80…145 мА …Подробнее...