SOGO論壇
  登入   註冊   找回密碼
查看: 1350|回覆: 1
列印 上一主題 下一主題

[技術文章] piezo buzzer 壓電式蜂鳴器 當作 shock sensor [複製連結]

Rank: 4

數位軟體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2013-10-14 18:17:12 |只看該作者 |倒序瀏覽
piezo buzzer 一般的用途是發出聲音,利用壓電陶瓷的壓電效應,加上正負電壓於
陶瓷片,會產生收縮或伸張,在共振箱內帶動膜片來發出聲音 。

但是我設計了一款 靶機感應系統,逆向思考!反過來當成 shock sensor 使用;微
弱的震波信號經過 OPA 放大,進入 MCU  的 10 bit ADC 演算,訊息顯示在 1602
LCD module 上 。

2 個 shock sensor 感應 大靶機(累加 1 分)和 小靶機(累加 2 分)

1 個 piezo buzzer 發出警告聲音

電路圖如下:


關鍵點程式如下:
  1.         #asm("sei")                         // Global enable interrupt 啟動總中斷

  2.         while(adc2 >= time)                 // SV 大等於 PV,繼續執行此迴圈                              
  3.         {  
  4.             adc0=read_adc(0);               // 從 PA0(ADC0) 讀入大靶機感應器的信號,平時 24  
  5.             if(adc0>60)                     // 如果大靶機感應器的信號大於 60,此程式第一重點 ****
  6.                 count++;                    // 則計分器加 1 得分  
  7.                  
  8.             sum=0;                          // sum 歸零
  9.             for(j=0;j<64;j++)               // 執行 64 次,目的:取得穩定的壓電式蜂鳴器之震波信號
  10.             {
  11.                 adc1=read_adc(1);           // 從 PA1(ADC1) 讀入小靶機感應器的信號,平時 450  
  12.                 sum+=adc1;                  // sum = sum + adc1 加總
  13.             }
  14.             sum/=64;                        // sum = sum /64 ,加總 64 次,後再取平均值      
  15.             if(sum>630)                     // 如果小靶機感應器的信號大於 630,此程式第二重點 ***
  16.                 count+=2;                   // 則計分器加 2 得分                  
  17.                           
  18.             lcd_clear();                    // 清屏 LCD,顯示座標設定在 0 行 0 列  
  19.             sprintf(buffer,"   SCORE:%4u\nSV:%4u  PV:%4u",count,adc2,time);
  20.             lcd_puts(buffer);               // LCD module 顯示 buffer 字串  
  21.             
  22.             delay_ms(70);                   // delay 70mS,此程式第三重點 ***********************
  23.         }
  24.         PORTB.2=1;                          // 紅 LED 熄滅  
  25.         i=count=time=0;                     // 得分及計時器歸零
  26.         
  27.         #asm("cli")                         // Global disable interrupt 關閉總中斷  
複製代碼
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-4 00:57

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部