การเชื่อมต่อ Flex Sensor กับ Arduino และ Servo Motor
เกี่ยวกับ Flex Sensor
Flex sensor คือตัวต้านทานแบบยืดหยุ่น มีสองขา เมื่อใดก็ตามที่คุณงอ Flex sensor ค่าความต้านทานของมันจะเปลี่ยนไป ค่าความต้านทานของมันจะต่ำสุดเมื่อมันคลายตัวหรือเหยียดตรง และค่าความต้านทานจะสูงสุดเมื่องอ
มันเป็นไปตามหลักความต้านทานไฟฟ้า
ρ = RA/l
โดยที่ ρ = ความต้านทานไฟฟ้าของวัสดุ
R = Resistance
A = พื้นที่ของวัสดุ
l = ความยาวของวัสดุ
การวัดค่า Resistance ของ Sensor
เชื่อมต่อ Flex sensor เข้ากับมัลติมิเตอร์ และตั้งค่ามัลติมิเตอร์ไปที่โหมด Resistance
จดค่า Resistance ของมันเมื่ออยู่ในสภาวะปกติ คือ เหยียดตรง (มุมงอ = 0°)
จดค่า Resistance ของมันเมื่องอเต็มที่ (มุมงอ = 180°)
ถึงเวลาเชื่อมต่อมันเข้ากับบอร์ด Arduino แล้ว
การเชื่อมต่อ Flex Sensor กับ Arduino
เนื่องจาก Flex sensor เป็น Variable Resistor เราจึงไม่สามารถเชื่อมต่อโดยตรงกับ Arduino ได้ เราต้องการวงจร Voltage Divider Resistor ตัวแรกจะเป็นแบบ Fixed Resistor โดยค่าของ Resistor นี้จะต้องเท่ากับค่า Max Resistance ของ Flex sensor Fixed Resistor และ Flex sensor จะต้องเชื่อมต่อแบบอนุกรม Fixed Resistor ต้องเชื่อมต่อกับ 5V ในขณะที่ Flex sensor ต้องเชื่อมต่อกับ GND จุดเชื่อมต่อของทั้งสองจะต้องเชื่อมต่อกับ Pin A0 ของบอร์ด
การเชื่อมต่อ Servo Motor
Servo Motor มีสามขาได้แก่ Power, Ground และ Signal ขา Power และ Ground จะต้องเชื่อมต่อกับ Pin 5V และ GND ของบอร์ดตามลำดับ ขา Signal สามารถเชื่อมต่อกับ Digital Pin ใดก็ได้
บันทึกค่า Analog Input โดยการงอ Sensor ตั้งแต่ค่าต่ำสุดไปจนถึงสูงสุด
Servo Motor ต้องการค่ามุมเป็นองศาตั้งแต่ 0° ถึง 180° แต่ข้อมูล Sensor สามารถเป็นค่าใดก็ได้ตั้งแต่ 0 ถึง 1024
ใช้โค้ดด้านล่างเพื่อแปลงค่า Flex sensor ให้เป็นค่ามุม Servo Motor ที่เป็นสัดส่วนกัน
int const min_flex_val= 159 // analog input value for straight sensor
int const max_flex_val= 511 // analog input value for totally bended sensor
float flex_value = analogRead(A0);
float y= ((flex_value - min_flex_val)/(max_flex_val-min_flex_val));
int angle=(y*180); //angle value will be in the range 0 to 180
เมื่อทำตามขั้นตอนข้างต้น มอเตอร์ของคุณควรหมุนตามสัดส่วนการงอของ Sensor
สิ่งนี้สามารถนำไปใช้ในการควบคุมมือของหุ่นยนต์ หรือเลียนแบบท่าทางมือของมนุษย์ได้
รายละเอียดทางเทคนิคเพิ่มเติม
อินเทอร์เฟซจลนศาสตร์ชีวกลศาสตร์
โปรเจกต์นี้เลียนแบบการเคลื่อนไหวของนิ้วหรือแขนขาของมนุษย์ โดยการแมปการงอทางกายภาพของ Flex sensor ไปยังตำแหน่งเชิงมุมของ Servo Motor
- การรับค่าด้วย Resistive Voltage-Divider: ค่า Resistance ของ Flex sensor จะเปลี่ยนไปเมื่อมันงอ Arduino จะรับค่านี้ผ่าน 10-bit ADC โดยการแมปสัญญาณ Analog 0-5V ให้เป็น "Bend Factor" แบบ Discrete
- การแมป Actuator แบบเป็นสัดส่วน: เฟิร์มแวร์ใช้ฟังก์ชัน
map()เพื่อแปลงค่าช่วง Raw ของ Sensor (โดยทั่วไปคือ 20k - 100k ohms) ให้เป็นการกวาด Servo 0-180 องศา
ความแม่นยำ
- การหาค่าเฉลี่ยสัญญาณรบกวน ADC: มีฟิลเตอร์ "Running Average" ในซอฟต์แวร์ การหาค่าเฉลี่ย 5 ค่าล่าสุดจะช่วยให้ Arduino ป้องกันไม่ให้ Servo "Jittering" อันเนื่องมาจากสัญญาณรบกวนทางไฟฟ้าที่มีอยู่ใน Resistive Sensor