Терморегулятор на dnt11 nokia5110

alex1608
Offline
Зарегистрирован: 01.09.2015

здравствуйте Я новичок в Ардуино стаж 1мес ни как не могу разобратся скейтчем для терморегулятора на dnt 11 и

nokia5110 . температуру показывает не могу сделать что бы нагреватель отключался при заданой температре#include <Adafruit_GFX.h>

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <dht11.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#include <dht11.h>
#define DHT11_PIN 2
dht11 DHT;
int Pin1 = 13;
float maxTemperature = 22.0;
int counter = 0;
int a;

void setup(){
 pinMode(Pin1, OUTPUT);  
Serial.begin(9600);
display.begin();
int chk;
chk = DHT.read(DHT11_PIN);
  // Инициализация дисплея
display.clearDisplay();
  display.display();
// Устанавливаем контраст
  display.setContrast(50);
  delay(1000);
 
 

}

void loop() { display.clearDisplay();
  display.display();delay(100); 
 
  display.drawLine(13,0,13,48, BLACK);
  display.drawLine(26,0,26,48, BLACK);
  display.drawLine(39,0,39,48, BLACK);
  display.drawLine(52,0,52,48, BLACK);
  display.drawLine(65,0,65,48, BLACK);
  display.drawLine(78,0,78,48, BLACK);
  int chk;
  
  
chk =DHT.read(DHT11_PIN);
float a;
a == DHT.temperature;
   switch (chk){case DHTLIB_OK:  
                display. setCursor(0, 8);
                display. print ( DHT.temperature,1); 
                display. setCursor(15,8);
  display. println( DHT.humidity,1);
                break;
                case DHTLIB_ERROR_CHECKSUM: 
                Serial.print("Checksum error,\t"); 
                display. setCursor(15, 8);
                display.print("E"); 
                break;
               case DHTLIB_ERROR_TIMEOUT: 
               display. setCursor(0, 8);
               display.print("E "); 
                break;
      
    
    default:     display. setCursor(15, 8);
                display.print("ee\t"); 
                break;}
 display. setCursor(0, 0);
 display.print ("T");
 display. setCursor(15,0);
 display. print("h");
 display. setCursor(20,15);
 display. print(a);
 
  display.display();
 if (a>20)
 {digitalWrite(Pin1, HIGH);}
      delay(1000);
 }

 

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

строка 44 заменить на a = DHT.temperature;

строка 73 заменить  на if (a>maxTemperature)

Для начала, а потом дальше смотреть.

alex1608
Offline
Зарегистрирован: 01.09.2015

спасибо все работает  я просто до этого вобще програмирование не  занимался, единстеное  что сделал, ТРЕНЕР акб

 правда учет емкоти акб не верный а так работет


 #include <PCD8544.h>;
static PCD8544 lcd;
#include<EEPROM.h>;
 int anlogPin = 1;// вход с делителя
 int Pin2 = 12;// реле
 int x;
 int v;
 int a;
 int s ;
 int amp;
 int amp2; 
 void setup() 
 { 
   pinMode(Pin2, OUTPUT);//програмируем пин на выход
   Serial.begin(9600);//открываем монитор порт
   analogWrite(anlogPin,INPUT);// вход
   digitalWrite(Pin2, HIGH);
   lcd.begin(16,4);
   
      
delay(1000);
}

void loop(){
         
        unsigned long time;
        time = millis();
         s = time/1000/6; 
         x = analogRead(anlogPin);//читаем пин
   float y; // точность дробных чисел
  y = (float)x/51,6;
  lcd.setCursor(0, 0);
  lcd.print(y);
  lcd.print("V");
  lcd.setCursor(12, 1);
  if (digitalRead(Pin2) == HIGH){
    lcd.setCursor(0,6 );
    lcd.print("ZAR"); } 
  
         
 if(y<=13.70) {  
         
        digitalWrite(Pin2, HIGH);
        delay(300),
        EEPROM.write (1, s);//запись в еепром время  (s)
         lcd.setCursor(5, 5);
           lcd.print("ZAR");
          lcd.setCursor(6,5);
         lcd.print("---");
         lcd.setCursor(7, 1);
         lcd.print (EEPROM.read(2));//читение еепром
          amp==(EEPROM.read(2));
              float a; 
      { if (amp<<amp2){  // вычисление емкости акб
       a =(float) (amp-amp2)*5/60; }
        lcd.setCursor(3, 1);
        lcd.print(a);
         }
 if (y>=14.6) {
           digitalWrite(Pin2, LOW);
          
          
          EEPROM.write (2, s);
      lcd.setCursor(12, 0);
         lcd.print("RAZ"); 
         lcd.setCursor(12, 1);
        lcd.print (EEPROM.read(1));
         lcd.setCursor(7, 0);
        lcd.print("---");
        
      amp==(EEPROM.read(2));
        }
     
     lcd.setCursor(0, 1);
     lcd.print(s);
     
   
  }delay(1000);}

 

alex1608
Offline
Зарегистрирован: 01.09.2015

 еще вопрос может ли dnt 11 выдавать десятые доли градуса

 

bwn
Offline
Зарегистрирован: 25.08.2014

alex1608 пишет:

 еще вопрос может ли dnt 11 выдавать десятые доли градуса

 

11, вроде как, что угодно может выдавать, выбросьте вы его сразу, а если нужен просто термостат, возьмите DS18B20.

alex1608
Offline
Зарегистрирован: 01.09.2015

я хотел на его базе за климатом в погребе следить температуру влажность

 

alex1608
Offline
Зарегистрирован: 01.09.2015

 в дальнейшем  систему отопления и контроля климатом в доме делать или вы предлагаете на DS18B20.?

bwn
Offline
Зарегистрирован: 25.08.2014

В топку, сразу. Влажность - минимум DHT22 ну или  AM2301, температура DS-ки.

alex1608
Offline
Зарегистрирован: 01.09.2015

Eсть am2302 потянет?

bwn
Offline
Зарегистрирован: 25.08.2014

Сам не юзал, но вроде получше.

alex1608
Offline
Зарегистрирован: 01.09.2015

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <dht11.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#include <dht11.h>
#define DHT11_PIN 2
dht11 DHT;
int Pin1 = 13;
float maxTemperature = 25.5;
int counter = 0;
int a;
 void erorr(){ // останавливает работу программы и сигнализирует ошибку
  digitalWrite(Pin1, LOW); // выключаем реле
   digitalRead (PIN2) ;//читаем датачик DHT11
   
    while(1){ // крутим бесконечный цикл
    
    display.begin();
   
     display.clearDisplay();
  delay(100); 
 display.setTextSize(4);//размер шрифта
    display. setCursor(0,8 );
    display.print("E"); 
    display.display();
     delay(1000);
    }};
    
  
void setup(){
  
 pinMode(Pin1, OUTPUT);  
 digitalWrite(Pin1, LOW);
Serial.begin(9600);
display.begin();

int chk;
chk = DHT.read(DHT11_PIN);
  // Инициализация дисплея
display.clearDisplay();
  display.display();
// Устанавливаем контраст
  display.setContrast(50);
  delay(1000);
  
  }
 
void loop() { display.clearDisplay();
  display.display();delay(100); 
 display.setTextSize(2);//размер шрифта
  display.drawLine(25,0,25,48, BLACK);
  
  
  display.drawLine(52,0,52,48, BLACK);
  display.drawLine(65,0,65,48, BLACK);
  display.drawLine(78,0,78,48, BLACK);
  int chk;
  
  
chk =DHT.read(DHT11_PIN);
float a;
a = DHT.temperature;
   switch (chk){
     case DHTLIB_OK:  
                display. setCursor(0, 10);
                display. print ( DHT.temperature,1); 
                display. setCursor(25,10);
                 display. println( DHT.humidity,1);
                break;
       case  DHTLIB_ERROR_CHECKSUM: 
                 erorr();
                 break;
               case DHTLIB_ERROR_TIMEOUT: 
               display. setCursor(0, 10);
               display.print("E "); 
                break;
      default:     display. setCursor(15, 8);
                display.print("ee\t"); 
                break;}
 display. setCursor(0, 0);
 display.setTextSize(1);//размер шрифта
 display.print ("T");
 display. setCursor(28,0);
 display. print("h");
 display.display();
       if (a>=maxTemperature)
      {digitalWrite(Pin1, HIGH);}
      if (a<maxTemperature)
      {digitalWrite(Pin1, LOW);}
 
      delay(300);
 }

Я немного переделал скйтч сделал отключение выхода при отсутствии термодатчик и выводом ошибки на экран ,но после ошибки ндикации ошибки при востановлеии датчика  приходится перезапускать ,как сделать чтоб самовостанавливалось? 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Строка 16, ничего не кажет?

bwn
Offline
Зарегистрирован: 25.08.2014

vitalikost пишет:

Строка 16, ничего не кажет?

Это очень сильное колдунство))))

Koed
Offline
Зарегистрирован: 03.09.2015

 

Вот для тех кто не умеет искать работу workscan.ru

alex1608
Offline
Зарегистрирован: 01.09.2015

16 строка  загоняет в бесконечный цикл но как его разорвать при востановлениии термодатчика ?

vitalikost
Offline
Зарегистрирован: 28.11.2014

Ну тогда отключение реле после 71 строчки, а блок в 80-91 перенести после строчки 68. Както так. erorr(); - удалить, или закоментировть

alex1608
Offline
Зарегистрирован: 01.09.2015

ИЗМЕНИЛ (удалил erorr() ),  заменил с 70строки и заработало 

[code]
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <dht11.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#include <dht11.h>
#define DHT11_PIN 2
dht11 DHT;
int Pin1 = 13;
float maxTemperature = 25.5;
int counter = 0;
int a;
 
    
  
void setup(){
  
 pinMode(Pin1, OUTPUT);  
 digitalWrite(Pin1, LOW);
Serial.begin(9600);
display.begin();

int chk;
chk = DHT.read(DHT11_PIN);
  // Инициализация дисплея
display.clearDisplay();
  display.display();
// Устанавливаем контраст
  display.setContrast(50);
  delay(1000);
  
  }
 
void loop() { display.clearDisplay();
  display.display();delay(100); 
 display.setTextSize(2);//размер шрифта
  display.drawLine(25,0,25,48, BLACK);
  
  
  display.drawLine(52,0,52,48, BLACK);
  display.drawLine(65,0,65,48, BLACK);
  display.drawLine(78,0,78,48, BLACK);
  int chk;
  
  
chk =DHT.read(DHT11_PIN);
float a;
a = DHT.temperature;
   switch (chk){
     case DHTLIB_OK:  
                display. setCursor(0, 10);
                display. print ( DHT.temperature,1); 
                display. setCursor(25,10);
                 display. println( DHT.humidity,1);
                 display. setCursor(0, 0);
                display.setTextSize(1);//размер шрифта
               display.print ("T");
                display. setCursor(28,0);
                display. print("h");
               display.display();
       if (a>=maxTemperature)
               {digitalWrite(Pin1, HIGH);}
      if (a<maxTemperature)
               {digitalWrite(Pin1, LOW);}
               delay(300);
              break;
       case  DHTLIB_ERROR_CHECKSUM: 
                 digitalWrite(Pin1, LOW) ;
                 display.setTextSize(3);
                 display. setCursor(0, 10);
                  display.println("erorr ");
                  display.display();
                 delay(300);
                 break;
      case DHTLIB_ERROR_TIMEOUT: 
               digitalWrite(Pin1, LOW);
                display.setTextSize(3);
               display. setCursor(0, 10);
               display.println("Eror "); 
               display.display();
               delay(300);
                break;
      default:     display. setCursor(15, 8);
                     display.print("ee\t"); 
                break;} }

[/code]