遠程控制澆花系統--繼電器模塊

             其實這個模塊週三就弄好了,但是一直想等買了mini水泵然後演示下的,至少拍個視頻或者照片那啥的貼出來。不過都很忙一直,所以就沒管了,週末病了,不想去實驗室,就把原理這邊的說說吧,以後拍了圖片再貼進來吧!

       首先說說控制電路這一塊吧。其實繼電器的控制電路,你百度一下,網上有一堆可以選擇的,仔細看看也都大同小異。嗯,主要是按你是想單電源還是多電源,單電源的話要有隔離效果就要多設計下電路,多用一個三極管,或者直接用光電耦合來隔離控制信號和傳輸信號。不過如果你是多電源就沒這個問題,給控制信號一個電源,給傳輸信號一個電源,他們沒有物理鏈接,很好的隔離了。我畫的這個圖就是雙電源,控制信號是5v的電源(我用我開發板上的輸出5v),傳輸信號用的是12v(暫定的,如果電機買的是其他的電壓的,就換個),因爲小電機的功率和效率問題,所以給了12v。這裏我加了一個指示燈,是用來提示繼電器工作狀況的,其實也就是I/O口的輸出情況,方便修改程序和了解工作情況。

     這是我畫的控制模塊的電路圖,和網上給的沒什麼差別,其實呢,實際做起來,你還是要測試的,就是具體的參數。這個控制模塊不是我焊的,因爲我發現師兄有留下好東西啊,直接把他的(有點醜但是能用)拿過來用,不過測試他的板子花了我不少時間。他的是焊了兩個繼電器,其實效果都一樣的。電路設計不拘一格。  

        上次講到串口程序測試成功了,不過是用LED燈的顯示代替澆花控制。這裏我修改了程序,讓它能直接對繼電器操作,由繼電器控制水泵,實現澆花真實過程。

        其實實現這個也很簡單,就是把對LED的I/O控制換掉,我用的是對開發板上的無線模塊的I/O口的控制,也就是PC4和PC5,之所以用兩個I/O是因爲我說了,我用的師兄焊好的板子,他用了兩個繼電器做好的控制電路,我不想焊,直接就拿來用,所以就用兩個I/O口來控制,原理還是上面那個圖。

       繼電器控制程序單獨寫成一個文件。

#include "stm32f10x.h"
#include "jdq.h"
#include "sys.h"

//初始化PC4和PC5爲輸出口.並使能這兩個口的時鐘		    
//JDQ IO初始化

void JDQ_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	 //使能PC端口時鐘
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 //JDQ1-->PC.4 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推輓輸出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOC, &GPIO_InitStructure);
 GPIO_SetBits(GPIOC,GPIO_Pin_4);						 //PC.4 輸出高


 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);   //使能PC端口時鐘

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //JDQ2-->PC.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推輓輸出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
 GPIO_Init(GPIOC, &GPIO_InitStructure);	
 GPIO_SetBits(GPIOC,GPIO_Pin_5); 						 //PC.5 輸出高 
}

void zuobian(void)	 //左邊輸出電源Vin
{
	JDQ0=0;
	JDQ1=0;	
//	GPIO_ResetBits(GPIOC,GPIO_Pin_4);	
//	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
}

void youbian(void)	 //右邊輸出電源Vin
{
	JDQ0=0;
	JDQ1=1;
//	GPIO_ResetBits(GPIOC,GPIO_Pin_4);	
//	GPIO_SetBits(GPIOC,GPIO_Pin_5);	
}

void zantian(void)   //兩邊都不輸出
{
	JDQ0=1;
	JDQ1=1;
//	GPIO_SetBits(GPIOC,GPIO_Pin_4);	
//	GPIO_SetBits(GPIOC,GPIO_Pin_5);
}
	
          頭文件就不用說了,這個程序沒什麼難點,就是GPIO的操作控制,你可以直接把繼電器當成LED燈來思考,就so easy了。至於下面定義的幾個函數,是我根據師兄的板子自己寫的操作函數,可以看到我是在操作兩個繼電器,不同I/O輸出,繼電器的選擇不同,這是測試的結果,沒什麼可講的。如果你是自己按我畫的那個電路圖,完全不需要這些函數,直接操作I/O就搞定,更簡單。這就告訴我們哈,懶人就要從別的方面彌補,硬件用的是別人的,軟件就要多下點功夫纔行。

        把這個替換掉LED燈的操作也很簡單。

	if(j==0)
				{
		//			printf("1");
		//			LED0=0;
		//			delay_ms(1000);
		//			LED0=1;
					
						youbian();   //右邊輸出電源電壓
						delays(60);	 //延時60秒,澆水60s
						zuobian();	 //兩邊都不輸出電源電壓
						delays(5);	 //延時5秒

				}
         這裏我做了修改的部分是延時。因爲測試結果發現,用原來的延時函數delay_ms(),沒辦法延時1分鐘,我在網上發現大家給的都是短暫延時,就是ms級別的,最多的也不超過3s,這個都是可以用這個函數實現的;但是時間久了就不行,至於原因我還在找。所以我重寫了延時函數,自己定義了一個delays()函數,直接秒延時,我測試了,可以延時1分鐘,你要是問我爲嘛要延時這麼久,你想啊,澆花難道就澆幾秒?of course not!我假定它要澆1分鐘,具體還要看電機的效率,如果電機很給力,抽水能力強,一下子就完成工作,那就減少延時時間,就是據如此類的工作,不斷完善就行了。

PS:無線通信這個模塊嘛,估計要等等再做了,因爲做光立方的元件到了,答應送人的,一定要做好啊,對自己焊工很着急啊。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章