Терморегулятор на dnt11 nokia5110
- Войдите на сайт для отправки комментариев
Втр, 01/09/2015 - 15:00
здравствуйте Я новичок в Ардуино стаж 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);
}
строка 44 заменить на a = DHT.temperature;
строка 73 заменить на
if(a>maxTemperature)Для начала, а потом дальше смотреть.
спасибо все работает я просто до этого вобще програмирование не занимался, единстеное что сделал, ТРЕНЕР акб
правда учет емкоти акб не верный а так работет
#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);}еще вопрос может ли dnt 11 выдавать десятые доли градуса
еще вопрос может ли dnt 11 выдавать десятые доли градуса
11, вроде как, что угодно может выдавать, выбросьте вы его сразу, а если нужен просто термостат, возьмите DS18B20.
я хотел на его базе за климатом в погребе следить температуру влажность
в дальнейшем систему отопления и контроля климатом в доме делать или вы предлагаете на DS18B20.?
В топку, сразу. Влажность - минимум DHT22 ну или AM2301, температура DS-ки.
Eсть am2302 потянет?
Сам не юзал, но вроде получше.
#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); }Я немного переделал скйтч сделал отключение выхода при отсутствии термодатчик и выводом ошибки на экран ,но после ошибки ндикации ошибки при востановлеии датчика приходится перезапускать ,как сделать чтоб самовостанавливалось?
Строка 16, ничего не кажет?
Строка 16, ничего не кажет?
Это очень сильное колдунство))))
Вот для тех кто не умеет искать работу workscan.ru
16 строка загоняет в бесконечный цикл но как его разорвать при востановлениии термодатчика ?
Ну тогда отключение реле после 71 строчки, а блок в 80-91 перенести после строчки 68. Както так. erorr(); - удалить, или закоментировть
ИЗМЕНИЛ (удалил 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]