26/11/62

มินิโปรเจค Arduino เปิดปิดไฟ 220V และ หรี่ไฟบ้านด้วยเสียง

มินิโปรเจค Arduino เปิดปิดไฟ 220V และ หรี่ไฟบ้านด้วยเสียง





เป้าหมายและหลักการทำงานของโปรเจค





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


1. เสียงปรบมือ 1 ครั้ง ให้หลอดไฟติด 
100 % แต่ถ้าหลอดไฟติดอยู่ให้ดับ
2. เสียงปรบมือ 2 ครั้ง ให้หรี่ไฟหรือความสว่างลดลงเหลือ 60 %
3. เสียงปรบมือ 3 ครั้ง ให้หรี่ไฟหรือความสว่างลดลงลงเหลือ 30 %



อุปกรณ์ที่ใช้ในโปรเจค



2. Sensor Shield V 5.0

3.  Voice Sound Detection Sensor Module

4. Jumper (F2F) 20cm Female to Female

5. 1 Channel AC Light Lamp Dimmer Module




อุปกรณ์ไฟฟ้าอื่นๆ เช่น หลอดไฟ , ปลั๊กไฟ , ขั้วหลอดไฟ , สายไฟ หาซื้อได้ตามร้านขายอุปกรณ์ไฟฟ้าทั่วๆไป

*** การใช้งานแบบไม่ต้องการเชื่อมต่อสาย USB กับ คอมพิวเตอร์ ให้ใช้ Adapter DC 9V 1A Power Supply เป็นแหล่งจ่ายไฟ เสียบเข้ากับ DC Power Jack ของ  บอร์ด Arduino ***


(เพื่อความปลอดภัย : ผู้ทำโปรเจค ควรมี ความรู้ด้านไฟฟ้าเป็นอย่างดี)



ขั้นตอนการทำโปรเจค




1.  ทดสอบการทำงาน Dimmer Module


ประกอบ Sensor Shield เข้ากับ Arduino UNO





ประกอบ Sensor Shield V 5.0




เชื่อมต่อ Sensor Shield กับ Dimmer Module





เชื่อมต่อ Dimmer Module กับ  อุปกรณ์ไฟฟ้าอื่นๆ


( หลอดไฟควรมีคุณสมบัติหรีไฟได้ เช่น หลอดไส้ร้อนแบบธรรมดา 60 - 100 วัตต์ )






ติดตั้งไลบรารี RBDdimmer โดยดาวน์โหลดไลบรารี RBDdimmer ตามลิงค์ด้านล่าง


https://github.com/RobotDynOfficial/RBDDimmer



ไปที่ Clone or download -> Download ZIP






เปิดโปรแกรม Arduino IDE


ไปที่ Skecth -> Include Library -> Add .ZIP Library...




ไปที่ ไลบรารี RBDDimmer-master.zip ที่เรา ดาวน์โหลด มา -> Open




ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี RBDdimmer  เพิ่มเข้ามาใน Arduino IDE ของเรา




เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino






เปิดโปรแกรม Arduino IDE เขียนโค้ดดังนี้



#include <RBDdimmer.h>

dimmerLamp dimmer4(4); //initialase port for dimmer: name(PinNumber);


void setup() {

  Serial.begin(9600);

  dimmer4.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE) 

  Serial.println("--- Simple dimmer example ---");

  dimmer4.setState(ON); // setState(ON/OFF);

}

void loop() {

  // put your main code here, to run repeatedly:

  dimmer4.setPower(90); // setPower(0-100%);

  delay(5000);

  dimmer4.setPower(60); // setPower(0-100%);

  delay(5000);

}



ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO





ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง  ให้เลือกตัวอื่นที่ไม่ใช่ COM1)

ในตัวอย่างเลือกเป็น "COM8"

(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)





(ถ้าไม่พบให้ทำการติดตั้งไดร์เวอร์ก่อน) 

การติดตั้งโปรแกรม Arduino (IDE) และ การติดตั้งไดร์เวอร์



กดปุ่ม 
 เพื่ออัพโหลด






หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง





เสียบปลั๊กไฟ 220V AC หลอดไฟจะสว่าง 90%




และ 30% สลับไปมา






แสดงว่า การเชื่อมต่อ 
Dimmer Module ของเรานั้นถูกต้อง และ พร้อมใช้งานแล้ว



2.  ทดสอบเซ็นเซอร์เสียง Sound Detection Sensor


เชื่อมต่อ Sensor Shield กับ Sound Detection Sensor






เปิดโปรแกรม Arduino IDE อัพโหลดโค้ดดังนี้



int sound_sensor = 5;

int clap = 0;
long detection_range_start = 0;
long detection_range = 0;


void setup() {
  Serial.begin(9600);
  pinMode(sound_sensor, INPUT);
}

void loop() {
  int status_sensor = digitalRead(sound_sensor);
  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++;
    }
   
  }



ทดสอบการทำงาน

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




ให้ไฟ LED สีเขียว ด้านซ้ายมือติดดวงเดียว





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




เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor

มุมขวาล่าง ของ Serial Monitor เลือกเป็น 9600 baud  คือ ตั้งค่าความเร็วในการรับ-ส่งข้อมูล  คือ 9600 ตามที่เราเขียนโค้ดไว้

ทดสอบให้ได้ผลลัพธ์ดังนี้

1. เสียงปรบมือ 1 ครั้ง ให้  Serial Monitor แสดง clap = 1
2. เสียงปรบมือ 2 ครั้ง ให้  Serial Monitor แสดง clap = 2
3. เสียงปรบมือ 3 ครั้ง ให้  Serial Monitor แสดง clap = 3



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


3.  ทดสอบ โปรเจค เปิดปิดไฟ 220V และ หรี่ไฟบ้านด้วยเสียง




เปิดโปรแกรม Arduino IDE อัพโหลดโค้ดดังนี้



#include <RBDdimmer.h>

dimmerLamp dimmer4(4);

int sound_sensor = 5;

int clap = 0;
long detection_range_start = 0;
long detection_range = 0;
boolean status_lights = false;


void setup() {
  Serial.begin(9600);
  pinMode(sound_sensor, INPUT);
  dimmer4.begin(NORMAL_MODE, ON);
  dimmer4.setState(OFF);
}

void loop() {
  int status_sensor = digitalRead(sound_sensor);
  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 && clap == 1)
    {

      Serial.println("clap = 1 , Lamp = ON");
      dimmer4.setState(ON);
      dimmer4.setPower(100);
      status_lights = true;
    }

    else if (status_lights && clap == 1)
    {

      Serial.println("clap = 1 , Lamp = OFF");
      dimmer4.setState(OFF);
      status_lights = false;
    }

    else if (status_lights && clap == 2)
    {
      Serial.println("clap = 2 , Lamp = 90%");
      dimmer4.setPower(90);
    }

    else if (status_lights && clap == 3)
    {
      Serial.println("clap = 3 , Lamp = 60%");
      dimmer4.setPower(60);
    }
    clap = 0;

  }

}



จะได้ผลลัพธ์ตามคลิปด้านบน

25/10/62

อ่านค่าสี เล่นไฟล์เสียงจาก SD Card ออกลำโพง

มินิโปรเจค Arduino อ่านค่าสี เล่นไฟล์เสียงจาก SD Card ออกลำโพง




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

อุปกรณ์ที่ใช้ในโปรเจค



2. เซ็นเซอร์สี TCS34725 RGB Color Sensor

3. Breadboard 8.5CM x 5.5CM 400 holes

4. Jumper (M2M) 30cm Male to Male


5. Micro SD Card Class 10 16GB + Card Adapter

6. Micro SD Card Mini TF Card Reader Module



8. Loud Speakers 8 Ohm 5 Watt

9. รางถ่าน AA 8 ก้อน 12 โวลต์



.

ขั้นตอนการทำโปรเจค


1. ทดสอบการทำงาน เซ็นเซอร์สี TCS34725






1.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ เซ็นเซอร์สี TCS34725






1.2 ติดตั้ง ไลบรารี สำหรับ เซ็นเซอร์สี TCS34725


ดาวน์โหลด ไลบรารี




ไปที่ Clone or download -> Download ZIP



เปิดโปรแกรม Arduino IDE ไปที่ Skecth -> Include Library -> Add .ZIP Library...



ไปที่ ไลบรารี Adafruit_TCS34725-master.zip ที่เรา ดาวน์โหลด มา -> Open




ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี Adafruit TCS34725 เพิ่มเข้ามาใน Arduino IDE ของเรา






1.3 อัพโหลดโค้ด




เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino แล้ว เปิดโปรแกรม Arduino IDE เขียนโค้ดดังนี้




#include "Wire.h"
#include "Adafruit_TCS34725.h"


Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);

void setup() {


  Serial.begin(9600);
  Serial.println("RobotSiam.com -  Color Sensor");


  if (tcs.begin()) {

    Serial.println("Found sensor");
  } else {

    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  delay(1000);

}


void loop() {

  uint16_t clearcol, red, green, blue;
  float average, r, g, b;
  delay(100);
  tcs.getRawData(&red, &green, &blue, &clearcol);

  average = (red + green + blue) / 3;

  r = red / average;
  g = green / average;
  b = blue / average;

  Serial.print("\tClear:"); Serial.print(clearcol);
  Serial.print("\tRed:"); Serial.print(r);
  Serial.print("\tGreen:"); Serial.print(g);
  Serial.print("\tBlue:"); Serial.print(b);

  if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {
    Serial.print("\tRed");
  }
  else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) {
    Serial.print("\tGreen");
  }
  else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {
    Serial.print("\tBlue");
  }

  else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {
    Serial.print("\tYellow");
  }
  else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) {
    Serial.print("\tOrange");
  }
  else {
    Serial.print("\tNot Recognized");
  }

  Serial.println("");
  delay(500);

}




ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO




ไปที่ Tools > Port: แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง  ให้เลือกตัวอื่นที่ไม่ใช่ COM1)

ในตัวอย่างเลือกเป็น "COM6"

(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)





กดปุ่ม  เพื่ออัพโหลด





หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง




1.4 ทดสอบการทํางาน

เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor




มุมขวาล่าง ของ Serial Monitor เลือกเป็น 9600 baud  คือ ตั้งค่าความเร็วในการรับ-ส่งข้อมูล  คือ 9600 ตามที่เราเขียนโค้ดไว้

ในกรณีที่ไม่ปกติ เช่น เช่นต่อสายไม่ถูก , เซ็นเซอร์สี TCS34725 ไม่ทำงาน จะแสดงข้อความ No TCS34725 found ... check your connections




ในกรณีที่ปกติ - นําวัตถุที่มีสีต่างๆมาทดสอบ ที่หน้าเซ็นเซอร์สี TCS34725 จะแสดงสีของวัตถุนั้นๆ




ถึงขั้นตอนนี้แสดงว่า เซ็นเซอร์สี TCS34725 ของเรานั้นพร้อมทำงานแล้ว

credit : https://www.makerblog.at/2015/01/farben-erkennen-mit-dem-rgb-sensor-tcs34725-und-dem-arduino/




2. ก๊อบปี้ไฟล์เสียง ลงใน Micro SD Card


ติดตั้งโปรแกรม SD Card Formatter 5.0 ใช้สำหรับ Format Disk สามารถดาวน์โหลดได้จากลิงก์


https://www.sdcard.org/downloads/formatter_4/eula_windows/


จากนั้นให้คลิกปุ่ม Accept โปรแกรม SD Formatter โปรแกรมจึงจะดาวน์โหลดสู่ คอมพิวเตอร์ของเรา แล้วติดตั้งเหมือนกับโปรแกรมทั่วไป



Micro SD Card , Class 10 ความจุ 16GB + Card Adapter



ให้เสียบ Micro SD Card เข้าไปใน Card Adapter



Card Adapter ที่มี Micro SD Card อยู่ด้านใน





แล้วจึงเสียบ Card Adapter ที่บรรจุ Micro SD Card ใส่ในช่องซ็อกเก็ตของคอมพิวเตอร์ PC (ดันจนกระทั่งมีเสียงคลิก)






แล้วทำการ Format , Micro SD Card โดยใช้โปรแกรม  SD Card Formatter


ถ้าเสียบ Card Adapter ที่บรรจุ Micro SD Card ได้ถูกต้อง ที่ Select card จะมี ไดรฟ์ ให้เลือก ในตัวอย่างจะเป็น ไดรฟ์  F:/ เลือก Quick format  แล้ว คลิก Format



คลิก Yes





คลิก OK  ถึงขั้นตอนนี้การ Format SD Card ของเรานั้นเสร็จสมบูรณ์แล้ว ให้ปิดโปรแกรมลงไป



ดาวน์โหลดไฟล์เสียงตามลิงค์ด้านล่าง





คลายซิป แล้วก็อบปี้ ไปที่ SD Card 



ตรวจสอบ ที่ SD Card จะพบไฟล์เสียง ที่ก็อบปี้ มา



นำ SD Card ใส่ในช่องซ็อกเก็ตของ Card Reader Module






3. ทดสอบการเล่นไฟล์เสียงจาก SD Card ออกลำโพง



 3.1 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ Card Reader Module


Arduino UNO
SD Card Module
5V
VCC
GND
GND
Pin 12
MISO (Master In Slave out)
Pin 11
MOSI (Master Out Slave In)
Pin 13
SCK (Synchronous Clock)
Pin 4
CS (Chip Select)




3.2 เชื่อมต่อสาย ระหว่าง Arduino UNO กับ Audio Amplifier Module









3.3 ติดตั้ง ไลบรารี TMRpcm


ดาวน์โหลด ไลบรารี




ไปที่ Clone or download -> Download ZIP



เปิดโปรแกรม Arduino IDE ไปที่ Skecth -> Include Library -> Add .ZIP Library...



ไปที่ ไลบรารี TMRpcm-master.zip ที่เรา ดาวน์โหลด มา -> Open




ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี TMRpcm เพิ่มเข้ามาใน Arduino IDE ของเรา




3.4 อัพโหลดโค้ด


เขียนโค้ด และ อัพโหลดโค้ด ดังนี้



#include <SD.h>
#define SD_ChipSelectPin 4
#include <TMRpcm.h>
#include <SPI.h>

char x = '0';
TMRpcm music;

void setup() {

  music.speakerPin = 9;

  Serial.begin(9600);
  
  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD fail");
    return;
  }

}

void loop() {

  if (Serial.available()) {

    x = Serial.read();

    Serial.println(x);

    if (x == '1') {
      music.play("Blue.wav");
    }
    if (x == '2') {
      music.play("Green.wav");
    }
    if (x == '3') {
      music.play("Orange.wav");
    }
    if (x == '4') {
      music.play("Red.wav");
    }
    if (x == '5') {
      music.play("Yellow.wav");
    }

  }
}





3.4 ทดสอบการทํางาน


เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor





พิมพ์คำสั่ง 1 แล้วกด Send , โปรเจค จะเล่นไฟล์เสียง ชื่อ Blue.wav





พิมพ์คำสั่ง 2 แล้วกด Send , โปรเจค  จะเล่นไฟล์เสียง ชื่อ Green.wav
พิมพ์คำสั่ง 3 แล้วกด Send , โปรเจค  จะเล่นไฟล์เสียง ชื่อ Orange.wav
พิมพ์คำสั่ง 4 แล้วกด Send , 
โปรเจค  จะเล่นไฟล์เสียง ชื่อ Red.wav
พิมพ์คำสั่ง 5 แล้วกด Send , 
โปรเจค  จะเล่นไฟล์เสียง ชื่อ Yellow.wav


credit :  https://circuitdigest.com/microcontroller-projects/arduino-audio-music-player



4. อัพโหลดโค้ดโปรเจค






#include "Wire.h"
#include "Adafruit_TCS34725.h"
#include <SD.h>
#define SD_ChipSelectPin 4
#include <TMRpcm.h>
#include <SPI.h>


Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);

TMRpcm music;

void setup() {

  music.speakerPin = 9;

  Serial.begin(9600);

  Serial.println("RobotSiam.com -  Color Sensor");

  if (tcs.begin()) {

    Serial.println("Found sensor");
  } else {

    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  delay(1000);

  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD fail");
    return;
  }

}

void loop() {

  uint16_t clearcol, red, green, blue;
  float average, r, g, b;
  delay(100);
  tcs.getRawData(&red, &green, &blue, &clearcol);

  average = (red + green + blue) / 3;

  r = red / average;
  g = green / average;
  b = blue / average;

  Serial.print("\tClear:"); Serial.print(clearcol);
  Serial.print("\tRed:"); Serial.print(r);
  Serial.print("\tGreen:"); Serial.print(g);
  Serial.print("\tBlue:"); Serial.print(b);

  if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {
    Serial.print("\tRed");
    music.play("Red.wav");
  }
  else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) {
    Serial.print("\tGreen");
    music.play("Green.wav");
  }
  else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {
    Serial.print("\tBlue");
    music.play("Blue.wav");
  }

  else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {
    Serial.print("\tYellow");
    music.play("Yellow.wav");
  }
  else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) {
    Serial.print("\tOrange");
    music.play("Orange.wav");
  }
  else {
    Serial.print("\tNot Recognized");
  }

  Serial.println("");
  delay(500);

}