Sangtao24 giới thiệu đến các bạn một ý tưởng giúp cho chiếc đàn Guitar trở nên nổi bật hơn trong các buổi sinh hoạt tập thể hoặc giao lưu văn nghệ, bằng cách thêm vào trong chiếc đàn Guitar những chiếc đèn LED.
Bạn thực hiện theo các bước hướng dẫn sau đây:
Chuẩn bị:
1 x Arduino Uno (thiết bị lập trình logic)
1 x Adafruit Wave Shield
1 x Servo
6 x LDR
12 x 1k Resistors
6 x LED
và dây.
Bước 1: Mở hộp đàn
Bước 2: Gắn mạch Arduino vào đúng vị trí
Bạn tiến hành gắn hệ thống dây LDR vào kệ đầu trong hộp trong khi đó các đèn LED bạn gắn vào kệ bên dưới.
Bộ cảm biến siêu âm bạn đặt ở mặt trước, nơi mà mọi người có thể nhìn thấy đèn LED khi sử dụng.
Bạn có thể thiết lập tần số sóng cho âm thanh và lưu chúng lại ở định dạng WAV, rồi cài đặt lên thẻ nhớ Waveshield Memory.
Bước 3: Viết code điều khiển
#include < NewPing.h >
#include < SoftwareServo.h >
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include “WaveUtil.h”
#include “WaveHC.h”#define TRIGGER_PIN 7
#define ECHO_PIN 6
#define MAX_DISTANCE 500SdReader card;
FatVolume vol;
FatReader root;
FatReader f;WaveHC wave;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
SoftwareServo servo1;unsigned int pingSpeed = 50;
unsigned long pingTimer;byte buttons [] = { A0, A1, A2, A3, A4, A5};
#define NUMBUTTONS sizeof(buttons)
int freeRam(void)
{
extern int __bss_end;
extern int *__brkval;
int free_memory;
if((int)__brkval == 0) {
free_memory = ((int)&free_memory) – ((int)&__bss_end);
}
else {
free_memory = ((int)&free_memory) – ((int)__brkval);
}
return free_memory;
}void sdErrorCheck(void)
{
if (!card.errorCode()) return;
putstring(“\n\rSD I/O error: “);
Serial.print(card.errorCode(), HEX);
putstring(“, “);
Serial.println(card.errorData(), HEX);
while(1);
}void setup() {
Serial.begin(115200);servo1.attach(9);
if (!card.init(true)) {
if (!card.init()) {
putstring_nl(“Card init. failed!”);
sdErrorCheck();
while(1);
card.partialBlockRead(true);uint8_t part;
for (part = 0; part < 5; part++) {
if (vol.init(card, part))
break;
}
if (part == 5) {
sdErrorCheck();
while(1);
}putstring(“Using partition “);
Serial.print(part, DEC);
putstring(“, type is FAT”);
Serial.println(vol.fatType(),DEC);if (!root.openRoot(vol)) {
putstring_nl(“Can’t open root dir!”);while(1);
}}
}
}
void loop() {delay(100);
unsigned int uS = sonar.ping();
Serial.print(“Ping: “);
Serial.print(uS / US_ROUNDTRIP_CM);
Serial.println(“cm”);if ((uS / US_ROUNDTRIP_CM) < 50){
servo1.write(160);
SoftwareServo::refresh();
// myservo1.write(90);
}
else {
servo1.write(0);
SoftwareServo::refresh();
// myservo1.write(0);
}byte i;
static byte playing = -1;
int sensor0 = analogRead (buttons [0]);
int sensor1 = analogRead (buttons [1]);
int sensor2 = analogRead (buttons [2]);
int sensor3 = analogRead (buttons [3]);
int sensor4 = analogRead (buttons [4]);
int sensor5 = analogRead (buttons [5]);
if ( analogRead (buttons [0]) > 900) {
if (playing != 0) {
playing = 0;
playfile(“0.WAV”);
}}
// Serial.print(“LDR A1=”);
// Serial.print(sensor1);
if ( analogRead (buttons [1]) > 900) {
if (playing != 0) {
playing = 0;
playfile(“1.WAV”);
}}
// Serial.print(“LDR A2=”);
// Serial.print(sensor2);
if ( analogRead (buttons [2]) > 900) {
if (playing != 0) {
playing = 0;
playfile(“2.WAV”);
}}
// Serial.print(“LDR A3=”);
// Serial.print(sensor3);
if ( analogRead (buttons [3]) > 150) {
if (playing != 0) {
playing = 0;
playfile(“3.WAV”);
}}
// Serial.print(“LDR A4=”);
// Serial.print(sensor4);
if ( analogRead (buttons [4]) > 150) {
if (playing != 0) {
playing = 0;
playfile(“4.WAV”);
}}
// Serial.print(“LDR A5=”);
// Serial.println(sensor5);
if ( analogRead (buttons [5]) > 150) {
if (playing != 0) {
playing = 0;
playfile(“5.WAV”);
}}
if (! wave.isplaying) {
playing = -1;
}
}void playcomplete(char *name) {
playfile(name);
while (wave.isplaying) {}
}
void playfile(char *name) {
if (wave.isplaying) {
wave.stop();
}if (!f.open(root, name)) {
putstring(“Couldn’t open file “); Serial.print(name); return;
}if (!wave.create(f)) {
putstring_nl(“Not a valid WAV”); return;
}wave.play();
}
Bạn cần phải cài đặt thư viện Softwareservo Library lên thiết bị Arduino bởi vì tấm chắn sóng và Servo sử dụng tương tự như Timer của Arduino.
VIDEO MINH HỌA: