聚丰项目 > 面向低功耗无线传感器的智能小车巡回无线充电系统

面向低功耗无线传感器的智能小车巡回无线充电系统

物联网依靠无线传感器进行信息传输。无线传感器需要电池供电。如果无线传感器嵌入到物体内部,导致电池更换代价高或者不方便。如果用无线充电来给嵌入式的无线传感器进行能量供应,会为物联网应用带来极大的便利。因此,本设计考虑利用移动小车作为电源移动供应站,向嵌入到固定固体内部的传感器节点进行无线充电。本系统完成小车的自动循迹、自动定位需要充电的传感器,并根据预设的电量需求进行自动智能充电。(本项目采用的是IDT 3W无线充电开发套件)

东北风_b0f 东北风_b0f

分享
3 喜欢这个项目
团队介绍

东北风_b0f 东北风_b0f

团队成员

东北风_b0f 队长

此号已启用

鲸落

千芷

分享
项目简介
物联网依靠无线传感器进行信息传输。无线传感器需要电池供电。如果无线传感器嵌入到物体内部,导致电池更换代价高或者不方便。如果用无线充电来给嵌入式的无线传感器进行能量供应,会为物联网应用带来极大的便利。因此,本设计考虑利用移动小车作为电源移动供应站,向嵌入到固定固体内部的传感器节点进行无线充电。本系统完成小车的自动循迹、自动定位需要充电的传感器,并根据预设的电量需求进行自动智能充电。(本项目采用的是IDT 3W无线充电开发套件)
硬件说明

由于没有做出来室内定位,所以寻址用蓝牙遥控代替,没电时发射信号也省略了。在墙上嵌入接收器,小车靠近为其充电。

小车具备前进、后退、左转、右转、原地旋转360度无死角,而且具备慢、中、快三档调节,便于小车寻找到目标截屏_20171023_165751.png

stm32c8t6

蓝牙hc06

电机驱动L298n

电池18650

IDT 3W无线充电开发套件 

软件说明
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;//指定将要加载到捕获比较寄存器的脉冲值,当计数器计数到这个值时,电平发生跳变
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//设置输出比较极性,当定时器计数值小于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;//电机驱动IN
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//电机驱动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;//电机驱动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);
	
}
中断函数
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);
	}
}


评论区(1 )
  • 动心忍性1234: 您好我是无线电杂志的编辑,我们对您的项目十分感兴趣,请问您有兴趣投稿吗?成为我们的作者除稿费外还有其他优厚条件。敬请参与。投稿请联系QQ260534978.

    回复