Arduino เป็นบอร์ดทดลองที่ได้รับความนิยมอย่างมากในปัจจุบันโดยเฉพาะสำหรับผู้เริ่มต้นศึกษาการเขียนโปรแกรมสำหรับระบบฝังตัว ดังนั้นผู้เขียนจึงมีความคิดที่จะแลกเปลี่ยนประสบการณ์เกี่ยวกับการใช้งาน Arduino บนเว็บนี้ โดยตั้งชื่อชุดของบทความนี้ว่า Arduino Basics ซึ่งโดยทั่วไปจะกล่าวถึงการเขียนโปรแกรมติดต่อสื่อสารกับอุปกรณ์ประเภทต่างๆ ที่ได้ทดสอบแล้วว่าทำงานได้จริง บทความแรกนี้จะเป็นการทดลองอ่านค่าจากเซนเซอร์สำหรับวัดแรงกด
การวัดแรงที่กดลงบนผิวของวัตถุมีประโยชน์ในงานอุตสาหกรรมบางประเภท ยกตัวอย่างโครงสร้างแขนกลในรูปที่ 1 ที่นำมาใช้สำหรับเช็ดกระจกให้สะอาด เนื่องจากกระจกเป็นวัสดุที่เปราะบาง จึงจำเป็นต้องมีการวัดค่าแรงกดที่จุดสัมผัสของตัวทำงานส่วนปลายและควบคุมมิให้แรงกดบนผิวกระจกมากเกินค่าที่กำหนด
รูปที่ 1 โครงสร้างของแขนกลสำหรับทำความสะอาดกระจก
เซนเซอร์วัดแรงมีหลายประเภท แต่ที่นิยมใช้คือ มาตรวัดความเครียด (stain gauge) ที่ค่าความต้านทานเปลี่ยนแปลงตามแรงที่กดลงบนหน้าสัมผัส ตัวอย่างของเซนเซอร์ที่ใช้ในบทความนี้คือ
Force sensitive resistor แบบพื้นที่วงกลมรัศมี 0.5 นิ้ว ดังแสดงในรูปที่ 2 โดยสามารถซื้อได้จาก
ThaiEasyElec เซนเซอร์นี้มีความเหมาะสมในการรับแรงในช่วง 0 – 1 kg ที่ไม่ต้องการความแม่นยำมากนัก (คือสามารถประมาณค่าแรงกดได้อย่างหยาบๆ ไม่เหมาะที่จะนำมาสร้างเครื่องวัดแรงมาตรฐาน)
รูปที่ 2 force sensitive resistor 0.5” (ภาพจาก ThaiEasyElec)
ข้อมูลจากดาต้าชีทของบริษัทผู้ผลิตแสดงกราฟการเปลี่ยนแปลงของความต้านทาน จากค่าที่มากกว่า 100 KOhms เมื่อไม่มีแรงกด ลดลงมาเหลือประมาณ 1 KOhms ที่แรงกด 1 kg อย่างไรก็ตามกราฟนี้เป็นเพียงค่าโดยประมาณซึ่งขึ้นอยู่กับขนาดและรูปร่างของเซนเซอร์ด้วย ดังนั้นควรมีการทดสอบทางปฏิบัติกับเซนเซอร์ตัวที่ใช้งานจริง
รูปที่ 3 แสดงแผนภาพการต่อเซนเซอร์เข้ากับบอร์ด Arduino โดยต่อในลักษณะวงจรแบ่งแรงดัน (voltage divider) ร่วมกับตัวต้านทาน 10 KOhms เข้ากับแหล่งจ่าย 5 V เอาต์พุตคือแรงดันที่ตกคร่อมตัวเซนเซอร์ ต่อเข้ากับขาแอนะล็อกอินพุต A0 ใช้แผ่น PCB อเนกประสงค์สร้างเป็นชิลด์อย่างง่ายประกบกับบอร์ด Arduino UNO R3 ดังแสดงในรูปที่ 4
รูปที่ 3 แผนภาพการต่อเซนเซอร์กับบอร์ด Arduino
รูปที่ 4 การประกอบวงจรบนชีลด์อเนกประสงค์
การทดสอบจะใช้ Arduino sketch ง่ายๆ ดังนี้
// sensor_read.ino : read force sensor
float ad2v;
float vs = 0; // output voltage value
int advalue;
void setup() {
Serial.begin(115200);
ad2v = 5000/1024; // convert AD unit to mV
}
void loop() {
advalue = analogRead(A0); // read output voltage
vs = 0.001*ad2v*advalue; // unit in V
Serial.println(vs);
delay(500);
}
อธิบายการทำงานได้ดังนี้ หลังจากตั้งค่าความเร็วการสื่อสารพอร์ตอนุกรมและตัวแปรสำหรับปรับมาตราส่วนใน setup() แล้ว ฟังก์ชัน loop() จะอ่านค่าจากขาแอนะล็อก A0 ทุกครึ่งวินาที และแปลงค่าเป็นแรงดัน ก่อนส่งผ่านพอร์ตอนุกรม
คอมไพล์และโหลดโปรแกรมลงบนบอร์ด Arduino เปิดหน้าต่าง serial monitor จะแสดงค่าแรงดันที่อ่านได้ทุก 500 มิลลิวินาที โดยหากไม่ได้แตะต้องเซนเซอร์ แรงดันจะอ่านได้ประมาณ 4 โวลต์ ต่อมาทดลองใช้มือบีบที่เซนเซอร์จากเบาๆ จะพบว่าแรงดันเริ่มตกลง เมื่อเพิ่มแรงบีบมากขึ้นแรงดันจะลดเหลือน้อยลง จากการทดสอบพบว่าเมื่อบีบเซนเซอร์แรงมากแรงดันจะลดลงน้อยสุดเหลือประมาณ 0.15 โวลต์
หากต้องการแสดงเป็นกราฟแทน ให้เปิด Serial Plotter และทดลองเพิ่มแรงบีบที่เซนเซอร์ จะได้กราฟดังแสดงในรูปที่ 5
รูปที่ 5 กราฟแสดงแรงดันที่ลดลงเมื่อมีแรงกดที่เซนเซอร์
สรุป
บทความนี้เป็นการสาธิตการอ่านค่าจากเซนเซอร์ที่ค่าความต้านทานเปลี่ยนแปลงตามแรงกดบนพื้นที่รับแรง โดยต่อเซนเซอร์เข้ากับวงจรแบ่งแรงดันเพื่อแปลงค่าความต้านทานเป็นแรงดันไฟฟ้า ก่อนส่งเข้าขาแอนะล็อกของ Arduino หลักการนี้สามารถประยุกต์ใช้กับเซนเซอร์ทั่วไปที่ค่าความต้านทานเปลี่ยนแปลงตามค่าทางฟิสิกซ์ที่ต้องการวัด เช่น เซนเซอร์วัดความเข้มแสง
ท่านสามารถรับข่าวสารเกี่ยวกับหนังสือ ฮาร์ดแวร์/ซอฟต์แวร์ และคอร์สฝึกอบรม ได้จากเว็บนี้ และเฟซบุค
dewninjathai
No comments:
Post a Comment