聚豐項目 > 面向低功耗無線傳感器的智能小車巡回無線充電系統(tǒng)

面向低功耗無線傳感器的智能小車巡回無線充電系統(tǒng)

物聯(lián)網(wǎng)依靠無線傳感器進行信息傳輸。無線傳感器需要電池供電。如果無線傳感器嵌入到物體內(nèi)部,導致電池更換代價高或者不方便。如果用無線充電來給嵌入式的無線傳感器進行能量供應,會為物聯(lián)網(wǎng)應用帶來極大的便利。因此,本設計考慮利用移動小車作為電源移動供應站,向嵌入到固定固體內(nèi)部的傳感器節(jié)點進行無線充電。本系統(tǒng)完成小車的自動循跡、自動定位需要充電的傳感器,并根據(jù)預設的電量需求進行自動智能充電。(本項目采用的是IDT 3W無線充電開發(fā)套件)

東北風_b0f 東北風_b0f

分享
3 喜歡這個項目
團隊介紹

東北風_b0f 東北風_b0f

團隊成員

東北風_b0f 隊長

此號已啟用

鯨落

千芷

分享
項目簡介
物聯(lián)網(wǎng)依靠無線傳感器進行信息傳輸。無線傳感器需要電池供電。如果無線傳感器嵌入到物體內(nèi)部,導致電池更換代價高或者不方便。如果用無線充電來給嵌入式的無線傳感器進行能量供應,會為物聯(lián)網(wǎng)應用帶來極大的便利。因此,本設計考慮利用移動小車作為電源移動供應站,向嵌入到固定固體內(nèi)部的傳感器節(jié)點進行無線充電。本系統(tǒng)完成小車的自動循跡、自動定位需要充電的傳感器,并根據(jù)預設的電量需求進行自動智能充電。(本項目采用的是IDT 3W無線充電開發(fā)套件)
硬件說明

由于沒有做出來室內(nèi)定位,所以尋址用藍牙遙控代替,沒電時發(fā)射信號也省略了。在墻上嵌入接收器,小車靠近為其充電。

小車具備前進、后退、左轉(zhuǎn)、右轉(zhuǎn)、原地旋轉(zhuǎn)360度無死角,而且具備慢、中、快三檔調(diào)節(jié),便于小車尋找到目標截屏_20171023_165751.png

stm32c8t6

藍牙hc06

電機驅(qū)動L298n

電池18650

IDT 3W無線充電開發(fā)套件 

軟件說明
PWM.c
 #include "PWM.h"
	
	
	
	void PWM_Init(void)
	{
		TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_TimeBaseStructure.TIM_Period=500-1;
	TIM_TimeBaseStructure.TIM_Prescaler=720-1;
	TIM_TimeBaseStructure.TIM_ClockDivision=0;
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=100;//指定將要加載到捕獲比較寄存器的脈沖值,當計數(shù)器計數(shù)到這個值時,電平發(fā)生跳變
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//設置輸出比較極性,當定時器計數(shù)值小于CCR1_Val時為高點平
	TIM_OC1Init(TIM3,&TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=100;
	TIM_OC2Init(TIM3,&TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=100;
	TIM_OC3Init(TIM3,&TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=100;
	TIM_OC4Init(TIM3,&TIM_OCInitStructure);
  TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
	TIM_ARRPreloadConfig(TIM3,ENABLE);
	
	TIM_Cmd(TIM3,ENABLE);
	}	
Motor.h
/*
電池端
ENA---PB0            IN1---PC4      IN2---PC5
ENN---PB1            IN3---PC6      IN4---PC7
車尾端
ENA---PA7            IN1---PC8      IN2---PC9
ENB---PB6            IN3---PC10     IN4---PC11
*/
#include "Motor.h"
u8 temp;
void GPIO_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//電機驅(qū)動IN
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//電機驅(qū)動EN
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//電機驅(qū)動EN
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
}

void Motor_Forward(void)
{
	           GPIO_SetBits(GPIOC,GPIO_Pin_4);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	           GPIO_SetBits(GPIOC,GPIO_Pin_7);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_6);
	           GPIO_SetBits(GPIOC,GPIO_Pin_9);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	           GPIO_SetBits(GPIOC,GPIO_Pin_10);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_11);
	           temp=1;
}
void Motor_Back(void)
{
	           GPIO_SetBits(GPIOC,GPIO_Pin_5);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	           GPIO_SetBits(GPIOC,GPIO_Pin_6);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
	           GPIO_SetBits(GPIOC,GPIO_Pin_8);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_9);
	           GPIO_SetBits(GPIOC,GPIO_Pin_11);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_10);
	           temp=2;
}
void Motor_Right(void)
{
          	 GPIO_SetBits(GPIOC,GPIO_Pin_4);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	           GPIO_SetBits(GPIOC,GPIO_Pin_6);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
	           GPIO_SetBits(GPIOC,GPIO_Pin_8);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_9);
	           GPIO_SetBits(GPIOC,GPIO_Pin_10);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_11);
	           temp=3;
}
void Motor_Left(void)
{
	         	 GPIO_SetBits(GPIOC,GPIO_Pin_5);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	           GPIO_SetBits(GPIOC,GPIO_Pin_7);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_6);
	           GPIO_SetBits(GPIOC,GPIO_Pin_9);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	           GPIO_SetBits(GPIOC,GPIO_Pin_11);
		         GPIO_ResetBits(GPIOC,GPIO_Pin_10);
	           temp=4;
}
void Motor_Park(void)
{
          	GPIO_SetBits(GPIOC,GPIO_Pin_4);
		        GPIO_SetBits(GPIOC,GPIO_Pin_5);
	        	GPIO_SetBits(GPIOC,GPIO_Pin_6);
		        GPIO_SetBits(GPIOC,GPIO_Pin_7);
	          GPIO_SetBits(GPIOC,GPIO_Pin_8);
		        GPIO_SetBits(GPIOC,GPIO_Pin_9);
	        	GPIO_SetBits(GPIOC,GPIO_Pin_10);
		        GPIO_SetBits(GPIOC,GPIO_Pin_11);
	          temp=0;
}
Usart.c
#include "Usart.h"
void USART1_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	SystemInit();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	USART_InitStructure.USART_BaudRate=9600;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_InitStructure.USART_Parity=USART_Parity_No;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;
	USART_Init(USART1,&USART_InitStructure);
	
	USART_Cmd(USART1,ENABLE);
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	
	NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
	NVIC_Init(&NVIC_InitStructure);
	
}
中斷函數(shù)
void USART1_IRQHandler(void)//藍牙中斷指令
{
	u8 res;
	extern u8 temp;

	
	if(USART_GetITStatus(USART1,USART_IT_RXNE))
	{
		res=USART_ReceiveData(USART1);
		if(res=='D')
	{
		        Motor_Forward();
	}
	if(res=='B'){
		//float distance=Senor_Using();
		//if(distance<=5.0)
		//{
		    //    Motor_Park();
			//GPIO_ResetBits(GPIOB,GPIO_Pin_12);
			//GPIO_SetBits(GPIOB,GPIO_Pin_13);
		//}
		//else
		//{
		Motor_Back();
		//}
	}
	if(res=='P'){
		        Motor_Park();
	}
	if(res=='L')
	{
	        Motor_Left();
	}
	if(res=='R')
	{
		        Motor_Right();
	}
		
	if(res=='a')
	{
		if(temp==1)
		{
			Motor_Forward();
		}
		if(temp==2)
		{
			Motor_Back();
		}
		if(temp==3)
		{
			Motor_Right();
		}
		if(temp==4)
		{
			Motor_Left();
		}
		if(temp==0)
		{
			Motor_Forward();
		}
		TIM_SetCompare1(TIM3,100);
		TIM_SetCompare2(TIM3,100);
		TIM_SetCompare3(TIM3,100);
		TIM_SetCompare4(TIM3,100);
	}
	if(res=='b')
	{
		if(temp==1)
		{
			Motor_Forward();
		}
		if(temp==2)
		{
			Motor_Back();
		}
		if(temp==3)
		{
			Motor_Right();
		}
		if(temp==4)
		{
			Motor_Left();
		}
		if(temp==0)
		{
			Motor_Forward();
		}
		TIM_SetCompare1(TIM3,200);
		TIM_SetCompare2(TIM3,200);
		TIM_SetCompare3(TIM3,200);
		TIM_SetCompare4(TIM3,200);
	}
	if(res=='c')
	{
		if(temp==1)
		{
			Motor_Forward();
		}
		if(temp==2)
		{
			Motor_Back();
		}
		if(temp==3)
		{
			Motor_Right();
		}
		if(temp==4)
		{
			Motor_Left();
		}
		if(temp==0)
		{
			Motor_Forward();
		}
		TIM_SetCompare1(TIM3,300);
		TIM_SetCompare2(TIM3,300);
		TIM_SetCompare3(TIM3,300);
		TIM_SetCompare4(TIM3,300);
	}
		USART_SendData(USART1,res);
	}
}


評論區(qū)(1 )
  • 動心忍性1234: 您好我是無線電雜志的編輯,我們對您的項目十分感興趣,請問您有興趣投稿嗎?成為我們的作者除稿費外還有其他優(yōu)厚條件。敬請參與。投稿請聯(lián)系QQ260534978.

    回復