ดิว.นินจา

ดิว.นินจา

Wednesday, May 24, 2017

Arduino Basics: การอ่านค่าจากเซนเซอร์วัดแรง

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

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...