5.9.7 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 5 > Section 9 > balance แต่แนะนำให้ป้อนข้อมูลโปรแกรมด้วยตัวเอง เพ่อื สร้างความคุ้นเคยกบั โปรแกรม นี้คือโปรแกรมตวั อยา่ ง /* uKit Explore 2.0 <Chapter 5> <Section 9> 5.9.2 Self-balancing scooter */ //Original 6050 data + double speed code disk #include\"uKitExplore2.h\" //Custom variable char val = 'z'; //Adjust and control the command word int Speed_need = 0, Turn_need = 0; //Motion speed, turning speed float speeds, speeds_filter, positions; //Speed, speed filtering, position float diff_speeds; //Speed difference int text_time = 0, spcount = 0; //Test time, times of speed measurement #define Gry_offset -20 // Gyroscope offset #define Gyr_Gain 0.00763358 //The corresponding 1G float omega; uint32_t timer; //PID parameter double Output = 0; //PID output float Kp = 68.34 , Kd = 0, Ksp = 0, Ksi = 0, Kdsp = 0; //Kp=jitter speed Kd=jitter frequency // MPU6050 parameter MPU6050 accelgyro; int16_t ax, ay, az, gx, gy, gz; //Angle parameter float Gyro_y; //Temporarily store the data about the gyroscope at axis Y float Angle_ax; //The angle of inclination calculated from the acceleration 96
float Angle; //The final tilt angle of the car calculated by the first order complementary filter float Angle0 = -6.22; //Angle of mechanical balance is -6.23 //Motor output int PWM_right = 0, PWM_left = 0; int PWM_left_least = 0, PWM_right_least = 0; //Compensation of 50 for the startup of left and right motors //The speed measurement code disk interrupts int count_right = 0; int count_left = 0; //Motor output void SetMotorVoltage(int nLeftVol, int nRightVol) { if (nLeftVol > 140) nLeftVol = 140; //Prevent the PWM value from exceeding 255 else if (nLeftVol < -140)nLeftVol = -140; if (nRightVol > 140) nRightVol = 140; //Prevent the PWM value from exceeding 255 else if (nRightVol < -140)nRightVol = -140; setMotorTurn(1, nLeftVol); setMotorTurn(2, -nRightVol); } //Calculate the car angle void Angle_Calcu(void) { Angle_ax = (az - 711.9009) / 238.2 ; //Eliminate the zero offset 1942, 16384*3.14/1.2*180//Radians converted to degrees,711.9009 Gyro_y = ((gy - 85.607) / 16.4); //Remove the zero offset 119, 2000deg/s 16.4 LSB/(deg/s)250---131 85.607 Angle = 0.97 * (Angle + Gyro_y * 0.0005) + 0.03 * Angle_ax; Serial.println(Angle); } void setup() { Wire.begin(); Serial.begin(115200); accelgyro.initialize(); //Initialize the device 97
//Pin mode setting //Interrupt settings } void loop() { if (Serial.available() > 0) { val = Serial.read(); //Parameter adjustment if (val == 'A') Kp += 0.1; if (val == 'a') Kp -= 0.1; if (val == 'B') Kd += 0.01; if (val == 'b') Kd -= 0.01; if (val == 'C') Ksp += 0.1; if (val == 'c') Ksp -= 0.1; if (val == 'D') Ksi += 0.01; if (val == 'd') Ksi -= 0.01; if (val == 'E') Angle0 += 0.1; if (val == 'e') Angle0 -= 0.1; if (val == 'F') PWM_left_least += 1; if (val == 'f') PWM_left_least -= 1; if (val == 'G') PWM_right_least += 1; if (val == 'g') PWM_right_least -= 1; //Parameter viewing if (val == 'H') { Serial.print(ax); Serial.print(\"\\t\"); //Used to measure zero offset Serial.println(gy); //Used to measure zero offset } if (val == 'I') { Serial.print(Angle0); Serial.print(\"\\t\"); Serial.print(PWM_left_least); Serial.print(\"\\t\"); Serial.print(PWM_right_least); Serial.print(\"\\t\"); Serial.print(Kp); Serial.print(\"\\t\"); Serial.print(Kd); Serial.print(\"\\t\"); 98
Serial.print(Ksp); Serial.print(\"\\t\"); Serial.print(Ksi); Serial.print(\"\\t\"); Serial.println(Kdsp); } if (val == 'J') { Serial.print(Angle); Serial.print(\"\\t\"); Serial.println(diff_speeds); } if (val == 'K') Kdsp += 1; if (val == 'k') Kdsp -= 1; //Car control if (val == '1') { Angle0 = -5.12; //Angle of mechanical balance //Forward Turn_need = 0; } if (val == '2') { Speed_need = -15; //Backwards Turn_need = 0; } if (val == '3') { Speed_need = 0; Turn_need = 30; //Turn left } if (val == '4') { Speed_need = 0; Turn_need = -30; //Turn right } if (val == '5') { Angle0 = -6.23; //Angle of mechanical balance; //Stop Turn_need = 0; } } 99
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //Get the sensor raw value Angle_Calcu(); //Calculate the angle PWM_Calcu(); //PWM output calculation } void PWM_Calcu(void) { if (abs(Angle) > 45) { SetMotorVoltage(0, 0); //Angle is greater than 30 degrees, so the PWM output is stopped } else { //PWM output calculation Output = Kp * (Angle - Angle0) + Kd * Gyro_y ; if (Turn_need == 0) { PWM_left = Output - Kdsp * diff_speeds; PWM_right = Output + Kdsp * diff_speeds; } PWM_left = Output - Turn_need; PWM_right = Output + Turn_need; if (PWM_left >= 0) { PWM_left += PWM_left_least; } else { PWM_left -= PWM_left_least; } if (PWM_right >= 0) { PWM_right += PWM_right_least; } else { PWM_right -= PWM_right_least; } SetMotorVoltage(PWM_left, PWM_right); //setNixieTube(2,Angle); } } 100
หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่มิ การอปั โหลดโปรแกรมได้หลงั จากตรวจสอบเสร็จแล้วเพ่อื แน่ใจว่าไมม่ ีข้อผดิ พลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มลู โปรแกรมไปยังบอรด์ uKit Explore 5.9.8 การทดลอง หลงั จากเสรจ็ ตามขั้นตอนแล้ว ทำการวางรถสกู๊ตเตอร์บนพรม และจะสงั เกตเหน็ วา่ รถสกู๊ตเตอร์ สามารถทรงตัวไดเ้ อง 5.9.9 การทดลองเพ่ิมเติม หลงั จากทำตามขั้นตอนขา้ งต้น ลองนึกถงึ วัตถุในชีวิตทีส่ ามารถสรา้ งสมดุลได้ 5.10 การประยุกตแ์ บบบรู ณาการ (Integrated Applications) บทท่ี 1 หนุ่ ยนตต์ ิดตามเส้นและหลบหลกี สงิ่ กีดขวาง (Line Follower and Obstacle Avoiding Robot) ในบทนจี้ ะใชห้ ุน่ ยนตท์ ี่มกี ารขบั เคลื่อน 2 ลอ้ มีการใช้เซนเซอร์ตรวจจับเสน้ และเซนเซอร์อัลตรา โซนิกเพื่อสรา้ งหุ่นยนต์ติดตามเส้นและหลบหลีกสิง่ กีดขวาง หุ่นยนต์จะต้องสามารถระบุเส้นทางในการ ตดิ ตามและตัดสนิ ใจหลีกเล่ียงส่ิงกีดขวางโดยอัตโนมตั ิจึงจำเป็นตอ้ งมรี ะบบนำทางอัตโนมัตแิ ละระบบหลบ หลกี สิง่ กีดขวาง ตอนนี้จะใช้อุปกรณ์ uKit Explore ในการประกอบเพือ่ จำลองผูต้ ดิ ตามสายและหุ่นยนต์หลบสิ่ง กีดขวาง ดภู าคผนวกสำหรบั การตอ่ ประกอบ 101
อุปกรณ์ท่จี ำเปน็ การเชื่อมตอ่ ด้านฮารด์ แวร์ โปรเจกต์นี้จำเปน็ ต้องใช้เซนเซอรห์ ลายตัว ทำการเช่ือมต่อเซนเซอรก์ บั พอรต์ 3 ขาบนบอร์ด uKit Explore จำนวนเซนเซอร์ในชุดสามารถเพมิ่ ได้ในชดุ เช่อื มต่อเซนเซอรต์ รวจวัดระดบั สีเทากบั พอรต์ X3 7 ขาของบอรด์ uKit explore เซนเซอรแ์ ต่ละตวั จะมี ID ท่ีแตกตา่ งกนั และสามารถควบคมุ เซนเซอร์ได้ด้วย ID ของแต่ละตัว ทำการเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ด้วยสาย USB เชื่อมต่อเซนเซอร์ ดว้ ยพอรต์ 3 ขา เช่อื มต่อแบตเตอรกี่ บั บอรด์ uKit Explore จะเช่ือมตอ่ กับมอเตอร์ 1 มอเตอร์ 2 เซอร์โว มอเตอร์ 3 เซนเซอร์อัลตราโซนิก 1 และเซนเซอรต์ รวจวัดระดบั สเี ทา 1 102
5.10.1 โปรแกรมตวั อยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 5 > Section 10 > Dual_function_car แนะนำให้ป้อนขอ้ มูลโปรแกรมด้วยตัวเอง เพ่ือสร้างความคุ้นเคยกับโปรแกรม นคี้ อื โปรแกรมตัวอย่าง /* uKit Explore 2.0 <Chapter 5> <Section 10> 5.10.1 Line follower and obstacle avoiding robot */ #include\"uKitExplore2En.h\" const int startingAngle = -45; const int minimumAngle = -45; const int maximumAngle = 45; const int rotationSpeed = 8; long distance = 0; int lnum = 0; int rnum = 0; void straight(int speed); void setup() { Initialization(); } void loop() { getGrayAllValue(); if (num1 == 1 & num2 == 1 & num3 == 1 & num4 == 1 & num5 == 1) { tt(50); } else { straight(20); } 103
} void tt(int speed) { //Forward setMotorTurnAdj(2, -speed, 0xffff); setMotorTurnAdj(1, speed, 0xffff); static int motorAngle = startingAngle;//motorAngle is equal to its real angle; used to store the variable static int setMotorTurnAdjAmount = rotationSpeed;//setMotorTurnAmount defines the stepping speed; declared as static so it can hold data between function calls, but other functions cannot change its value setServoAngle(3, motorAngle, 100); //Servo mode ID, angle, duration delay(30); distance = readUltrasonicDistance(1); //Ultrasonic ID delay(30); motorAngle += setMotorTurnAdjAmount; if (motorAngle <= minimumAngle || motorAngle >= maximumAngle) { setMotorTurnAdjAmount = -setMotorTurnAdjAmount; //Return to original if the maximum angle is exceeded } else if (distance < 20 & distance != 0) //Detection distance { if (motorAngle < 0) { //Turn right setMotorTurnAdj(2, -speed, 0xffff); setMotorTurnAdj(1, -speed, 0xffff); delay(distance * 20); //Can adjust the number to make the right turn smaller } else { //Turn left setMotorTurnAdj(2, speed, 0xffff); 104
setMotorTurnAdj(1, speed, 0xffff); delay(distance * 20); //Can adjust the number to make the left turn smaller } } } void turnLL(int speed) { setMotorTurnAdj(2, speed, 0xffff); setMotorTurnAdj(1, speed, 0xffff); } void turnRR(int speed) { setMotorTurnAdj(2, -speed, 0xffff); setMotorTurnAdj(1, -speed, 0xffff); } void forwardss(int speed) { setMotorTurnAdj(2, -speed, 0xffff); setMotorTurnAdj(1, speed, 0xffff); } void straight(int speed) { getGrayAllValue(); if (lnum + rnum >= 3) { forwardss(speed); delay(10); lnum = 0; rnum = 0; } if (num3 == 0)//If sensor is in the black zone { 105
if (num2 == 0 & num4 == 1) // If black on the left and white on the right, turn left { turnLL(speed); } else if (num2 == 1 & num4 == 0) //If white on the left and black on the right, turn right { turnRR(speed); } else // If white on both sides, go straight { forwardss(speed); } } else // If sensor is in the white zone { if (num1 == 1 & num5 == 0) { turnRR(speed); delay(2); rnum = rnum + 1; } else if (num1 == 0 & num5 == 1) { turnLL(speed); delay(2); lnum = lnum + 1; } else if (num2 == 0 & num4 == 1)// If black on the left and white on the right, turn left quickly { turnLL(speed); 106
} else if (num2 == 1 & num4 == 0) // If white on the left and black on the right, turn right quickly { turnRR(speed); } else // If all white, stop { forwardss(speed); } } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเริ่มการอปั โหลดโปรแกรมได้หลังจากตรวจสอบเสรจ็ แล้วเพอ่ื แน่ใจวา่ ไมม่ ีขอ้ ผดิ พลาด ทำการกด Upload และ IDE จะส่งข้อมูลโปรแกรมไปยงั บอรด์ uKit Explore 5.10.2 การทดลอง หลังจากเสร็จตามขั้นตอนแล้ว เมื่อหุ่นยนต์ตรวจพบเส้นสีดำมันจะติดตามโดยอัตโนมัติและ หลงั จากออกจากเส้นสีดำมันจะหลกี เลยี่ งส่ิงกดี ขวางโดยอตั โนมัติ 5.10.3 การสะทอ้ นผลการทดลอง หลงั จากทำตามขัน้ ตอนข้างตน้ แลว้ ลองนกึ ถงึ การประยุกต์ใชง้ านรว่ มกบั หุ่นยนตต์ ดิ ตามเส้นและ หลบหลกี สิ่งกดี ขวาง บทที่ 2 หุ่นยนตท์ รานฟอรเ์ มอร์ (Transforming Robot Warrior) ในบทนี้จะใช้เซอร์โวมอเตอร์จำนวน 14 ตัวและเซนเซอร์ตรวจจับเส้นเพื่อสร้างหุ่นยนต์ท่ีมี ความสามารถแปลงร่างจากมนุษย์เป็นรถและแปลงร่างกลับจากรถเป็นมนุษย์ได้ อีกทั้งหุ่นยนต์สามารถ เคลื่อนที่ตดิ ตามเสน้ อยา่ งอัตโนมัติด้วยเซนเซอร์ บทน้ีจะใช้โหมดควบคุมความเร็ว (Wheel mode) ของ เซอรโ์ วมอเตอร์เพื่อควบคุมหุน่ ยนต์ 107
5.10.4 คำสงั่ Switch/case คำสั่ง Switch case เป็นคำสั่งเงื่อนไขหลายทางเลือกที่มีการทำงานคล้ายๆ คำสั่ง if ต่างตรงที่ การตรวจสอบเงอื่ นไขจะใช้การตรวจสอบการเทา่ กนั ของตวั แปรที่ใชต้ รวจสอบเทา่ นั้น โดยทค่ี ำสงั่ switch จะนำค่าของตวั แปรทอ่ี ยู่หลังคำส่งั switch มาเปรียบเทยี บกับค่าท่อี ย่หู ลงั case ในแต่ละคำส่ัง ถา้ ตรงกัน ก็จะทำงานท่ีอย่ใู น case นน้ั ๆ 5.10.5 คำส่ัง break คำสั่ง break เป็นคำส่งั ท่ใี ชใ้ นการหลุดออกจากเงือ่ นไขคำสง่ั switch โดยทั่วไปจะใช้ในส่วนท้าย ของแตล่ ะเงือ่ นไข หากไม่มคี ำสั่ง break คำส่งั switch จะทำการเรยี กใช้ไวยากรณบ์ ังคับของโครงสร้างไม่ สามารถตดั ออกเพ่อื ให้ผลการทำงานเป็นแบบผ่านไปส่กู รณีถัดไปหรอื ทีน่ ิยมเรียกว่า (\"falling-through\") จนกวา่ จะ break หรอื สน้ิ สดุ ของคำสัง่ switch break นอกจากนีค้ ำส่งั break ยังใช้เพอื่ ออกจากลูป for, while, หรือ do loop และไปทำงานในคำสั่งตอ่ ไป 5.10.6 หุน่ ยนต์ทรานฟอร์เมอร์ หุ่นยนต์ทรานฟอร์เมอร์ (Transformers) เป็นหนึง่ ในอนิเมช่ันท่ีประสบความสำเร็จมากท่สี ุดใน ประวตั ศิ าสตร์ มกี ารดัดแปลงมาจากชดุ Diaclone และ Microchange ของบริษทั ทาคาระ (Takara) เป็น ของเล่นชุดที่มีชื่อเสียงและประสบความสำเร็จมากในตลาดของเล่นและตลาดสื่อโสตในช่วงปี 1980 หุ่นยนต์ทรานฟอร์เมอร์ได้รับความนิยมอย่างมากทั่วโลกและเริ่มจากประเทศในเอเชีย ยุโรปและ สหรฐั อเมรกิ า จนทำให้ตอนนีห้ ุ่นยนตท์ รานฟอร์เมอร์เป็นท่รี ู้จกั ท่วั โลก ตอนนจ้ี ะใชเ้ ซอรโ์ วมอเตอร์และเซนเซอร์เพอื่ สร้างหุน่ ยนตท์ รานฟอรเ์ มอร์ ดูภาคผนวกสำหรับการต่อประกอบ 108
อปุ กรณท์ ่จี ำเปน็ 109
การเชอ่ื มตอ่ ดา้ นฮารด์ แวร์ โปรเจกต์นี้จำเปน็ ต้องใชเ้ ซนเซอร์หลายตัว ทำการเชื่อมตอ่ เซนเซอรก์ ับพอร์ต 3 ขาบนบอรด์ uKit Explore จำนวนเซนเซอรใ์ นชุดสามารถเพ่ิมในชุด เชื่อมต่อเซนเซอร์ตรวจวัดระดับสีเทา 7 ขากับพอร์ต X3 เซนเซอร์มี ID ของเซนเซอรท์ ่แี ตกต่างกันและสามารถควบคมุ เซนเซอรไ์ ดด้ ้วย ID ของแตล่ ะตวั ทำการ เชื่อมต่อบอร์ด uKit Explore เข้ากับคอมพิวเตอร์ด้วยสาย USB เชื่อมต่อเซนเซอร์ด้วยพอร์ต 3 ขา เชื่อมต่อแบตเตอรี่กับบอร์ด uKit Explore จะเชื่อมต่อกับเซอร์โวมอเตอร์ 14 และเซนเซอร์ตรวจวัด ระดบั สีเทา 1 5.7.7 โปรแกรมตวั อยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 5 > Section 10 > Deformation_robot แนะนำให้ป้อนข้อมลู โปรแกรม ดว้ ยตวั เองเพอื่ สร้างความค้นุ เคยกับโปรแกรม นีค้ อื โปรแกรมตวั อย่าง /* uKit Explore 2.0 <Chapter 5> <Section 10> 5.10.2 Transforming robot warrior */ #include\"uKitExplore2En.h\" int lnum = 0; int rnum = 0; unsigned char route[500]; int route_node = 1; void straight(int speed); void setup() { Initialization();//Initialization motion_car(1); delay(30); route[1] = 1; route[2] = 2; route[3] = 4; route[4] = 3; 110
} void loop() { button1.Update();//Read button update if (button1.clicks == 1) //Button is clicked once { while (1) { straight(100);//Speed is adjustable } } } void cross(int speed) { switch (route[route_node]) { case 1: //Task 1 stops(); delay(400); forward(speed); delay(300); break; case 2: //Task 2 forward(speed); delay(300); stops(); delay(300); motion_getup(1); delay(300); motion_forward(2); delay(200); motion_omotion(1); delay(200); motion_sitdown(1); delay(400); 111
forward(speed); delay(100); break; case 3: //Task 3 stops forward(speed); delay(200); stops(); delay(300); while (1); break; case 4://Task 4 forward(speed); delay(200); stops(); delay(300); motion_getup(1); delay(300); motion_lift_hand(1); delay(300); motion_sitdown(1); delay(400); forward(speed); delay(100); break; case 5://Task 5 break; } route_node = route_node + 1; //Prepare to take the next node of the optimal route } void straight(int speed) { getGrayAllValue(); 112
{ noTone(43); if (lnum + rnum >= 3) { forward(speed); delay(50); lnum = 0; rnum = 0; } if (num3 == 0)//If sensor is in the black zone { if (num2 == 0 & num4 == 1) // If black on the left and white on the right, turn left { turnL(speed); } else if (num2 == 1 & num4 == 0) //If white on the left and black on the right, turn right { turnR(speed); } else if (num1 == 0 & num5 == 0 & num2 == 1 & num4 == 1) { cross(speed); } else // If white on both sides, go straight { forward(speed); } } else // If sensor is in the white zone { if (num1 == 1 & num5 == 0) 113
{ turnR(speed); delay(80); rnum = rnum + 1; } else if (num1 == 0 & num5 == 1) { turnL(speed); delay(80); lnum = lnum + 1; } else if (num2 == 0 & num4 == 1)// If black on the left and white on the right, turn left quickly { turnL(speed); } else if (num2 == 1 & num4 == 0) // If white on the left and black on the right, turn right quickly { turnR(speed); } else if (num1 == 0 & num5 == 0 & num2 == 1 & num4 == 1) { cross(speed); } else // If all white, stop { forward(speed); } } } } 114
หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเรม่ิ การอัปโหลดโปรแกรมไดห้ ลงั จากตรวจสอบเสร็จแล้วเพ่ือแน่ใจว่าไมม่ ีข้อผิดพลาด ทำการกด Upload และ IDE จะสง่ ข้อมลู โปรแกรมไปยงั บอร์ด uKit Explore 5.10.8 การทดลอง หลังจากเสร็จตามขั้นตอนแล้ว ทำการติดเส้นสีดำและตำแหน่งจุดตัด ทำการคลิก จะสังเกตเห็น หุ่นยนต์จะแปลงรา่ งจากมนุษยเ์ ปน็ รถและแปลงร่างจากรถเป็นมนษุ ย์ 5.10.9 การทดลองเพมิ่ เติม หลงั จากทำตามข้นั ตอนขา้ งตน้ แล้ว เมอื่ รรู้ ายละเอียดและการใชง้ านของเซอรโ์ วมอเตอรแ์ ละ เซนเซอร์แล้ว ลองใช้เซนเซอรแ์ ละสว่ นประกอบเหล่านสี้ รา้ งเป็นแบบจำลองทส่ี รา้ งสรรค์มากขนึ้ 115
บทที่ 6 วงจรไฟฟา้ เบ้อื งตน้ 116
6.1 วงจรไฟฟ้า บทท่ี 1 วงจรไฟฟ้าคอื อะไร วงจรไฟฟา้ หมายถึงทางเดนิ ของกระแสไฟฟ้า ซ่งึ ไหลมาจากแหลง่ กำเนิดตัวนำและเครอื่ งใช้ไฟฟ้า หรอื โหลด แล้วไหลกลับไปยังแหล่งกำเนิดเดิม (เปรยี บได้กบั นำ้ ทีไ่ หลผา่ นแม่น้ำ วงจรเทยี บกับแม่น้ำและ กระแสเทียบกับน้ำ) มันจะส่งถ่ายพลังงานไฟฟ้าและแปลงพลงั งานไฟฟ้าเป็นพลังงานรูปแบบตา่ งๆ เช่น การแปลงพลงั งานไฟฟา้ เปน็ ความร้อนทำให้นำ้ เดอื ดหรืออนุ่ บทที่ 2 การอา่ นไดอะแกรมอยา่ งง่าย ช่อื รปู ภาพ ตวั ตา้ นทาน ตวั เก็บประจุ ไดโอด ไตรโอด ตวั เหนี่ยวนำ 117
Crystal oscillator สวิตช์ ไอซี กระแสตรง บทที่ 3 ส่วนประกอบของวงจรไฟฟา้ 6.1.1 วงจรไฟฟา้ ประกอบด้วยอะไรบ้าง 118
จากแผนภาพวงจรไฟฟ้าอย่างงา่ ย เมื่อสวิตช์ (Switch) มีวงจรปดิ จะทำให้กระแสไหลผ่านวงจร ซึ่งกระแสจะถูกแปลงจากพลังงานเคมีที่เกบ็ ไว้ในพลังงานแบตเตอร่ีและโหลด ไฟ LED จะใช้ความรอ้ นที่ ถกู แปลงจากพลงั งานไฟฟ้าและส่งผ่านสายไฟ กระบวนการนี้เกีย่ วขอ้ งกับการแปลงพลังงานไฟฟ้า ความ ร้อนและแสง เม่อื สวติ ช์ถกู เปดิ วงจรจะขาดทำให้ไม่มีกระแสไหลผ่านไฟ LED จึงไม่สามารถเปล่งแสงได้ 6.1.2 องคป์ ระกอบพื้นฐาน 3 อยา่ งของวงจร 1. แหล่งจ่ายไฟ เป็นอุปกรณ์ที่ทำหน้าที่ในการจ่ายแรงดันและกระแสให้กับวงจร หากไม่มี แหล่งจ่ายไฟวงจรจะไม่ทำงาน เซลล์แห้ง (Dry cell) เซลล์แสงอาทิตย์ (Solar cells) และเครื่องกำเนิด ไฟฟา้ มกั ใช้ในการแปลงพลังงานแสงและพลงั งานกลเปน็ พลังงานไฟฟา้ 2. โหลด เป็นอุปกรณ์ทางไฟฟ้าที่นำมาต่อในวงจร เช่น ไฟ LED เซอร์โวมอเตอร์และเซนเซอร์ อปุ กรณเ์ หลา่ นจ้ี ะใช้พลังงานไฟฟ้า สามารถแปลงเป็นพลงั งานแสง พลังงานความรอ้ นและพลงั งานกล 3. สายไฟ เปน็ อุปกรณ์ทีน่ ำมาตอ่ กบั แหลง่ จ่ายไฟฟ้าจากขวั้ หนงึ่ ไปยงั อีกขวั้ หนงึ่ เพื่อจ่ายแรงดัน และกระแสไฟฟ้าให้กบั โหลด หากไม่มสี ายไฟจะทำให้วงจรไมส่ มบูรณ์ สวติ ช์เปน็ สว่ นหนง่ึ ของสายไฟ บทที่ 4 กฎของความต้านทาน (Law of Resistance) 6.1.3 ตวั ตา้ นทานคืออะไร ความต้านทานไฟฟา้ สามารถนยิ ามได้วา่ เปน็ อปุ กรณท์ ี่ใชใ้ นการต้านทานการไหลของกระแสไฟฟ้า เพอ่ื ทำให้กระแสและแรงดันภายในวงจรได้ขนาดตามท่ีตอ้ งการ จากภาพวงจรและสตู รความต้านทานจะ แสดงด้วย \"R\" หรือ \"r\" (ตวั อักษรตัวแรกของความต้านทาน) 6.1.4 ฟงั ก์ชนั ความต้านทานในวงจร ตามกฎของโอห์มทีร่ ู้จักกันดีสามารถใชค้ วามต้านทานเพ่ือควบคุมแรงดนั และกระแสในวงจร 6.1.5 สูตรของตัวตา้ นทาน ������ ������ = ������ ������ ความต้านทานของตัวนำข้นึ อยกู่ ับขนาดของมนั (เช่นพืน้ ท่ีหนา้ ตดั ) และวสั ดุ ในสูตร 1. L คือความยาวของตัวนำ มหี นว่ ยเปน็ เมตร (������) 2. S เปน็ พืน้ ท่ีหน้าตดั ของตัวนำ มหี น่วยเป็นตารางมิลลเิ มตร (������������2) 3. ρ (rho) คือสภาพต้านทานไฟฟ้าของตัวนำ มีหน่วยเป็น Ω . ������������2/������ ความต้านทานเป็น ค่าคงท่ีสัดส่วนข้นึ อยูก่ ับวสั ดุที่ทำจากลวดเทา่ นั้น ความตา้ นทานของวัสดขุ ึน้ อยกู่ ับอณุ หภมู ิ 4. R คอื ความต้านทานของตัวนำ มีหน่วยเป็นโอหม์ (Ω) 119
บทท่ี 5 กฎของโอห์ม (Ohm's Law) 6.1.6 กฎของโอหม์ คอื อะไร กฎของโอหม์ ท่ีกลา่ วไว้ว่า “ในวงจรไฟฟ้าใดๆ กระแสไฟฟ้าจะแปรผนั โดยตรงกับแรงดนั ไฟฟา้ และ แปรผกผนั กบั ค่าความตา้ นทานของวงจร” ในส่วนของวงจรที่ไม่รวมแหล่งจ่ายไฟกระแสไฟฟ้าผ่านตัวนำ I เป็นสัดส่วนโดยตรงกับ แรงดนั ไฟฟา้ ระหว่างปลายของมนั U และเป็นสัดส่วนผกผันกับความตา้ นทานของสว่ นของวงจรอาร์นี้ เป็น กฎของโอหม์ ท่ีเปน็ สว่ นหนงึ่ ของวงจร 6.1.7 สมการกฎของโอห์ม (The Ohm's law formula) ������ ������ = ������ 1. I คือกระแสไฟฟ้าของวงจร มีเปน็ แอมแปร์ (A) 2. U คือแรงดันไฟฟ้า มีเป็นโวลต์ (������) 3. R คอื ความตา้ นทาน มีหนว่ ยเป็นโอห์ม (Ω) บทท่ี 6 วงจรอนกุ รม (Series Circuit) 6.1.8 วงจรอนกุ รมคอื อะไร วงจรอนุกรมเปน็ การนำโหลดมาตอ่ เรยี งกัน โดยให้ปลายของโหลดตัวแรกต่อกับปลายของโหลด ตวั ถดั ไป เปน็ วงจรท่เี ช่ือมต่อกนั เส้นทางเดียว 6.1.9 ลกั ษณะของวงจรอนุกรม 1. กระแสไฟฟา้ จะไหลผา่ นเทา่ กันและมที ศิ ทางเดียวกันตลอดทั้งวงจร 2. ส่วนประกอบท้งั หมดในวงจรอนุกรมมผี ลต่อกนั และไม่สามารถทำงานแยกกันได้ 3. ในวงจรอนกุ รมสวติ ช์จะควบคมุ วงจรทั้งหมด 120
6.1.10 ความรู้เกย่ี วกับวงจรอนกุ รม 1. กระแสไฟฟ้าไหลผ่านตัวตา้ นทานแตล่ ะตัวในวงจรอนุกรมเทา่ กนั 2. แรงดนั ตกคร่อมตวั ตา้ นทานในวงจรอนุกรมรว่ มกนั จะมีค่าเท่ากับแรงดนั ของแหล่งจ่ายไฟฟ้า ในวงจรอนุกรม น่นั คือ ������ = ������������ + ������������ + . … . ������������ สามารถหาได้จากนิยามของแรงดนั ไฟฟา้ 3. ความตา้ นทานรวมในวงจรอนกุ รมมีคา่ เท่ากับผลรวมของความตา้ นทานแต่ละตัวในวงจร 4. แรงดันไฟฟ้าของตวั ต้านทานแตล่ ะตัวจะแปรผันตามความตา้ นทาน เน่อื งจาก ������������ = ������������������ 5. กำลังไฟฟ้าที่กระจายของต้านทานแต่ละตัวเป็นสัดส่วนกับความต้านทาน เนื่องจาก ������������ = ������������������������ 6. วงจรขนานมีเส้นวงจรตงั้ แต่สองเส้นทางข้นึ ไปเพอื่ ทำให้กระแสไฟฟ้าไหลผา่ น บทที่ 7 วงจรขนาน (Parallel Circuit) 6.1.11 วงจรขนานคืออะไร วงจรขนานเป็นการนำโหลดมาตอ่ ขนานกันหรอื ต่อคร่อมกนั ตัง้ แต่สองตัวขนึ้ ไป โดยนำจุดต่อของ ปลายทง้ั สองข้างของโหลดแต่ละตวั มาต่อรว่ มกนั 6.1.12 ลกั ษณะของวงจรขนาน 1. วงจรขนานมีเสน้ วงจรตง้ั แต่สองเสน้ ทางขน้ึ ไปเพื่อทำใหก้ ระแสไฟฟ้าไหลผา่ น 2. เส้นสาขา (Branch) ทัง้ หมดของวงจรขนานจะไมส่ ่งผลกระทบตอ่ กันและทำงานแยกกัน 3. สวิตชห์ ลักในวงจรขนานจะควบคุมทงั้ วงจรและสวิตช์ที่เชอื่ มต่อเปน็ อนกุ รมในชุดที่จะควบคุม เส้นสาขา 121
6.1.13 ความรเู้ ก่ียวกบั วงจรขนาน 1. แรงดันไฟฟ้าตกคร่อมตวั ต้านทานแต่ละตวั ในวงจรขนานจะเท่ากนั และเท่ากับแรงดนั ไฟฟา้ รวม ในวงจร ������ = ������������ = ������������ = . …. ������������ 2. กระแสไฟฟ้ารวมในวงจรขนาน จะเท่ากับผลรวมของกระแสที่ไหลผ่านตัวต้านทานแต่ละตัว ������ = ������������ + ������������ + . …. ������������ 3. สว่ นกลบั ของความตา้ นทานรวมของวงจรขนาน (เช่นค่าความตา้ นทานรวม) เท่ากับผลรวมของ สว่ นกลับของความตา้ นทานแตล่ ะตวั ������ ������ ������ ������ ������ = ������������ + ������������ + ⋯ + ������������ 4. กระแสไฟฟ้าท่ีผา่ นแตล่ ะเส้นสาขาของวงจรขนานน้ันจะแปรผกผันกับปริมาณความต้านทาน ของเสน้ สาขา ความตา้ นทานมากจะทำใหม้ ีกระแสไหลผา่ นนอ้ ย ������������ = ������������������������ = ������������������������ = . …. ������������������������ 6.2 ความรู้เบ้อื งต้นเกี่ยวกบั บอร์ดทดลอง (Introduction to Breadboards) Breadboard มชี อ่ื มาจากยุคของวงจรหลอดสุญญากาศ ซึง่ ในเวลานนั้ ช้ินส่วนไฟฟ้ามีขนาดใหญ่ ผู้คนมกั ใช้สายไฟพันรอบๆ ตะปูเพื่อยึดอปุ กรณไ์ ว้บนแผน่ กระดานไม้ที่ เอาไว้สำหรบั หั่นขนมปงั ของฝรั่ง ต่อจากน้นั ช้ินสว่ นไฟฟา้ ก็เล็กลงเรอ่ื ยๆ จนมีชอ่ื วา่ breadboard 6.2.1 ข้อมลู จำเพาะของบอรด์ ทดลอง บอร์ดทดลองมีให้เลือกหลากหลายตั้งแต่ 170 ช่องเสียบ (ขนาด 35 × 47 มิลลิเมตร) 400 ช่อง เสยี บ (85 × 55 มลิ ลิเมตร) และ 800 ช่องเสียบ (165 × 55 มลิ ลเิ มตร) บอร์ดทดลองในชุดอปุ กรณ์มี 170 ช่องเสยี บสามารถต่อประกอบร่วมกับบอร์ด uKit Explore มา พร้อมกับเทปกาวสองหน้าที่สามารถติดบนบอร์ด uKit Explore และบอร์ดขยายต่างๆ รวมถึงติดบน หุ่นยนต์ขับเคลื่อนด้วยล้อและหุ่นยนต์ติดตาม บอร์ดทดลองมีขนาด 35×47 มิลลิเมตรและเป็นที่นิยม สำหรบั ผู้ทสี่ นใจ Arduino ผู้ท่ีสนใจหุ่นยนต์ ผู้ที่สนใจอปุ กรณ์อิเลก็ ทรอนกิ ส์และวิศวกรอิเลก็ ทรอนิกส์ 122
บทที่ 1 โครงสร้างของบอร์ดทดลอง ขอบของบอร์ดทดลองจะมีร่องสำหรับประกบตัวผู้และตัวเมียเพื่อสามารถต่อประกอบบอร์ด ทดลองขนาดเดยี วกนั เพ่อื สรา้ งเปน็ บอรด์ ทดลองขนาดใหญ่ บอร์ดทดลองทำจากวัสดุ Thermosetting phenolic resin และมีแถบโลหะอยู่ใต้บอร์ดทดลอง ซึ่งถูกเชื่อมต่อกับช่องเสียบด้านบนของบอร์ดทดลอง จะทำหน้าท่ีต่อกระแสไฟฟ้าระหว่างส่วนที่ต่อ ประกอบ โดยทั่วไปแล้วทุกๆ 5 ช่องเสียบจะมีการเชื่อมต่อกันด้วยแถบโลหะ บอร์ดทดลองจะมีร่องตรง กลางที่ออกแบบมาสำหรบั การทดสอบวงจรรวมและไมโครชิป บางรุ่นจะมีช่องเสียบต่อกันทางด้านข้าง โดยจะใชเ้ ป็น “รางจา่ ยไฟ (power rails)” บนบอรด์ สำหรับบอรด์ ทดลองน้มี ีเพียง 5 ชอ่ งเสยี บทีเ่ ชือ่ มตอ่ กันและสามารถใช้จา่ ยพลงั งานไฟฟา้ ให้กบั ชิ้นสว่ นท่ีต่อกบั บอร์ดทดลอง 123
ด้านบนของบอร์ดทดลองประกอบด้วยแถวและคอลัมน์ โดยแต่ละแถวจะไม่เชื่อมต่อกัน บอรด์ ทดลองบางรุ่นจะมี 2 แถบท่ีดา้ นขา้ งซา้ ยและขวา โดยทว่ั ไปแถบทง้ั 2 น้ีจะเชื่อมต่อกับไฟข้วั บวกและไฟขวั้ ลบของแหล่งจา่ ยไฟ (อาจข้นึ อยกู่ ับความถนดั และความตอ้ งการในการตอ่ วงจร) โดยแตล่ ะแถวจะมี 5 ชอ่ ง เสียบที่เชอื่ มต่อกนั และแต่ละคอลัมน์จะไมไ่ ด้เชือ่ มต่อกนั บทที่ 2 การใช้บอรด์ ทดลอง บอร์ดทดลองเป็นบอรด์ แบบมีชอ่ งเสยี บใช้สำหรับการทดลองวงจร สามารถสร้างวงจรด้วยการตอ่ ขาสญั ญาณของอปุ กรณ์อเิ ล็กทรอนกิ ส์และสายไฟจมั เปอร์เข้าไปยงั ชอ่ งเสียบของบอรด์ ทดลองเพื่อสัมผัส กับแถบโลหะเสมอื นการต่อสายไฟ 6.2.2 หลกั การท่วั ไปสำหรับการใช้บอรด์ ทดลอง 1. ทำการเชอ่ื มต่อให้นอ้ ยทสี่ ุดเพ่อื ลดความผิดพลาดท่ีเพม่ิ ขึ้นเม่อื มีการเช่อื มต่อเพ่ิมเติมในแต่ละ ครัง้ ความผดิ พลาดท่พี บบอ่ ย ไดแ้ ก่ การเชือ่ มต่อที่ไมด่ ีระหว่างช่องเสยี บและสายไฟที่หลวมไปและสายไฟ อาจจะขาด 2. พยายามหลีกเล่ียงการตอ่ แบบ Overpass นั้นคือการต่อข้ามผ่านอุปกรณ์หรือสายไฟข้ามไป- มา ความผิดพลาดนม้ี กั เกิดขนึ้ กบั ผู้เริม่ ตน้ ความผิดพลาดนจ้ี ะทำให้เกิดปญั หาเรอื่ งสายไฟทย่ี งุ่ เหยิง 3. ทำการเชื่อมต่อให้ปลอดภัยทสี่ ดุ ควรให้ความสำคัญ 2 อย่าง ดงั น้ี 3.1) วงจรรวมมีแนวโน้มที่จะหลวม ดังนั้นจึงต้องกดวงจรรวมในการตรวจสอบความ ปลอดภยั 3.2) ขาสัญญาณของอุปกรณ์มีขนาดเล็ก ต้องจัดการด้วยความระมัดระวัง หากไม่ ปลอดภัยใหท้ ำการยา้ ยไปทดี่ ี 4. การเดนิ สายควรตรวจสอบกอ่ นการทดสอบ อย่าใชค้ รบทั้ง 5 ชอ่ งเสียบและควรอยา่ งนอ้ ยหน่งึ ชอ่ งเสยี บสำหรบั การทดสอบ 5. จัดสายไฟให้กะทัดรัดมากทีส่ ุด ตรวจสอบการไหลของสัญญาณทเ่ี หมาะสม 6. สร้างเลย์เอาต์ทีค่ ลา้ ยกับแผนภาพมากที่สุด สิ่งนี้จะช่วยแสดงท่ีตั้งของส่วนประกอบเมื่อเกดิ ความผดิ พลาด 7. ที่ตั้งของแหล่งจ่ายไฟควรมคี วามชัดเจน ก่อนสร้างวงจรอันดับแรกแบ่งพื้นที่ออกเป็น 3 ส่วน คอื ไฟขั้วบวก กราวดแ์ ละไฟขัว้ ลบ จากนัน้ เชื่อมต่อด้วยสายไฟ 124
6.3 การควบคมุ ไฟบนบอร์ดทดลอง บทที่ 1 ไฟกระพรบิ (Flashing LED) หลังจากที่ไดร้ ู้เกี่ยวกับรายละเอยี ดของบอร์ดทดลอง ลองใชไ้ ฟ LED เพ่อื สร้างวงจรอย่างงา่ ย 6.3.1 ไดโอดเปลง่ แสงคืออะไร? light-emitting diode (LED) เป็นไดโอดท่ีทำจากสารประกอบของแกลเลยี ม (Ga), สารหนู (As) และฟอสฟอรสั (P) โดยที่ขายาวเปน็ ขาสัญญาณไฟขวั้ บวกและขาสน้ั เปน็ ขาสญั ญาณไฟขั้วลบ 6.3.2 หลกั การทำงาน แรงดันไฟฟ้าเบรกดาวน์แบบย้อนกลับของ LED อยู่ที่ประมาณ 5 โวลต์ มีลักษณะกราฟ I-V ข้างหนา้ สงู ชัน เม่อื ใช้ LED จะตอ้ งต่อตวั ตา้ นทานเพ่อื ควบคุมกระแสท่ีไหลผา่ นไดโอด ความต้านทานของ ตวั ตา้ นทานสามารถคำนวณไดด้ ังนี้ ������ = (������ − ������������)/������ โดยที่ ������ คือแรงดนั ไฟฟ้าของแหล่งจา่ ยไฟ ������������ คือแรงดันตกคร่อมตัว LED และ ������ คือกระแสไฟ ของ LED แรงดันไฟฟ้าในช่วงการทำงานของ LED โดยทว่ั ไปจะเปน็ 1.5 ~ 2.0 โวลต์ และกระแสไฟในการ ทำงานของ LED จะเป็น 10 ~ 20 มิลลิแอมป์ ดงั น้ันในวงจรจะใช้ขาสัญญาณดิจทิ ัล 5 โวลตต์ ่อตวั ตา้ นทาน 220 Ω เพื่อควบคมุ กระแส ข้นั ตอนตอ่ ไปมาเรม่ิ ต่อวงจรอย่างง่ายๆ อุปกรณ์ จำนวน บอรด์ uKit explore 1 บอรด์ ทดลอง (Breadboard) 1 ไฟ LED 2 ตวั ต้านทาน (1 kΩ resistor) 1 สายไฟ (Connecting cable) N/A 125
6.3.3 แผนภาพวงจร (Circuit diagram) 6.3.4 วิธกี ารเดนิ สาย (Wiring Methods) สามารถเชื่อมต่อไฟ LED ดังที่แสดงด้านล่าง ทำการต่อตัวต้านทาน 1 kΩ และต่อขาสัญญาณ ขั้วบวกของไฟ LED กับขาสญั ญาณ D8 ของบอรด์ uKit explore หมายเหต:ุ เช่ือมต่อกบั ขาสญั ญาณ D8 ของบอรด์ uKit Explore 126
การเชอื่ มตอ่ ดา้ นฮาร์ดแวร์ โปรเจกต์นีต้ ้องใช้บอรด์ ทดลองและชิ้นส่วนอเิ ลก็ ทรอนกิ ส์หลายชิ้น เชอ่ื มตอ่ สายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขัว้ ลบของไฟ LED นอกจากนีจ้ ำเป็นต้องเชือ่ มต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนน้ีจะทำการต่อไฟ LED และตวั ตา้ นทาน 1 kΩ หมายเหต:ุ ห้ามเชอ่ื มต่อแบตเตอรี่ 6.3.5 โปรแกรมตวั อยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 3 > Flashing_LED แนะนำใหป้ อ้ นข้อมลู โปรแกรมดว้ ยตวั เอง เพ่อื สรา้ งความคุ้นเคยกับโปรแกรม นคี้ อื โปรแกรมตัวอยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 3> 6.3.1 Flashing LED */ #include\"uKitExplore2En.h\" void setup() { pinMode(8, OUTPUT); //Declare pin D8 as output } void loop() { digitalWrite(8, HIGH); // Turn the LED on delay(1000); // Wait for 1 second digitalWrite(8, LOW); // Turn the LED off delay(1000); // Wait for 1 second. } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเรมิ่ การอปั โหลดโปรแกรมได้หลงั จากตรวจสอบเสรจ็ แล้วเพอ่ื แน่ใจว่าไมม่ ีข้อผิดพลาด ทำการกด Upload และ IDE จะสง่ ข้อมูลโปรแกรมไปยงั บอรด์ uKit Explore 127
6.3.6 ผลการทดลอง หลงั จากเสร็จขนั้ ตอนขา้ งตน้ แลว้ จะสังเกตเหน็ ว่าไฟ LED มกี ารกะพรบิ ทุกวินาที 6.3.7 การทดลองเพมิ่ เติม หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว ลองเชื่อมต่อไฟ LED เพิ่ม 2-3 ดวงและควบคุมการ ทำงาน นอกจากน้ีลองปรบั เปลยี่ นชว่ งเวลาในการเปิดและปิดของไฟ LED ให้มีชว่ งระยะเวลาที่แตกตา่ งกนั ทำให้ไฟ LED ปดิ เปน็ เวลา 5 วินาทีจากน้ันกระพริบช่วงส้นั ๆ (250 มิลลวิ นิ าที) เชน่ สญั ญาณเตือนของรถ ที่แสดงด้วยไฟ LED การสรา้ งผลลพั ธ์ที่แตกต่างสามารถทำได้ดว้ ยการเปลย่ี นความถใี่ นการเปิดและปิดของ ไฟ LED บทที่ 2 ไฟคอ่ ยๆ สวา่ ง (Breathing LED) บทก่อนหน้านี้ได้เรียนรู้วิธีการควบคุมไฟ LED บนบอร์ด uKit Explore แล้ว ยังมีรูปแบบการ ควบคุมความสว่างของไฟ LED ด้วยขาสัญญาณดิจิทลั บนบอรด์ uKit Explore ที่มี 5 ขาสัญญาณรองรับ PWM คือ D5, D6, D9, D10 และ D11 คำอธบิ ายของ breathing light คือรูปแบบการควบคุมความสวา่ ง ให้ค่อยๆ เพิม่ ความสวา่ งขนึ้ บทนี้จะกลา่ วถงึ การใช้งาน PWM, pinMode() และ analogWrite() 6.3.8 การปรับความกว้างพัลสค์ ืออะไร การปรบั ความกว้างพลั ส์ (PWM) เป็นเทคนิคท่ีใช้ในการควบคุมเอาต์พุตแบบแอนะล็อกด้วยการ ใชข้ าดจิ ิทัล การควบคุมแบบดจิ ทิ ัลเป็นการสรา้ งสญั ญาณรปู คลืน่ สเ่ี หลยี่ มท่มี รี อบการทำงานที่มสี ญั ญาณที่ สลับระหวา่ งเปดิ และปดิ อย่างต่อเนื่อง (Duty cycle) เพื่อควบคุมเอาตพ์ ุตแบบแอนะล็อก แรงดันเอาต์พุต มีเพยี ง 2 สถานะ คือ LOW และ HIGH ซงึ่ สอดคลอ้ งกับเอาต์พุตแรงดันไฟฟ้าของบอรด์ uKit Explore ท่ี 0 โวลต์ และ 5 โวลต์ โดยกำหนด LOW เป็นลอจกิ 0 และ HIGH เปน็ ลอจกิ 1 บอรด์ มีการควบคุมและส่ง สัญญาณ 0 หรือ 1 จำนวนสัญญาณ 500 ค่าในหนึ่งวินาที หากสัญญาณ 500 ค่าเป็น 1 ทั้งหมดแสดงวา่ ผลลพั ธ์เป็น 5 โวลต์ ถา้ เป็น 0 ทงั้ หมด ผลลัพธ์คือ 0 โวลต์ ถ้าเอาทพ์ ุตเป็น 010101010101 จะมีแรงดัน เอาทพ์ ุตคอื 2.5 โวลต์ ลำดบั ต่อไปจะแนะนำฟังกช์ นั analogWrite() ท่ีสำคญั เมื่อมีการใช้ PWM 6.3.9 ฟังก์ชัน pinMode() คืออะไร ฟังก์ชัน pinMode() เป็นการกำหนดคา่ ขาสัญญาณเปน็ อนิ พตุ หรือเอาตพ์ ตุ เป็นฟงั ก์ชนั ทก่ี ำหนด ขาสญั ญาณ (Pin) ทำการระบุโหมดการทำงานแบบ INPUT หรือ OUTPUT 128
6.3.10 ฟงั กช์ ัน analogWrite() คอื อะไร ฟังก์ชัน analogWrite() เป็นการเขียนค่าแบบแอนะล็อก (PWM wave) ไปยังขาสัญญาณ สามารถใช้กับไฟ LED เพื่อควบคุมความสวา่ งต่างๆ หรือขับมอเตอร์ดว้ ยความเร็วท่ีต่างๆ หลังจากมีการ เรียกใช้ฟังก์ชัน analogWrite() ขาสัญญาณจะสร้างสัญญาณรูปคลื่นสี่เหลี่ยมที่ระบุค่า duty cycle จนกวา่ จะมกี ารเรยี กครัง้ ตอ่ ไป analogWrite() (หรือการเรยี กใช้ digitalRead() หรอื digitalWrite() (บน ขาสญั ญาณเดียวกนั ) ความถีข่ องสญั ญาณ PWM บนขาสัญญาณสว่ นใหญ่อยู่ที่ประมาณ 490 Hz หลงั จาก ไดเ้ รียนรู้เก่ยี วกับ PWM และฟงั ก์ชัน pinMode() และ analogWrite() ลองใช้บอร์ดทดลองเพอื่ สร้างวงจร อย่างงา่ ย อุปกรณ์ จำนวน บอร์ด uKit explore 1 บอรด์ ทอลอง (Breadboard) 1 ไฟ LED 1 ตวั ต้านทาน (1 kΩ resistor) 1 สายไฟ (Connecting cable) N/A 6.3.11 แผนภาพวงจร 129
6.3.12 วิธกี ารเดนิ สาย สามารถเชื่อมต่อไฟ LED ดังที่แสดงด้านล่าง ทำการต่อตัวต้านทาน 1 kΩ และต่อขาสัญญาณ ขั้วบวกของไฟ LED กบั ขาสัญญาณ D9 ของบอร์ด uKit explore หมายเหตุ: เช่ือมต่อกับขาสัญญาณ D9 ของบอรด์ uKit Explore การเชอ่ื มต่อด้านฮารด์ แวร์ โปรเจกต์น้ตี อ้ งใช้บอรด์ ทดลองและชนิ้ ส่วนอเิ ลก็ ทรอนิกส์หลายชิ้น เชือ่ มตอ่ สายจัมเปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนีจ้ ำเป็นตอ้ งเชือ่ มต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนนีจ้ ะทำการต่อไฟ LED และตัวตา้ นทาน 1 kΩ หมายเหต:ุ หา้ มเชอื่ มต่อแบตเตอร่ี 6.3.13 โปรแกรมตวั อย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 3 > Breathing_LED แนะนำให้ป้อนข้อมูลโปรแกรมด้วย ตวั เองเพอ่ื สรา้ งความคุ้นเคยกบั โปรแกรม น้คี อื โปรแกรมตวั อย่าง /* uKit Explore 2.0 <Chapter 6> <Section 3> 6.3.2 Breathing LED 130
*/ #include\"uKitExplore2En.h\" void setup() { pinMode(9, OUTPUT); //Declare pin D9 as output } void loop() { for (int a = 0; a <= 255; a++) //Loop statement, used to control the increase of PWM brightness { analogWrite(9, a); delay(8); //The duration of the current brightness level, in milliseconds } for (int a = 255; a >= 0; a--) //Loop statement, used to control the decrease of PWM brightness { analogWrite(9, a); delay(8); //The duration of the current brightness, in milliseconds } delay(800); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่มิ การอัปโหลดโปรแกรมได้หลงั จากตรวจสอบเสร็จแล้วเพอ่ื แน่ใจวา่ ไม่มีขอ้ ผดิ พลาด ทำการกด Upload และ IDE จะสง่ ข้อมลู โปรแกรมไปยงั บอรด์ uKit Explore 6.3.14 ผลการทดลอง หลังจากเสร็จขนั้ ตอนขา้ งต้นแลว้ จะสังเกตเห็นวา่ ไฟ LED เปดิ และปิดช้าเหมือนทเ่ี ราหายใจ 6.3.15 การทดลงอเพิม่ เตมิ หลังจากทำตามขั้นตอนข้างต้นแล้วเราสามารถลองเชื่อมต่อไฟ LED 2-3 ดวงและทำใหพ้ วกเขา หายใจ 131
บทท่ี 3 ไฟจราจร (Traffic Light) 6.3.16 สญั ญาณไฟจราจรคอื อะไร สัญญาณไฟจราจรเปน็ เครอ่ื งมอื ที่ช่วยจัดการระบบการจราจรในท้องถนนใหม้ ีประสิทธิภาพมาก ขนึ้ เพอ่ื ลดปัญหาอบุ ัติเหตุ ส่วนใหญจ่ ะถกู ควบคมุ ดว้ ยสญั ญาณไฟจราจรตามบรเิ วณทางแยก ทางขา้ มถนน สำหรับคนเดินเท้า และสถานีอื่นๆ เพื่อนำทางรถและคนเดินเท้าให้ปลอดภัยและเป็นระเบียบ สัญญาณ จราจรจะมีสีแดง สีเขียวและสีเหลือง สัญญาณไฟแดงคือให้หยุด ไฟเขียวคือปลอดภัย ไฟเหลืองคือ ระมัดระวงั สญั ญาณกำลังจะเปล่ยี น 6.3.17 องคป์ ระกอบของสัญญาณไฟจราจร สัญญาณไฟจราจรจะใชไ้ ฟ LED โดยเปน็ แหล่งกำเนิดแสงแบบใหม่ที่มกี ารพัฒนามาในช่วงไมก่ ป่ี ที ่ี ผ่านมา มีขอ้ ไดเ้ ปรยี บในดา้ นการใช้พลังงานตำ่ (มกี ระแสไฟเพยี ง 10 ~ 20 มิลลแิ อมป์) ความสว่างสงู (มี ความเข้มสูงถึง 10000 mcd) มีขนาดเล็ก (ด้วยเส้นผ่าศูนย์กลางอย่างต่ำ 3 มิลลิเมตร) มีน้ำหนักเบา (เพียงมิลลิกรัม) และอายุการใชง้ านยาวนาน (โดยเฉลย่ี 100,000 ชวั่ โมง) ไฟ LED ไดเ้ ปลี่ยนจากหลอดไส้ และหลอดฮาโลเจนแรงดันต่ำในการสร้างสญั ญาณไฟจราจร ลำดับต่อไปจะสร้างสัญญาณไฟจราจรแบบ ง่าย อุปกรณ์ จำนวน บอรด์ uKit explore 1 บอร์ดทอลอง (Breadboard) 1 ไฟ LED 3 ตัวต้านทาน (1 kΩ resistor) 3 สายไฟ (Connecting cable) N/A 132
6.3.18 แผนภาพวงจร 6.3.19 วิธกี ารเดนิ สาย สามารถเช่ือมต่อไฟ LED ดังที่แสดงด้านล่าง ทำการต่อตวั ต้านทาน 1 kΩ จำนวน 3 ตัวและต่อ ขาสญั ญาณขว้ั บวกของไฟ LED กับขาสัญญาณ D8 D9 และ D10 ของบอร์ด uKit explore หมายเหตุ: เช่อื มต่อไฟ LED สีแดงกบั ขาสัญญาณ D8 ของบอร์ด uKit Explore เช่ือมต่อไฟ LED สเี หลืองกับขาสัญญาณ D9 ของบอรด์ uKit Explore เชอ่ื มต่อไฟ LED สเี ขยี วกบั ขาสัญญาณ D10 ของบอร์ด uKit Explore การเชอื่ มตอ่ ดา้ นฮาร์ดแวร์ โปรเจกต์นต้ี อ้ งใช้บอร์ดทดลองและชิน้ ส่วนอเิ ล็กทรอนกิ ส์หลายช้ิน เช่ือมต่อสายจมั เปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากน้ีจำเป็นตอ้ งเช่ือมต่อบอร์ด uKit Explore กับคอมพวิ เตอรผ์ ่าน สาย USB ตอนนี้จะทำการตอ่ ไฟ LED 3 ดวง (แดง เหลืองและเขยี ว) และตวั ตา้ นทาน 1 kΩ 3 ตัว หมายเหต:ุ หา้ มเชื่อมต่อแบตเตอรี่ 133
6.3.20 โปรแกรมตัวอย่าง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 3 > Traffic_light แนะนำให้ป้อนขอ้ มูลโปรแกรมด้วยตัวเอง เพอื่ สร้างความคุ้นเคยกบั โปรแกรม นี้คอื โปรแกรมตวั อยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 3> 6.3.3 Traffic light */ #include\"uKitExplore2En.h\" int r = 8;//Red int y = 9;//Yellow int g = 10;//Green void setup() { pinMode(r , OUTPUT); //Declare pin D8 as output pinMode(y , OUTPUT); //Declare pin D9 as output pinMode(g , OUTPUT); //Declare pin D10 as output } void loop() { digitalWrite(r, HIGH); //Turn the red LED on delay(2000); digitalWrite(r, LOW); //Turn the red LED off digitalWrite(g, HIGH); //Turn the green LED on delay(2000); digitalWrite(g, HIGH); //Turn the green LED on delay(500); digitalWrite(g , LOW); //Turn the green LED off delay(500); digitalWrite(g, HIGH); //Turn the green LED on delay(500); digitalWrite(g , LOW); //Turn the green LED off 134
delay(500); digitalWrite(g, HIGH); //Turn the green LED on delay(500); digitalWrite(g , LOW); //Turn the green LED off delay(500); digitalWrite(y, HIGH); //Turn the yellow LED on delay(1300); digitalWrite(y, LOW); //Turn the yellow LED off delay(300); } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเรม่ิ การอปั โหลดโปรแกรมไดห้ ลังจากตรวจสอบเสร็จแล้วเพ่อื แน่ใจวา่ ไม่มีขอ้ ผิดพลาด ทำการกด Upload และ IDE จะสง่ ขอ้ มลู โปรแกรมไปยงั บอรด์ uKit Explore 6.3.21 ผลการทดลอง หลงั จากเสรจ็ ขั้นตอนขา้ งต้นแลว้ จะสังเกตเห็นวา่ ไฟ LED มกี ารทำงานเหมอื นสญั ญาณไฟจราจร 6.3.22 การทดลองเพ่ิมเติม หลังจากทำตามข้นั ตอนขา้ งตน้ เสร็จแลว้ ลองเปล่ยี นไฟ LED 3 ดวงเปน็ โหมด breathing lights (ลักษณะเหมือนไฟค่อยๆ สว่างและค่อยๆ ดับ สลับไปมา) และเปลี่ยนจากโหมด beathing lights เป็น สัญญาณไฟจราจร 6.4 สวิตซ์ปมุ่ กดบนบอรด์ ทดลอง บทที่ 1 เอสโอเอส (SOS) 6.4.1 SOS คอื อะไร เอสโอเอส (SOS) เป็นสัญญาณขอความชว่ ยเหลือสากลที่ได้รับความนยิ ม มีคนตคี วามกันไปตา่ งๆ วา่ SOS หมายถงึ \"Save Our Ship\" และ \"Save Our Souls\" ซง่ึ ทั้งหมดก็ลว้ นแลว้ แต่มคี วามหมายในทาง เดยี วกนั คอื เปน็ การร้องขอความชว่ ยเหลอื จากคนที่กำลงั อยู่ในความทกุ ข์ทงั้ สน้ิ จะใช้รหสั มอส ที่มจี ุดและ ขดี กลาง “...---...” เป็นสญั ญาณท่มี คี วามเข้าใจง่าย จำได้ง่าย 135
6.4.2 ฉนั สามารถส่งสญั ญาณ SOS ไดอ้ ย่างไร วธิ ีส่งสัญญาณ SOS 1 การทำให้เกิดเสียงเปน็ จังหวะสั้น-ยาว-ส้นั จังหวะละ 3 ครั้ง 2 การทำให้เกดิ แสงแฟลชหรือไฟกะพรบิ เป็นจงั หวะสน้ั -ยาว-สัน้ จังหวะละ 3 ครง้ั ตอ่ ไปเราจะทำไฟฉายอยา่ งง่ายเพือ่ สง่ สญั ญาณขอความช่วยเหลอื อปุ กรณ์ จำนวน บอรด์ uKit explore 1 บอร์ดทดลอง (Breadboard) 1 ไฟ LED 1 ตวั ตา้ นทาน (1 kΩ resistor) 1 ตัวตา้ นทาน (2.2 kΩ resistor) 1 ปุ่มกด (Button) 1 สายไฟ (Connecting cable) N/A 6.4.3 แผนภาพวงจร 136
6.4.4 วิธกี ารเดนิ สาย สามารถเช่อื มตอ่ ไฟ LED เข้ากับขาสัญญาณ D6 และสวิตช์ปมุ่ กดต่อกบั ขาสญั ญาณ D7 ของ บอรด์ uKit exlopre หมายเหตุ: เชอ่ื มต่อไฟ LED สแี ดงกบั ขาสญั ญาณ D7 ของบอร์ด uKit Explore เชอื่ มตอ่ สวติ ช์ปมุ่ กดกบั ขาสัญญาณ D6 ของบอรด์ uKit Explore การเชื่อมตอ่ ด้านฮาร์ดแวร์ โปรเจกต์น้ีต้องใช้บอรด์ ทดลองและชิน้ ส่วนอิเล็กทรอนิกส์หลายช้ิน เชื่อมตอ่ สายจัมเปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขัว้ ลบของไฟ LED นอกจากน้ีจำเปน็ ตอ้ งเชื่อมต่อบอร์ด uKit Explore กับคอมพวิ เตอรผ์ ่าน สาย USB ตอนน้ีจะทำการตอ่ ไฟ LED ตวั ต้านทาน 1 kΩ และตวั ตา้ นทาน 2.2 kΩ หมายเหต:ุ หา้ มเชอื่ มตอ่ แบตเตอรี่ 6.4.5 โปรแกรมตัวอยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 4 > SOS_distress_signal แนะนำให้ป้อนข้อมูลโปรแกรม ด้วยตวั เองเพอ่ื สรา้ งความคุน้ เคยกับโปรแกรม นี้คอื โปรแกรมตัวอยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 4> 137
6.4.1 SOS distress signal */ int led = 7; //Define the interface for digit 7 int button = 6; //Define the interface for digit 6 int val;//Define the variable val void setup() { pinMode(led, OUTPUT); //Set the LED as output pinMode(button, INPUT); //Set the button as input } void loop() { val = digitalRead(button); //Read digital pin 7's level value and assign it to val if (val == LOW) //Check if the button is pressed; the light goes on when the button is pressed { digitalWrite(led, LOW); } else { digitalWrite(led, HIGH); } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเร่มิ การอัปโหลดโปรแกรมไดห้ ลังจากตรวจสอบเสร็จแล้วเพ่อื แนใ่ จว่าไมม่ ีขอ้ ผิดพลาด ทำการกด Upload และ IDE จะสง่ ข้อมูลโปรแกรมไปยงั บอร์ด uKit Explore 6.4.6 ผลการทดลอง หลงั จากเสร็จขัน้ ตอนขา้ งต้นแล้ว ทำการกดสวิตซป์ ่มุ กด จะสงั เกตเห็นไฟ LED สว่างขึ้นและ สามารถสง่ สญั ญาณ SOS โดยการสร้างแฟลชส้ันสามครงั้ แฟลชยาวสามครงั้ และแฟลชสัน้ สามดวง 6.4.7 สรปุ ผลการทดลอง หลกั การของการทดลองนี้ง่ายและใช้กันอยา่ งแพรห่ ลายสำหรบั วงจรและเคร่อื งใชไ้ ฟฟ้า ตัวอยา่ งเช่นเมือ่ กดปมุ่ ใดๆ บนโทรศพั ทห์ รอื มือถอื แสงไฟจะสวา่ งข้นึ 138
6.4.8 Automatic SOS เราสามารถแก้ไขโคด้ เพอ่ื สรา้ งแฟลชสั้นสามครง้ั แฟลชยาวสามครั้งและแฟลชสน้ั สามคร้ังโดยกด ปุ่มหนง่ึ ครง้ั เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2.0 > Chapter 6 > Section 4 > Automatic_SOS แนะนำให้ป้อนข้อมูลโปรแกรมด้วย ตัวเองเพ่ือสร้างความคนุ้ เคยกับโปรแกรม น้ีคอื โปรแกรมตัวอย่าง /* uKit Explore 2.0 <Chapter 6> <Section 4> 6.4.2 Automatic SOS */ int led = 7; //Define the interface for digit 7 int button = 6; //Define the interface for digit 6 int val;//Define the variable val void setup() { pinMode(led, OUTPUT); //Set the LED as output pinMode(button, INPUT); //Set the button as input } void loop() { val = digitalRead(button); //Read digital pin 7's level value and assign it to val if (val == LOW) //Check if the button is pressed; the light goes on when the button is pressed { digitalWrite(led, LOW); } else { digitalWrite(led, HIGH); delay(200); 139
digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(800); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(800); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(800); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(200); 140
digitalWrite(led, LOW); delay(200); } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเริ่มการอปั โหลดโปรแกรมไดห้ ลังจากตรวจสอบเสรจ็ แล้วเพอื่ แนใ่ จวา่ ไมม่ ีขอ้ ผดิ พลาด ทำการกด Upload และ IDE จะส่งข้อมลู โปรแกรมไปยงั บอรด์ uKit Explore 6.4.9 ผลการทดลอง หลงั จากเสร็จขน้ั ตอนขา้ งต้นแล้ว ทำการกดสวติ ซป์ ุ่มกด จะสังเกตเห็นไฟ LED จะสง่ สญั ญาณ SOS พร้อมแฟลชสัน้ สามครง้ั สามกะพรบิ ยาวและกะพรบิ สน้ั สามครงั้ 6.4.10 การทดลองเพิ่มเติม ลองเชื่อมต่อไฟ LED เพิ่ม 2 ดวงขึ้นไป เขียนโปรแกรมควบคุมให้แฟลชเป็นเวลา 5 วินาทีแล้ว หยดุ เปน็ เวลา 5 วินาที บทที่ 2 ป่มุ สัญญาณเตือน (Alarm Button) 6.4.11 ปมุ่ สัญญาณเตอื นคืออะไร ปุ่มสญั ญาณเตือนภยั เปน็ ส่วนหนึ่งของระบบสญั ญาณกนั ขโมยและมักใช้โดยธนาคารโรงพยาบาล และสถานทีอ่ ื่นๆ ทม่ี ีความเสีย่ งสงู ตอ่ การลกั ขโมย 6.4.12 เรียนรู้ฟงั ก์ชนั I/O สำหรับเสยี ง เสียงจะสร้างสัญญาณรูปคลื่นสี่เหลี่ยมของความถี่ท่ีกำหนด (และรอบการทำงาน 50%) บน ขาสัญญาณ โดยต้องทำการกำหนดระยะเวลา ไม่อย่างน้ันสญั ญาณคลื่นจะทำงานตลอดเวลาจนกวา่ จะมี การเรียกใช้ฟังก์ชนั noTone() สามารถเชือ่ มต่อขาสัญญาณกับออดด้วยลำโพงแบบ piezo หรือลำโพง อ่นื ๆ เพอื่ เลน่ เสยี ง สามารถสรา้ งได้เพียงครั้งละหนง่ึ โทนเทา่ นน้ั หากขาสัญญาณมีการเล่นเสยี งที่แตกต่าง กัน การเรยี กฟงั กช์ ัน Tone() จะไมม่ ผี ลใดๆ โดยจะมกี ารปรับความถี่อยา่ งอัตโนมตั ิ หมายเหตุ: หากต้องการเล่นเสยี งทแี่ ตกตา่ งกันในหลายๆ ขาสัญญาณ จำเปน็ ต้องเรียก noTone() ที่ขาสญั ญาณนั้นก่อนแลว้ ทำการเรียก tone() ท่ีขาสญั ญาณถดั ไป ต่อไปเราจะสรา้ งปุ่มสัญญาณเตือนที่เรยี บง่าย 141
อปุ กรณ์ จำนวน บอร์ด uKit explore 1 บอร์ดทดลอง (Breadboard) 1 ลำโพงบัซเซอร์ (Buzzer) 1 ตวั ต้านทาน (1 kΩ resistor) 1 ตวั ตา้ นทาน (2.2 kΩ resistor) 1 ปมุ่ กด (Button) 1 สายไฟ (Connecting cable) N/A 6.4.13 แผนภาพวงจร 6.4.14 วธิ กี ารเดินสาย สามารถเชอื่ มตอ่ สวิตช์ปมุ่ กดและออดดังท่ีแสดงด้านล่าง ทำการตอ่ ตัวต้านทาน 1 kΩ เขา้ กบั ออดและตวั ตา้ นทาน 2.2 kΩ เขา้ กับสวิตช์ป่มุ กด หมายเหต:ุ เช่อื มต่อสวติ ช์ปุ่มกดเข้ากบั ขาสัญญาณ D7 ของบอร์ด uKit Explore เชื่อมตอ่ ออดเข้ากบั ขาสญั ญาณ D6 ของบอรด์ uKit Explore 142
การเชอ่ื มตอ่ ด้านฮารด์ แวร์ โปรเจกต์นี้ต้องใช้บอร์ดทดลองและชิ้นส่วนอเิ ลก็ ทรอนกิ ส์หลายชิ้น เช่อื มต่อสายจัมเปอร์สำหรับ บอร์ดทดลองกับขาสัญญาณดิจิทัลบนบอร์ด uKit Explore โดยให้ความสำคัญกับการต่อขาสัญญาณ ขั้วบวกและขั้วลบของไฟ LED นอกจากนีจ้ ำเป็นตอ้ งเชื่อมต่อบอร์ด uKit Explore กับคอมพิวเตอร์ผ่าน สาย USB ตอนน้ีจะทำการต่อออด ปุ่มกด ไฟ LED 3 ดวง (แดง เหลอื งและเขยี ว) และตัวต้านทาน 1 kΩ 3 ตัว หมายเหตุ: หา้ มเชื่อมต่อแบตเตอรี่ 6.4.15 โปรแกรมตวั อยา่ ง เปิดซอฟต์แวร์ Arduino IDE สามารถเปิดโปรแกรมตัวอย่างได้ที่ File > Examples > uKit Explore 2. 0 > Chapter 6 > Section 4 > Button_control_buzzer แนะนำให้ป้อนข้อมูล โปรแกรมดว้ ยตัวเองเพื่อสรา้ งความคุน้ เคยกบั โปรแกรม น้ีคอื โปรแกรมตวั อยา่ ง /* uKit Explore 2.0 <Chapter 6> <Section 4> 6.4.3 Button-controlled buzzer */ int pinBuzzer = 6; //Pin D6 is connected to the signal pin of the buzzer module int button = 7; 143
int val; void setup() { pinMode(pinBuzzer, OUTPUT); pinMode(button, INPUT); } void loop() { val = digitalRead(button); if (val == LOW) { noTone(pinBuzzer); } else { for (int i = 200; i <= 800; i++) //Use a loop to increase the frequency from 200 Hz to 800 Hz { tone(pinBuzzer, i); //Port output frequency delay(5); //Last for 5 milliseconds at the frequency } delay(4000); //Last for 4 seconds at the highest frequency for (int i = 800; i >= 200; i--) { tone(pinBuzzer, i); delay(10); } } } หลังจากป้อนข้อมูลเสร็จให้ทำการกด Verify เพื่อตรวจสอบความผิดพลาดของโปรแกรม คุณ สามารถเรมิ่ การอปั โหลดโปรแกรมไดห้ ลงั จากตรวจสอบเสร็จแล้วเพอื่ แน่ใจวา่ ไม่มีขอ้ ผดิ พลาด ทำการกด Upload และ IDE จะสง่ ข้อมลู โปรแกรมไปยังบอร์ด uKit Explore 144
6.4.16 ผลการทดลอง หลงั จากเสรจ็ ข้ันตอนข้างตน้ แล้ว ทำการกดปุ่มแล้วเสียงสญั ญาณจะดังขึ้น 6.4.17 การทดลองเพ่มิ เตมิ หลงั จากทำตามข้ันตอนขา้ งต้นเสรจ็ แลว้ ลองสร้างปุ่มออดได้โดยปรบั เปล่ยี นโปรแกรมท่แี สดง ด้านบน <Doorbell> 6.5 การประยุกตใ์ ชอ้ ินฟราเรดบนบอรด์ ทดลอง บทท่ี 1 การควบคมุ ไฟ LED ดว้ ยรโี มทควบคมุ (Controlling an LED with a Remote Control) ในบทที่ 4 ไดเ้ รียนรูว้ ธิ ีเชื่อมต่อรีโมทควบคุมเขา้ กับบอรด์ uKit Explore ลำดบั ตอ่ ไปจะแนะนำให้ รจู้ ักกบั วธิ กี ารควบคมุ ไฟ LED ดว้ ยรีโมทคอนโทรล 6.5.1 การทำงานของรีโมทควบคมุ อินฟราเรด การทำงานของระบบอินฟราเรดจะประกอบด้วยตัวสง่ สัญญาณและตวั รบั สญั ญาณ จะถกู ควบคุม ด้วยไมโครชิพของวงจรที่ออกแบบมาสำหรับการเข้ารหัส/ถอดรหัส (Encoding/Decoding) ตัวส่ง สัญญาณจะประกอบด้วย Keyboard matrix, Encoding and Modulation และ Infrared LED ตัวรับ ส ั ญ ญ า ณป ร ะ ก อ บ ด ้ วย Light/electricity conversion amplifier, Demodulation circuit แ ละ Decoding circuit ตอนน้เี รากำลงั จะใชร้ โี มตคอนโทรลเพ่อื ควบคุมไฟ LED 145
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