บทความนี้ กล่าวถึงขั้นตอนการทำโปรเจค เปิดปิดไฟด้วยเสียงปรบมือ โดยใช้ ไมโครคอนโทรลเลอร์ STM32 รุ่น STM32F407VET6 โดยประโยชน์ของโปรเจคนี้คือ การเปิดปิดไฟแบบไม่สัมผัส เพื่อลดการติดต่อของเชื้อโรค เช่น เชื้อโควิด 19 ผ่านการสัมผัสสวิทซ์จุดเดียวกัน จากผู้ใช้หลายๆคนใช้ร่วมกัน

การทำงานเริ่มจากการรับสัญญาณเสียงเช่น เสียงปรบมือ หรือเสียงอื่นๆที่มีความดังใกล้เคียงกัน ผ่านทางเซ็นเซอร์เสียง (Voice Sound Detection Sensor) แล้วประมวลผลด้วย STM32 ส่งค่าการเปิดปิด (LOW / HIGH) ไปยังรีเลย์  ใช้การแสดงผลด้วย LED 2 ตัว โดย เสียงปรบมือ 2 ครั้ง ให้ LED ตัวที่ 1 ติดหรือดับ และ เสียงปรบมือ 3 ครั้ง ให้ LED ตัวที่ 2 ติดหรือดับ เช่นเดียวกัน

ขั้นตอนการทํางาน


1 : ทดสอบการใช้งาน STM32 รุ่น STM32F407VET6


ทดสอบการใช้งานเบื้องต้นของบอร์ด STM32 รุ่น STM32F407VET6 ตามลิงค์ด้านล่าง



2 : อัพโหลดโค้ดโปรเจค STM32 เปิดปิดไฟด้วยเสียง

เขียนโค้ดและอัพโหลดโค้ดด้านล่างนี้ ไปที่ STM32


int sound_sensor_1 = PC0;
int relay_1 = PA6;
int relay_2 = PA7;

int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
boolean status_lights_1 = false;
boolean status_lights_2 = false;

void setup() {
  pinMode(sound_sensor_1, INPUT);
  pinMode(relay_1, OUTPUT);
  pinMode(relay_2, OUTPUT);
}

void loop() {
  int status_sensor = digitalRead(sound_sensor_1);
  if (status_sensor == 0)
  {
    if (clap == 0)
    {
      detection_range_start = detection_range = millis();
      clap++;
    }
    else if (clap > 0 && millis() - detection_range >= 40)
    {
      detection_range = millis();
      clap++;
    }
  }
  if (millis() - detection_range_start >= 600)
  {
    if (!status_lights_1 && clap == 2)
    {
      digitalWrite(relay_1, HIGH);
      status_lights_1 = true;
    }
    else if (status_lights_1 && clap == 2)
    {
      digitalWrite(relay_1, LOW);
      status_lights_1 = false;
    }

    else if (!status_lights_2 && clap == 3)
    {
      digitalWrite(relay_2, HIGH);
      status_lights_2 = true;
    }

    else if (status_lights_2 && clap == 3)
    {
      digitalWrite(relay_2, LOW);
      status_lights_2 = false;
    }

    clap = 0;
  }
}

อัพโหลดโค้ดโปรเจค STM32 เปิดปิดไฟด้วยเสียง
โค้ดโปรเจค STM32 เปิดปิดไฟด้วยเสียง



3 : เชื่อมต่อและทดสอบ เซ็นเซอร์เสียง (Voice Sound Detection Sensor)

เชื่อมต่อสายระหว่าง เซ็นเซอร์เสียง กับ STM32 ตามรูปด้านล่าง

เซ็นเซอร์เสียง กับ STM32F407VET6


*** ขั้นตอนสำคัญ ***


ให้เอาไขควงหมุน ค่อยๆปรับค่าการรับสัญญาณเสียง โดยให้หมุนตัว R ปรับค่าได้ แบบ trimpot สีฟ้า

ปรับค่าการรับสัญญาณเสียง



ให้ไฟ LED สีเขียว ด้านซ้ายมือติดดวงเดียว เมื่อปรบมือให้ LED สีเขียวด้านขวามือ กระพริบ ตาม การปรบมือของเรา

LED สีเขียวด้านขวามือ กระพริบ ตาม การปรบมือ



สังเกตที่ STM32F407VET6 ตำแหน่ง D2 ติด/ดับ เมื่อปรบมือ 2 ครั้ง และ ตำแหน่ง D3 ติด/ดับ เมื่อปรบมือ 3 ครั้ง

ตำแหน่ง D2 ติด/ดับ เมื่อปรบมือ 2 ครั้ง และ ตำแหน่ง D3 ติด/ดับ เมื่อปรบมือ 3 ครั้ง



4 : เชื่อมต่อ แหล่งจ่ายไฟ ให้กับ STM32

เพื่อให้ STM32 ทำงานได้โดยไม่ต้อง ต่อสายใช้แหล่งจ่ายไฟ จากคอมพิวเตอร์ แต่เนืองจาก STM32 ต้องการแหล่งจ่ายไฟ 5V ดังนั้นต้องลดแรงดันไฟ 12V จากรางถ่านให้เหลือ 5V ด้วยการเชื่อมต่อสายจากรางถ่าน ไปยัง DC 5V Step-down และ DC 5V Step-down ไปยัง STM32 ด้วยสาย USB ตามรูปด้านล่าง

เชื่อมต่อ แหล่งจ่ายไฟ ให้กับ STM32


ทดสอบการทำงานด้วยการปรบมือ โดย ตำแหน่ง D2 ติด/ดับ เมื่อปรบมือ 1 ครั้ง และ ตำแหน่ง D3 ติด/ดับ เมื่อปรบมือ 2 ครั้ง แสดงว่าโปรเจคเราพร้อมที่จะทำงานในขั้นตอนต่อไปแล้ว



5 : เชื่อมต่อและทดสอบ Relay 2 Channel


เชื่อมต่อและทดสอบ รีเลย์ 2 ช่อง กับ STM32 เพื่อควบคุมการเปิด/ปิด ไฟ LED 12 โวลต์ หรืออุปกรณ์ไฟฟ้าอื่นๆ ตามรูปด้านล่าง

STM32 เชื่อมต่อและทดสอบ Relay 2 Channel
เชื่อมต่อและทดสอบ Relay 2 Channel



ทดสอบการทำงาน เมื่อปรบมือ 2 ครั้ง และ ตำแหน่ง LED สีแดง ด้านบน ติด/ดับ

เมื่อปรบมือ 2 ครั้ง และ ตำแหน่ง LED สีแดง ด้านบน ติด/ดับ



ทดสอบการทำงาน เมื่อปรบมือ 3 ครั้ง และ ตำแหน่ง LED สีแดงด้านล่าง ติด/ดับ

เมื่อปรบมือ 3 ครั้ง และ ตำแหน่ง LED สีแดงด้านล่าง ติด/ดับ



6 : เชื่อมต่อหลอดไฟ LED 12 โวลต์ กับ Relay 2 Channel


เชื่อมต่อหลอดไฟ LED 12 โวลต์ กับ Relay 2 Channel

เชื่อมต่อหลอดไฟ LED 12 โวลต์ กับ Relay 2 Channel


ทดสอบผลลัพธ์การทำงาน ได้ตามคลิปวิดีโอด้านบนสุด แสดงว่าโปรเจค STM32 เปิดปิดไฟด้วยเสียง สำเร็จแล้ว


7 : อุปกรณ์ที่ใช้