Panyakorn
(Panyakorn Sawetbandanchai)
1
อยากทราบแนวทาง การใช้ Delay ยกตัวอย่างเช่น
อยากเราเซตอุณหภูมิไว้ที่ 25 องศาเซลเซียส (ณ เวลานี้ อุณหภูมิ 30 องศาเซลเซียส)
Relay1 ติด เพื่อที่ให้อุณหภูมิลดลง = 25 องศาเซลเซียส
ปัญหาคือ พออุณหภูมิอยู่ระหว่างช่วง 25-26 องศาเซลเซียส จะเกิดอาการ ติด / ดับ ทำให้เครื่องใช้ไฟฟ้าเราเกิดการชำรุญ
อยากทราบแนวทาง การเขียนโค้ดครับ ขอบคุณครับ
Panyakorn
(Panyakorn Sawetbandanchai)
3
ใช่ครับโดย คำสั่งที่ช่วงเวลา การติดดับของเครื่องใช้ไฟฟ้านั้นๆ อะครับ
Remy_Martin
(Permpol Thanapunnamas)
4
ถ้าเราใช้
if ( Temp >= 25) {
Relay1 ON
}else{
Relay1 Off
}
Temp = 26 Relay1 On
Temp = 25 Relay1 On
Temp = 24 Relay1 Off
if ( Temp == 25) {
Relay1 ON
}else{
Relay1 Off
}
Temp = 26 Relay1 Off
Temp = 25 Relay1 On
Temp = 24 Relay1 Off
ต้องเอาโค้ตมาดูครับว่าเขียนแบบไหนจึงเจอปัญหานี้
Panyakorn
(Panyakorn Sawetbandanchai)
5
int setTempMin;
int setTempMax;
int setHumid;
BLYNK_WRITE(V21) //temperature slider in app on pin V21
{
setTempMin = param.asInt();
}
BLYNK_WRITE(V22) //temperature slider in app on pin V22
{
setTempMax = param.asInt();
}
BLYNK_WRITE(V23) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}
void setup() {
Serial.begin(115200);
pinMode (Relay1,OUTPUT);
pinMode (Relay2,OUTPUT);
pinMode (Relay3,OUTPUT);
pinMode (Relay4,OUTPUT);
pinMode (Ledin,OUTPUT);
digitalWrite ( Ledin,LOW);
digitalWrite (Relay1,HIGH);
digitalWrite (Relay2,HIGH);
digitalWrite (Relay3,HIGH);
digitalWrite (Relay4,HIGH);
WiFiManager wifiManager;
wifiManager.resetSettings();
wifiManager.autoConnect("AutoConnectAP");
Serial.println("connected...yeey :)");
Blynk.config(auth,"oasiskit.com", 8080);
dht1.begin();
dht2.begin(); // this seems to fail in combination with blynk, works just fine "offline" doesnt seam to read sensor 2 with blynk part of the code..
timer.setInterval(2000L, sendsensor1);
timer.setInterval(2000L, sendsensor2); // probobly not needed twice, timers are wierd things... wiki..
}
void loop() {
//delay(2000);
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float f1 = dht1.readTemperature(true);
if (isnan(h1) || isnan(t1) || isnan(f1)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
//auto
if ( _button_ma == true){
if ((t1 >= setTempMax)||(t1 <= setTempMin )||(h1 <= setHumid))
{
digitalWrite (Relay2,LOW);
led2.on();
}
else
{
digitalWrite (Relay2,HIGH);
led2.off();
}
if (t1 >= setTempMax)
{
digitalWrite (Relay1,LOW);
led1.on();
}
else if (t1 < setTempMax)
{
digitalWrite (Relay1,HIGH);
led1.off();
}
if (t1 <= setTempMin )
{
digitalWrite (Relay4,LOW);
digitalWrite (Ledin,HIGH);
led4.on();
}
else if (t1 > setTempMin)
{
digitalWrite (Relay4,HIGH);
digitalWrite (Ledin,LOW);
led4.off();
}
if (h1 <= setHumid)
{
digitalWrite (Relay3,LOW);
led3.on();
}
else if (h1 > setHumid)
{
digitalWrite (Relay3,HIGH);
led3.off();
}
}else{ //manual
if (_button1 == true){
digitalWrite(Relay1, LOW);
led1.on();
}else{
digitalWrite(Relay1, HIGH);
led1.off();
}
if (_button2 == true){
digitalWrite(Relay2, LOW);
led2.on();
}else{
digitalWrite(Relay2, HIGH);
led2.off();
}
if (_button3 == true){
digitalWrite(Relay3, LOW);
led3.on();
}else{
digitalWrite(Relay3, HIGH);
led3.off();
}
if (_button4 == true){
digitalWrite(Relay4, LOW);
digitalWrite (Ledin,HIGH);
led4.on();
}else{
digitalWrite(Relay4, HIGH);
digitalWrite (Ledin,LOW);
led4.off();
}
}
นี้เป็นโค้ดแค่บางส่วนนะครับ ผมใช้ slider ของ blynk เป็นตัว setTem ครับ
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
7
เป็นแค่ Relay1 เท่านั้นใช่ไหม
Panyakorn
(Panyakorn Sawetbandanchai)
8
void loop ครับ Relay1 แค่ยกตัวอย่างเฉยๆครับ Run โค้ดได้ปกตินะครับ เพียงอยากทราบสมการ delay time on/off อะครับ
setTempMax
setTempMin
setHumid
Relay… (LOW/HIGH)
คือปัญหามัน อยู่ช่วง ณ ค่านั้นๆ ก็จะ ติดดับๆ
อยากให้ที่ช่วงเวลาการติดดับ ของ Relay แต่ละตัวครับ
Remy_Martin
(Permpol Thanapunnamas)
9
จะหน่วงเวลา เปิดปิดหรอครับ
Panyakorn
(Panyakorn Sawetbandanchai)
10
อย่างเช่นระบบ แอร์แบบเก่า อะครับ
เขาจะมีช่วงเวลา ติดดับ อะครับ
Remy_Martin
(Permpol Thanapunnamas)
11
หมายถึงจะใส่ช่วงเวลา เปิด / ปิด ให้ Relay ทำงานใช่ไหม
PUYIOT
(อิทธิรงค์ ทองย้อย (ปุ๋ย))
13
(แนวคิด)
ปัญหานี้ เราคงต้องทำช่วงเวลาเอาไว้ 2 ช่วง นะครับ คือเราควรต้องมี Slide bar ใน Blynk 2 ตัวโดย
- ตัวที่ 1 คือค่า temp Min. (>=)
- ตัวที่ 2 คือค่า temp Max. (<=)
if (tempmin >= 25 and tempmax >= 30 ){
เงื่อนไข....
}
หมายถึง ถ้า Temp มีค่าอยู่ในช่วง 25 - 30 องศาเซลเซียส ก็ให้เงื่อนไขใน If ทำงาน
แต่ จะมีอยู่ 2 ช่วงครับที่เลี่ยงได้ไม่ง่ายนักคือ
- ช่วง temp min แกว่ง ไปมาระหว่าง 25.01 แล้วกลับมา 24.9
- ช่วง temp max แกว่ง ไปมาระหว่าง 30.1 แล้วกลับมา 30.0
วิธีแก้คือ ช่วงที่มันแกว่ง เราก็ใช้การหน่วงเวลา ก่อน สมมุติหน่วงไว้ 5 วินาที ก็หมายถึง ช่วงที่มันแกว่งก็อย่าให้มันทำงาน ก่อน รอ 5 วินาที กลับไปกลับมา เรื่อยๆ จนค่า เริ่มนิ่ง แล้วจึงทำเงื่อนไขใน If ต่อไป ok มันอาจจะใช้เวลาในการเชคค่า นิดหน่อย ช่วงแกว่ง แต่ก็สามารถลดปัญหาอุปกรณ์ทำงาน ตัดต่อถี่เกินไปได้ครับ
1 Likes
Panyakorn
(Panyakorn Sawetbandanchai)
14
ขอบคุณมากครับ ผมจะลองแก้โค้ดใหม่ครับ