การทดลอง Arduino 1.1 การใช้งาน Swith 1ตัว ปิดเปิดหลอดไฟ 3หลอด (Advance ระดับ2)

หายไปพักนึงคับ
เขียนบน Arduino UNO นะครับสำหรับบทความนี้เพราะ ส่วนตัวคิดว่าใช้ Arduino IDE เหมือนกัน
ปล ระบบไฟ บนขา Arduno Uno เป็น 5 Volt เหมือนกัน แต่ เวลาใช้ Pin เป็น PWM mode ESP จะมี Clock ที่สูงกว่านะครับ

Default frequency of each PWM pin of Arduino UNO:

PWM frequency for D5 & D6  :  976.56 Hz (The DEFAULT) 

controlled by timer0: 16 Mhz / 64 / 256 = 976.56 Hz

PWM frequency for D3 & D11& D9 & D10: 490.20 Hz (The DEFAULT)

 controlled by timer1: 16 Mhz / 64 / 510 = 490.20 Hz


เพราะงั้นถ้าเอาไปจับ Input หรือ ส่งเป็น Output อะไรสักอย่าง เช่นให้ มอร์เตอร์ เคลื่อนที่ด้วยความร็วเท่ากัน ต้องระวังด้วยนะครับ แต่จริงๆก็มีคำสั่ง map() มาช่วยเป็นตัวปรับได้เช่นกัน ซึ่งผมจะเขียนการปรับมอเตอร์ให้วิ่งเท่ากันในโพสน์หน้า

โม้มาละ มาเริ่มโครงงานนี้กัน

โครงงานนี้ไว้สำหรับการออกแบบในบอร์ดทีเรามีขาใช้งานจำกัด และไม่อยากเปลี่ยนหรือซื้ออุปกรณ์เพิ่ม
ง่ายๆคือประหยัดงบ
โดยปกติเราควรมี สวิทกดปล่อย กดลอย หรือ พุชสวิท push switch ไว้กดเพื่อ เปิดปิดไฟ หรืออุปกรณ์อะไรซักอย่าง 1ตัวสวิทต่อ 1 อุปกรณ์ แต่เราใช้ความสามารถของ PWM mode ในการรับ Input จากสวิทว่ามีการกดนานแค่ไหน โดยที่เราจะนับเวลาในการกดแช่เพื่อระบุปิดเปืด อุปกรณ์ต่างๆ ในโครงงานนี้จะเปิดปิดแค่ 2LEDs แต่ที่ทำเล่นๆไว้ ก็ใช้ถึง 4อุปกรณ์ได้ สบายๆ
เมื่อกดปุ่ม 1 วินาทีแล้วปล่อย หลอดที่ 1จะติด เมื่อกดอีกครั้งจะดับ 
เมื่อกดปุ่ม 3 วินาทีแล้วปล่อย หลอดที่ 2 จะติด เมื่อกดอีกครั้งนาน 3วินาที จะดับ 

มาเริ่มต่อวงจรกัน

การ on / off คือการสั่งให้ ขา Pinต่างๆ ส่งไฟ 5Volt ออกมาตามขานั้น เพื่อให้อุปกรณ์เปิดปิด และ R ที่เอามากันไว้
220  Ω โดยนำมาใช้เพื่อ กันVoltให้ตกคร่อม หลอดไม่เกิน 2Volt (น่าจะพอ คำนวน V=IR)เป็นนะ 


มาดูดโค้ด Sketch กัน


//รับค่าการะยะเวลากดปุ่มเพื่อจัดทำคำสั่งต่างๆ

float pressLength_milliSeconds = 0;  //ตั้งค่าการกดเวลาการกดให้เป็น 0

// กำหนดค่าเวลาที่ใช้กด ในหน่วย milli-seconds เพื่อไปเลือกเปิกปิดอันไหน, 
int optionOne_milliSeconds = 100;  //กด 1 sec เป็น Option 1 
int optionTwo_milliSeconds = 300;  //กด 3 sec เป็น Option 2 

int buttonPin = 2;  //กำหนด Pin2 ต่อ Push Switch
 int ledPin_Option_1 = 12; //กำหนด Pin13 ต่อ LED เขียว
int ledPin_Option_2 = 13 ; //กำหนด Pin12 ต่อ LED แดง

void setup(){

   // Keep in mind, when pin 2 has ground voltage applied, we know the button is being pressed
  pinMode(buttonPin, INPUT_PULLUP);     // กำหนดชนิด ของPin  เป็นชนิด input pullup
  pinMode(ledPin_Option_1, OUTPUT);    //กำหนดชนิด ของPinที่ต่อ LED เป็นชนิด  output
  pinMode(ledPin_Option_2, OUTPUT);
  Serial.begin(9600);   //กำหนด ความเร็ว Serial port ( บน USB)ให้เป็น 9600                        

} // close setup

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {

  //Record *roughly* the tenths of seconds the button in being held down
  while (digitalRead(buttonPin) == LOW ){

    delay(100);  //กำหนดค่า delay 100 ms = 1 sec เพื่อให้นับเวลาที่กดแช่ไว้
    pressLength_milliSeconds = pressLength_milliSeconds + 100;   // ทำการบวกค่าเพิ่มจากครั้งที่ผ่านมา

    //แสดงผลบน Serial Portว่ากดไปนานเท่าไหร่
    Serial.print("ms = ");
    Serial.println(pressLength_milliSeconds);

  }//close while

   //ถ้า Option 2 - ให้ทำดังนี้
  if (pressLength_milliSeconds >= optionTwo_milliSeconds){
    digitalWrite(ledPin_Option_2,!digitalRead(ledPin_Option_2)); 
//กลับค่า Pin เป็นตรงกันข้าม อันนี้สุด Cool HIGH <=> LOW  
 }

  //ถ้า Option 1 - ให้ทำดังนี้
  else if(pressLength_milliSeconds >= optionOne_milliSeconds){
    digitalWrite(ledPin_Option_1, !digitalRead(ledPin_Option_1)); 

  }//close if options

  pressLength_milliSeconds = 0;  //ทุกครั้งที่จบ จะ Resetเวลากดให้เป็น 0

} // close void loop


เอาไปทดลองแล้วได้อย่างไร comment กันมาได้ที่ A.J Moo ครับ tumrong2018@gmail.com


ความคิดเห็น