18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 18luck平台 >> 嵌入式係統 >> PIC單片機 >> 正文

使用PIC單片機製的簡單拍手開關

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2022-05-06

  拍手開關(guan) 對於(yu) 初學者來說是一個(ge) 很有趣的單片機方案。它以拍手的聲音打開和關(guan) 閉電器。在本文中,單片機開發工程師們(men) 將使用PIC單片機製作一個(ge) 簡單的拍手開關(guan) ,當它連續檢測到兩(liang) 個(ge) 拍手聲音時,該開關(guan) 便會(hui) 運行。在這個(ge) 方案中,使用駐極體(ti) 麥克風作為(wei) 換能器,將拍手聲轉換為(wei) 電信號。麥克風的輸出由晶體(ti) 管放大,然後發送到PIC12F683單片機,當檢測到有效拍手時,PIC12F683單片機執行ON/OFF切換動作。

  聲控拍手開關(guan) 的原理

  拍手開關(guan) 的輸入端需要一個(ge) 換能器,以將拍手的聲音振動轉換為(wei) 電能。為(wei) 此使用駐極體(ti) 麥克風或簡單的麥克風(OBO-04FN-0B)。麥克風的輸出中的聲音信號電流很低,因此我們(men) 需要一個(ge) 放大器電路來增強檢測到的聲音信號。以下電路圖顯示了麥克風和單個(ge) 晶體(ti) 管放大器。當沒有聲音時,飽和的晶體(ti) 管的集電極電壓(Vout)約為(wei) 0.2V。當麥克風檢測到拍手聲時,其兩(liang) 端的電壓突然下降。由於(yu) 電容麥克風的輸出電壓通過電容器C1耦合到晶體(ti) 管的基極,因此基極-發射極電壓也降低了,因此基極-發射極結點的正向偏置較少。拍手時,可以看到峰值電壓可以高達4.0V,具體(ti) 取決(jue) 於(yu) 拍手的響度。

  使用PIC單片機製的簡單拍手開關(guan)

  使用PIC單片機製的簡單拍手開關(guan)

  我們(men) 將集電極輸出電壓(Vout)與(yu) 內(nei) 部產(chan) 生的參考電壓進行比較。參考電壓在內(nei) 部連接到比較器模塊的正輸入(CIN +),而傳(chuan) 感器的輸出電壓則饋送到比較器的負輸入(CIN-)。CIN-引腳與(yu) PIC12F683的GP1 I/O引腳複用。參考電壓的大小可通過VRCON寄存器進行編程和控製。我們(men) 將參考電壓設置為(wei) 0.625V(假設電源電壓為(wei) 5.0V)。因此,在正常情況下,參考電壓(0.625V)大於(yu) Vout(= 0.2V),比較器輸出(COUT)為(wei) 高。COUT可通過GP2 I/O引腳在內(nei) 部和外部進行訪問。當有拍手聲時,COUT會(hui) 變低。通過將CMCON0寄存器中的比較器輸出反相(CIN)位置1,可以將比較器輸出邏輯反相。可以對PIC12F683單片機進行編程,以根據比較器輸出采取開關(guan) 動作。

  聲控拍手開關(guan) 電路原理圖

  這個(ge) 簡單的拍擊開關(guan) 方案的完整電路圖如下所示。內(nei) 部比較器模塊的正和負輸入分別可通過GP0/CIN +和GP1/CIN-引腳從(cong) 外部訪問。由於(yu) 正輸入連接到內(nei) 部基準電壓源,因此GP1引腳可用作I/O引腳。傳(chuan) 感器放大器的輸出將到達GP0/CIN +引腳。LED連接到GP5引腳以指示單片機的開關(guan) 動作。當單片機連續檢測到兩(liang) 個(ge) 拍手聲時,它將在GP5引腳上切換邏輯輸出。LED在這裏用於(yu) 說明目的,如果您想用它來控製電器,可以用機電繼電器代替。

  使用PIC單片機製的簡單拍手開關(guan)

  聲控拍手開關(guan) 程序

  該程序用C語言開發,並使用MikroC Pro進行PIC編譯器編譯。程序以1.5秒的間隔連續尋找兩(liang) 個(ge) 拍手聲。如果發生這種情況,則將GP5引腳切換。當檢測到拍手時,TImer1模塊將打開以保持時間記錄。 1.5秒後,它將生成一個(ge) 超時信號。如果在此之前沒有第二個(ge) 拍手,則單片機將忽略第一個(ge) 拍手,並返回到主程序。

  sbit Output_LED at GP5_bit;

  unsigned short i, TIME_UP;

  void interrupt(void){

  if(PIR1.TMR1IF) {

  i ++;

  if(i == 3) TIME_UP = 1; // TIme Up in 1.5 sec

  PIR1.TMR1IF = 0;

  }

  }

  void main() {

  TRISIO = 0b00000011 ;

  ANSEL = 0x00;

  INTCON = 0b11000000 ; // Enable GIE and PEIE for Timer1 overflow interrpt

  PIE1 = 0b00000001 ; // Enable TMR1IE

  // Configure Comparator module

  // CIN- pin is configured as analog,

  // CIN+ pin is configured as I/O,

  // COUT pin is configured as I/O,

  // Comparator output available internally,

  // CVREF is non-inverting input

  // CINV is set to 1

  CMCON0 = 0b00010100;

  VRCON = 0b10100011; // Vref is set to VDD/8

  Output_LED = 0;

  do{

  TMR1H = 0x00;

  TMR1L = 0x00;

  TIME_UP = 0;

  i = 0;

  T1CON = 0b00110000; // Configure Timer 1

  if(CMCON0.COUT){ // First clap detected

  Delay_ms(100);

  T1CON.TMR1ON = 1; // Start Timer1

  while(!CMCON0.COUT && !TIME_UP); // Wait until second clap is

  T1CON.TMR1ON = 0; // detected or Timer1 overflows

  if(CMCON0.COUT && !TIME_UP) Output_LED = ~Output_LED;

  Delay_ms(100);

  }

  } while(1);

  }

Tags:PIC單片機,拍手開關  
責任編輯:admin
  • 上一篇文章:
  • 下一篇文章: 沒有了
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網友評論
    關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁麵
    下到頁底
    晶體管查詢