電子警笛(ブレッドボード)
ここではarduinoを用いた簡易の電子警笛鳴動器について書いていきます。
右の動画はその警笛の音を出した時の様子になります。
プログラムコードはまだ拙い製作当時のものなのでもっとスリムにできるはずです。各自でチャレンジしてみてください。
用意するもの
・Arduino UNO x1 ※arduinoに搭載されたマイコンATMega328の機能を利用しているためarduino UNO以外のarduinoでは動かないものもあります。
・ジャンパワイヤ
・圧電スピーカー ↓のようなスピーカー
圧電スピーカー(圧電サウンダ)(22mm)PKM22EPPH2001-B0: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)
・ブレットボード
動作のための回路
電源はardouinoのUSBポートからとるのでardouinoをPCやモバイルバッテリーなどのUSB電源に接続。ardouinoの2番ピンのジャンパワイヤをGNDにつなぐと音が鳴ります。

動作プログラム
下記のコードをardouino IDEに書き込んでください。
#include<avr/io.h>
#include<math.h>
float duty,duty1;
float val;
int frq,frq1;
void setup() {
val=0;
pinMode(2,INPUT_PULLUP);
pinMode(3,OUTPUT);
pinMode(10,OUTPUT);
TCCR2A = 0b00100001;
TCCR2B = 0b00001110;
TCCR1A = 0b01100001;
TCCR1B = 0b00010010;
}
void loop() {
while(digitalRead(2)==LOW){
if(val<=900){
val=val+0.15;
}
if(val>900){
val=900;
}
duty=(float)val/1024;
frq1=397; //周波数(数値の変更で音色が変化)
frq=327; //周波数(数値の変更で音色が変化)
//397Hzと327Hzの和音で警笛音を生成
OCR2A = (unsigned int)(8000000 /256/ frq1);
OCR2B = OCR2A*duty;
OCR1A = (unsigned int)(1000000 / frq);
OCR1B = (unsigned int)(1000000 / frq * duty);
}
while(digitalRead(2)==HIGH){
if(val>=0){
val=val-0.05;
}
if(val<0){
val=0;
}
duty=(float)val/1024;
frq1=397;
frq=327;
OCR2A = (unsigned int)(8000000 /256/ frq1);
OCR2B = OCR2A*duty;
OCR1A = (unsigned int)(1000000 / frq);
OCR1B = (unsigned int)(1000000 / frq*duty);
}
}



