Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ไมโครคอนโทรลเลอร์และการประยุกต์

ไมโครคอนโทรลเลอร์และการประยุกต์

Description: ไมโครคอนโทรลเลอร์และการประยุกต์

Search

Read the Text Version

484 } } } void loop() { } บทท่ี 3 1. จำลองการทำงานของวงจรอเิ ล็กทรอนิกส ซ่ึงรวมถึงวงจรท่ีเกดิ จากการนำไมโครคอนโทรลเลอร ชนดิ ตางๆ มาประยุกตใชงานรวมดว ยโดยไมจ ำเปนตองใชอุปกรณจ รงิ 2. Component Mode 3. แสดงสญั ลกั ษณของอุปกรณ 4. Terminal Mode 5. โฟลเดอร temp 6. ใชงานแทน Serial Monitor เนือ่ งจากการใช Serial Monitor จำเปน ตอ งใชง านบอรด Arduino จรงิ แตในทางกลับกนั Virtual Terminal คือตวั จำลองการทำงานสำหรับการส่ือสารแบบอนกุ รม แทนการใชบ อรด จริง 7. ตำแหนง ขา ตำแหนง ขา Virtual Terminal บอรดทดลอง TXD (ขา 1 RXD RXD (ขา 0) TXD บทท่ี 4 1. แอโนด และ แคโทด 2. จายแรงดนั 5 โวลตผา นตวั ตานทานทมี่ ีคา ประมาณหลักรอยโอรมท่ีขวั้ แอโนด และตอกราวดทีข่ วั้ แคโทด 3. การกำหนดสถานะของโหมดการทำงานในตำแหนง ขาของบอรด Arduino ซงึ่ มี 2 โหมดคอื เอาตพุต และอนิ พุต 4. pinMode(3, OUTPUT)

485 5. การควบคุมสถานะเอาตพุตที่ตำแหนงขาอางองิ จากบอรด Arduino 6. digitalWrite(3, HIGH) 7. ฟงกช ัน delay() คือการหนว งเวลาในหนว ยมลิ ลิวนิ าที ในขณะทีฟ่ งกชัน delayMicroseconds() คอื การหนวงเวลาในหนว ยไมโครวินาที 8. 0x15 บทท่ี 5 1. HIGH หรอื 5 โวลต 2. ฟงกช นั สำหรับรบั คาสญั ญาณดิจทิ ัลจากอุปกรณภ ายนอก 3. pinMode(4, INPUT) 4. การสน่ั ของหนา สมั ผสั ซงึ่ สงผลใหเ กิดการตดั ตอ ของหนาสัมผสั จำนวนหลายครั้ง 5. การดเี บาต 6. การหนวงเวลา และการหยุดรอการสมั ผสั สวิตซ 7. การกำหนดชวงเวลาของการหนวงเวลาทเ่ี หมาะสม 8. int sw = 12; int pulse = 0; void setup() { Serial.begin(9600); pinMode(sw, INPUT); } void loop() { if(digitalRead(sw) == LOW){ pulse = 1; } if(pulse == 1 && digitalRead(sw) == HIGH){ Serial.println(\"Button is pressed\"); pulse = 0; } } บทที่ 6 1. สามารถแสดงผลลพธใ นรูปแบบตวั เลข หรอื ตัวอักษรบางชนิดได

486 2. 2 ประเภท คอื คอมมอนแอโนด และคอมมอนแคโทด 3. LOW 4. 10 เสน 5. g fedcba 1001001 6. 0x49 หรอื 4916 7. 0x36 หรือ 3616 8. int sw = 13; int count = 9; int pulse = 0; int num[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; void setup() { DDRD = 0xFF; pinMode(sw, INPUT); } void loop() { PORTD = num[count]; if(digitalRead(sw) == LOW){ pulse = 1; } if(pulse == 1 && digitalRead(sw) == HIGH){ count--; if(count == -1){ count = 9; } pulse = 0; } } บทท่ี 7 1. ขอ ดี แสดงผลไดหลากหลาย และสวยงามมากกวา ขอ เสยี ใชสายสัญญาณจำนวนมากกวา 2. 10 เสน

487 3. 25 หลอด 4. ไมสามารถแสดงผลลัพธใ นลกั ษณะดงั กลา วได 5. สถานะของแตละคอลัมน คอลัมนท่ี 7 6 5 4 3 2 1 0 ผลลพั ธ 1 1 1 1 1 0 1 1 สถานะของแตละแถว แถวท่ี 7 6 5 4 3 2 1 0 ผลลัพธ 0 0 0 1 1 0 0 0 6. สถานะของแตล ะแถว แถวที่ 7 6 5 4 3 2 1 0 ผลลัพธ 0 0 0 0 1 0 0 0 สถานะของแตล ะคอลัมน คอลัมนที่ 7 6 5 4 3 2 1 0 ผลลพั ธ 1 1 1 0 1 0 0 1 7. ปา ยแจงชั้นของลิฟต บทท่ี 8 1. อปุ กรณร ับขอ มูลแบบเมตริกซทชี่ ว ยลดจำนวนขาของสัญญาณ 2. 20 ตัว

488 3. ฟง กชันทีร่ ับคา จากอุปกรณร บั คาแบบเมตริกซ และมีการคืนคาเปน ชนดิ ขอมลู แบบ char โดยมี ประโยชนเพื่อไวใ ชส ำหรบั ตรวจสอบคา ของอักขระ 4. 2 แบบคือ แบบ 2 แถว 3 คอลมั น และแบบ 3 แถว 2 คอลมั น 5. #include <Keypad.h> const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = { 0, 1, 2, 3}; byte colPins[COLS] = { 4, 5, 6 }; Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); #define ledpin 13 void setup() { pinMode(ledpin, OUTPUT); } void loop() { char key = kpd.getKey(); if(key) { If(key == ‘*’) { digitalWrite(ledpin, LOW); }else if (key == ‘#’) digitalWrite(ledpin, HIGH); } } } บทท่ี 9 1. โยชนประของแอลซดี ีคืออะไร 2. แอลซดี ใี ชจ ำนวนสายสัญญาณนอ ยกวา และสามารถแสดงอักขระไดเ ปน จำนวนมาก อยางไรกต็ าม เมตริกซแ อลอีดจี ะมีความสวยงามมากกวาแอลซีดี 3. 2 วธิ ี คอื โหมด 4 บติ และ โหมด 8 บติ 4. สรางสญั ญาณนาิกาเพื่อใหแอลซดี ีสามารถทำงานตามคำส่ังตางๆ ได

489 5. 0x01 6. ฟง กชนั clear() 7. LiquidCrystal 8. #include <LiquidCrystal.h> int num = 0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { lcd.clear(); if(num%2==0){ lcd.setCursor(0,0); } else{ lcd.setCursor(0,1); } lcd.print(num); num++; if(num > 100){ num = 0; } delay(500); } บทที่ 10 1. ไอซีสำหรับขับเพ่ือใชสำหรบั จายแรงดัน และกระแสทสี่ ูงสำหรับอุปกรณอิเลก็ ทรอนิกสท ่จี ำเปน ตอง ใชแ รงดันและกระแสท่สี งู เชนมอเตอร 2. อุปกรณส ำหรับเปล่ยี นพลังงานไฟฟา เปนพลังงานแมเหล็กท่สี ามารถนำมาใชส ำหรบั การเปด – ปด หนาสมั ผัสสำหรับวงจรของมอเตอร 3. สลบั ข้ัวระหวางขาทง้ั สองขางของมอเตอร 4. มอเตอรชนดิ หน่ึงที่สามารถควบคมุ จงั หวะ และทิศทางการหมุนได จงึ มปี ระโยชนต รงท่สี ามารถ ควบคมุ ตำแหนงการหยดุ ของสเตป็ มอเตอรไ ด 5. สามารถหมนุ ไดในมมุ ที่เลก็ ลง หรือมคี วามถสี่ งู ข้ึนตอการหมนุ 1 รอบ 6. มอเตอรช นิดหนง่ึ ทมี่ ีแรงบิตทสี่ งู มาก สามารถควบคมุ ไดท้ังความเรว็ แรงบิต และตำแหนงทศิ ทางการหมุน โดยผลลพั ธท ่ีไดมีความแมนยำสูงมาก

490 7. Servo 8. int count = 0; int a = 0; int num[] = {0x01, 0x02, 0x04, 0x08}; void setup() { DDRD = 0xFF; for(a = 0; a < 18; a++){ PORTD = num[count]; count++; if(count > 3){ count = 0; } delay(500); } } void loop() { } บทที่ 11 1. เปน สญั ญาณแบบตอเนื่อง มลี ักษณะเปน คลื่นไซน ซง่ึ มีความถีแ่ ละความเขมของสญั ญาณที่ตางกัน ในแตล ะลกู คลื่น 2. A0 – A5 3. ฟงกชนั ท่ีใชส ำหรบั รบั คา สัญญาณอนาล็อกจากเซ็นเซอรสูบ อรด Arduino โดยจำเปน ตองใช ตำแหนงขาทสี่ ามารถรบั สัญญาณอนาล็อกไดเ ทานั้น 4. ฟง กช นั ท่ใี ชสำหรับปรบั ชวงคา ของสัญญาณอนาล็อกใหมใ หอยูใ นชว งตามที่ผูใ ชงานตองการ 5. map(val, 0 ,1023, 0, 100); 6. เซ็นเซอรวดั ระยะสง สญั ญาณเปน แบบดจิ ทิ ัล ดงั น้นั จงึ สามารถใชง านไดเพยี งการตรวจจบั วัตถุวา พบหรอื ไม ในทางกลบั กนั เซ็นเซอรต รวจจบั ความเคล่อื นไหวสงสญั ญาณเปนแบบอนาลอ็ ก จึงสามารถ ตรวจวัดระยะหางระหวา งวตั ถุและเซน็ เซอรได 7. 15.3 เซนตเิ มตร 8. int led = 8; void setup() { pinMode(led, OUTPUT);

491 } void loop() { int val = analogRead(A0); val = map(val, 0 ,1023, 0, 255); int val2 = analogRead(A1); val2 = map(val, 0 ,1023, 0, 255); if(val1 > 70 && val2 < 50){ digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); } } บทที่ 12 1. สามารถใชขยายพอรตไมโครคอนโทรลเลอรเ พื่อใหม ตี ำแหนงขาทสี่ ามารถใชง านไดมากยง่ิ ขึน้ 2. ชฟิ รจี สิ เตอรทอี่ าศัยหลกั การเลือ่ นบิตขอมลู ครงั้ ละ 1 บิต 3. 74HC595, 74LS595, TPIC6B595 4. ใชข าไมโครคอนโทรลเลอร 3 ขาสามารถขยายพอรต ได 7 ขา ดังน้นั ขยายพอรต ไดเ พิ่มข้ึน 4 ขา 5. Q0 – Q7 6. ใชส ำหรับการเลอ่ื นบิตขอมูลครั้งละ 1 บิต 7. ขา 11 (SH_CP) 8. byte count = 4; int num[] = {0x06, 0x4F, 0x6D, 0x07, 0x6F}; void setup() { pinMode(1, OUTPUT); // 1 = ST_CP pinMode(2, OUTPUT); // 2 = DS pinMode(3, OUTPUT); // 3 = SH_CP digitalWrite(1, HIGH); } void loop() { Extended_Port(num[count]); delay(1000); count--; if(count == 0){ count = 4; } } void Extended_Port(byte p){

492 digitalWrite(1, LOW); shiftOut(2, 3, MSBFIRST, p); digitalWrite(1, HIGH); } บทท่ี 13 1. การปรบั ความสวางของหลอดไฟ หรือการนำมาใชสำหรับการควบคมุ ความเรว็ รอบการหมุนของ มอเตอร 2. ความถี่ 1 ลูกคลืน่ ในเวลา 100 วินาทีมีสถานะ “HIGH” 20 วินาที และสถานะ “LOW” 80 วนิ าที 3. 1 โวลต 4. เขยี นคาแรงดนั ที่คำนวณจากพีดบั เบิลยเู อ็มไปยงั ตำแหนงขาพิน 1 ขาทบ่ี อรด Arduino ซึง่ โดยสว น ใหญจะรองรบั ฟง ชนั กด งั กลาวน้ที ี่ตำแหนงขา 3, 5, 6, 9, 10 และ 11 5. 51 บทท่ี 14 1. การขดั จังหวะการทำงานหลกั ของโปรแกรม โดยหากอินเทอรร พั ทเกดิ ขน้ึ โปรแกรมจะตอ งไป ทำงานชุดคำสง่ั ทีอ่ ยภู ายในอินเทอรร ัพทกอนเสมอ 2. 2 ประเภทคอื อนิ เทอรร ัพทจากภายใน และอินเทอรจากภายนอก 3. ขา 2 และ ขา 3 4. ขา 2 รบั สัญญาณ int0 และขา 3 รบั สญั ญาณ int1 5. กำหนดการใหบริการสัญญาณอินเตอรรพั ท เพ่ือรอเหตุการณของการเกิดอนิ เตอรร ัพทและการ เรยี กใชชดุ คำสง่ั เม่ือเกดิ การอินเตอรรพั ทขึ้น 6. attachInterrupt(digitalPinToInterrupt(3), test, CHANGE); 7. noInterrupts() 8. int led1 = 3; int led2 = 4; int i0 = 2; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); attachInterrupt(digitalPinToInterrupt(i0), startInterrupt, CHANGE); }

493 void loop() { digitalWrite(led1, LOW); digitalWrite(led2, HIGH); } void startInterrupt(){ digitalWrite(led1, HIGH); digitalWrite(led2, LOW); while(digitalRead(i0) == LOW); } บทท่ี 15 1. หนวยความจำชนิดหนึ่งที่สามารถอาน, เขียน ลบ และแกไขขอมูลที่ถูกเก็บไวในตำแหนงตางๆ ภายในหนวยความจำไดโ ดยใชสญั ญาณไฟฟาสำหรับจดั การขอ มูล 2. 1 กิโลไบต 3. ขอ มลู ทถี่ ูกเก็บไวจะยงั คงอยูถ งึ แมว าจะหยดุ จายไฟเล้ยี ง 4. 1 แสนคร้ัง 5. EEPROM.read() 6. 255 7. EEPROM.put() สามารถเขยี นขอมลู ลงหนว ยความจำออี พี รอมไดม ากกวา EEPROM.write() 8. 35 บทที่ 16 1. ประหยัดเวลาในการพัฒนาโปรแกรมท้งั สำหรับผพู ฒั นา และผใู ชง านท่นี ำไลบรารไี ปใชง าน 2. 2 ไฟลค ือไฟลส วนหวั และไฟลห ลกั 3. ไฟลท ีม่ ีนามสกลุ .h คือไฟลทใ่ี ชเ กบ็ ขอ มลู ตัวแปร และฟงกชนั ท้ังหมดทม่ี อี ยูใ นไฟลหลัก โดยจะเปน เพียงการประกาศชื่อตวั แปร และช่อื ฟง กช นั เพียงเทา นน้ั 4. #ifndef tt_h #define tt_h #include \"Arduino.h\" void test(); #endif

494 5. “arduino\\libraries”

ประวตั ผิ เู ขียน นายกฤษณพงศ สมสขุ Mr. Kritsanapong Somsuk ตำแหนง ทางวิชาการ ผูชวยศาสตราจารย สาขาวชิ าวิศวกรรมคอมพวิ เตอร สถานท่ีทำงาน สาขาวิชาวศิ วกรรมคอมพวิ เตอร และการสื่อสาร คณะเทคโนโลยี มหาวทิ ยาลยั ราชภัฏ อุดรธานี (สามพราว) ประวตั ิการศกึ ษา ปรชั ญาดุษฎบี ณั ฑิต (ปร.ด.) สาขาวชิ าวิศวกรรมคอมพวิ เตอร ปริญญาเอก มหาวทิ ยาลยั ขอนแกน, 2560 วทิ ยาศาสตรมหาบณั ฑติ (วท.ม. สาขาวชิ าวทิ ยาการคอมพิวเตอร ปริญญาโท มหาวทิ ยาลยั ขอนแกน, 2557 วิศวกรรมศาสตรมหาบัณฑิต (วศ.ม. สาขาวิชาวศิ วกรรม ปริญญาโท คอมพิวเตอร มหาวิทยาลัยขอนแกน , 2553 วิศวกรรมศาสตรบณั ฑติ (วศ.บ. สาขาวิชาวศิ วกรรมคอมพิวเตอร ปริญญาตรี มหาวิทยาลัยขอนแกน (เกยี รตินิยมอนั ดับ 2), 2551 ประวตั ิการทำงาน 2553 – 2558 อาจารยป ระจำสาขาวิชาวิศวกรรมอิเล็กทรอนิกส คณะเทคโนโลยี มหาวทิ ยาลยั ราชภัฏอุดรธานี 2558 ไดร บั แตง ตั้งใหดำรงตำแหนงผชู วยศาสตราจารย ในสาขาวชิ า วศิ วกรรมคอมพิวเตอร 2558 – ปจ จุบนั ผูรับผดิ ชอบหลักสูตร และอาจารยประจำสาขาวิชาวศิ วกรรม คอมพวิ เตอร และการส่ือสาร คณะเทคโนโลยี มหาวทิ ยาลัยราชภัฏอุดรธานี