[1/2569] ใบงานรายวิชา เซนเซอร์และแอคทูเอเตอร์ (servo motor2) ต่อ

ใบงานประจำสัปดาห์ รายวิชาเซนเซอร์และแอคทูเอเตอร์


รายวิชาเซนเซอร์และแอคชูเอเตอร์

จงเขียนไมโครคอนโทรลเลอร์เชื่อมต่อกับเซนเซอร์และแอคูเอเตอร์ โดยกำหนดให้เชื่อมต่อกับ led, switch, dht22 โดยใช้งานคำสั่งที่ส่ง output สัญญาณ digital เพื่อควบคุมให้ได้ตามโจทย์ที่กำหนด. โดยใช้ความรู้ในการเขียนโปรแกรมพื้นฐานที่เรียนในสัปดาห์ที่ผ่านมา นำมาประยุกต์ใช้งานด้วยคำสั่งที่ใช้เขีนยโปรแกรม if , if else ฝึกกระบวนการคิด การลำดับขั้นตอนตามข้อย่อยที่กำหนด

กำหนดให้นักเรียนนักศึกษา ทำการต่อ arduino uno r3 กับ LCD1602 ,dht22 และปุ่มกดสองปุ่ม ดังรูป


ตัวอย่างคำสั่ง

รูปแบบการเขียนคำสั่ง if

 if(condition){
 	//statement การทำงานใดๆ
 }

รูปแบบการเขียนคำสั่ง if else

 if(condition){
 	//statement การทำงานใดๆ
 }else{
 	//statement การทำงานใดๆ
 }

รูปแบบการเขียนคำสั่ง if else..if

 if(condition){
 	//statement การทำงานใดๆ
 }else if(condition){
 	//statement การทำงานใดๆ
 }

รูปแบบการเขียนคำสั่ง switch case

 switch (variable)
{
case VALUE_1:
                     //statement การทำงานใดๆ
                     break;
case VALUE_2:
                    //statement การทำงานใดๆ
                    break;
case VALUE_3:
                    //statement การทำงานใดๆ
                   break;
default:
         //statement การทำงานใดๆ
}


การใช้งานจอ lcd16x2 แบบต่อตรง


การใช้งานจอ lcd16x2 แบบโมดูลไดร์ I2C

ในการต่อใช้งานจอแสดงผล lcd16x2 เข้ากับไมโครคอนโทรลเลอร์ด้วยโมดูลไดร์ I2C มีการเชื่อมต่อดังต่อไปนี้
  • Vcc -- > Vcc (5v)
  • Gnd --> Gnd
  • SCL --> A5
  • SDA -- >A4
เมื่อนักเรียนทำการเชื่อมต่อโมดูลไดร์ I2Cเข้ากับ ไมโครคอนโทรลเลอร์แล้ว การเขียนคำสั่งเพื่อใช้งานจอ lcd นั้นต้องพึ่งพาชุดคำสั่งที่ซับซ้อน เราสามารถเขียนเพื่อเรียกใช้งานคำสั่งเหล่านั้นได้ เพราผู้พัฒนาได้ทำการเตรียมชุดคำสั่งเหล่านั้นไว้แล้ว เราต้องทำคือการเรียกใช้งานไลบรารี่ การที่เราจะเรียกใช้งานไลบรารี่ได้นั้นก็ต้องทำการติดตั้งไลบรารี่ก่อน การติดตั้งไลบรารี่ให้ทำตามขั้นตอนไปพร้อมๆกัน (ทำพร้อมครูผู้สอน)


ตัวอย่างคำสั่งการใช้งาน servo motor


LCD_I2C lcd(0x27, 16, 2); // เช็ค Address ของหน้าจอให้ถูกต้อง (มักจะเป็น 0x27 หรือ 0x3F)
Servo myServo; 

void setup() {
  lcd.begin();
  lcd.backlight();
  myServo.attach(9); // ต่อสายสัญญาณ Servo ที่ขา 9
  Serial.begin(9600);
}






ให้นักเรียนนักศึกษาทำไปทีละข้อย่อยแล้วเรียกตรวจ พร้อมอธิบาย


  • 1. กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์กับจอ servo motor และทดสอบการใช้งานเบื้องต้นโดยการสั่งให้ servo หมุนจากต่ำแหน่งเริ่มต้นไปยังปลายทางจาก 0 -> 90 องศาและแสดงข้อความ "end state" ใน Serial monitor
  • 2. (ต่อจากข้อย่อยที่ 1) กำหนดให้นักเรียนนักศึกษาเชื่อมต่อ ไมโครคอนโทรลเลอร์กับ servo motor และจอแสดงผล LCD1602 แล้วสั่งให้ Servo หมุนตามข้อย่อยที่ 1 พร้อมกับสั่งให้หน้าจอ LCD แสดงข้อความ "Current Angle: ? " ? = องศาที่กำลังชี้ตำแหน่ง ณ ขณะนั้น (0 ->90)
  • 3. กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมเพิ่มเติม โดยมีการเพิ่มปุ่ม 1 ปุ่มแล้วเมื่อ มีการกดปุ่ม 1 ครั้งแล้วสั่งให้ Servo motor หมุนครั้งละ 1 องศา "จุดเริ่มต้น Servo motor ต้องอยู่ ณ ตำแหน่ง 0 องศา" และแสดงผลองศาผ่าน lcd1602 ออกแบบหน้าแสดงผลด้วยตนเอง
  • 4. (ต่อจากข้อย่อยที่ 3) ให้นักเรียนปรับปรุงโปรแกรมเพิ่มเติม กำหนดเมื่อถึงตำแหน่งสูงสุดแล้ว ให้หมุดกลับไปตำแหน่ง 0 องศาอัตโนมัติหน่วงเวลา 1 วินาที
  • 5. กำหนดให้นักเรียนนักศึกษาเขียนโปรแกรมโดยสั่งให้ ป้อนค่าองศาผ่าน Serial monitor แล้วสั่งให้ Servo หมุ่นตามองศาที่กำหนด ในช่วงข้อมูล 0 -> 180 หากข้อมูลที่รับมาไม่เป็นไปตามขอบเขตนี้ให้แสดงคำว่า "Error" แสดงในจอ lcd1602 ค้างไว้ 1 วินาทีแล้วหายไป และแสดงเลของศานั้นๆ ด้วยหากไม่ Error
  • 6. (ต่อจากข้อย่อยที่ 5) ให้นักเรียนปรับปรุงโปรแกรมเพิ่มเติม กำหนดเมื่อป้อนค่าองศาแล้ว servo ชี้ไปยังตำแหน่งที่ถูกต้องแล้วให้หน่วงเวลา 200 ms แล้ว Servo จะหมุนกลับไปยังตำแหน่ง 0 องศาแบบ sweeping อัตโนมัติ



ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

[2/2567] ใบงานรายวิชาพื้นฐานการอินเตอร์เฟส สัปดาห์ที่ 7

[2/2567] ใบงานรายวิชาการประยุกต์ไมโครคอนโทรลเลอร์ สัปดาห์ที่ 12