SOGO論壇
標題:
piezo buzzer 壓電式蜂鳴器 當作 shock sensor
[列印本頁]
作者:
if8051
時間:
2013-10-14 18:17:12
標題:
piezo buzzer 壓電式蜂鳴器 當作 shock sensor
piezo buzzer 一般的用途是發出聲音,利用壓電陶瓷的壓電效應,加上正負電壓於
陶瓷片,會產生收縮或伸張,在共振箱內帶動膜片來發出聲音 。
但是我設計了一款 靶機感應系統,逆向思考!反過來當成 shock sensor 使用;微
弱的震波信號經過 OPA 放大,進入 MCU 的 10 bit ADC 演算,訊息顯示在 1602
LCD module 上 。
2 個 shock sensor 感應 大靶機(累加 1 分)和 小靶機(累加 2 分)
1 個 piezo buzzer 發出警告聲音
電路圖如下:
2013-10-14 18:12:23 上傳
下載附件
(130.53 KB)
關鍵點程式如下:
#asm("sei") // Global enable interrupt 啟動總中斷
while(adc2 >= time) // SV 大等於 PV,繼續執行此迴圈
{
adc0=read_adc(0); // 從 PA0(ADC0) 讀入大靶機感應器的信號,平時 24
if(adc0>60) // 如果大靶機感應器的信號大於 60,此程式第一重點 ****
count++; // 則計分器加 1 得分
sum=0; // sum 歸零
for(j=0;j<64;j++) // 執行 64 次,目的:取得穩定的壓電式蜂鳴器之震波信號
{
adc1=read_adc(1); // 從 PA1(ADC1) 讀入小靶機感應器的信號,平時 450
sum+=adc1; // sum = sum + adc1 加總
}
sum/=64; // sum = sum /64 ,加總 64 次,後再取平均值
if(sum>630) // 如果小靶機感應器的信號大於 630,此程式第二重點 ***
count+=2; // 則計分器加 2 得分
lcd_clear(); // 清屏 LCD,顯示座標設定在 0 行 0 列
sprintf(buffer," SCORE:%4u\nSV:%4u PV:%4u",count,adc2,time);
lcd_puts(buffer); // LCD module 顯示 buffer 字串
delay_ms(70); // delay 70mS,此程式第三重點 ***********************
}
PORTB.2=1; // 紅 LED 熄滅
i=count=time=0; // 得分及計時器歸零
#asm("cli") // Global disable interrupt 關閉總中斷
複製代碼
附件:
ATmega8535.jpg
(2013-10-14 18:12:23, 130.53 KB) / 下載次數 7
https://oursogo.com/forum.php?mod=attachment&aid=NjgyMjkxM3xlMDYzNzdjNHwxNzE1OTkxNzQ0fDB8MA%3D%3D
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM