arduino กับ Dust sensor วัดฝุ่นละออง2
สวัสดีครับ วันนี้เรามาทดลองการเขียนโปรแกรม arduino กับ Dust sensor หรือ sensor วัดฝุ่นละอองกันครับ
ก่อนอื่นเรามาดูก่อนนะครับว่า โครงสร้างภายในของตัว sensor เป็นยังไงกันบ้าง
เท่าที่เราได้ดูกันนะครับก็จะเห็นว่าโครงสร้างภายในก็ไม่มีอะไรมากมาย มีตัวรับและตัวส่ง infraed และ lens ขยายกับวงจรขยาย gain
พร้อมกับ VR2 ตัวเอาไว้ปรับความละเอียด
ต่อมา มาดู Pin Out put ครับ
สายไฟสีส้ม นับเป็น ขา1 นะครับ
***ย้ำ นะครับ สายสีแดงของ Dust sensor ไม่ใช่สายต่อ 5V นะครับ ห้ามต่อ 5V นะครับ ไม่นั้นอาจจะพังได้ครับ***
เมื่อทราบแล้วว่า ขาอะไรเป็นขาอะไร ต่อมามาดูว่าจะต่อ
ขาเข้าตัว Arduino กับตัว Dust Sensor
Pin 1 of dust sensor -> Ground of Arduino Uno
Pin 2 of dust sensor -> Digital 6 of Arduino Uno
Pin 3 of dust sensor -> +5V of Arduino Uno
Pin 5 of dust sensor -> Ground of Arduino Uno
เมื่อต่อสายเสร็จ ต่อมาก็มาดู code กันครับ
#include<string.h>
byte buff[2];
int pin = 6;//DSM501A input D6
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 10000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
int i=0;
void setup()
{
Serial.begin(9600);
pinMode(6,INPUT);
starttime = millis();
Serial.println("Dust Start");
}
void loop()
{
duration = pulseIn(pin, LOW);
lowpulseoccupancy += duration;
endtime = millis();
if ((endtime-starttime) > sampletime_ms)
{
ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0); // Integer percentage 0=>100
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
Serial.print("lowpulseoccupancy:");
Serial.print(lowpulseoccupancy);
Serial.print("\n");
Serial.print("ratio:");
Serial.print(" ");
Serial.print(ratio);
Serial.print("DSM501A:");
Serial.println(concentration);
Serial.print("\n\n");
lowpulseoccupancy = 0;
starttime = millis();
}
// Serial.println(duration);
delay(200) ;
}
//*************************************
unsigned long sampletime_ms = 10000; คือ คำส่งที่ต้องการตรวจวัดทุกกี่วินาที
duration = pulseIn(pin, LOW); ตรวงสอบค่า PWM ที่เข้ามา
สูตรการคำนวณ
ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0); // Integer percentage 0=>100
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
Serial.println(concentration); concentration คือค่าปริมาณ output หรือ ค่าปริมาณฝุ่นนั้นเอง
ให้ดู OUTPUT ทาง Seriar monitor ครับจะเห็นค่า Output sensor
เพียงเท่านี้ เราก้สามารถตรวจสอบปริมาณฝุ่นละอองได้แล้วครับ แนะให้นะผงแป้งหรือ ใช้ไม้ปัดฝุ่น
ปัดบริเวณ sensor ครับแล้วจะเห็นการเปลี่ยนแปลงครับ
ขอบคุณครับ ขอให้สนุกกับการเขียนโปรแกรม บน Arduino ครับ