อุปกรณ์ จำนวน บอรด์ uKit explore 1 Infrared remote controller 1 ลำโพงบซั เซอร์ (Buzzer) 1 บอร์ดทดลอง (Breadboard) 1 1 ไฟ LED 1 N/A ตวั ต้านทาน (1 kΩ resistor) สายไฟ (Connecting cable) 6.5.2 แผนภาพวงจร 6.5.3 วธิ ีการเดินสาย สามารถเชื่อมต่อไฟ LED ดังที่แสดงด้านล่าง ทำการต่อตัวต้านทาน 1 kΩ และต่อขาสัญญาณ ขั้วบวกของไฟ LED กบั ขาสัญญาณ D9 ของบอร์ด uKit explore หมายเหต:ุ เชื่อมตอ่ กับขาสญั ญาณ D9 ของบอรด์ uKit Explore 146
การเช่ือมต่อดา้ นฮารด์ แวร์ โปรเจกต์นีต้ ้องใช้บอร์ดทดลองและช้นิ ส่วนอิเลก็ ทรอนกิ ส์หลายช้ิน เช่อื มต่อสายจัมเปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนี้จำเปน็ ต้องเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนน้จี ะทำการตอ่ ไฟ LED และตัวตา้ นทาน 1 kΩ หมายเหตุ: ห้ามเช่ือมตอ่ แบตเตอร่ี 6.5.4 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 5 > Control_LED แนะนำใหป้ ้อนขอ้ มูลโปรแกรมด้วยตวั เอง เพ่ือสรา้ งความคุ้นเคยกบั โปรแกรม นคี้ อื โปรแกรมตัวอย่าง /* uKit Explore 2.0 <Chapter 6> <Section 5> 6.5.1 Controlling an LED with a remote control FFA25D 1 FF629D 2 FFE21D 3 FF22DD 4 147
FF02FD 5 FFC23D 6 FFE01F 7 FFA857 8 FF906F 9 */ #include\"uKitExplore2En.h\" #include \"IRremote/IRremote.h\" long ir_item; int ledPin = 9; int recvPin = 37; IRrecv irrecv(recvPin); decode_results results; long KEY_1 = 0xFF30CF; long KEY_2 = 0xFF18E7; long KEY_3 = 0xFF7A85; long KEY_4 = 0xFF10EF; long KEY_5 = 0xFF38C7; long KEY_LONGkey = 0xFFFFFFFF; long longkey = -1; void setup() { pinMode(ledPin, OUTPUT); Initialization(); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX);//Output the receiving code using line breaks in hexadecimal Serial.println();//Add a blank row in order to make it easy to view the output irrecv.resume(); // Receive the next value } 148
//The event of pressing key 1 if (results.value == KEY_1 ) { ledOn(ledPin); longkey = KEY_1; } //The event of pressing and holding key 1 if ( results.value == KEY_LONGkey && longkey == KEY_1) { ledOn(ledPin); } //The event of pressing key 2 if (results.value == KEY_2 ) { ledOff(ledPin); longkey = KEY_2; } //The event of pressing and holding key 2 if ( results.value == KEY_LONGkey && longkey == KEY_2) { ledOff(ledPin); } //The event of pressing key 3 if (results.value == KEY_3 ) { flash(ledPin, 100, 100); longkey = KEY_3; } //The event of pressing and holding key 3 if ( results.value == KEY_LONGkey && longkey == KEY_3) { flash(ledPin, 100, 100); } //The event of pressing key 4 if (results.value == KEY_4 ) { fadeOn(1000, 5); fadeOff(1000, 5); longkey = KEY_4; 149
} //The event of pressing and holding key 4 if ( results.value == KEY_LONGkey && longkey == KEY_4) { fadeOn(1000, 5); fadeOff(1000, 5); } } // Turn the LED on void ledOn(int ledPin) { digitalWrite(ledPin, HIGH); } // Turn the LED off void ledOff(int ledPin) { digitalWrite(ledPin, LOW); } //LED flashes void flash(int ledPin, long highDuration, long lowDuration) { digitalWrite(ledPin, HIGH); delay(highDuration); digitalWrite(ledPin, LOW); delay(lowDuration); } //The breathing light is on void fadeOn(unsigned int time, int increament) { for (byte value = 0 ; value < 255; value += increament) { Serial.println(value); analogWrite(ledPin, value); delay(time / (255 / 5)); } } //The breathing light is off void fadeOff(unsigned int time, int decreament) { 150
for (byte value = 255; value > 0; value -= decreament) { Serial.println(value); analogWrite(ledPin, value); delay(time / (255 / 5)); } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเริม่ การอัปโหลดโปรแกรมได้หลงั จากตรวจสอบเสร็จแล้วเพือ่ แน่ใจวา่ ไม่มีข้อผิดพลาด ทำการกด Upload และ IDE จะสง่ ข้อมูลโปรแกรมไปยังบอร์ด uKit Explore 6.5.5 การทดลอง หลังจากเสร็จขั้นตอนข้างต้นแล้ว ทำการกดปุ่มหมายเลข 1 จะสังเกตเห็นไฟ LED จะสว่าง เม่ือ กดปุ่มหมายเลข 2 ไฟ LED จะดับลง เมื่อกดปุ่มหมายเลข 3 ไฟ LED จะมีการกะพริบ และเมื่อกดปุ่ม หมายเลข 4 ไฟ LED จะค่อยๆ สวา่ ง 6.5.6 การทดลองเพิม่ เตมิ หลงั จากทำตามขั้นตอนข้างต้นแลว้ ลองเชอ่ื มตอ่ ไฟ LED หลายดวงและควบคมุ ด้วยรโี มท คอนโทรล 6.6 การประยุกตใ์ ช้เซนเซอร์สำหรบั วดั อุณหภูมิและความชน้ื ในอากาศ บทที่ 1 แนะนำเซนเซอร์อณุ หภมู แิ ละความชนื้ (Introduction to Temperature and Humidity Sensors) 6.6.1 DHT11 คอื อะไร เซนเซอร์วัดอุณหภูมแิ ละความชื้น DHT11 เป็นโมดูลที่สามารถวัดอณุ หภูมิและความชื้นบริเวณ รอบๆ ทั่วไปหรอื ประยุกต์ใช้งานอื่นๆ ผ่านการสอบเทียบตามมาตรฐาน มีความน่าเชื่อถอื ราคาถูก การ ตอบสนองที่รวดเร็ว และความแม่นยำในการวัดสูง ในโมดูลประกอบไปด้วย ส่วนวัดความชื้อแบบ Resistive type และส่วนวดั อุณหภูมแิ บบ NTC ให้สัญญาณเอาทพ์ ุทแบบดจิ ิทลั ค่าสัมประสิทธ์กิ ารสอบ เทียบถูกเก็บไว้เป็นโปรแกรมในหน่วยความจำ OTP ซึ่งใช้ในกระบวนการตรวจจับสัญญาณภายในของ เซนเซอร์ สามารถเชื่อมต่ออินเทอร์เฟซอนกุ รมโดยใช้สายไฟเพยี งเส้นเดียวทำให้ง่ายต่อการติดตั้งใชง้ าน และรวดเร็ว โมดูลมขี นาดเลก็ ใชพ้ ลังงานตำ่ และส่งสญั ญาณไดส้ งู สุด 20 เมตร 151
6.6.2 การตอ่ ใชง้ าน (Interfaces) ในการต่อวัดแบบปกติ ถ้าระยะหา่ งระหวา่ งเซนเซอรแ์ ละบอร์ด uKit Explore หา่ งไมเ่ กนิ 20 เมตร จะต้องใช้ตวั ตา้ นทาน Pull up ขนาด 5K ถา้ ห่างมากเกนิ กวา่ 20 เมตร ใหเ้ ลอื กตัวต้านทาน Pull up ขนาดตามความเหมาะสม 6.6.3 ขาสัญญาณแหลง่ จ่าย (Power pin) แหล่งจ่ายไฟของ DHT11 คือแรงดัน VDD ขนาด 3.3-5 โวลต์ เมื่อมีการจ่ายกระแสไฟให้กับ เซนเซอร์ไมค่ วรส่งคำสัง่ ใดๆ ไปยงั เซนเซอร์ภายใน 1 วนิ าทเี พื่อความไม่เสถยี ร ตัวเกบ็ ประจุขนาด 100nF สามารถตอ่ เพมิ่ ระหว่าง VDD และ GND สำหรบั การแยกและกรองแหล่งจา่ ย 6.6.4 ชว่ งของการวดั แหล่งจ่ายไฟของ DHT11 คือแรงดันตั้งแต่ 3.3-5 โวลต์ สามารถวัดความชื้นในอากาศได้ตั้งแต่ 20-90% RH มโี อกาสคลาดเคลอ่ื น ± 5% RH ความละเอียด 1% RH และวดั อุณหภมู ิไดต้ ง้ั แต่ 0-50 °C มี โอกาสคลาดเคลอ่ื น ± 2 °C ความละเอียด 1 °C 152
บทท่ี 2 การตรวจสอบสภาพแวดล้อม (Environmental Monitoring) ระบบการตรวจสอบสภาพแวดล้อมที่ใช้ Arduino มีการออกแบบมาเพื่อทำการตรวจสอบ สภาพแวดล้อมแบบเรียลไทม์ บอรด์ uKit Explore และโปรแกรม Arduino มีการออกแบบและสร้างขึ้น เพ่ือตรวจสอบการเปลย่ี นแปลงอณุ หภูมแิ ละความชน้ื โดยรอบ 6.6.5 ตัวแปร float คอื อะไร ตวั แปร float เป็นประเภทของข้อมลู ที่ใช้สำหรับการเก็บตัวเลขแบบทศนิยม เปน็ ตัวแปรที่มักใช้ เพอ่ื ประมาณคา่ แอนะล็อกและคา่ ความต่อเนื่องเน่อื งที่มคี วามละเอยี ดมากกวา่ จำนวนเตม็ ใชเ้ ก็บค่าข้อมลู 32 บติ (4 ไบต)์ โดยสามารถเกบ็ ค่าไดร้ ะหวา่ ง -3.4028235E+38 ถงึ 3.4028235E+38 ตัวแปร float มักมีเลขทศนิยมเพียง 6-7 ตำแหน่ง หมายถึงจำนวนหลักทั้งหมดไม่ใช่ตัวเลข ทางด้านขวาของจุดทศนิยม สามารถเก็บค่าตัวเลขทศนิยมที่มีความละเอียดและถูกต้องของทศนิยม มากกว่าแบบ float ถึง 2 เท่า โดยใช้ double (มเี ลขทศนยิ ม 15 ตำแหน่ง) รูปแบบของคำสัง่ float var = val; คา่ พารามิเตอรท์ ต่ี อ้ งการ var – ชื่อตวั แปรชนดิ float val – คา่ ทก่ี ำหนดใหก้ บั ตัวแปร ตอ่ ไปจะสรา้ งแบบจำลองง่ายๆ เพือ่ ทดสอบอณุ หภมู ิและความชืน้ โดยรอบ อปุ กรณ์ จำนวน บอรด์ uKit explore 1 บอรด์ ทดลอง (Breadboard) 1 เซนเซอรอ์ ณุ หภูมิและความชืน้ 1 (Temperature and humidity sensor) 1 ตวั ต้านทาน (4.7 kΩ resistor) N/A สายไฟ (Connecting cable) 153
6.6.6 แผนภาพวงจร 6.6.7 วิธีการเดินสาย จากภาพดา้ นล่าง ทำการตอ่ เซนเซอร์อณุ หภูมิและความชน้ื เข้ากบั ตวั ต้านทาน 4.7 kΩ หมายเหต:ุ เช่ือมตอ่ เซนเซอร์อณุ หภมู แิ ละความช้นื กบั ขาสญั ญาณ D2 ของบอร์ด uKit Explore 154
การเช่อื มตอ่ ดา้ นฮารด์ แวร์ โปรเจกต์นี้ต้องใช้บอรด์ ทดลองและช้ินส่วนอิเล็กทรอนกิ ส์หลายช้ิน เชอ่ื มตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนี้จำเป็นต้องเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนน้จี ะทำการต่อเซนเซอรอ์ ุณหภมู แิ ละตวั ตา้ นทาน 4.7 kΩ หมายเหต:ุ ห้ามเช่ือมต่อแบตเตอร่ี 6.6.8 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 6 > DHT แนะนำให้ปอ้ นขอ้ มลู โปรแกรมด้วยตัวเองเพ่อื สร้าง ความคุ้นเคยกับโปรแกรม นีค้ ือโปรแกรมตัวอยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 6> 6.6.2 Temperature & humidity sensor */ #include \"uKitExplore.h\" #include \"DHT.h\" DHT dht; void setup() { Initialization(); dht.setup(2); // data pin 2 delay(1000); } void loop() { float temperature = dht.getTemperature(); float humidity = dht.getHumidity();//Assign the variable value Serial.print(\"temperature is \");//Printout Serial.print(temperature, 1);//Printout Serial.println(\" C\"); Serial.print(\"humidity is \"); 155
Serial.print(humidity, 1); Serial.println(\"%\"); delay(3000); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่ิมการอปั โหลดโปรแกรมได้หลังจากตรวจสอบเสรจ็ แล้วเพือ่ แน่ใจว่าไมม่ ีข้อผิดพลาด ทำการกด Upload และ IDE จะสง่ ข้อมูลโปรแกรมไปยงั บอร์ด uKit Explore 6.6.9 ผลการทดลอง หลงั จากเสรจ็ ข้นั ตอนข้างตน้ แล้ว ทำการเปิดหนา้ ตา่ งมอนเิ ตอรพ์ อรต์ อนุกรมใน Arduino IDE และสามารถดขู อ้ มลู ดังตอ่ ไปน้ี 6.6.10 การทดลองเพ่มิ เตมิ หลงั จากทำตามขนั้ ตอนข้างตน้ เสรจ็ แลว้ เราจะตอ้ งสงั เกตคา่ ผ่านหนา้ ต่างมอนิเตอร์พอรต์ อนุกรม โดยสามารถเพิ่มไฟ LED 2 ดวงเพื่อให้ไฟ LED เป็นสีแดงเมื่อมอี ณุ หภมู ิสูงกวา่ 30 และไฟ LED เป็นสเี ขียว เมอื่ ความชน้ื ต่ำกวา่ 50 156
6.7 การประยุกต์ใช้ Tilt Switches บทท่ี 1 เคร่อื งวดั ความส่ันสะเทอื น (Vibration Tester) 6.7.1 tilt switch คอื อะไร Tilt switch เรยี กอกี อย่างวา่ \"สวิตช์บอลเอียง (Rolling ball switches)\" คอื สวติ ช์อเิ ล็กทรอนกิ ส์ ที่ปดิ เปิดวงจรได้ ถ้าหากหมนุ มมุ เอยี งได้ตรงตามแนวระนาบหรือมแี รงมากระทบเพยี งพอ สวิตช์ภายในจะ มีลูกบอลเหล็กกลมๆอยู่ ที่ด้านหนึ่งจะมีขั้วไฟฟ้าอยู่ 2 ขั้ว เมื่อตัวสวิตช์เอียง ลูกบอลที่เป็นโลหะกลมๆ ภายในก็จะไหลไปมาได้ แตถ่ า้ หากไปชนท่ีขัว้ ไฟฟา้ ก็จะทำให้วงจรทำงาน แตม่ ันสามารถบอกได้แค่วา่ เอียง หรือไม่เอียง ซึง่ ไมส่ ามารถวัดเปน็ มุมองศาออกมาได้ ตามหลกั การน้ี จะสามารถทำของเลน่ ขนาดเล็ก หากตรวจพบการสน่ั สะเทอื นจะสง่ สัญญาณ จะ ใช้ tilt switch ในการสร้างเซนเซอร์ตรวจวัดการสั่นสะเทือนอย่างง่าย และต่อเข้ากับไฟ LED เมื่อเซนเซอร์ ตรวจจบั การส่ันสะเทอื นจะสงั่ การให้ไฟ LED ติดสว่างและเมอ่ื ไมม่ ีการสัน่ สะเทอื นไฟ LED จะดับลง อุปกรณ์ จำนวน บอรด์ uKit explore 1 บอรด์ ทดลอง (Breadboard) 1 1 Tilt switch 1 ไฟ LED 1 1 ตวั ตา้ นทาน (220 Ω resistor) N/A ตัวต้านทาน (4.7 kΩ resistor) สายไฟ (Connecting cable) 157
6.7.2 แผนภาพวงจร 6.7.3 วิธีการเดนิ สาย จากภาพด้านล่าง ทำการเชอื่ มต่อ tilt switch และไฟ LED โดยทำการตอ่ ตวั ตา้ นทาน 220 kΩ เขา้ กบั tilt switch และต่อตวั ต้านทาน 1 kΩ กบั ไฟ LED หมายเหต:ุ เชื่อมตอ่ tilt switch กับขาสัญญาณ A4 บนบอร์ด uKit Explore เชอื่ มต่อไฟ LED กบั ขาสญั ญาณ D7 ของบอรด์ uKit Explore การเชอ่ื มต่อด้านฮารด์ แวร์ โปรเจกต์นตี้ อ้ งใช้บอร์ดทดลองและชน้ิ ส่วนอเิ ล็กทรอนกิ ส์หลายช้ิน เชอื่ มตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนี้จำเป็นต้องเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจ้ี ะเชอื่ มต่อกับสวติ ช์บอลเอยี ง ไฟ LED ตวั ต้านทาน 220 kΩ และตวั ต้านทาน 1 kΩ หมายเหต:ุ ไมค่ วรเชื่อมตอ่ แบตเตอรี่ 158
6.7.4 โปรแกรมตวั อย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 7 > Tilt_switch แนะนำให้ป้อนข้อมูลโปรแกรมด้วยตัวเอง เพื่อสรา้ งความคุ้นเคยกบั โปรแกรม นคี้ ือโปรแกรมตัวอย่าง /* uKit Explore 2.0 <Chapter 6> <Section 7> 6.7.1 Tilt switch */ #include\"uKitExplore2En.h\" int switchPin = A4;//Define the pin int ledPin = 7;//Define the pin int val = 0;//Define the assignment void setup() { pinMode(ledPin, OUTPUT); //Set pin 7 as output Initialization(); } void loop() { val = analogRead(switchPin);//Assign a value for the tilt switch if (val < 800) //Open the serial port to adjust the value digitalWrite(ledPin, LOW); else digitalWrite(ledPin, HIGH); Serial.println(val);//Read the value } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่ิมการอปั โหลดโปรแกรมได้หลังจากตรวจสอบเสร็จแล้วเพือ่ แนใ่ จวา่ ไมม่ ีข้อผิดพลาด ทำการกด Upload และ IDE จะส่งขอ้ มูลโปรแกรมไปยงั บอรด์ uKit Explore 159
6.7.5 การทดลอง หลงั จากเสร็จขนั้ ตอนขา้ งตน้ แลว้ ทำการเขย่าชดุ ทดลองและเปิดหน้าต่างมอนเิ ตอรพ์ อรต์ อนุกรม ใน Arduino IDE สามารถดขู อ้ มูลดังต่อไปน้ี 6.7.6 การทดลองเพิม่ เติม หลังจากทำตามขั้นตอนข้างต้นแล้ว ลองนึกถึงประยุกต์ใช้งานเครื่องวัดความสั่นสะเทือนใน ชวี ติ ประจำวัน ลองเปลีย่ นไฟ LED เป็นเสียงออด เมือ่ เซนเซอร์เกดิ การส่ันสะเทอื นเสียงจะดังขึ้น 6.8 การประยุกต์ใช้ 4-Digit LED Displays จอแสดงผล LED เป็นอุปกรณ์อิเล็กทรอนิกส์ที่พบเห็นได้บ่อย ใช้แสดงตัวเลขฐานสิบที่มีหลาย หลัก (Digits) อุปกรณ์ชนิดนี้ประกอบด้วยไดโอดเปล่งแสง (LED) 7 ตัว ถูกจัดเรียงในรูปแบบตัวเลข \"8\" และ LED 1 ตัวเป็นอกั ขระจุด โดยจะมตี ัวอักษรแทนคือ a, b, c, d, e, f, g และ dp บทท่ี 1 จอแสดงผล LED (LED Display) 6.8.1 จอแสดงผล LED คืออะไร การสั่งให้จอแสดงผล LED 4 หลัก จะแสดงผลออกมาในแต่ละหลักด้วยการควบคุมขาสัญญาณ Common cathode ซง่ึ หมายถึง LED ท้งั หมดจะมขี าแคโทดรว่ มกนั หน้าจอแสดผลในชุด uKit Explore จำเป็นต้องตอ่ ตัวตา้ นทาน โดยมี 2 วิธี คือ วธิ ที ี่ 1 คอื การเชือ่ มต่อตวั ตา้ นทาน 4 ตัวกับแอโนด d1-d4 วิธี นี้จะใช้ตัวต้านทานน้อยแต่ความสว่างที่สร้างจะแตกต่างกัน คือ 1 เป็นความสว่างมากสุด และ 8 เป็นที่ สว่างน้อยสดุ วธิ ีที่ 2 คือการเช่อื มตอ่ กบั ขาทัง้ 8 ขา วธิ ีนี้มคี วามสวา่ งสม่ำเสมอ แตต่ อ้ งการตัวต้านทานที่ 160
มาก การทดลองนี้ใช้ตัวตา้ นทาน 220Ω จำนวน 4 ตัว จอแสดงผล LED 4 หลัก มีขาทั้งหมด 12 ขา คือ 1-12 ทวนเข็มนาฬกิ าจากมุมซ้ายล่าง อปุ กรณ์ จำนวน บอรด์ uKit explore 1 บอร์ดทดลอง (Breadboard) 1 4-digit LED display 1 ตวั ตา้ นทาน (220 Ω resistor) 4 สายไฟ (Connecting cable) N/A 161
6.8.2 แผนภาพวงจร (Circuit diagram) 6.8.3 วธิ ีการเดนิ สาย (Wiring Methods) จากภาพด้านล่าง สามาถเชอ่ื มต่อหน้าจอแสดงผล LED 4 หลักและทำการต่อตวั ต้านทาน 220Ω จำนวน 4 ตัว หมายเหต:ุ เช่ือมต่อหน้าจอแสดงผล LED 4 หลกั กบั ขาสญั ญาณ D2, D4, D5, D6, D7, D8, D9, D10, D11, D11, D12, A1 และ A2 ของบอรด์ uKit Explore 162
การเชอื่ มต่อด้านฮารด์ แวร์ โปรเจกต์น้ีตอ้ งใช้บอร์ดทดลองและช้ินส่วนอิเลก็ ทรอนิกส์หลายชิ้น เชื่อมตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนีจ้ ำเป็นตอ้ งเชือ่ มต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจี้ ะเช่อื มตอ่ กับจอแสดงผล LED 4 หลกั และตัวต้านทาน 220Ω 4 ตัว หมายเหต:ุ ไมค่ วรเช่อื มตอ่ แบตเตอรี่ 6.8.4 โปรแกรมตวั อย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ท่ี File > Examples > uKit Explore 2.0 > Chapter 6 > Section 8 > Digital_Tube แนะนำใหป้ ้อนขอ้ มูลโปรแกรมด้วยตัวเอง เพือ่ สร้างความคนุ้ เคยกบั โปรแกรม นีค้ ือโปรแกรมตัวอยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 8> 6.8.1 The four-digit LED display displays numbers 1, 2, 3, and 4 Number order: dp, g, f, e, d, c, b, a */ #include \"uKitExplore2En.h\" #define LED_A 7 #define LED_B 8 #define LED_C 9 #define LED_D 10 #define LED_E 11 #define LED_F 12 #define LED_G A1 #define LED_dp A2 #define COM1 2 #define COM2 4 #define COM3 5 #define COM4 6 163
unsigned char Number[11][8] = { {0, 0, 1, 1, 1, 1, 1, 1}, //0 {0, 0, 0, 0, 0, 1, 1, 0}, //1 {0, 1, 0, 1, 1, 0, 1, 1}, //2 {0, 1, 0, 0, 1, 1, 1, 1}, //3 {0, 1, 1, 0, 0, 1, 1, 0}, //4 {0, 1, 1, 0, 1, 1, 0, 1}, //5 {0, 1, 1, 1, 1, 1, 0, 1}, //6 {0, 0, 0, 0, 0, 1, 1, 1}, //7 {0, 1, 1, 1, 1, 1, 1, 1}, //8 {0, 1, 1, 0, 1, 1, 1, 1}, //9 {1, 0, 0, 0, 0, 0, 0, 0} //10 decimal point }; void setup() { pinMode(LED_A, OUTPUT); //Set as the output pin pinMode(LED_B, OUTPUT); pinMode(LED_C, OUTPUT); pinMode(LED_D, OUTPUT); pinMode(LED_E, OUTPUT); pinMode(LED_F, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_dp, OUTPUT); pinMode(COM1, OUTPUT); pinMode(COM2, OUTPUT); pinMode(COM3, OUTPUT); pinMode(COM4, OUTPUT); } void loop() { Display(1, 1); //Bit 1 displays 1 delay(500); Display(2, 2); //Bit 2 displays 2 164
delay(500); Display(3, 3); //Bit 3 displays 3 delay(500); Display(4, 4); //Bit 4 displays 4 delay(500); Display(5, 10); //Display the 1st point delay(500); Display(6, 10); //Display the 2nd point delay(500); Display(7, 10); //Display the 3rd point delay(500); Display(8, 10); //Display the 4th point delay(500); } void Display(unsigned char com, unsigned char num) { digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW); digitalWrite(LED_C, LOW); digitalWrite(LED_D, LOW); digitalWrite(LED_E, LOW); digitalWrite(LED_F, LOW); digitalWrite(LED_G, LOW); digitalWrite(LED_dp, LOW); switch (com) //Position selection { case 1: digitalWrite(COM1, LOW); //Select bit 1 digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 2: 165
digitalWrite(COM1, HIGH); digitalWrite(COM2, LOW); //Select bit 2 digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 3: digitalWrite(COM1, HIGH); digitalWrite(COM2, HIGH); digitalWrite(COM3, LOW); //Select bit 3 digitalWrite(COM4, HIGH); break; case 4: digitalWrite(COM1, HIGH); digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, LOW); //Select bit 4 break; case 5: digitalWrite(COM1, LOW); //Select the first point digitalWrite(LED_dp, LOW); digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 6: digitalWrite(COM1, HIGH); //Select the second point digitalWrite(COM2, LOW); digitalWrite(LED_dp, LOW); digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 7: 166
digitalWrite(COM1, HIGH); //Select the third point digitalWrite(COM2, HIGH); digitalWrite(COM3, LOW); digitalWrite(LED_dp, LOW); digitalWrite(COM4, HIGH); break; case 8: digitalWrite(COM1, HIGH); //Select the fourth point digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, LOW); digitalWrite(LED_dp, LOW); break; default: break; } digitalWrite(LED_A, Number[num][7]); //Query the code value table digitalWrite(LED_B, Number[num][6]); digitalWrite(LED_C, Number[num][5]); digitalWrite(LED_D, Number[num][4]); digitalWrite(LED_E, Number[num][3]); digitalWrite(LED_F, Number[num][2]); digitalWrite(LED_G, Number[num][1]); digitalWrite(LED_dp, Number[num][0]); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเรม่ิ การอัปโหลดโปรแกรมไดห้ ลังจากตรวจสอบเสร็จแล้วเพอื่ แน่ใจว่าไม่มีขอ้ ผดิ พลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มูลโปรแกรมไปยงั บอรด์ uKit Explore 6.8.5 การทดลอง หลงั จากเสรจ็ ขัน้ ตอนข้างตน้ แลว้ จอแสดงผล LED 4 หลกั จะแสดงหมายเลข 1, 2, 3 และ 4 6.8.6 การทดลองเพ่ิมเตมิ หลงั จากทำตามขนั้ ตอนขา้ งต้นแล้ว ลองทำใหจ้ อแสดงผล LED 4 หลกั แสดงเปน็ ตวั อกั ษร ABCD 167
บทท่ี 2 หน้าจอ LED นับจำนวน (LED Display Counter) เมือ่ รถเข้าสลู่ านจอดรถ จะมกี ารลงทะเบียนทจี่ อดรถและหมายเลขทะเบียนรถทบี่ รเิ วณทางเข้า และเมอื่ รถผา่ นบริเวณทางออกจะมีการยกเลกิ การลงทะเบยี นทจ่ี อดรถและหมายเลขทะเบียนรถ 6.8.7 unsigned long คืออะไร ตัวแปร unsigned long คือ ขอ้ มูลชนดิ จำนวนเต็มที่ไมค่ ิดเครอ่ื งหมายขนาด 32 บติ (4 ไบต์) มี ชว่ งตัง้ แต่ 0 ถงึ 4,294,967,295 (2 ^ 32 - 1) รูปแบบของคำสง่ั unsigned long var = val; คา่ พารามเิ ตอรท์ ีต่ ้องการ var – ช่อื ตัวแปรชนิด long val – ค่าทกี่ ำหนดใหก้ บั ตวั แปร 6.8.8 unsigned char คืออะไร Unsigned char คอื ขอ้ มลู ประเภท unsigned ทมี่ ีหนว่ ยความจำ 1 ไบต์ 6.8.9 ตวั ดำเนนิ การ Boolean คืออะไร การดำเนนิ การบลู ีนเป็นขอ้ มลู ทเี่ กบ็ คา่ ความเปน็ จริง TRUE กับคา่ ความเป็นเทจ็ FALSE ตวั ดำเนนิ การนส้ี ามารถใช้ได้ ถา้ หากเปน็ คำส่ังแบบมเี งอ่ื นไข 1. && (Logical AND) Logical AND ผลลัพธ์เป็นจรงิ เฉพาะเมอ่ื ตวั ถกู ดำเนินการทงั้ สองเปน็ จริง ตวั อยา่ งเชน่ if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { // Read the level of the two switches //\"True\" if the two are high level. } 2. || (Logical OR) Logical OR ผลลพั ธเ์ ปน็ จริงหากตัวถูกดำเนนิ การทั้งสองนั้นเปน็ จริง ตวั อย่างเช่น if (x > 0 || y > 0) { // \"True\" if x or y is greater than 0. } 168
3. ! (Logical NOT) Logical NOT ผลลพั ธใ์ นจรงิ ถา้ ตัวถูกดำเนินการเปน็ เท็จ ตัวอย่างเชน่ if (!x) { // \"True\" if x is \"false\" (i.e. if x is equal to 0). } 4. คำเตือน ตรวจสอบใหแ้ นใ่ จว่าไม่ได้สับสนเกยี่ วกบั ตวั ดำเนนิ การ AND โดยจะใช้เครือ่ งหมาย && (Double ampersand) ในคำสั่ง จะไม่ใช้เครื่องหมาย & (Single ampersand) ในการเขียนโปรแกรม ในทำนอง เดียวกันตัวดำเนินการ OR จะใช้เครื่องหมาย || (Double pipe) ในคำสั่งและจะไม่ใช้เครื่องหมาย | (Single pipe) อปุ กรณ์ จำนวน บอร์ด uKit explore 1 บอร์ดทดลอง (Breadboard) 2 4-digit LED display 1 ปุ่มกด (Button) 2 ตวั ตา้ นทาน (220 Ω resistor) 6 สายไฟ (Connecting cable) N/A 169
6.8.10 แผนภาพวงจร 6.8.11 วิธกี ารเดินสาย จากภาพดา้ นล่าง ทำการเชอื่ มตอ่ สวิตช์ปมุ่ กดและจอแสดงผล 4 หลัก ทำการต่อตวั ต้านทาน 220Ω จานวน 6 ตัว หมายเหต:ุ เชื่อมตอ่ สวิตช์ป่มุ กดกบั ขาสญั ญาณ D41 และ D42 ของบอรด์ uKit Explore เชื่อมต่อจอแสดงผล 4 หลกั กบั ขาสญั ญาณ D2, D4, D5, D6, D7, D8, D9, D10, D11, D12, A1, และ A2 ของบอรด์ uKit Explore การเช่อื มต่อด้านฮาร์ดแวร์ โปรเจกต์นี้ตอ้ งใช้บอร์ดทดลองและช้นิ ส่วนอเิ ล็กทรอนกิ ส์หลายชิ้น เชอ่ื มตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ 170
ขั้วบวกและขั้วลบของไฟ LED นอกจากนีจ้ ำเป็นตอ้ งเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจี้ ะเชอื่ มต่อกบั จอแสดงผล LED 4 หลกั ตวั ต้านทาน 220Ω 6 ตวั และสวติ ซป์ ุม่ กด 2 ตัว หมายเหต:ุ ไม่ควรเชอื่ มตอ่ แบตเตอรี่ 6.8.12 โปรแกรมตัวอยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 8 > Button_digital_tube แนะนำให้ป้อนข้อมูลโปรแกรม ด้วยตวั เองเพอ่ื สรา้ งความคนุ้ เคยกบั โปรแกรม น้คี อื โปรแกรมตวั อย่าง /* uKit Explore 2.0 <Chapter 6> <Section 8> 6.8.2 Press the button to increase or decrease the number displayed by the four-digit LED display by one Number order: dp, g, f, e, d, c, b, a */ #include\"uKitExplore2En.h\" #define LED_A 7 //Define the pin #define LED_B 8 //Define the pin #define LED_C 9 //Define the pin #define LED_D 10 //Define the pin #define LED_E 11 //Define the pin #define LED_F 12 //Define the pin #define LED_G A1 //Define the pin #define LED_dp A2 //Define the pin #define COM1 2 //Define the pin #define COM2 4 //Define the pin #define COM3 5 //Define the pin #define COM4 6 //Define the pin unsigned long longPressed;//Define the long press unsigned long changeTime;//Define the time #define button_1 42 171
#define button_2 41 int SUM = 0;//Define the value of the variable int Flag_up = 1; int Flag_down = 1; int buttonPressd = 0; int light_time = 100; unsigned char Number[11][8] = { {0, 0, 1, 1, 1, 1, 1, 1}, //0 {0, 0, 0, 0, 0, 1, 1, 0}, //1 {0, 1, 0, 1, 1, 0, 1, 1}, //2 {0, 1, 0, 0, 1, 1, 1, 1}, //3 {0, 1, 1, 0, 0, 1, 1, 0}, //4 {0, 1, 1, 0, 1, 1, 0, 1}, //5 {0, 1, 1, 1, 1, 1, 0, 1}, //6 {0, 0, 0, 0, 0, 1, 1, 1}, //7 {0, 1, 1, 1, 1, 1, 1, 1}, //8 {0, 1, 1, 0, 1, 1, 1, 1}, //9 {1, 0, 0, 0, 0, 0, 0, 0} //10 decimal point }; void setup() { Initialization(); pinMode(LED_A, OUTPUT); //Set as the output pin pinMode(LED_B, OUTPUT); pinMode(LED_C, OUTPUT); pinMode(LED_D, OUTPUT); pinMode(LED_E, OUTPUT); pinMode(LED_F, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_dp, OUTPUT); pinMode(COM1, OUTPUT); pinMode(COM2, OUTPUT); 172
pinMode(COM3, OUTPUT); pinMode(COM4, OUTPUT); pinMode(button_1, INPUT_PULLUP); pinMode(button_2, INPUT_PULLUP); //Set button IO to pull-up input } void loop() { if ( ScanKeyUp() == 1) //When a key is pressed { SUM++; //SUM plus one if (SUM > 9999) SUM = 0; } if ( ScanKeyDown() == 1) { SUM--; if (SUM < 0) { SUM = 9999; } } if ( ScanKeyUp() == 2 && (millis() - changeTime) > light_time ) //Increase by 1 every 100 milliseconds { SUM ++; if (SUM > 9999) SUM = 0; changeTime = millis(); } if ( ScanKeyDown() == 2 && (millis() - changeTime) > light_time ) //Decrease by 1 every 100 milliseconds { SUM --; if (SUM < 0) SUM = 9999; changeTime = millis(); 173
} Display(1, SUM / 1000); //Display the thousandth value of SUM delay(3); Display(2, (SUM / 100) % 10); //Display the hundredth value of SUM delay(3); Display(3, (SUM / 10) % 10); //Display the tenth value of SUM delay(3); Display(4, SUM % 10); //Display the one value of SUM delay(3); } unsigned char ScanKeyUp() //Key press scanner; return the key value { if (Flag_up && digitalRead(button_1) == LOW) //A key is pressed when it is in the \"not pressed\" state { Flag_up = 0; //Clear Flag_up delay(20); //Eliminate jittering through delay if (digitalRead(button_1) == LOW) //Key is pressed { longPressed = millis(); return 1; //Return the key value of 1 } } if (!Flag_up && digitalRead(button_1) == LOW && (millis() - longPressed) > 2000) return 2; //&& means AND, indicating that both conditions must be met at the same time. if (digitalRead(button_1) == HIGH) Flag_up = 1; //Set Flag_up when the key is released return 0; } unsigned char ScanKeyDown() { 174
if (Flag_down && digitalRead(button_2) == LOW) { Flag_down = 0; //Clear Flag_up delay(20); //Eliminate jittering through delay if (digitalRead(button_2) == LOW) //Key is pressed { longPressed = millis(); return 1; //Return the key value of 1 } } if (!Flag_down && digitalRead(button_2) == LOW && (millis() - longPressed) > 2000) return 2; if (digitalRead(button_2) == HIGH) Flag_down = 1; //Set Flag_up when the key is released return 0; } void Display(unsigned char com, unsigned char num) { digitalWrite(LED_A, LOW); digitalWrite(LED_B, LOW); digitalWrite(LED_C, LOW); digitalWrite(LED_D, LOW); digitalWrite(LED_E, LOW); digitalWrite(LED_F, LOW); digitalWrite(LED_G, LOW); //digitalWrite(LED_dp,LOW); switch (com) //Position selection { case 1: //digitalWrite(COM1,LOW); //Select bit 1 digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); 175
digitalWrite(COM4, HIGH); if (SUM < 1000) digitalWrite(COM1, HIGH); else digitalWrite(COM1, LOW); //Mask out the high bits break; case 2: digitalWrite(COM1, HIGH); //digitalWrite(COM2,LOW); //Select bit 2 digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); if (SUM < 100) digitalWrite(COM2, HIGH); else digitalWrite(COM2, LOW); break; case 3: digitalWrite(COM1, HIGH); digitalWrite(COM2, HIGH); //digitalWrite(COM3,LOW); //Select bit 3 digitalWrite(COM4, HIGH); if (SUM < 10) digitalWrite(COM3, HIGH); else digitalWrite(COM3, LOW); break; case 4: digitalWrite(COM1, HIGH); digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, LOW); //Select bit 4 // if (SUM<=10) digitalWrite(COM4,LOW); // else digitalWrite(COM4,LOW); break; case 5: digitalWrite(COM1, LOW); //Select the first point digitalWrite(LED_dp, LOW); digitalWrite(COM2, HIGH); 176
digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 6: digitalWrite(COM1, HIGH); //Select the second point digitalWrite(COM2, LOW); digitalWrite(LED_dp, LOW); digitalWrite(COM3, HIGH); digitalWrite(COM4, HIGH); break; case 7: digitalWrite(COM1, HIGH); //Select the third point digitalWrite(COM2, HIGH); digitalWrite(COM3, LOW); digitalWrite(LED_dp, LOW); digitalWrite(COM4, HIGH); break; case 8: digitalWrite(COM1, HIGH); //Select the fourth point digitalWrite(COM2, HIGH); digitalWrite(COM3, HIGH); digitalWrite(COM4, LOW); digitalWrite(LED_dp, LOW); break; default: break; } digitalWrite(LED_A, Number[num][7]); //Query the code value table digitalWrite(LED_B, Number[num][6]); digitalWrite(LED_C, Number[num][5]); digitalWrite(LED_D, Number[num][4]); digitalWrite(LED_E, Number[num][3]); digitalWrite(LED_F, Number[num][2]); 177
digitalWrite(LED_G, Number[num][1]); // digitalWrite(LED_dp,Number[num][0]); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่ิมการอปั โหลดโปรแกรมไดห้ ลงั จากตรวจสอบเสร็จแล้วเพ่อื แน่ใจว่าไม่มีขอ้ ผิดพลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มลู โปรแกรมไปยังบอรด์ uKit Explore 6.8.13 การทดลอง หลังจากเสร็จขั้นตอนข้างต้นแล้ว เมื่อกดสวิตซ์ปุ่มซ้ายจะเปน็ การบวกตวั เลขและแสดงผ่านหน้า จอแสดงผล LED 4 หลัก เมื่อกดสวิตซ์ปุ่มขวาจะเป็นการลบตัวเลขและแสดงผ่านหน้าจอแสดง LED 4 หลกั 6.8.14 การทดลองเพมิ่ เติม หลังจากทำตามขั้นตอนข้างต้น เมื่อกดสวิตซ์ปุ่มซ้ายจะเป็นการบวกตัวเลขและเมื่อกดสวิตซ์ปุ่ม ขวาจะเป็นการลบตัวเลข ลองเขียนโปรแกรมแสดงจอแสดงผล LED 4 หลักสำหรับการเพิ่มตัวเลขและ สญั ญาณเสียงเมอ่ื มกี ารกดสวติ ซ์ปุ่มซ้าย และจอแสดงผล LED 4 หลักมกี ารลดตัวเลขและสัญญาณเสยี ง 2 ครัง้ เม่ือกดสวิตซ์ปุม่ ขวา 6.9 การประยุกต์ใช้ LED แบบ Dot Matrices บทท่ี 1 แนะนำ 8*8 Dot Matrices 6.9.1 dot matrix คืออะไร LED แบบ Dot Matrix มีขนาด 8*8 เรียงเป็น Matrix อยู่ในชิ้นเดียวกัน จะประกอบด้วย LED จำนวน 64 ดวง โดยการนำเอา LED หลายตัวมาตอ่ เรียงกนั เปน็ แถว (Row) และคอลมั น์ (Column) เม่ือ มกี ารส่ังแถวท่ี 1 และคอลัมนท์ ี่ 0 ทำงานพรอ้ มกนั ทำให้ LED ดวงน้ันสวา่ งข้นึ ถา้ LED ตัวแรกเช่ือมต่อ ขา 9 กำหนดสถานะ HIGH และเชื่อมต่อขา 13 กำหนดสถานะ LOW ในการทำให้ LED สว่างขึ้นในแถว แรกให้เชื่อมต่อขา 9 กำหนดสถานะ HIGH และเชื่อมต่อขา 13, 3, 4, 10, 6, 11, 15, และ 16 กำหนด สถานะ LOW ในการทำให้ LED สว่างขึ้นในคอลัมน์แรกให้เชื่อมต่อขา 13 กำหนดสถานะ LOW และ เชือ่ มตอ่ ขา 9, 14, 8, 12, 1, 7, 2 และ 5 กำหนดสถานะ HIGH 178
6.9.2 องค์ประกอบของ dot matrix จอแสดงผล LED แบบ Dot Matrix จะประกอบด้วย LED จำนวนหลายดวงที่มีการจัดเรียงกนั แบบพิกเซล และมีการใช้วัสดุท่ีตา่ งกันเพื่อให้ได้สขี อง LED ที่แตกต่างกัน โดยทั่วไปจะเป็นสีแดง สีเขียว และสีเหลือง สำหรบั LED สีนำ้ เงนิ และสีเขยี วไดร้ ับการพัฒนาข้นึ และสามารถนำไปใช้งานได้ จอแสดงผล LED dot matrix เป็นอุปกรณ์แสดงผลที่ใช้ในงานต่างๆ เช่น การแสดงข้อความ กราฟิก ภาพเคลื่อนไหว วิดโี อและสญั ญาณวิดีโอ โดยการเปดิ หรอื ปดิ LED ท่ีต้องการ 6.9.3 การประยกุ ต์ dot matrices จอแสดงผล LED แบง่ ออกเป็นการแสดงขอ้ ความและการแสดงผลวดิ ีโอ จะมีการใช้ LED ในการ แสดงข้อความเพื่อแสดงตัวอักษรจีน ข้อความภาษาอังกฤษ และกราฟิกพร้อมกับคอมพิวเตอร์ การ แสดงผลวิดีโอจะถูกควบคุมโดยไมโครคอมพิวเตอร์และมีการแสดงผลข้อมูลแบบเรียลไทม์และชัดเจน นอกจากนี้ยังสามารถแสดงภาพเคลื่อนไหวแบบสองมิตแิ ละสามมิติ วิดีโอโทรทัศน์และ VCD ได้อีกด้วย จอแสดงผล LED เป็นภาพท่ีมีความสดใสและให้ความรู้สึกที่ลึก มีการใช้กันอย่างแพร่หลาย เช่น สถานี ต่างๆ ท่าเรือ สนามบนิ หา้ งสรรพสนิ ค้า โรงพยาบาล โรงแรม ธนาคาร ตลาดหลักทรพั ย์ และรวมถึงการ ก่อสรา้ ง บา้ นประมูล สถานประกอบการ อตุ สาหกรรมและสถานทส่ี าธารณะอืน่ ๆ 6.9.4 ลักษณะของ dot matrices Dot matrices ได้รับความนิยมอย่างมากและมีการพัฒนาอย่างรวดเร็วด้วยข้อได้เปรียบของ อุปกรณท์ ป่ี ระกอบไมโครชิพ LED ที่ให้ความสวา่ งสงู มีการจดั เรียงเปน็ อารเ์ รย์และหุม้ ดว้ ยสารประกอบอี พอกซี ทำให้อุปกรณ์มีความโดดเด่นในเรื่องความสว่างสูง การใช้พลังงานต่ำ การใช้ขาสัญญาณน้อย มี มมุ มองภาพขนาดใหญ่ การใช้งานยาวนาน และทนทานต่อความชืน้ อุณหภมู แิ ละการกดั กร่อน 6.9.5 ขาสญั ญาณของ dot matrices หากไมร่ ู้หมายเลขของขาสัญญาณ ให้ทำการทดสอบตามขั้นตอนต่อไปนี้ โดยใช้มัลติมิเตอรแ์ บบ แอนะลอ็ ก (หรอื แหล่งจา่ ยแรงดนั ไฟฟ้าอน่ื ) 1. ระบุขาสญั ญาณแอโนด (Anode) และแคโทด (Cathode) คอื ทำการตงั้ ค่ามลั ติมิเตอร์เพื่อวัด ความต้านทาน ลำดับแรกทำการวางหัววัดสีดำ (แสดงสถานะ HIGH) บนขาสัญญาณแบบสุ่ม และวาง หวั วัดสแี ดงลงบนขาสญั ญาณทีเ่ หลือ สังเกตดูวา่ dot matrix มกี ารเปล่งแสงหรอื ไม่ หาก dot matrix ไม่ มีการเปล่งแสงให้ทำการวางหัววัดสีดำลงบนขาสัญญาณถัดไป และวางหัววัดสีแดงลงบนขาสัญญาณท่ี เหลือเพื่อสังเกตการเปล่งแสงของ dot matrix ขาสัญญาณที่แตะด้วยหัววัดสีดำ คือ แอโนด และ ขาสญั ญาณที่แตะด้วยหัววดั สีแดง คือ แคโทด 179
2. จำนวนขาสัญญาณ คือ กำหนดแต่ละแถวของแอโนดด้วยตัวเลขและแต่ละคอลัมน์ของแคโทด ด้วยตัวอักษร เริ่มต้นด้วยการกำหนดหมายเลขขาสัญญาณที่เป็นแคโทด โดยการแตะขาสัญญาณแอโนด ด้วยหัววัดสีดำและแตะขาสัญญาณที่เป็นแคโทดด้วยหัววัดสีแดง เพื่อดูว่าคอลัมน์ใดของ LED มีการ เปล่งแสงออกมา กำหนดคอลัมน์แรกของขาสัญญาณด้วยตัวอักษร A และกำหนดคอลัมน์ที่สองของ ขาสัญญาณด้วยตวั อักษร B เป็นต้น ดังนั้นจะนับขาสัญญาณจำนวนครึ่งหน่ึงของ dot matrix หมายเลข ขาสญั ญาณทเ่ี หลอื จะเป็นสัญญาณ แอโนด ในลักษณะเดียวกนั กำหนดขาสัญญาณแถวแรกดว้ ยหมายเลข 1 แถวท่สี องของของขาสัญญาณ 2 เปน็ ต้น บทที่ 2 ควมคุมความสวา่ งของ Dot Matrix 6.9.6 แบบคอมมอนแคโทด (Common cathode) และ แบบคอมมอนแอโนด (Common anode) ของ dot matrices คำอธิบายเกย่ี วกับการต่อแบบคอมมอนแคโทดหรอื แบบคอมมอนแอโนดของ 8 * 8 dot matrix 1. บางคนเชือ่ ว่าการตอ่ แบบคอมมอนแอโนดจะเปน็ การนำเอาขาสญั ญาณข้ัวแอโนดของไฟ LED แต่ละตัวมาตอ่ ร่วมกัน แต่ขาสัญญาณขั้วแคโทดไม่ได้ต่อร่วมกัน และการต่อแบบคอมมอนแคโทดจะเป็น การนำเอาขาสัญญาณขั้วแคโทดของไฟ LED แต่ละตัวมาต่อร่วมกัน แต่ขาสัญญาณขั้วแคโทดไม่ได้ต่อ ร่วมกนั มนั เป็นสิ่งที่ไมถ่ ูกต้อง แตค่ วามเป็นจรงิ สำหรับจอแสดงผล LED จะมีการตอ่ แบบคอมมอนแคโทด หรือแบบคอมมอนแอโนดของ 8 * 8 dot matrix ต่อรว่ มกนั ดังแสดงในแผนภาพดา้ นล่าง 180
2. ขาสัญญาณจะถูกกำหนดหมายเลขในลักษณะเดียวกันสำหรับแบบคอมมอนแคโทดและแบบ คอมมอนแอโนด (เช่น หมายเลขขาสัญญาณจะเหมอื นกัน) แต่ขั้วของแถวและคอลัมน์จะอยู่ตรงข้ามกนั ดังนั้นแบบคอมมอนแอโนดไมค่ วรจะเปลี่ยนเปน็ แบบคอมมอนแอโนดเม่ือขาสัญญาณมีการเชื่อมต่อแบบ ยอ้ นกลบั ตามหลกั ทฤษฏตี ำแหนง่ ระหว่างแถวและคอลัมนจ์ ะมีการเปลี่ยนแปลง 3. หมายเหตุ ขาสัญญาณของ 8*8 dot matrix จะไม่ได้เรียงตามลำดับ ดังแสดงในแผนภาพ ดา้ นลา่ ง หลงั จากทไี่ ดร้ ู้เกย่ี วกับ LED แบบ Dot Matrix มีขนาด 8*8 เรยี งเป็นแบบ Matrix แล้ว จะทำการ เปดิ LED ตัวแรก ดงั แสดงภาพดา้ นบน ทำการเชือ่ มตอ่ ขาสัญญาณ Pin led 9 ไปยงั ขาสัญญาณ Pin D7 ของบอร์ด uKit Explore เชื่อมต่อขาสัญญาณ Pin led 13 ไปยังขาสัญญาณ Pin D6 ของบอร์ด uKit Explore ทำการต้งั ค่า Pin 9 เป็นสถานะ HIGH และต้ังค่า Pin 13 เปน็ สถานะ LOW ดังนนั้ LED ดวงแรก จะสวา่ งขน้ึ อุปกรณ์ จำนวน บอร์ด uKit explore 1 บอรด์ ทดลอง (Breadboard) 1 1 8*8 dot matrix N/A สายไฟ (Connecting cable) 181
อปุ กรณ์ที่จำเปน็ 6.9.7 แผนภาพวงจร 6.9.8 วธิ กี ารเดินสาย ทำการเช่อื มตอ่ 8*8 dot matrix ดังที่แสดงด้านลา่ ง หมายเหตุ: เชือ่ มต่อ 8 * 8 dot matrix กบั ขาสญั ญาณ D6 และ D7 ของบอร์ด uKit Explore 182
การเชอ่ื มตอ่ ฮารด์ แวร์ โปรเจกต์นตี้ ้องใช้บอร์ดทดลองและช้ินส่วนอิเล็กทรอนกิ ส์หลายชิ้น เชอื่ มตอ่ สายจัมเปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนีจ้ ำเป็นตอ้ งเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจ้ี ะเช่อื มตอ่ กบั 8*8 dot matrix. หมายเหตุ: ไมค่ วรเช่ือมตอ่ แบตเตอร่ี 6.9.9 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 9 > Dot_matrix แนะนำให้ป้อนข้อมูลโปรแกรมด้วยตัวเอง เพอื่ สรา้ งความคนุ้ เคยกบั โปรแกรม นค้ี อื โปรแกรมตวั อยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 9> 6.9.2 Light the first LED of the 8*8 dot matrix */ int pin9 = 7; //Connect LED pin 9 to pin D7 of the uKit Explore int pin13 = 6; // Connect LED pin 13 to pin D6 of the uKit Explore void setup() { // put your setup code here, to run once: pinMode(pin9, OUTPUT); pinMode(pin13, OUTPUT); digitalWrite(pin9, HIGH); digitalWrite(pin13, HIGH); } void loop() { // put your main code here, to run repeatedly: digitalWrite(pin13, LOW); //Pin 13 is low level, and the LED goes on delay(200); 183
digitalWrite(pin13, HIGH); //Pin 13 is high level, and the LED is high level at both ends, has no current, and goes out. delay(200); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่ิมการอปั โหลดโปรแกรมได้หลงั จากตรวจสอบเสร็จแล้วเพือ่ แน่ใจวา่ ไม่มีขอ้ ผิดพลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มลู โปรแกรมไปยังบอรด์ uKit Explore 6.9.10 การทดลอง หลงั จากทำตามข้ันตอนข้างต้นแลว้ จดุ แรกใน 8*8 dot matrix จะมกี ารกะพรบิ 6.9.11 การทดลองเพมิ่ เติม หลงั จากเสร็จสิน้ ข้นั ตอนข้างตน้ ลองควบคมุ LED ท้งั 4 มมุ ของ 8*8 dot matrix บทที่ 3 แปลงอักขระ (Transforming Characters) บทนจี้ ะสอนวธิ ีการแสดงการแปลงอกั ขระ โดยเมทริกซ์แบบจดุ สามารถแสดงขอ้ ความ กราฟิก รปู ภาพและภาพเคล่อื นไหวได้ ลำดบั ต่อไปจะแสดงตัวอกั ษรภาษาอังกฤษและรปู หัวใจ อุปกรณ์ จำนวน บอร์ด uKit explore 1 บอรด์ ทดลอง (Breadboard) 1 8*8 dot matrix 1 สายไฟ (Connecting cable) N/A อปุ กรณท์ ่ีจำเป็น 184
6.9.12 แผนภาพวงจร 6.9.13 วธิ กี ารเดินสาย ทำการเชอ่ื มตอ่ 8*8 dot matrix ดังที่แสดงด้านล่าง หมายเหต:ุ เชอ่ื มตอ่ 8*8 dot matrix กับขาสัญญา A0, A1, A2, A3, A4, A5, D2, D4, D5, D6, D7, D8, D9, D10, D11, D12 และ D12 ของบอรด์ uKit Explore 185
การเชือ่ มตอ่ ฮาร์ดแวร์ โปรเจกต์น้ตี ้องใช้บอร์ดทดลองและช้นิ ส่วนอเิ ล็กทรอนกิ ส์หลายช้ิน เช่อื มต่อสายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนี้จำเป็นตอ้ งเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจ้ี ะจะเชอ่ื มตอ่ กบั 8*8 dot matrix หมายเหตุ: ไมค่ วรเชื่อมตอ่ แบตเตอรี่ 6.9.14 โปรแกรมตวั อย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 9 > display_font แนะนำให้ป้อนขอ้ มูลโปรแกรมด้วยตัวเอง เพ่อื สร้างความคนุ้ เคยกับโปรแกรม น้ีคอื โปรแกรมตัวอยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 9> 6.9.3 The 8*8 dot matrix displays letters and patterns */ int R[] = {2, 8, A0, 6, 11, A1, 12, A3}; //Row int C[] = {7, A5, A4, 4, A2, 5, 9, 10}; //Column int heart[8][8] = {//Solid heart shape; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0} }; int led_I[8][8] = {//Letter I; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, 186
{0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; int led_U[8][8] = {//Letter U; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; void setup() { for (int i = 0; i < 8; i++) { pinMode(R[i], OUTPUT); pinMode(C[i], OUTPUT); } // Serial.begin(9600); } void loop() { // myDisplay(heart); for (int i = 0 ; i < 100 ; i++) //Display for 100 times in cycle { myDisplay(led_I); //Display the letter \"I\" } 187
for (int i = 0 ; i < 100 ; i++) //Display for 100 times in cycle { myDisplay(heart); //Display a heart shape } for (int i = 0 ; i < 100 ; i++) //Display for 100 times in cycle { myDisplay(led_U); //Display the letter \"U\" } } //Custom function //Display the function void myDisplay(int Led[8][8]) { for (int c = 0; c < 8; c++) { digitalWrite(C[c], LOW); //Gate column c //Loop for (int r = 0; r < 8; r++) { digitalWrite(R[r], Led[r][c]); } delay(1); Clear(); //Clear the display } } //Clear the display void Clear() { for (int i = 0; i < 8; i++) { digitalWrite(R[i], LOW); digitalWrite(C[i], HIGH); } } 188
หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่ิมการอปั โหลดโปรแกรมไดห้ ลงั จากตรวจสอบเสรจ็ แล้วเพือ่ แนใ่ จวา่ ไมม่ ีขอ้ ผิดพลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มูลโปรแกรมไปยังบอร์ด uKit Explore 6.9.15 การทดลอง หลังจากเสรจ็ ขัน้ ตอนข้างต้นแล้ว 8*8 dot matrix จะแสดงตัวอักษร \"I\" รูปหัวใจและตัวอักษร \"U\" 6.9.16 การทดลองเพิม่ เติม หลงั จากทำตามขั้นตอนขา้ งต้น ลองใช้ 8*8 dot matrix เพื่อแสดงตวั อักษรหรือสัญลกั ษณ์อ่นื ๆ บทที่ 4 Translating Characters ในบทนี้ จะทำการแสดงการแปลงอักขระเหมอื นตวั อย่างที่ผ่านมา แต่จะทำให้ตัวเลขท่แี สดงบน 8x8 dot matrix มกี ารเคลือ่ นย้ายไปทางซ้าย ลำดบั ต่อไปจะแสดงตัวเลขทเี่ คลื่อนทไ่ี ปทางซา้ ย อปุ กรณ์ จำนวน บอร์ด uKit explore 1 บอร์ดทดลอง (Breadboard) 1 1 8*8 dot matrix N/A สายไฟ (Connecting cable) อุปกรณท์ ่จี ำเป็น 189
6.9.17 แผนภาพวงจร 6.9.18 วธิ ีการเดนิ สาย ทำการเชอื่ มต่อ 8*8 dot matrix ดงั ที่แสดงดา้ นลา่ ง หมายเหตุ: เชื่อมต่อ 8*8 dot matrix กับขาสัญญาณ A0, A1, A2, A3, A4, A5, D2, D4, D5, D6, D7, D8, D9, D10, D11, D12 และ D12 ของบอรด์ uKit Explore 190
การเช่อื มตอ่ ฮาร์ดแวร์ โปรเจกต์น้ีตอ้ งใช้บอรด์ ทดลองและชิน้ ส่วนอเิ ลก็ ทรอนิกส์หลายชิ้น เชื่อมตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนี้จำเป็นต้องเชือ่ มต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนจี้ ะเชือ่ มตอ่ กบั 8*8 dot matrix หมายเหตุ: ไม่ควรเชือ่ มตอ่ แบตเตอร่ี 6.9.19 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 9 > Mobile_font แนะนำให้ป้อนขอ้ มูลโปรแกรมดว้ ยตัวเอง เพ่ือสร้างความคุน้ เคยกับโปรแกรม นค้ี ือโปรแกรมตัวอย่าง /* uKit Explore 2.0 <Chapter 6> <Section 9> 6.9.4 Translating an 8*8 dot matrix */ const int myspeed = 100;//Speed control int tempo = 0;//Speed control variable int R[] = {2, 8, A0, 6, 11, A1, 12, A3}; //Row int C[] = {7, A5, A4, 4, A2, 5, 9, 10}; //Column int heart[8][8] = {//Solid heart shape; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0} }; 191
int led_I[8][8] = {//Letter I; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; int led_U[8][8] = {//Letter U; LED is lit up at 1 {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; void setup() { for (int i = 0; i < 8; i++) { pinMode(R[i], OUTPUT); pinMode(C[i], OUTPUT); } } void loop() { tempo = 0; while (tempo++ < myspeed) { for (int i = 0 ; i < 100 ; i++) //Display for 100 times in cycle 192
{ myDisplay(led_I); //Display the letter \"I\" } //Achieve translation for (int i = 0; i < 8; i++) { int temp = led_I[i][0]; for (int j = 0; j < 7; j++) { led_I[i][j] = led_I[i][j + 1]; } led_I[i][7] = temp; } } } //Custom function //Display the function void myDisplay(int Led[8][8]) { for (int c = 0; c < 8; c++) { digitalWrite(C[c], LOW); //Gate column c //Loop for (int r = 0; r < 8; r++) { digitalWrite(R[r], Led[r][c]); } delay(1); Clear(); //Clear the display } } //Clear the display 193
void Clear() { for (int i = 0; i < 8; i++) { digitalWrite(R[i], LOW); digitalWrite(C[i], HIGH); } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเริม่ การอปั โหลดโปรแกรมไดห้ ลังจากตรวจสอบเสรจ็ แล้วเพอ่ื แน่ใจวา่ ไมม่ ีข้อผิดพลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มูลโปรแกรมไปยังบอรด์ uKit Explore 6.9.20 ผลการทดลอง หลังจากทำตามขั้นตอนข้างต้นแล้ว 8*8 dot matrix จะแสดงตัวอักษร \"I\" และเคลื่อนท่ีไป ทางซา้ ย 6.9.21 การทดลองเพิ่มเติม หลังจากเสร็จสิ้นขั้นตอนข้างต้น ลองควบคุม 8*8 dot matrix แสดงตัวอักษร \"I\" รูปหัวใจและ ตัวอกั ษร \"U\" เคลื่อนท่ีไปพร้อมกนั 6.10 การประยกุ ตใ์ ช้ Photoresistors บทท่ี 1 เซนเซอร์แสง (Sensor Lights) 6.10.1 photoresistor คอื อะไร Photoresistor หรือ แอลดีอาร์ (Light Dependent Resistor : LDR) คือความต้านทานชนิดที่ ไวตอ่ แสง กลา่ วคือ ตวั ความต้านทานนีส้ ามารถเปล่ยี นสภาพทางความนำไฟฟา้ ได้เม่อื มีแสงมาตกกระทบ โดยท่ัวไปทำมาจากแคดเมียม ซลั ไฟด์หรอื วัสดุอื่นๆ เชน่ Selenium, Aluminum sulfide, Lead sulfide และ bismuth sulfide ความตา้ นทานของวสั ดเุ หลา่ นจ้ี ะลดลงอยา่ งรวดเรว็ เมือ่ สมั ผสั กับแสงที่มคี วามยาว คลื่นเฉพาะ ตัวนำประจุไฟฟ้าที่เกิดจากแสงนั้นจะนำพากระแสลอยตัวภายใต้สนามไฟฟ้าอิเล็กตรอน เคลือ่ นท่ีไปยงั ข้ัวบวกของแหลง่ จา่ ยไฟและนำไฟฟ้าชนดิ โฮลเคลื่อนทไี่ ปยังขัว้ ลบของแหล่งจ่ายไฟ 194
6.10.2 photoresistor ทำงานอยา่ งไร ความต้านทานของ photoresistor จะมีค่าความต้านต่ำลงเมื่อมีแสงสว่างมากขึ้น และเมื่อแสง สว่างลดลงค่าความตา้ นทาน จะกลบั เพิม่ มากข้นึ 6.10.3 Photoresistor parameters ความต้านทานของ photoresistor เมื่อไม่ได้อยู่ภายใต้แสงเรียกว่า \"ค่าความต้านทานแสงมืด (Dark resistance)\" และกระแสที่ไหลผ่านจะถกู เรียกวา่ \"กระแสมืด (Dark current)\" ความต้านทานของ Photoresistor เมื่อสัมผัสกับแสงจะเรียกว่า \"ค่าความต้านทานแสงสว่าง (Bright resistance)\" และ กระแสท่ีตามมาจะเรยี กว่า \"กระแสสว่าง (Bright current)\" ย่งิ คา่ ความต้านทานแสงมืดมีค่ามดื มากขึน้ ค่า ความต้านทานแสงสว่างจะน้อยลง สำหรับการใช้งานจริงจะมีการวัดค่าความต้านทานแสงมืดในหน่วย megaohms และคา่ ความต้านทานแสงสว่างจะต่ำกว่า kiloohms 6.10.4 I-V คณุ สมบตั ิของ photoresistors 1. The photocurrent, I, เพิ่มขึ้นด้วยแรงดันไฟฟ้าที่ใช้กับ photoresistor, U, และไม่มีความ อม่ิ ตัว 2. เส้นโค้ง U-I ของ photoresistor ภายใต้สภาพแสงที่กำหนดเป็นเส้นตรงซึ่งบ่งชี้ว่าความ ตา้ นทานของ photoresistor ไมไ่ ด้ถกู กำหนดโดยแรงดันไฟฟ้าทใี่ ช้ 195
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372