arduino กับ pressure sensor
เบอร์ที่เลือกใช้ในบทความนี้
Pressure sensor MPX5010DP
Pressure sensor MPX101
Pressure sensor MPX5050
Pressure Sensor คือ อุปกรณ์ตรวจวัดความดันของก๊าซหรือเหลว เซ็นเซอร์จะส่งสัญญาณทางไฟฟ้าที่มีความสัมพันธ์กับความดัน เซนเซอร์ถูกสร้างให้มีเยื่อบางที่สามารถโค้งงอตามความดัน ซึ่งระดับความโค้งงอ สามารถวัดได้ด้วยการเปลี่ยนแปลงความต้านทาน หรือ การเปลี่ยนแปลงของการเก็บประจุในการพัฒนาเซ็นเซอร์แรกเริ่มทำด้วยวิธีการประดิษฐ์โครงสร้างจุลภาคบนพื้นผิว (Surface Micromachining) สำหรับใช้งานในช่วงความดันต่างๆ เพื่อประยุกต์ใช้ในอุตสาหกรรมยานยนต์และเซ็นเซอร์ตรวจวัดแรงดันในเส้นเลือด เป็นต้น
ขาที่ใช้ในการต่อ กับ ตัว arduino จ่ายไฟเลี้ยง 5V GND และ ขา A0
code การทำงาน ตัว
Pressure sensor ให้ output เป็นแรวดัน แปรผันตามความแรงของลมดังนั้นเราสามารถ เขียนโปรแกรม อ่านค่า ADC แล้วแสดงผลทาง serial ได้เลยครับ
// Pin 1 (notch) - Analog output // Pin 2 - Gnd // Pin 3 - 5V int sensorPin = A0; // Select input pin for the potentiometer int sensorValue = 0; // Variable stores value coming from the sensor void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); // Read sensor Serial.println(sensorValue, DEC); // Display result delay(400); // Wait 400 milliseconds }
ดู output ทาง serial monitor ครับเราสามารถประยุกต์ ตั้งค่าต่างได่ เช่น ตั้งค่าว่าถ้ามีแรงดันลมในช่วง ช่วงหนึ่งแล้วให้อุปกรณ์อะไรสักอย่างทำงานประมาณนี้ครับ
ตัวอย่างที่ แสดงค่าออกทาง LCD และแปลงค่า เป็น KPA
อยู่ด้านล่างนี้ครับ
#include <LiquidCrystal.h>
#include <Wire.h>
#define kpa2atm 0.00986923267
// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// pin defs
int pressurePin = 0;
int ledPin = 13;
// variables
byte res;
byte msb;
byte lsb;
int val;
float tC; // temperature in Celsius
float tF; // temperature in Fahrenheit
float pkPa; // pressure in kPa
float pAtm; // pressure in Atm
unsigned long time;
void setup()
{
// set up led pin as output
pinMode(ledPin, OUTPUT);
// set up the LCD's number (col,row):
lcd.begin(20, 2);
lcd.print("Temp");
Serial.begin(9600);
Wire.begin();
}
void loop()
{
/* turn led ON */
//digitalWrite(ledPin, HIGH);
lcd.clear();
/* get and print current time */
time = millis()/1000;
//lcd.print(time);
Serial.print(time);
Serial.print(": ");
/* get the pressure */
val = analogRead(pressurePin);
pkPa = ((float)val/(float)1023+0.095)/0.009;
pAtm = kpa2atm*pkPa;
/* show pressure in kPa on LCD */
lcd.setCursor(0,0);
lcd.print(pkPa);
lcd.print("kPa");
lcd.setCursor(0,1);
lcd.print(pAtm);
lcd.print(" Atm");
/* send pressure to serial port */
Serial.print(pkPa);
Serial.print("kPa ");
Serial.print(pAtm);
Serial.print("Atm ");
/* get temperature from TMP102 */
res = Wire.requestFrom(72,2);
if (res == 2) {
msb = Wire.receive(); /* Whole degrees */
lsb = Wire.receive(); /* Fractional degrees */
val = ((msb) << 4); /* MSB */
val |= (lsb >> 4); /* LSB */
/* calculate temperature */
tC = val*0.0625;
tF = (tC * 9/5) + 32;
/* show temperatures on display */
lcd.setCursor (12,0);
lcd.print(tC);
lcd.print("\xdf""C");
lcd.setCursor(12, 1);
lcd.print(tF);
lcd.print("\xdf""F");
Serial.print(tC);
Serial.print("C ");
Serial.print(tF);
Serial.println("F");
}
else {
lcd.print("ERR");
Serial.println("ERROR");
}
/* turn led off */
//digitalWrite(ledPin, LOW);
delay(1000);
}