Lab 4

การติดต่อ Analog Input


VDO Link : https://www.youtube.com/watch?v=WbEH5shWm88


ระดับความยากง่าย

● ปานกลาง


ประมาณเวลาที่ใช้เรียนรู้ + ลงมือปฏิบัติตาม

● 1 ชั่วโมง – 1 ชั่วโมง 30 นาที


Prerequisite ต้องผ่านหัวข้อหรือใบงานกิจกรรมใดมาก่อน

● Module NETPIE on NodeMCU/ESP8266 Lab 1 การติดตั้ง Arduino IDE และทดสอบการทำงานเบื้องต้นของ NodeMCU/ESP8266 (https://netpie.gitbooks.io/nodemcu-esp8266-on-netpie/content/chapter1.html)


วัตถุประสงค์

เพื่อให้เข้าใจการใช้งานและสามารถประยุกต์ใช้งาน Analog-to-Digital Convertor (ADC) ได้


อุปกรณ์ที่ใช้ในการทดลอง

1.บอร์ด NodeMCU/ESP8266 (ESP-12E)

2.ตัวต้านทานปรับค่าได้ (Volume Resistor หรือ Potentiometer) 10 KΩ

3.Breadboard

4.สายไฟเชื่อมต่อ (Male to Female)

เนื้อหาเชิงทฤษฎี

การทดลองนี้ เป็นการอ่านค่าตัวตรวจจับแบบแอนะล็อก และแปลงสัญญาณแอนะล็อกเป็นดิจิทัล ด้วย Analog to Digital Convertor (ADC) สัญญาณแอนะล็อกคือสัญญาณที่มีการเปลี่ยนแปลง แบบต่อเนื่องทั้งขนาดของค่าสัญญาณและเวลา (Continuous in value and time) ดังนั้นเมื่อพล็อตสัญญารแอนะล็อกออกมาเป็นกราฟ จะมีลักษณะเป็นเส้นต่อเนื่องกัน ในขณะที่สัญญาณดิจิทัลคือสัญญาณที่มีการเปลี่ยนแปลงแบบขั้นทั้งขนาดของค่าสัญญาณและเวลา (Discrete in value and time) โดยมากแล้วสัญญาณดิจิทัลได้มาจากสัญญาณแอนะล็อกที่ผ่านกระบวนการชักตัวอย่าง (Sampling) และการแบ่งนับ (Quantization) ในการทดลองนี้เราจะจำลองสัญญาณแอนะล็อกด้วยแรงดันไฟฟ้าจากตัวต้านทานปรับค่าได้ (Volume Resistor หรือ Potentiometer) จากทางขา ADC (A0 หรือ ขา 6) ของบอร์ด NodeMCU/ESP8266 โดยที่ความละเอียดของ ADC อยู่ที่ 10 บิต (1024 ค่า, 0-1023) หมายความว่าหากอ่านค่าแรงดันไฟฟ้าเป็นสัญญาณแอนะล็อกได้ 3.3 V (เทียบเท่าไฟเลี้ยง ESP8266) แปลงมาเป็นค่าเป็นดิจิทัลแล้วบอร์ด NodeMCU/ESP8266 จะเห็นเป็นค่า 1023 และในลักษณะเดียวกัน เมื่ออ่านค่าแรงดันไฟฟ้าแอนะล็อกได้ 0 V ค่าดิจิทัลที่บอร์ดเห็นจะเป็น 0

Analog to Digital Convertor (ADC) คือตัวแปลงสัญญาณแอนะล็อกให้เป็นสัญญาณดิจิทัล NodeMCU/ESP8266 มี ADC อยู่ 1 ช่องทางผ่านขา A0 โดยมีค่าความละเอียด (Resolution) 10 บิต ในการทดลอง ผู้ศึกษาจะเขียนโปรแกรมเพื่ออ่านค่าสัญญาณแอนะล็อก ซึ่งเป็นแรงดันไฟฟ้าคร่อมตัวต้านทานปรับค่าได้ การปรับค่าความต้านทานของตัวต้านทานจะเปลี่ยนค่าแรงดันไฟฟ้า ทำให้เกิดการเปลี่ยนแปลงค่าแรงดันได้แบบต่อเนื่อง ก่อให้เกิดสัญญาณแอนะล็อก

ฟังก์ชั่นของโปรแกรมที่ควรทราบ

analogRead

ฟังก์ชั่น analogRead เป็นฟังก์ชั่นที่ใช้ในการอ่านค่าสัญญาณแอนะล็อกของขาที่ต้องการ สำหรับบอร์ด NodeMCU/ESP8266 คือขา A0 ผลลัพธ์ที่อ่านได้หลังจากสัญญาณแอนะล็อกถูกแปลงด้วย ADC จะเป็นตัวเลขจำนวนเต็ม 0-1023

Syntax:

digitalRead(pin)

Syntax:

analogRead(pin)

Parameter:

pin: หมายเลขขาที่ต้องการอ่านค่าแอนะล็อก

Return:

int (0 to 1023) 10 bits

ขั้นตอนการทดลอง

1.ทำการต่อวงจรตามภาพ สังเกตว่าขา ADC ของบอร์ดถูกต่อเข้ากับขา Slider ของตัวต้านทาน

2.เปิดโปรแกรม Arduino IDE และคลิกไปที่เมนู File -> New File

3.เขียนโค้ดลงในโปรแกรมดังนี้

void setup() 
{
  Serial.begin(115200);
}
 void loop() 
{
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  Serial.print("ADC 10 bit = ");
  Serial.print(sensorValue); // print out the value you read:

  float volts = 3.30*(float)sensorValue/1023.00;
  Serial.print(" , Voltage = ");
  Serial.print(volts,2);
  Serial.println(" V");
  delay(1);        // delay in between reads for stability
}

คำอธิบายโปรแกรม

ส่วนภายในฟังก์ชั่น setup() เป็นการตั้งค่าความเร็วการรับส่งข้อมูลของพอร์ต Serial ที่ 115,200 บิตต่อวินาที

ส่วนภายในฟังก์ชั่น loop() จะทำงานวนลูปไปเรื่อยๆ ตามลำดับไม่สิ้นสุด โดยในการทดลองนี้ โดยในการทดลองนี้เราจะวนลูปเพื่ออ่านค่าแอนะล็อกด้วยคำสั่ง analogRead จากขา A0 มาเก็บไว้ในตัวแปลแบบ integer ชื่อ sensorValue และสั่งให้พิมพ์ค่าดิบที่อ่านมาได้ออกไปยังพอร์ต Serial ซึ่งจะไปแสดงยังหน้าจอคอมพิวเตอร์ จากนั้นนำค่าตัวแปร sensorValue มาคำนวณเทียบบัญญัติไตรยางค์เพื่อแปลงเป็นค่าแรงดันไฟฟ้า (ทศนิยม 2 ตำแหน่ง) และพิมพ์แสดงออกยังหน้าจอคอมพิวเตอร์

4.คลิกที่ปุ่ม เพื่อคอมไพล์โค้ด แล้วทำการบันทึกไฟล์เป็น “DigitalInput” ไว้ที่ Desktop ดังภาพตัวอย่างด้านล่าง เมื่อคอมไพล์เสร็จสิ้นและไม่มีข้อผิดพลาด ทำการอัพโหลดโดยคลิกปุ่ม

5.คลิกที่ปุ่ม (Serial monitor) และทำการกดสวิตช์ค้างไว้ สังเกตผลลัพธ์บนจอดังภาพ

สรุปผล

การทดลองนี้ ผู้ศึกษาได้เรียนรู้วิธีการอ่านค่าสัญญาณอินพุตชนิดแอนะล็อกด้วยบอร์ด NodeMCU/ESP8266 รวมไปถึงวิธีการคำนวณเพื่อแปลงค่าเอาท์พุตดิบของ ADC กลับเป็นค่าจริงที่ต้องการ

แบบฝึกหัดทดสอบความเข้าใจ

  1. ADC ย่อมาจากอะไรและคืออะไร อธิบายพอสังเขป
  2. เขียนคำสั่งให้อ่านค่าจากขา ADC ของ NodeMCU/ESP8266
  3. แก้ไขโค้ดด้านล่าง ให้พิมพ์คำว่า “Good” ไปยังหน้าจอเมื่อเอาท์พุตของ ADC มากกว่า 200 แต่น้อยกว่า 500
void setup() 
{
  Serial.begin(115200);
}
 void loop() 
{
  // read the input on analog pin 0:
  int ADC_Value = analogRead(A0);
  if(ADC_Value >= 1000)
  {
    Serial.println("Dangerous!");
  }
  else if(ADC_Value >= 500)
  {
    Serial.println("Careful.");
  }
  else
  {
    Serial.println("Safe.");
  }
}

เฉลย-แบบฝึกหัดทดสอบความเข้าใจ

  1. Analog-to-Digital Convertor คือตัวแปลงสัญญาณจากแอนะล็อกเป็นดิจิทัล โดยมากมีความละเอียดเป็นบิต เช่น 10 บิต หมายถึงช่วงค่าแอนะล็อกถูกแบ่งเป็น 210= 1024 ขั้น
  2. analogRead(A0); 3.
void setup() 
{
  Serial.begin(115200);
}
 void loop() 
{
  // read the input on analog pin 0:
  int ADC_Value = analogRead(A0);
  if(ADC_Value >= 1000)
  {
    Serial.println("Dangerous!");
  }
  else if(ADC_Value >= 500)
  {
    Serial.println("Careful.");
  }
  else if(ADC_Value > 200)
  {
    Serial.println("Good.");
  }
  else
  {
    Serial.println("Safe.");
  }
}

VDO Link : https://www.youtube.com/watch?v=WbEH5shWm88


results matching ""

    No results matching ""