2017年8月31日 星期四

定時灑水器

由於曾經開發過紅外線沖水產品,因此此類的用水控制大同小異,也將經驗分享一下給大家!
定時灑水器電路設計及軟體設計都比較單純,大致上的架構如下為使用MCU控制H bridge來驅動脈衝電磁閥,其實這種電磁閥就是一個電磁鐵的裝置,用脈波控制水閥開啟或關閉,控制脈波大概幾十ms的方波就可以了,也可以搭配紅外線測距完成紅外線小便斗沖水器及紅外線水龍頭!

水用電磁閥圖片

控制電路 : 
動作原理如下,圖中負載為電磁閥開啟或關閉分別為不同方向的電流,簡單的控制方式為
Direction 1 : 
P1B = 0;
P1A = 1;
delay_ms(50); 
P1A = 0;

Direction 2:
P1A = 0;
P1B = 1;
delay_ms(50);
P1B = 0;

MCU可以隨便選擇一個Microchip pic16 8bit的MCU即可, Program memory 1k or 2k word, Data memory 128~256 bytes, 可以搭配Timer1 32.768k振盪器,做計時器的功能,宣告三個變數Hour / Minute / Second,每秒產生一次timer中斷,然後將利用定時器寫一個可以設定時間的時鐘,然後看要隔多久自動沖水灑水一次即可,定時器的精準度要靠軟體去撰寫,盡量少除頻,然後不要去更新Timer的數值,讓timer自動跑到溢位發生中斷,32.768kHz crystal也可以選擇精度較高的(20ppm或以下),另外需要使用七段顯示器或者TN/STN LCD來顯示時間,並預留按鍵調整時間!

Microchip台灣的論壇有相關的討論:http://www.microchip.com.tw/modules/newbb/viewtopic.php?topic_id=177

Timer程式虛擬碼:
volatile unsigned char Hour = 0, Minute = 0, Second = 0;
void interrupt ISR(void)
{
    if(TMR1IF && TMR1IE)
   {
        TMR1IF = 0;
        if(++Second == 60)
        {
             Second = 0;
             if(++Minute == 60)
             {
                  Minute = 0;
                  if(++Hour == 24)
                  {
                       Hour = 0;
                  }
              }
        } 
    }
}



二維陣列指標的表示方法