聚丰项目 > 面向低功耗无线传感器的智能小车巡回无线充电系统
物联网依靠无线传感器进行信息传输。无线传感器需要电池供电。如果无线传感器嵌入到物体内部,导致电池更换代价高或者不方便。如果用无线充电来给嵌入式的无线传感器进行能量供应,会为物联网应用带来极大的便利。因此,本设计考虑利用移动小车作为电源移动供应站,向嵌入到固定固体内部的传感器节点进行无线充电。本系统完成小车的自动循迹、自动定位需要充电的传感器,并根据预设的电量需求进行自动智能充电。(本项目采用的是IDT 3W无线充电开发套件)
东北风_b0f
分享东北风_b0f
团队成员
东北风_b0f 队长
此号已启用
鲸落
千芷
由于没有做出来室内定位,所以寻址用蓝牙遥控代替,没电时发射信号也省略了。在墙上嵌入接收器,小车靠近为其充电。
小车具备前进、后退、左转、右转、原地旋转360度无死角,而且具备慢、中、快三档调节,便于小车寻找到目标
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); } }
动心忍性1234: 您好我是无线电杂志的编辑,我们对您的项目十分感兴趣,请问您有兴趣投稿吗?成为我们的作者除稿费外还有其他优厚条件。敬请参与。投稿请联系QQ260534978.
回复