07 มิถุนายน 2559

อาร์ดุยโน : นำเข้าสัญญาณดิจิทัล

ตอนที่แล้ว เราได้ลองเล่น(และเรียนรู้ไปพร้อมๆ กัน) โดยการตั้งค่าให้มีการส่งสัญญาณออกผ่านช่องทางดิจิทัลกันไปแล้ว ในบทความนี้ ครูจะทำกลับกัน นั่นคือจะมีการตั้งค่าเพื่อให้ช่องทางดิจิทัลรับข้อมูลจากภายนอกเข้ามายังอาร์ดุยโนของเรา

สัญญาณดิจิทัล เป็นสัญญาณที่มีสองสถานะ เช่นถ้าเราใช้แรงเคลื่อนไฟฟ้า 5 โวลท์ เป็นระดับอ้างอิง สัญญาณจะมีสองระดับ คือ 0 โวลท์ (อยู่ในสถานะ LOW) กับ 5 โวลท์ (อยู่ในสถานะ HIGH) ซึ่งใครที่ทำการทดลองตามครูเมื่อคราวที่แล้ว จะเห็นได้ว่าเมื่อเราใช้คำสั่ง digitalWrite(pinNumber, state) หมายถึง การสั่งให้ส่งสัญญาณดิจิทัลออกไปยังหมายเลขช่องที่ระบุใน pinNumber เช่น pinNumber = 10 ส่วน state เซตเป็น LOW  ก็จะมีแรงเคลื่อนไฟฟ้า 0 โวลท์ ออกที่ขาหมายเลข10 (LED ดับ) แต่หากระบุ state เป็น HIGH แรงเคลื่อนไฟฟ้าที่ช่องหมายเลข 10 จะมีแรงเคลื่อนไฟฟ้ากลายเป็น 5 โวลท์ (LED สว่าง)

สิ่งที่เราจะทำในครั้งนี้ก็คือ เซตสถานะจากภายนอกให้เป็น LOW (0 โวลท์) หรือ HIGH (5 โวลท์) แล้วให้ช่องรับข้อมูลของอาร์ดุยโนรับไปปฏิบัติงานต่อไป

จุดประสงค์ของการทำการทดลองหรือเล่นในครั้งนี้ 

  1. รู้จักสัญญาณดิจิทัลและสร้างสัญญาณดิจิทัลง่ายๆ เพื่อป้อนเข้าสู่บอร์ดอาร์ดุยโน
  2. เขียนโปรแกรมสั่งให้อาร์ดุยโนนำสัญญาณดิจิทัลขาเข้า มาควบคุม LED ให้ติดหรือดับ ผ่านช่องทางดิจิทัลขาออก

อุปกรณ์ต้องใช้ 

  1. บอร์ด Arduino UNO 1 บอร์ด
  2. เบรดบอร์ด 1 แผ่น
  3. สวิทช์กดติด ปล่อยดับ (push button) 1 ตัว
  4. หลอด LED 1 หลอด
  5. ตัวต้านทาน 10k , 220 Ω อย่างละตัว
  6. สายไฟสำหรับเสียบแผ่นบอร์ด

ลุย 

ต่ออุปกรณ์ดังภาพ

ขยายหน่อยให้เห็นชัดๆ ตัวต้านทาน 10k คือตัวนอน 220 Ω คือตัววางตั้ง

 


การทำงาน

      เมื่อกดสวิทช์ กระมีกระแสไฟฟ้าจากแหล่งจ่ายกำลัง 5 โวลท์ที่เราต่อออกจากบอร์ด ไหลผ่านตัวต้านทาน 10k ซึ่งจำให้เกิดความต่างศักย์ตกคร่อมที่ตัวต้านทานนี้ เกิดเป็นสถานะ HIGH ป้อนเข้าสู่ช่อง 11 ของพอร์ทดิจิทัล และเมื่อเราปล่อย กระแสไฟฟ้าไม่สามารถไหลผ่านตัวต้านทาน 10k ได้ ก็จะเกิดเป็นสถานะ LOW ขึ้น เราจะใช้ 2 สถานะนี้ในการควบคุมการกระพริบของ LED ที่เราต่อไว้ที่ขา 0 ของพอร์ทดิจิท้ล

ตรวจสอบความเรียบร้อยของสายไฟให้ดีก่อนนะครับ เตรียมสาย USB ไว้อย่าเพิ่งเสียบเข้ากับเครื่องคอมพิวเตอร์ รอก่อน

การดำเนินการทางซอฟท์แวร์
  1. เปิด IDE
  2. คลิก File > New
    พิมพ์โค้ดของโปรแกรมเข้าไปดังแสดงในภาพ

  3. คลิก File > Save
    ตั้งชื่อไฟล์ในโฟลเดอร์ที่เราต้องการ ครูตั้งชื่อไฟล์นี้ว่า digital_IN
  4. เสียบสาย USB จากบอร์ดอาร์ดุยโน เข้ากับเครื่องคอมพิวเตอร์
  5. คลิกที่ปุ่ม  เพื่อคอมไพล์ ตรวจสอบและอัพโหลดไฟล์ที่คอมไพล์แล้วไปยังหน่วยความจำแฟลชของอาร์ดุยโน
  6. ทดลองกดปุ่มสวิทช์กดติด ปล่อยดับ โดยกดแช่ไว้นิ่งๆ (เซตสถานะของสัญญาณดิจิทัลให้เป็น HIGH) สลับกับการปล่อย (เซตสถานะของสัญญาณดิจิท้ลให้เป็น LOW) แล้วเปรียบเทียบความแตกต่าง โดยสังเกตการกระพริบของ LED ทั้งสองสถานะเปรียบเทียบกัน

ผล

หากเราพิมพ์โค้ดโปรแกรมลงไปอย่างถูกต้อง คอมไพล์และอัพโหลดโดยไม่พบปัญหาใดๆ ในช่วงแรกๆ หลอด LED จะกระพริบช้าๆ แต่ถ้าหากเรากดสวิทช์ค้างเอาไว้ หลอด LED จะกระพริบเร็วขึ้น และถ้าปล่อยมันก็จะกลับมากระพริบช้าอีกครั้งหนึ่ง 

การทำงานของโปรแกรม

โปรแกรมนี้เราพิมพ์ขึ้นมาโล้นๆ เลย ไม่มีคอมเมนต์ใดๆ ทั้งสิ้นให้เสียเวลาล่ะ เริ่มต้นขึ้นมาก็
int button;

นี่เป็นการประกาศตัวแปร ให้เป็นแบบ int (หรือจะประกาศให้เป็นก boolean ก็ได้) ตั้งชื่อตัวแปรว่า button ตั้งไว้เฉยๆ ยังไม่มีการกำหนดค่าใดๆ 
จากนั้นในส่วนของการตั้งค่า ก็มีการตั้งค่าให้ช่อง 0 เป็นขาส่งออก(OUTPUT) ช่อง 11 เป็นขารับข้อมูล (INPUT) ด้วยโค้ดต่อไปนี้

pinMode(0, OUTPUT);
pinMode(11, INPUT);

ส่วนการวนรอบ(loop() ) เริ่มต้นก็มีการอ่านข้อมูลสถานะจากช่อง 11 โดยค่าที่ได้นำมาเก็บไว้ในตัวแปรชื่อ button ดังโค้ดคำสั่งต่อไปนี้

button=digitalRead(11);

แล้วก็นำมาตรวจสอบกับเงื่อนไขว่า button นี้สถานะอย่างไร HIGH หรือ LOW โดยใช้นิพจน์

if (button==HIGH) 

ถ้าเป็นไปตามเงื่อนไขนี้ (ปุ่มกดถูกกด สถานะสัญญาณดิจิทัลขาเข้าเป็น HIGH) หลอด LED ก็จะกระพริบอย่างรวดเร็ว ตามคำสั่งในโค้ดดังนี้

  digitalWrite(0, HIGH);
  delay(100);
  digitalWrite(0, LOW);
  delay(100);

แต่ถ้าไม่เป็นไปตามเงื่อนไข(ปุ่มกดไม่ถูกกด สถานะสัญญาณดิจิทัลขาเข้าเป็น LOW) หลอด LED จะกระพริบช้าๆ  ตามคำสั่งในโค้ด ดังนี้

  digitalWrite(0, HIGH);
  delay(1000);
  digitalWrite(0, LOW);
  delay(2000);

สรุป

ในตัวอย่างนี้จะเห็นแนวทางการประยุกต์ใช้ช่องทางดิจิทัลในการรับข้อมูลจากภายนอกเข้ามา ซึ่งเราต้องสร้างตัวแปรไว้ตัวหนึ่งสำหรับการรับข้อมูลนี้ แล้วนำข้อมูลนี้ไปใช้ประโยชน์ต่อไป ในโปรแกรมนี้ ครูได้เริ่มนำเงื่อนไข เพื่อให้โปรแกรมตัดสินใจมาใช้ โดยคำสั่งที่ใช้ คือ 

if (เงื่อนไขหรือตัวแปรที่ต้องการตรวจสอบ) { 
ข้อความคำสั่ง เมื่อเงื่อนไขเป็นจริง ;
}
else {
ข้อความคำสั่ง เมื่อเงื่อนไขเป็นเท็จ ;
}

เริ่มสนุกขึ้นแล้วนะครับ

แล้วพบกันใหม่ ตอนต่อไปครับ



ไม่มีความคิดเห็น:

แสดงความคิดเห็น