สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ในคำแนะนำนี้ เราจะสร้างโปรเจ็กต์ที่จะควบคุมไมโครเซอร์โวด้วยปุ่มกดที่รันด้วย Arduino Uno
วัสดุที่ใช้:
Arduino Uno
เขียงหั่นขนม
ปุ่มกด 4x4
ไมโครเซอร์โว
ขั้นตอนที่ 1: ต่อสายปุ่มกด
สิ่งแรกที่คุณต้องทำคือต่อสายไฟและรางกราวด์บนเขียงหั่นขนมของคุณจาก Arduino
- ต่อขา 5V เข้ากับรางจ่ายไฟ (สีแดง)
- ต่อกราวด์พิน (GND) กับรางกราวด์ (สีน้ำเงิน)
ตอนนี้เขียงหั่นขนมมีกำลังและต่อสายดินแล้ว เราสามารถเริ่มเดินสายส่วนประกอบของเราได้
การเดินสายปุ่มกดเป็นเรื่องง่าย แต่คุณต้องจดหมุดบนปุ่มกดและ Arduino มันจะมีประโยชน์เมื่อเราหันมาสนใจโค้ดของเรา
อย่าลืมเริ่มทางด้านซ้ายเมื่อใช้สายไฟของคุณ!
- พินแรกไปที่13
- พินที่สองไปที่12
- พินที่สามไปที่11
- พินที่สี่ไปที่10
- พินที่ห้าถึง9
- พินที่หกถึง8
- พินที่เจ็ดถึง7
- พินที่แปดถึง6
เมื่อเดินสายแผงปุ่มกด อย่าลืมเปิดหมุดดิจิตอล pwm ไว้ เราต้องการมันสำหรับไมโครเซอร์โว
ก่อนที่เราจะไปที่โค้ด ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Keypad Library แล้ว สามารถพบได้ในสเก็ตช์ของคุณ จากนั้นแท็บสเก็ตช์ รวมไลบรารี คุณจะไม่สามารถใช้ปุ่มกดได้หากไม่มี
ตอนนี้ให้เปิดรหัสและตรวจสอบให้แน่ใจว่าปุ่มกดทำงานและให้ค่าที่เข้าร่วม
บันทึกย่อ: ตรวจสอบให้แน่ใจว่าคุณมีคำสั่ง if เพื่อตรวจสอบปุ่มกด มิฉะนั้นจะไม่ทำงาน ระวังความล่าช้าด้วย เพราะปุ่มต่างๆ จะถูกลงทะเบียนจากปุ่มกด
#รวม
แถว const ไบต์ = 4; //สี่แถวเพราะปุ่มกดเต็ม
คอลัมน์ const ไบต์ = 4; //สี่คอลัมน์ เหมือนข้างบน
ปุ่มถ่าน [แถว][คอลัมน์] = {
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', ' C'}, {'*', '0', '#', 'D'} };
ไบต์ rowP[แถว] = {13, 12, 11, 10}; // หมุดแถวของปุ่มกด
คอลัมน์ไบต์P[คอลัมน์] = {9, 8, 7, 6}; //หมุดคอลัมน์ของปุ่มกด
ปุ่มกด = ปุ่มกด (makeKeymap (ปุ่ม), rowP, columnsP, แถว, คอลัมน์); //สร้างปุ่มกด
การตั้งค่าเป็นโมฆะ (){
Serial.begin(9600); }
วงเป็นโมฆะ (){
ถ่าน buttonPressed = pad.getKey(); // รับถ่านจากปุ่มกด if (buttonPressed) // แสดงว่ามีการกดปุ่มใดบนปุ่มกด { Serial.println (buttonPressed); } }
ขั้นตอนที่ 2: เพิ่มไมโครเซอร์โว
ตอนนี้ให้เพิ่มเซอร์โวมอเตอร์ อันนี้ง่ายมากที่จะเพิ่มในโครงการปัจจุบันของเราเนื่องจากไมโครเซิร์ฟเวอร์มีเพียงสามสายเท่านั้น
- ลวดสีน้ำตาลไปที่รางกราวด์บนเขียงหั่นขนม
- สีแดงไปที่รางไฟฟ้า
- Orange ไปที่ Pin 3 บน Arduino โปรดจำไว้ว่าไมโครเซิร์ฟเวอร์จะต้องมีพิน PWM บน Arduino นี่เป็นเพราะเซอร์โวที่ใช้ TIMER2
ตอนนี้ ให้ตรวจสอบให้แน่ใจว่าเราต่อไมโครเซอร์โวถูกต้องแล้วและเคลื่อนที่ได้
#รวม #รวม "Servo.h"
แถว const ไบต์ = 4; //สี่แถวเพราะปุ่มกดเต็ม
คอลัมน์ const ไบต์ = 4; //สี่คอลัมน์ เหมือนข้างบน
ปุ่มถ่าน [แถว][คอลัมน์] = {
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', ' C'}, {'*', '0', '#', 'D'} };
ไบต์ rowP[แถว] = {13, 12, 11, 10}; // หมุดแถวของปุ่มกด
คอลัมน์ไบต์P[คอลัมน์] = {9, 8, 7, 6}; //หมุดคอลัมน์ของปุ่มกด
ปุ่มกด = ปุ่มกด (makeKeymap (ปุ่ม), rowP, columnsP, แถว, คอลัมน์); //สร้างปุ่มกด
เซอร์โวปัจจุบันเซอร์โว; // สร้างวัตถุเซอร์โวเพื่อควบคุมเซอร์โว
// สามารถสร้างวัตถุเซอร์โวสิบสองรายการได้บนกระดานส่วนใหญ่
int pos = 0; // ตัวแปรเก็บตำแหน่งเซอร์โว
การตั้งค่าเป็นโมฆะ (){
Serial.begin(9600); ปัจจุบันServo.attach(3); // ติดเซอร์โวบนพิน 9 กับวัตถุเซอร์โว
}
วงเป็นโมฆะ (){
ถ่าน buttonPressed = pad.getKey(); // รับถ่านจากปุ่มกด if (buttonPressed) // แสดงว่ามีการกดปุ่มใดบนปุ่มกด { Serial.println (buttonPressed); }
ปัจจุบันServo.write(95);
}
ขั้นตอนที่ 3: แก้ไขรหัสเพื่อใช้ปุ่มกดบน Servo
ทราบว่าเรากำลังจะแก้ไขโค้ดของเรา เพื่อที่ว่าเมื่อเรากดปุ่มใดปุ่มหนึ่งบนแป้นพิมพ์ เซอร์โวจะเคลื่อนที่ไปยังตำแหน่งใดตำแหน่งหนึ่ง สิ่งที่สำคัญก่อน ตำแหน่งเซอร์โวสำหรับ 0 นั้นแปลก เนื่องจากฉันมีเซอร์โวแบบหมุนต่อเนื่อง เมื่อใดก็ตามที่มันเข้าใกล้ 0 เซอร์โวก็เริ่มหมุน ตัวเลขที่ฉันใส่ในรหัสนั้นต่ำที่สุดเท่าที่จะทำได้โดยไม่เกิดขึ้น อย่างไรก็ตาม นี่คือรหัสสุดท้ายของฉัน:
#รวม #รวม
แถว const ไบต์ = 4; //สี่แถวเพราะปุ่มกดเต็ม
คอลัมน์ const ไบต์ = 4; //สี่คอลัมน์ เหมือนข้างบน
ปุ่มถ่าน [แถว][คอลัมน์] = {
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', ' C'}, {'*', '0', '#', 'D'} };
ไบต์ rowP[แถว] = {13, 12, 11, 10}; // หมุดแถวของปุ่มกด
คอลัมน์ไบต์P[คอลัมน์] = {9, 8, 7, 6}; //หมุดคอลัมน์ของปุ่มกด
ปุ่มกด = ปุ่มกด (makeKeymap (ปุ่ม), rowP, columnsP, แถว, คอลัมน์); //สร้างปุ่มกด
เซอร์โว myServo; //
การตั้งค่าเป็นโมฆะ (){
Serial.begin(9600); myServo.attach(5); // ติดเซอร์โวบนพิน 9 กับวัตถุเซอร์โว }
วงเป็นโมฆะ (){
ปุ่มถ่าน = pad.getKey(); // รับถ่านจากปุ่มกด if(key == '0') { myServo.write(11); Serial.println("0"); ล่าช้า(15); } ถ้า (คีย์ == '1') { myServo.write (12); Serial.println("1"); ล่าช้า(15); } ถ้า (คีย์ == '2') { myServo.write (24); Serial.println("2"); ล่าช้า(15); } ถ้า (คีย์ == '3') { myServo.write (36); Serial.println("3"); ล่าช้า(15); }
ถ้า (คีย์ == '4')
{ myServo.write (48); Serial.println("4"); ล่าช้า(15); }
ถ้า (คีย์ == '5')
{ myServo.write (60); Serial.println("5"); ล่าช้า(15); }
ถ้า (คีย์ == '6')
{ myServo.write (72); Serial.println("6"); ล่าช้า(15); }
ถ้า (คีย์ == '7')
{ myServo.write (84); Serial.println("7"); ล่าช้า(15); }
ถ้า (คีย์ == '8')
{ myServo.write (96); Serial.println("8"); ล่าช้า(15); }
ถ้า (คีย์ == '9')
{ myServo.write (108); Serial.println("9"); ล่าช้า(15); }
ถ้า (คีย์ == '*')
{ myServo.write (120); Serial.println("*"); ล่าช้า(15); }
ถ้า (คีย์ == '#')
{ myServo.write (132); Serial.println("#"); ล่าช้า(15); }
ถ้า (คีย์ == 'A')
{ myServo.write (146); Serial.println ("A"); ล่าช้า(15); }
ถ้า (คีย์ == 'B')
{ myServo.write (158); Serial.println ("B"); ล่าช้า(15); }
ถ้า (คีย์ == 'C')
{ myServo.write (170); Serial.println ("C"); ล่าช้า(15); }
ถ้า (คีย์ == 'D')
{ myServo.write (180); Serial.println("D"); ล่าช้า(15); } }