- 註冊時間
- 2012-3-16
- 最後登錄
- 2025-1-4
- 主題
- 查看
- 積分
- 173
- 閱讀權限
- 40
- 文章
- 223
- 相冊
- 0
- 日誌
- 0

狀態︰
離線
|
piezo buzzer 一般的用途是發出聲音,利用壓電陶瓷的壓電效應,加上正負電壓於
陶瓷片,會產生收縮或伸張,在共振箱內帶動膜片來發出聲音 。
但是我設計了一款 靶機感應系統,逆向思考!反過來當成 shock sensor 使用;微
弱的震波信號經過 OPA 放大,進入 MCU 的 10 bit ADC 演算,訊息顯示在 1602
LCD module 上 。
2 個 shock sensor 感應 大靶機(累加 1 分)和 小靶機(累加 2 分)
1 個 piezo buzzer 發出警告聲音
電路圖如下:
關鍵點程式如下:- #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 關閉總中斷
複製代碼 |
|