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

東北風(fēng)_b0f
團(tuán)隊(duì)成員
東北風(fēng)_b0f 隊(duì)長(zhǎng)
此號(hào)已啟用
鯨落
千芷
由于沒(méi)有做出來(lái)室內(nèi)定位,所以尋址用藍(lán)牙遙控代替,沒(méi)電時(shí)發(fā)射信號(hào)也省略了。在墻上嵌入接收器,小車(chē)靠近為其充電。
小車(chē)具備前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、原地旋轉(zhuǎn)360度無(wú)死角,而且具備慢、中、快三檔調(diào)節(jié),便于小車(chē)尋找到目標(biāo)
stm32c8t6
藍(lán)牙hc06
電機(jī)驅(qū)動(dòng)L298n
電池18650
IDT 3W無(wú)線充電開(kāi)發(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;//指定將要加載到捕獲比較寄存器的脈沖值,當(dāng)計(jì)數(shù)器計(jì)數(shù)到這個(gè)值時(shí),電平發(fā)生跳變
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//設(shè)置輸出比較極性,當(dāng)定時(shí)器計(jì)數(shù)值小于CCR1_Val時(shí)為高點(diǎn)平
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
車(chē)尾端
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;//電機(jī)驅(qū)動(dòng)IN
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//電機(jī)驅(qū)動(dòng)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;//電機(jī)驅(qū)動(dòng)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)//藍(lán)牙中斷指令
{
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);
}
}動(dòng)心忍性1234: 您好我是無(wú)線電雜志的編輯,我們對(duì)您的項(xiàng)目十分感興趣,請(qǐng)問(wèn)您有興趣投稿嗎?成為我們的作者除稿費(fèi)外還有其他優(yōu)厚條件。敬請(qǐng)參與。投稿請(qǐng)聯(lián)系QQ260534978.
回復(fù)