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
https://www.aliexpress.com/item/ESP8266-serial-WIFI-Witty-cloud-Development-Board-ESP-12F-module-MINI-nodemcu/32647542572.html?ws_ab_test=searchweb0_0,searchweb201602_1_116_10065_117_10068_114_115_113_10000007_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10037_10054_10059_10032_10099_10078_10079_10077_10073_10097_10100_10096_10070_423_10052_10050_424_10051,searchweb201603_2&btsid=2a9a18da-5db4-437d-9a8c-e1b3767969dd
ахуенчик двухэтажный.
WIFI с ардуиной, как я понял.
легко программируется
в 3 раза меньше уно.
вот думаю, перенести этот проэкт на него.
он и интерапты, вроде поддерживает. это для motion важно.
no subject