ขอวิธีทำให้ค่า capacitive soil moisture sensor ไม่แกว่งได้ไหมครับ?

มีวิธีทำให้ค่าที่ได้มันไม่แกว่งไปแกว่งมาไหมครับ

void sendSoilValue() {
  sensorValue = analogRead(A0);
  percentageHumididy = map(sensorValue, 0, 1024, 0, 100);

  Blynk.virtualWrite(V5, percentageHumididy);
  Blynk.virtualWrite(V0, sensorValue);

  Serial.print(percentageHumididy);
  Serial.println("%");
  Serial.print("A0 = ");
  Serial.println(sensorValue);
  delay(100);
}
1 Likes

นำมาเฉลี่ยกันครับ เช่น อ่านค่า 3 รอบ เอามาหาค่าเฉลี่ย แล้วค่อยส่งออกมา ค่าที่ได้จะนิ่งกว่า ลองศึกษาทำความเข้าใจโค้ตตัวอย่างนี้ดูครับ แล้วเอาผลมาดูกัน

int _sensorValue[3];
int avr_sensorValue;

void sendSoilValue() {

  for (int i = 0; i >= 3; i++) {
    _sensorValue[i] = analogRead(A0);
  }

  if (i == 3) {
    avr_sensorValue = ( _sensorValue[0]+ _sensorValue[1]+ _sensorValue[2])/3;
    percentageHumididy = map(avr_sensorValue, 0, 1024, 0, 100);
    Blynk.virtualWrite(V5, percentageHumididy);
    Blynk.virtualWrite(V0, avr_sensorValue);
    Serial.print(percentageHumididy);
    Serial.println("%");
    Serial.print("A0 = ");
    Serial.println(avr_sensorValue);
    delay(100);
  }

}

C:\Users\P\Documents\Arduino\All_Project\02_MyPJ_Smart AIOT Farm\SANTIDHAM_AIOT_Watering_Systems_4.0\SANTIDHAM_AIOT_Watering_Systems_4.0.ino: In function ‘void sendSoilValue()’:
SANTIDHAM_AIOT_Watering_Systems_4.0:179:7: error: ‘i’ was not declared in this scope
179 | if (i == 3) {
| ^
exit status 1
‘i’ was not declared in this scope

int _sensorValue[3];
int avr_sensorValue;
int j=0;
void sendSoilValue() {

  for (int i = 0; i >= 3; i++) {
    _sensorValue[i] = analogRead(A0);
    j++;
  }

  if (j == 3) {
    avr_sensorValue = ( _sensorValue[0]+ _sensorValue[1]+ _sensorValue[2])/3;
    percentageHumididy = map(avr_sensorValue, 0, 1024, 0, 100);
    Blynk.virtualWrite(V5, percentageHumididy);
    Blynk.virtualWrite(V0, avr_sensorValue);
    Serial.print(percentageHumididy);
    Serial.println("%");
    Serial.print("A0 = ");
    Serial.println(avr_sensorValue);
    delay(100);
    j=0;
  }

}

ค่าไม่เปลี่ยนเลยครับ คงที่แบบนี้ตลอด เมื่อกี้ไปถอดตัวเซ็นเซอร์ออกจากดินแล้ว ค่าก็ยังคงอยู่ที่ 81

ใน serial มันโชว์ค่าอะไรบ้าง ตรงนี้ออกไหม

fde0fe22739055eb88c28814f92a70fb01621999_2_321x500_LI

ค่าน่าจะตรงกับตัวนี้หรือเปล่า 834 คือค่าที่ส่งไปที่ V0 ส่วนใน serial ไว้ต้องทำพรุ่งนี้ ได้ผลยังไง แจ้งให้ทราบอีกทีครับ

ที่ให้เช็คเพื่อยืนยันว่าโปรแกรมมันเข้าไปทำงาน ใน if (j == 3) หรือไม่ ครับ เพื่อจะดูว่ามันส่งค่ามาใช่หรือไม่

เอาที่สะดวกครับ ผมเรื่อยๆ

ใน serial ไม่แสดงค่าอะไรเลยครับ ส่วนในตัวแอฟ blynk ก็แสดงค่าเป็น 81% 834 เหมือนเดิมครับ

อ่อ ผมเขียนไม่ได้เอาเปะหรือเทสบนบอร์ดนะครับ ลองใช้ความสามารถเราดูหน่อยว่ามันบัคตรงไหน ถึงทำให้ ไม่เข้าเงื่อนไข j == 3

Hair Think GIF by CRPTC CHILD

ลองปรับดูและศึกษาแล้ว ก็ไม่ได้เลยครับ