robinbobin (
robinbobin) wrote2016-11-24 01:31 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
я умный как дом
Ардуино спасает мир, а меня от холода.
это маленький шаг для человечества и огромный скачок напряжения.
вот замутил умное реле для печки, без единого гвоздя, с помощью циркуля и линейки.
задача. винтер из каминг, т.е. уже холодно.
у меня есть маленькая печка, как зверь.
работает быстро мощно
за 5 минут в комнате тепло и не сыро.
но тупо.
ейный терморегулятор ни хера не делает.
а тут ардуино и 21 век на дворе.
вот что вышло

и в коробочке, потому что оно размыкает 220 вольт, а это страшно. с учетом криворукости из жопы.
тем не менее работает.
вот что в мониторе

работает просто.
ардуино меряет т-ру датчиком, и если упала < заданной,
включает релюшкой розетку, в которую воткнута зверь-печка.
щас день и оно ее не включает.
а утром, когда дебажил, периодически да.
где-то за полтора часа, минут 10 было включенным.
на самом деле только кажется просто.
а столько всяких мелких вопросов надо было решить.
+ еще надо добавить датчик motion detection шобы если меня нет, или я сплю не включал
+ wifi, чтобы на сервер кидал инфу, и для настроек.
и много еще чего.
но я уже довольный.
и теплый как слон
#define MIN_TEMP 21
#define DELAY 5 // rele rabotaet na sec
#define RELAY_PIN 6
#define DHT_PIN 7 // what digital pin we're connected to
// TERMOMETR
#include "DHT.h"
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHT_PIN, DHTTYPE);
unsigned int WasOn = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("DHT & Relay!");
// init termometr
dht.begin();
WasOn = 0;
// init relay
pinMode(RELAY_PIN, OUTPUT);
//digitalWrite(RELAY_PIN, LOW); // turn the Relay on (HIGH is the voltage level)
delay(5 * 1000);
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
unsigned long mls = millis();
String tmp;
Serial.print("\nTemperature: ");
Serial.print(t);
Serial.print("\tHum: ");
Serial.print(h);
Serial.print("\tMills: ");
tmp = Sec2HMS(mls/1000);
Serial.print(tmp);
//Serial.print(mls);
Serial.print("\tWasOn: ");
//tmp = ;
Serial.println(Sec2HMS(WasOn));
if (t < MIN_TEMP) {
TurnOnRelay(DELAY);
} else {
TurnOffRelay(DELAY);
}
}
String Sec2HMS(int sec){
String out = "";
int hours = sec / 3600;
int minutes = sec / 60 %60;
int ss = sec % 60;
out += hours;
out += ":";
out += minutes;
out += ":";
out += ss;
//out += " ss end ";
return out;
}
void TurnOnRelay(int sec) {
Serial.print("Turn ON relay for seconds ");
Serial.println(sec);
digitalWrite(RELAY_PIN, HIGH); // turn the LED off by making the voltage LOW
delay(sec * 1000); // wait for a second
WasOn = WasOn + sec;
}
void TurnOffRelay(int sec) {
Serial.print("Turn OFF relay for seconds ");
Serial.println(sec);
digitalWrite(RELAY_PIN, LOW); // turn the LED off by making the voltage LOW
delay(sec * 1000); // wait for a second
}
это маленький шаг для человечества и огромный скачок напряжения.
вот замутил умное реле для печки, без единого гвоздя, с помощью циркуля и линейки.
задача. винтер из каминг, т.е. уже холодно.
у меня есть маленькая печка, как зверь.
работает быстро мощно
за 5 минут в комнате тепло и не сыро.
но тупо.
ейный терморегулятор ни хера не делает.
а тут ардуино и 21 век на дворе.
вот что вышло

и в коробочке, потому что оно размыкает 220 вольт, а это страшно. с учетом криворукости из жопы.
тем не менее работает.
вот что в мониторе

работает просто.
ардуино меряет т-ру датчиком, и если упала < заданной,
включает релюшкой розетку, в которую воткнута зверь-печка.
щас день и оно ее не включает.
а утром, когда дебажил, периодически да.
где-то за полтора часа, минут 10 было включенным.
на самом деле только кажется просто.
а столько всяких мелких вопросов надо было решить.
+ еще надо добавить датчик motion detection шобы если меня нет, или я сплю не включал
+ wifi, чтобы на сервер кидал инфу, и для настроек.
и много еще чего.
но я уже довольный.
и теплый как слон
#define MIN_TEMP 21
#define DELAY 5 // rele rabotaet na sec
#define RELAY_PIN 6
#define DHT_PIN 7 // what digital pin we're connected to
// TERMOMETR
#include "DHT.h"
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHT_PIN, DHTTYPE);
unsigned int WasOn = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("DHT & Relay!");
// init termometr
dht.begin();
WasOn = 0;
// init relay
pinMode(RELAY_PIN, OUTPUT);
//digitalWrite(RELAY_PIN, LOW); // turn the Relay on (HIGH is the voltage level)
delay(5 * 1000);
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
unsigned long mls = millis();
String tmp;
Serial.print("\nTemperature: ");
Serial.print(t);
Serial.print("\tHum: ");
Serial.print(h);
Serial.print("\tMills: ");
tmp = Sec2HMS(mls/1000);
Serial.print(tmp);
//Serial.print(mls);
Serial.print("\tWasOn: ");
//tmp = ;
Serial.println(Sec2HMS(WasOn));
if (t < MIN_TEMP) {
TurnOnRelay(DELAY);
} else {
TurnOffRelay(DELAY);
}
}
String Sec2HMS(int sec){
String out = "";
int hours = sec / 3600;
int minutes = sec / 60 %60;
int ss = sec % 60;
out += hours;
out += ":";
out += minutes;
out += ":";
out += ss;
//out += " ss end ";
return out;
}
void TurnOnRelay(int sec) {
Serial.print("Turn ON relay for seconds ");
Serial.println(sec);
digitalWrite(RELAY_PIN, HIGH); // turn the LED off by making the voltage LOW
delay(sec * 1000); // wait for a second
WasOn = WasOn + sec;
}
void TurnOffRelay(int sec) {
Serial.print("Turn OFF relay for seconds ");
Serial.println(sec);
digitalWrite(RELAY_PIN, LOW); // turn the LED off by making the voltage LOW
delay(sec * 1000); // wait for a second
}
no subject
а если питать через черное гнездо, то какое напряжение нужно подавать?
на сайте пишут
Input Voltage (recommended) 7-12V
Input Voltage (limit) 6-20V
это правда?
и какая полярность? плюс центральный?
(no subject)
no subject
проще наверное на базе таймера, а не детектора движения что-то усовершенствовать
для несбивающегося таймера вроде модули расширения есть
типа если на ebay поискать на слова
Small DS3231 AT24C32 IIC Modul Precision Real Time Clock Module For Arduino
no subject
что можно придумать кроме SD карт
ebay. com/itm/Mini-SD-Card-Module-Memory-Module-Micro-SD-Card-Module-for-Arduino-AVR-ARM-/141976885465
такая штука кстати совместима с UNO ?
есть еще подобные для большеразмерной SD карты
но там 2 рядя пинов
куда втыкать не понятно
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)