聚豐項目 > 面向低功耗無線傳感器的智能小車巡回無線充電系統
物聯網依靠無線傳感器進行信息傳輸。無線傳感器需要電池供電。如果無線傳感器嵌入到物體內部,導致電池更換代價高或者不方便。如果用無線充電來給嵌入式的無線傳感器進行能量供應,會為物聯網應用帶來極大的便利。因此,本設計考慮利用移動小車作為電源移動供應站,向嵌入到固定固體內部的傳感器節點進行無線充電。本系統完成小車的自動循跡、自動定位需要充電的傳感器,并根據預設的電量需求進行自動智能充電。(本項目采用的是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.
回復