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

東北風(fēng)_b0f
團隊成員
東北風(fēng)_b0f 隊長
此號已啟用
鯨落
千芷
由于沒有做出來室內(nèi)定位,所以尋址用藍牙遙控代替,沒電時發(fā)射信號也省略了。在墻上嵌入接收器,小車靠近為其充電。
小車具備前進、后退、左轉(zhuǎn)、右轉(zhuǎn)、原地旋轉(zhuǎn)360度無死角,而且具備慢、中、快三檔調(diào)節(jié),便于小車尋找到目標
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è)置輸出比較極性,當定時器計數(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);
}
}動心忍性1234: 您好我是無線電雜志的編輯,我們對您的項目十分感興趣,請問您有興趣投稿嗎?成為我們的作者除稿費外還有其他優(yōu)厚條件。敬請參與。投稿請聯(lián)系QQ260534978.
回復(fù)