ในบทช่วยสอนนี้เราจะพัฒนาวงจรโดยใช้เซ็นเซอร์ Force, Arduino Uno และเซอร์โวมอเตอร์ จะเป็นระบบควบคุมเซอร์โวซึ่งตำแหน่งเพลาเซอร์โวจะถูกกำหนดโดยน้ำหนักที่มีอยู่บนเซ็นเซอร์วัดแรง ก่อนที่จะดำเนินการต่อไปเรามาพูดถึงเซอร์โวและส่วนประกอบอื่น ๆ
ใช้เซอร์โวมอเตอร์ในกรณีที่จำเป็นต้องมีการเคลื่อนที่หรือตำแหน่งของเพลาที่ถูกต้อง สิ่งเหล่านี้ไม่ได้เสนอสำหรับการใช้งานความเร็วสูง สิ่งเหล่านี้เสนอสำหรับความเร็วต่ำแรงบิดปานกลางและการใช้งานตำแหน่งที่แม่นยำ มอเตอร์เหล่านี้ใช้ในเครื่องจักรแขนกลระบบควบคุมการบินและระบบควบคุม เซอร์โวมอเตอร์ยังใช้ในเครื่องพิมพ์และเครื่องแฟกซ์บางรุ่น
เซอร์โวมอเตอร์มีให้เลือกหลายรูปแบบและขนาด เซอร์โวมอเตอร์ส่วนใหญ่จะมีสายไฟสายหนึ่งสำหรับแรงดันไฟฟ้าบวกอีกสายหนึ่งสำหรับกราวด์และสุดท้ายคือการกำหนดตำแหน่ง สายสีแดงเชื่อมต่อกับพลังงานสายสีดำเชื่อมต่อกับกราวด์และสายสีเหลืองเชื่อมต่อกับสัญญาณ
เซอร์โวมอเตอร์เป็นการรวมกันของมอเตอร์กระแสตรงระบบควบคุมตำแหน่งเกียร์ ตำแหน่งของเพลาของมอเตอร์กระแสตรงจะถูกปรับโดยอุปกรณ์อิเล็กทรอนิกส์ควบคุมในเซอร์โวโดยพิจารณาจากอัตราส่วนหน้าที่ของสัญญาณ PWM ที่ขาสัญญาณ เพียงแค่พูดอุปกรณ์อิเล็กทรอนิกส์ควบคุมจะปรับตำแหน่งเพลาโดยการควบคุมมอเตอร์ DC ข้อมูลเกี่ยวกับตำแหน่งของเพลานี้จะถูกส่งผ่านขาสัญญาณ ข้อมูลตำแหน่งไปยังส่วนควบคุมควรส่งในรูปแบบของสัญญาณ PWM ผ่านขาสัญญาณของเซอร์โวมอเตอร์
ความถี่ของสัญญาณ PWM (Pulse Width Modulated) อาจแตกต่างกันไปตามประเภทของเซอร์โวมอเตอร์ สิ่งสำคัญที่นี่คือ DUTY RATIO ของสัญญาณ PWM ตาม DUTY RATION อุปกรณ์อิเล็กทรอนิกส์ควบคุมปรับเพลา
ดังแสดงในรูปด้านล่างสำหรับเพลาที่จะย้ายไปที่ 9o นาฬิกา TURN ON RATION จะต้องเป็น 1/18. 1 มิลลิวินาทีของ 'เวลาเปิด' และ 17 มิลลิวินาทีของ 'เวลาปิด' ในสัญญาณ 18 มิลลิวินาที
สำหรับเพลาที่จะเลื่อนไปที่ 12o นาฬิกาเวลา ON ของสัญญาณต้องเป็น 1.5ms และเวลา OFF ควรเป็น 16.5ms
อัตราส่วนนี้ถูกถอดรหัสโดยระบบควบคุมในเซอร์โวและจะปรับตำแหน่งตามนั้น
PWM นี้สร้างขึ้นโดยใช้ ARDUINO UNO
ดังนั้นในตอนนี้เรารู้แล้วว่าเราสามารถควบคุมเพลา SERVO MOTOR ได้โดยเปลี่ยนอัตราส่วนหน้าที่ของสัญญาณ PWM ที่สร้างโดย UNO
ตอนนี้เรามาพูดถึงเซ็นเซอร์แรงหรือเซ็นเซอร์น้ำหนัก
ในการเชื่อมต่อเซ็นเซอร์ FORCE กับ ARDUINO UNO เราจะใช้คุณลักษณะ 8 บิต ADC (การแปลงอนาล็อกเป็นดิจิตอล) ใน arduno uno
เซ็นเซอร์ FORCE เป็นตัวแปลงสัญญาณที่เปลี่ยนความต้านทานเมื่อใช้แรงกดบนพื้นผิว เซ็นเซอร์ FORCE มีให้เลือกหลายขนาดและรูปร่าง
เราจะใช้หนึ่งในเวอร์ชันที่ถูกกว่าเพราะเราไม่ต้องการความแม่นยำมากนัก FSR400เป็นหนึ่งในเซนเซอร์วัดแรงที่ถูกที่สุดในตลาด ภาพของ FSR400 แสดงดังรูปด้านล่าง
ตอนนี้สิ่งสำคัญคือต้องสังเกตว่า FSR 400 มีความไวตามแนวยาวแรงหรือน้ำหนักควรจะเน้นที่เขาวงกตที่กลางตาของเซ็นเซอร์ดังแสดงในรูป
หากใช้แรงผิดเวลาอุปกรณ์อาจเสียหายอย่างถาวร
สิ่งสำคัญอีกอย่างที่ควรทราบคือเซ็นเซอร์สามารถขับกระแสในช่วงสูงได้ ดังนั้นโปรดคำนึงถึงกระแสการขับขี่ขณะติดตั้ง นอกจากนี้เซ็นเซอร์ยังมีขีด จำกัด ของแรงที่ 10 นิวตัน ดังนั้นเราจึงสามารถใช้น้ำหนักเพียง 1Kg หากน้ำหนักที่สูงกว่า 1Kg ใช้เซ็นเซอร์อาจแสดงการเบี่ยงเบนบางอย่าง ถ้ามันเพิ่มขึ้นมากกว่า 3Kg. เซ็นเซอร์อาจเสียหายอย่างถาวร
อย่างที่บอกไปก่อนหน้านี้เซ็นเซอร์นี้ใช้เพื่อตรวจจับการเปลี่ยนแปลงของความดัน ดังนั้นเมื่อน้ำหนักถูกนำไปใช้ที่ด้านบนของเซ็นเซอร์ FORCE ความต้านทานจะเปลี่ยนไปอย่างมาก ความต้านทานของ FS400 ต่อน้ำหนักแสดงในกราฟด้านล่าง:
ดังแสดงในรูปด้านบนความต้านทานระหว่างหน้าสัมผัสทั้งสองของเซ็นเซอร์จะลดลงตามน้ำหนักหรือค่าการนำไฟฟ้าระหว่างสองหน้าสัมผัสของเซ็นเซอร์เพิ่มขึ้น
ความต้านทานของตัวนำบริสุทธิ์กำหนดโดย:
ที่ไหน
p- ความต้านทานของตัวนำ
l = ความยาวของตัวนำ
A = พื้นที่ของตัวนำ
ตอนนี้ให้พิจารณาตัวนำที่มีความต้านทาน“ R” ถ้าแรงดันบางส่วนถูกนำไปใช้ที่ด้านบนของตัวนำพื้นที่บนตัวนำจะลดลงและความยาวของตัวนำจะเพิ่มขึ้นเนื่องจากความดัน ดังนั้นโดยสูตรความต้านทานของตัวนำควรเพิ่มขึ้นเนื่องจากความต้านทาน R เป็นสัดส่วนผกผันกับพื้นที่และแปรผันโดยตรงกับความยาว l
ดังนั้นสำหรับตัวนำภายใต้ความกดดันหรือน้ำหนักความต้านทานของตัวนำจึงเพิ่มขึ้น แต่การเปลี่ยนแปลงนี้มีขนาดเล็กเมื่อเทียบกับความต้านทานโดยรวม สำหรับการเปลี่ยนแปลงที่สำคัญตัวนำหลายตัวจะเรียงซ้อนกัน
นี่คือสิ่งที่เกิดขึ้นภายในเซนเซอร์จับแรงที่แสดงในรูปด้านบน ในการมองอย่างใกล้ชิดเราจะเห็นเส้นมากมายภายในเซ็นเซอร์ แต่ละเส้นเหล่านี้แสดงถึงตัวนำ ความไวของเซ็นเซอร์อยู่ในหมายเลขตัวนำ
แต่ในกรณีนี้ความต้านทานจะลดลงตามแรงกดเนื่องจากวัสดุที่ใช้ที่นี่ไม่ใช่ตัวนำบริสุทธิ์ FSR นี่คืออุปกรณ์ฟิล์มหนาโพลีเมอร์ที่แข็งแกร่ง (PTF) ดังนั้นสิ่งเหล่านี้จึงไม่ใช่อุปกรณ์วัสดุตัวนำที่บริสุทธิ์ สิ่งเหล่านี้ประกอบด้วยวัสดุที่มีความต้านทานลดลงเมื่อแรงที่กระทำกับพื้นผิวของเซ็นเซอร์เพิ่มขึ้น
วัสดุนี้แสดงลักษณะดังแสดงในกราฟของ FSR
การเปลี่ยนแปลงความต้านทานนี้ไม่สามารถทำประโยชน์ได้เว้นแต่เราจะอ่านมัน ตัวควบคุมที่อยู่ในมือสามารถอ่านโอกาสในแรงดันไฟฟ้าเท่านั้นและไม่มีอะไรน้อยไปกว่านั้นสำหรับสิ่งนี้เราจะใช้วงจรแบ่งแรงดันไฟฟ้าซึ่งเราสามารถได้รับการเปลี่ยนแปลงความต้านทานเมื่อแรงดันไฟฟ้าเปลี่ยนแปลง
ตัวแบ่งแรงดันเป็นวงจรตัวต้านทานและแสดงในรูป ในเครือข่ายตัวต้านทานนี้เรามีความต้านทานคงที่และความต้านทานตัวแปรอื่น ๆ ดังแสดงในรูป R1 ที่นี่คือความต้านทานคงที่และ R2 คือเซ็นเซอร์ FORCE ซึ่งทำหน้าที่เป็นตัวต้านทาน
จุดกึ่งกลางของสาขาถูกนำไปวัด ด้วยการเปลี่ยนแปลง R2 เรามีการเปลี่ยนแปลงที่ Vout ด้วยเหตุนี้เราจึงมีแรงดันไฟฟ้าที่เปลี่ยนแปลงตามน้ำหนัก
ตอนนี้สิ่งสำคัญที่ควรทราบก็คืออินพุตที่คอนโทรลเลอร์สำหรับการแปลง ADC นั้นต่ำถึง 50µAmp ผลการโหลดของตัวแบ่งแรงดันตามความต้านทานนี้มีความสำคัญเนื่องจากกระแสที่ดึงมาจาก Vout ของตัวแบ่งแรงดันจะเพิ่มเปอร์เซ็นต์ความผิดพลาดที่เพิ่มขึ้นในตอนนี้เราไม่จำเป็นต้องกังวลเกี่ยวกับผลการโหลด
ตอนนี้เมื่อแรงถูกนำไปใช้กับ FORCE SENSOR แรงดันไฟฟ้าที่ปลายตัวแบ่งจะเปลี่ยนพินนี้เมื่อเชื่อมต่อกับช่อง ADC ของ UNO เราจะได้รับค่าดิจิทัลที่แตกต่างจาก ADC ของ UNO เมื่อใดก็ตามที่แรงบนเซ็นเซอร์เปลี่ยนไป
ค่าดิจิตอล ADC นี้ตรงกับอัตราส่วนหน้าที่ของสัญญาณ PWM ดังนั้นเราจึงมีการควบคุมตำแหน่ง SERVO ที่สัมพันธ์กับแรงที่กระทำกับเซ็นเซอร์
ส่วนประกอบ
ฮาร์ดแวร์: UNO, แหล่งจ่ายไฟ (5v), ตัวเก็บประจุ 1000uF, ตัวเก็บประจุ 100nF (3 ชิ้น), ตัวต้านทาน100KΩ, SERVO MOTOR (SG 90), ตัวต้านทาน220Ω, เซ็นเซอร์แรง FSR400
ซอฟต์แวร์: Atmel studio 6.2 หรือ aurdino ทุกคืน
แผนภาพวงจรและคำอธิบายการทำงาน
วงจรสำหรับการควบคุมเซอร์โวมอเตอร์โดยเซ็นเซอร์แรงจะแสดงในรูปด้านล่าง
แรงดันไฟฟ้าข้ามเซ็นเซอร์ไม่เป็นเส้นตรงอย่างสมบูรณ์ มันจะมีเสียงดัง ในการกรองสัญญาณรบกวนตัวเก็บประจุจะถูกวางไว้บนตัวต้านทานแต่ละตัวในวงจรแบ่งดังแสดงในรูป
ที่นี่เราจะนำแรงดันไฟฟ้าที่ได้มาจากตัวแบ่ง (แรงดันไฟฟ้าซึ่งแสดงถึงน้ำหนักเป็นเส้นตรง) และป้อนเข้าไปในช่อง ADC ช่องหนึ่งของ Arduino Uno หลังจากการแปลงเราจะนำค่าดิจิทัลนั้น (แทนน้ำหนัก) และเชื่อมโยงกับค่า PWM และส่งสัญญาณ PWM นี้ไปยังมอเตอร์ SERVO
ดังนั้นด้วยน้ำหนักเราจึงมีค่า PWM ซึ่งเปลี่ยนอัตราส่วนหน้าที่ขึ้นอยู่กับค่าดิจิทัล ค่าดิจิตอลที่สูงกว่าอัตราส่วนหน้าที่ของ PWM จะสูงขึ้น ดังนั้นด้วยสัญญาณ PWM อัตราส่วนหน้าที่สูงขึ้นเพลาเซอร์โวควรไปทางขวาสุดหรือซ้ายสุดตามรูปที่ให้ไว้ในบทนำ
ถ้าน้ำหนักต่ำกว่าเราจะมีอัตราส่วนหน้าที่ PWM ต่ำลงและตามรูปในการแนะนำเซอร์โวควรไปถึงด้านขวาสุด
ด้วยเหตุนี้เราจึงมีการควบคุมตำแหน่ง SERVO ตาม WEIGHT หรือ FORCE
เพื่อให้สิ่งนี้เกิดขึ้นเราจำเป็นต้องสร้างคำแนะนำเล็กน้อยในโปรแกรมและเราจะพูดถึงรายละเอียดด้านล่าง
ARDUINO มีช่อง ADC หกช่องดังแสดงในรูป ในหนึ่งหรือทั้งหมดสามารถใช้เป็นอินพุตสำหรับแรงดันไฟฟ้าแบบอะนาล็อก UNO ADC มีความละเอียด 10 บิต (ดังนั้นค่าจำนวนเต็มตั้งแต่ (0- (2 ^ 10) 1023)) ซึ่งหมายความว่าจะจับคู่แรงดันไฟฟ้าอินพุตระหว่าง 0 ถึง 5 โวลต์เป็นค่าจำนวนเต็มระหว่าง 0 ถึง 1023 ดังนั้นสำหรับทุกๆ (5/1024 = 4.9mV) ต่อหน่วย
ที่นี่เราจะใช้ A0 ของ UNO เราจำเป็นต้องรู้บางสิ่ง
|
ก่อนอื่นช่อง Arduino Uno ADC มีค่าอ้างอิงเริ่มต้นที่ 5V ซึ่งหมายความว่าเราสามารถให้แรงดันไฟฟ้าอินพุตสูงสุด 5V สำหรับการแปลง ADC ที่ช่องอินพุตใดก็ได้ เนื่องจากเซ็นเซอร์บางตัวให้แรงดันไฟฟ้าตั้งแต่ 0-2.5V ด้วยการอ้างอิง 5V เราจึงมีความแม่นยำน้อยกว่าดังนั้นเราจึงมีคำสั่งที่ช่วยให้เราสามารถเปลี่ยนค่าอ้างอิงนี้ได้ ดังนั้นสำหรับการเปลี่ยนค่าอ้างอิงเรามี (“ analogReference ();”) สำหรับตอนนี้เราปล่อยให้เป็น
ตามค่าเริ่มต้นเราจะได้รับความละเอียด ADC สูงสุดของบอร์ดซึ่งเป็น 10 บิตความละเอียดนี้สามารถเปลี่ยนแปลงได้โดยใช้คำสั่ง (“ analogReadResolution (bits);”) การเปลี่ยนแปลงความละเอียดนี้อาจมีประโยชน์ในบางกรณี สำหรับตอนนี้เราปล่อยไว้เป็น
ตอนนี้หากเงื่อนไขข้างต้นถูกตั้งค่าเป็นค่าเริ่มต้นเราสามารถอ่านค่าจาก ADC ของช่อง '0' ได้โดยการเรียกใช้ฟังก์ชัน "analogRead (พิน)" โดยตรงในที่นี้ "พิน" หมายถึงพินที่เราเชื่อมต่อสัญญาณแอนะล็อกในกรณีนี้ จะเป็น“ A0” ค่าจาก ADC สามารถนำมาเป็นจำนวนเต็มเป็น "int SENSORVALUE = analogRead (A0); ” โดยคำสั่งนี้ค่าหลังจาก ADC จะถูกเก็บไว้ในจำนวนเต็ม“ SENSORVALUE”
PWM ของ UNO สามารถทำได้ที่หมุดใด ๆ ที่มีสัญลักษณ์เป็น“ ~” บนบอร์ด PCB มีช่องสัญญาณ PWM หกช่องใน UNO เราจะใช้ PIN3 ตามวัตถุประสงค์ของเรา
analogWrite (3, VALUE); |
จากเงื่อนไขข้างต้นเราสามารถรับสัญญาณ PWM ได้โดยตรงที่พินที่เกี่ยวข้อง พารามิเตอร์แรกในวงเล็บใช้สำหรับเลือกหมายเลขพินของสัญญาณ PWM พารามิเตอร์ที่สองใช้สำหรับการเขียนอัตราส่วนหน้าที่
ค่า PWM ของ Arduino Uno สามารถเปลี่ยนได้ตั้งแต่ 0 ถึง 255 โดยให้“ 0” ต่ำสุดเป็น“ 255” สูงสุด ด้วย 255 เป็นอัตราส่วนหน้าที่เราจะได้รับ 5V ที่ PIN3 หากกำหนดอัตราส่วนหน้าที่เป็น 125 เราจะได้รับ 2.5V ที่ PIN3
ตอนนี้เรามาพูดถึงการควบคุมเซอร์โวมอเตอร์ Arduino Uno มีคุณสมบัติที่ช่วยให้เราสามารถควบคุมตำแหน่งเซอร์โวได้เพียงแค่ให้ค่าองศา สมมติว่าเราต้องการให้เซอร์โวอยู่ที่ 30 เราสามารถแทนค่าในโปรแกรมได้โดยตรง ไฟล์ส่วนหัว SERVO จะดูแลการคำนวณอัตราส่วนหน้าที่ทั้งหมดภายใน คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการควบคุมเซอร์โวมอเตอร์ด้วย arduino ได้ที่นี่
ตอนนี้ sg90 สามารถเคลื่อนที่ได้ตั้งแต่ 0-180 องศาเรามีผลลัพธ์ ADC 0-1024
ดังนั้น ADC จึงมีค่าประมาณหกเท่าของตำแหน่ง SERVO ดังนั้นเมื่อหารผล ADC ด้วย 6 เราจะได้ตำแหน่งมือ SERVO โดยประมาณ ดังนั้นเราจึงมีสัญญาณ PWM ซึ่งอัตราส่วนหน้าที่เปลี่ยนไปตามน้ำหนักหรือ FORCE สิ่งนี้มอบให้กับเซอร์โวมอเตอร์เราสามารถควบคุมเซอร์โวมอเตอร์ด้วยเซ็นเซอร์แรง