จุดประสงค์
ศึกษาวิธีการต่อตัวต้านทานปรับค่าได้เพื่อควบคุมความสว่างของหลอดไดโอดเปล่งแสง
วัสดุและอุปกรณ์
1. บอร์ด Arduino UNO 1 บอร์ด
2. แหล่งจ่ายไฟฟ้ากระแสตรง 5 โวลต์ 1 ชุด
3. แผ่นเบรดบอร์ด 400 จุด 1 แผ่น
4. ตัวต้านทานปรับค่าได้ 10 กิโลโอห์ม 1 ชิ้น
5. หลอดไดโอดเปล่งแสง ขนาด 5 มิลลิเมตร 1 หลอด
6. ตัวต้านทานชนิดค่าคงที่ ขนาด 220 โอห์ม 1 ตัว
7. สายเชื่อมต่อวงจรแบบ male to male
ตัวต้านทานปรับค่าได้ 3 ขา
const int Pinin = A0;,
const int PinLED1 = 3;
การตั้งชื่อตัวแปรก็เหมือนกับ "การแปะป้ายชื่อบนกล่อง" เพื่อให้เราเรียกใช้ได้ง่ายๆ โดยไม่ต้องจำตัวเลขยากๆ
int (Integer) คือกล่องที่เก็บเฉพาะ "ตัวเลขจำนวนเต็ม"
const (Constant) คือการล็อคกล่องนี้ไว้ บอกว่าค่าในกล่องนี้เป็น "ค่าคงที่" ห้ามเปลี่ยนระหว่างที่โปรแกรมทำงาน (เช่น ขาหลอดไฟจะอยู่ที่ขา 3 เสมอ ไม่ย้ายไปไหน)
int PotenValue = 0;, // เลข 0 แปลว่าให้ว่างๆ ไว้
int LEDValue = 0;// เลข 0 แปลว่าให้ว่างๆ ไว้
การสร้าง "กล่องเปล่า" เพื่อรอรับข้อมูลที่จะเข้ามาในอนาคต โดยตอนเริ่มต้นเราใส่ค่า 0 ไว้ในกล่องก่อนเพื่อความชัวร์
ตอนที่บอร์ด Arduino อ่านค่าตัวต้านทานปรับค่าได้ (Potentiometer) มันก็จะเอาตัวเลขที่อ่านได้มาหย่อนใส่ในกล่อง PotenValue นี้ ทำให้ค่าในกล่องเปลี่ยนแปลงได้ตลอดเวลา (สังเกตว่าเราไม่ใส่ const ไว้ข้างหน้า)
pinMode(PinLED1, OUTPUT);
คำอธิบายสำหรับนักเรียน: เป็นการบอกให้บอร์ด Arduino รู้ว่า ขาแต่ละขาจะรับบทบาทเป็นอะไร เปรียบเหมือน "การมอบหมายหน้าที่"
OUTPUT: เป็นฝ่ายส่งออก (ส่งไฟออกไปทำให้ LED สว่าง)
INPUT: เป็นฝ่ายรับเข้า (รับกระแสไฟเข้ามาเพื่ออ่านค่า เช่น สวิตช์ปุ่มกด หรือเซ็นเซอร์)
โค้ดตัวอย่าง: Serial.begin(9600);
คือการ "ตกลงความเร็วในการส่งข้อมูล (บิตต่อวินาที) " ระหว่างบอร์ด Arduino กับคอมพิวเตอร์
ตัวเลข 9600 คือความเร็วในการส่งข้อมูล (บิตต่อวินาที) ถ้าบอร์ดพูดเร็ว 9600 แต่คอมพิวเตอร์ตั้งใจฟังที่ความเร็วอื่น คุยกันก็จะไม่รู้เรื่องและอ่านค่าออกมาเป็นภาษาต่างดาว
โค้ดตัวอย่าง: LEDValue = map(PotenValue, 0, 1023, 0, 3);
ฟังก์ชันนี้คือ "นักแปลงสเกลเวทมนตร์" ที่ช่วยย่อหรือขยายตัวเลขให้เราอัตโนมัติ
ค่าที่อ่านได้จาก analogRead จะมีค่าตั้งแต่ 0 ถึง 1023 (สเกลใหญ่มาก) แต่เรามีหลอดไฟแค่ 3 ดวง เราเลยสั่งให้ map ช่วยแปลงสเกลใหม่เป็น 0 ถึง 3 (สเกลเล็ก)
ถ้าหมุนตัวต้านทานสุดทาง (1023) ค่า LEDValue จะถูกแปลงเป็น 3 ทันที
โค้ดตัวอย่าง: if(LEDValue==3) { ... } else if(LEDValue==2) { ... }
คือ "ทางแยกของการตัดสินใจ" เหมือนเวลาเราบอกว่า "ถ้า... ให้ทำแบบนี้ แต่ถ้าไม่ใช่... ให้ไปเช็คเงื่อนไขถัดไป"
if (ถ้า): เช็คเงื่อนไขแรกก่อน ถ้า LEDValue เท่ากับ 3 จริง ให้เปิดไฟครบ 3 ดวง
else if (แต่ถ้า): ถ้าเงื่อนไขแรกไม่จริง ค่อยมาเช็คอันนี้ ถ้า LEDValue เท่ากับ 2 จริง ให้เปิดไฟแค่ 2 ดวง
ข้อควรระวังเวลาสอน: ย้ำนักเรียนว่าเครื่องหมายเท่ากับสองตัว == หมายถึง "การเปรียบเทียบว่าเท่ากันหรือไม่" ไม่ใช่การกำหนดค่า (ซึ่งใช้ =)
โค้ดตัวอย่าง: Serial.print(" to ");, Serial.println(LEDValue);
คือคำสั่ง "เขียนข้อความส่งกลับมาที่หน้าจอคอม (Serial Monitor)" เพื่อให้เราเห็นว่าบอร์ดกำลังคิดอะไรอยู่
Serial.print(): พิมพ์ข้อความแล้ว "อยู่บรรทัดเดิม" รอพิมพ์ข้อความต่อไปต่อท้ายได้เลย
Serial.println(): พิมพ์ข้อความเสร็จแล้ว "กดปุ่ม Enter ขึ้นบรรทัดใหม่" ให้ทันที (ตัว ln ย่อมาจาก line)
การต่อวงจร
รูปวงจร
วิธีทำกิจกรรม ตอนที่ 1
1. ทำการศึกษาสัญลักษณ์ในวงจรอิเล็กทรอกนิกส์ตามแผนผังการต่อวงจรตัวต้านทานปรับค่าได้ควบคุมความสว่างของหลอดไดโอดเปล่งแสง
2. ทำการต่อวงจรตัวต้านทานปรับค่าได้ควบคุมความสว่างของหลอดไดโอดเปล่งแสง ตามรูป ทำการปรับค่าความต้านทาน แล้วสังเกตการณ์เปลี่ยนแปลงที่เกิดขึ้น
3. ทำการเปลี่ยนการต่อวงจรที่ขาของตัวต้านทานปรับค่าได้ โดยทำการต่อไฟฟ้ากระแสตรง 5 โวลต์ เข้าที่ขา 3 ทำการปรับค่าความต้านทาน แล้วสังเกตการณ์เปลี่ยนแปลงที่เกิดขึ้น
4. ทำการเปลี่ยนการต่อวงจรที่ขาของตัวต้านทานปรับค่าได้ โดยทำการต่อตัวต้านทานของหลอดไดโอดเปล่งแสงเข้าที่ขา 2 และต่อไฟฟ้ากระแสตรง 5 โวลต์ เข้าที่ขา 3 ทำการปรับค่าความต้านทาน แล้วสังเกตการณ์เปลี่ยนแปลงที่เกิดขึ้น
การต่อวงจร
วิธีทำกิจกรรม ตอนที่ 2
1. ทำการต่อวงจรตัวต้านทานปรับค่าได้ ตามรูป
2. เขียนโค๊ด ให้สามารถอ่านค่าความต้านทานส่งกลับมาที่หน้าจอคอม (Serial Monitor) โดยใช้
Serial.begin(9600); //ความเร็วในการส่งข้อมูล (บิตต่อวินาที)
Serial.print(): //พิมพ์ข้อความแล้ว "อยู่บรรทัดเดิม" รอพิมพ์ข้อความต่อไปต่อท้ายได้เลย
Serial.println(): //พิมพ์ข้อความเสร็จแล้ว "กดปุ่ม Enter ขึ้นบรรทัดใหม่" ให้ทันที (ตัว ln ย่อมาจาก line)
3. ทำการปรับค่าความต้านทาน สังเกตุค่าที่อ่านได้จาก Serial Monitor
วิธีทำกิจกรรม ตอนที่ 3
1. ทำการต่อวงจรตัวต้านทานปรับค่าได้ ตามรูป
. การต่อสายฝั่งตัวต้านทานปรับค่าได้ (Potentiometer / วอลลุ่ม)
-terminal1 และ terminal2 ต่อเข้ากับ 5V และ GND
wiper (ขากลาง): ต่อเข้ากับขา A0 (Analog In)
2. การต่อสายฝั่งหลอดไฟ LED ทั้ง 3 ดวง
อุปกรณ์เหล่านี้ทำหน้าที่เป็น Output รับคำสั่งจากบอร์ดให้เปิด/ปิดไฟ โดยมีวิธีการต่อดังนี้:
การต่อขาลบ (GND ร่วม):
🔵 LED สีน้ำเงิน (บนสุด): ต่อผ่านสายไฟ เข้าที่ขา 4
🟡 LED สีเหลือง (ตรงกลาง): ต่อผ่านสายไฟ เข้าที่ขา 5
🟢 LED สีเขียว (ล่างสุด): ต่อผ่านสายไฟ สีเข้าที่ขา 6
2. เขียนโค๊ดเพิ่ม ให้สามารถอ่านค่าความต้านทานส่งกลับมาที่หน้าจอคอม (Serial Monitor) และปรับค่าจำนวนหลอดไฟให้ติดตามการปรับค่าตัวต้านทาน
เงื่อนไข ปรับค่าความต้านทานแล้วจะทำให้หลอด LED ติดตั้งแต่ 1 - 3 ดวง
3. ทำการปรับค่าความต้านทาน สังเหตุการเปลี่ยนแปลง
const int Pinin = A0;//กำหนดว่าจะใช้คำว่า Pinin แทน A0
const int PinLED1 = 4;// กำหนดว่าจะใช้คำว่า PinLED1 แทน D4
const int PinLED2 = 5;// กำหนดว่าจะใช้คำว่า PinLED2 แทน D5
const int PinLED3 = 6;// กำหนดว่าจะใช้คำว่า PinLED1 แทน D6
//สร้างช่องเก็บค่าตัวแปร
int PotenValue = 0;
int LEDValue = 0;
void setup()
{
pinMode(PinLED1,OUTPUT);
pinMode(PinLED2,OUTPUT);
pinMode(PinLED3,OUTPUT);
Serial.begin(9600);
}
void loop()
{
PotenValue = analogRead(Pinin);
LEDValue = map(PotenValue,0,1023,0,3);
if (LEDValue==0){
digitalWrite(PinLED1,LOW);
digitalWrite(PinLED2,LOW);
digitalWrite(PinLED3,LOW);
}
else if(LEDValue==1){
digitalWrite(PinLED1,HIGH);
digitalWrite(PinLED2,LOW);
digitalWrite(PinLED3,LOW);
}
else if(LEDValue==2){
digitalWrite(PinLED1,HIGH);
digitalWrite(PinLED2,HIGH);
digitalWrite(PinLED3,LOW);
}
else if(LEDValue==3){
digitalWrite(PinLED1,HIGH);
digitalWrite(PinLED2,HIGH);
digitalWrite(PinLED3,HIGH);
}
Serial.print(PotenValue);
Serial.print(" to ");
Serial.println(LEDValue);
}