聚丰项目 > 基于IDT 15W的智能小车站台充电小系统

基于IDT 15W的智能小车站台充电小系统

该系统旨在给蓝牙遥控智能小车进行停靠充电功能。底板使用12V直流供电,小车使用12V7AH蓄电池供电。IDT充电板安装在小车的车头,当小车驶向充电站台时,IDT充电板和IDT底板接触,底板就将12V电压通过线圈传给蓄电池充电。充电时,小车电路板与12V蓄电池相连的动力系统切断,以防意外发生。(本项目采用的是IDT 15W无线充电开发套件)

donatello1996 donatello1996

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

donatello1996 donatello1996

团队成员

李明 创客

分享
项目简介
该系统旨在给蓝牙遥控智能小车进行停靠充电功能。底板使用12V直流供电,小车使用12V7AH蓄电池供电。IDT充电板安装在小车的车头,当小车驶向充电站台时,IDT充电板和IDT底板接触,底板就将12V电压通过线圈传给蓄电池充电。充电时,小车电路板与12V蓄电池相连的动力系统切断,以防意外发生。(本项目采用的是IDT 15W无线充电开发套件)
硬件说明

IDT无线充电套件,负责停靠时充电;

HC-05模块两个;

Nucleo-F446RE开发板,用作小车控制板;IMG_20171029_212334R.jpg

L298N模块,驱动小车的动力轮和转向轮;

IMG_20171029_212342R.jpg

小车动力轮电机;

IMG_20171029_212507R.jpg

小车转向轮电机;

IMG_20171029_212353R.jpg

12V转5V转接板,用于蓄电池给Nucleo-F446RE开发板供电和动力轮供电;

IMG_20171029_212522R.jpg

Nucleo-F412ZG开发板,用作遥控板。

IMG_20171029_225222R.jpg


软件说明

小车遥控板代码:

#include <stdio.h>

#include <stdlib.h>

#include "stm32f4xx.h"

#include "usart.h"

#include "delay.h"

#include "adc.h"


int main()

{

int adcval,pwmval=0,pres;

uint8_t dir;

HAL_Init();

SystemClock_Config();

USART2_Init(115200);

USART3_Init(115200);

ADC1_Init(2);

while(1)

{

ADC1_GetValue();

if(x_val>1000&&x_val<3000&&y_val>1000&&y_val<3000)

dir='0';

if(x_val>1000&&x_val<3000&&y_val<1000)

dir='1';

if(x_val>3000&&y_val<1000)

dir='2';

if(x_val>3000&&y_val>1000&&y_val<3000)

dir='3';

if(x_val>3000&&y_val>3000)

dir='4';

if(x_val>1000&&x_val<3000&&y_val>3000)

dir='5';

if(x_val<1000&&y_val>3000)

dir='6';

if(x_val<1000&&y_val>1000&&y_val<3000)

dir='7';

if(x_val<1000&&y_val<1000)

dir='8';

HAL_UART_Transmit(&UART2_Handler,&dir,1,0);


}

}


小车控制板代码:

#include "stm32f4xx.h"

#include "usart.h"

#include "mico_periph.h"

#include "hts221.h"

#include "uvis25.h"

#include "oled.h"

#include "adc.h"

#include "lps25hb.h"

#include "exti.h"

#include "spi1.h"


#define B1_Pin GPIO_PIN_13

#define B1_GPIO_Port GPIOC

#define LD2_Pin GPIO_PIN_5

#define LD2_GPIO_Port GPIOA


int motor_status=0;


void SystemClock_Config()

{


  RCC_OscInitTypeDef RCC_OscInitStruct;

  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

  RCC_OscInitStruct.HSICalibrationValue = 16;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

  RCC_OscInitStruct.PLL.PLLM = 8;

  RCC_OscInitStruct.PLL.PLLN = 180;

  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

  RCC_OscInitStruct.PLL.PLLQ = 2;

  RCC_OscInitStruct.PLL.PLLR = 2;

  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  HAL_PWREx_EnableOverDrive();

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;


  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}


static void MX_GPIO_Init()

{


  GPIO_InitTypeDef GPIO_InitStruct;


  __HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

  __HAL_RCC_GPIOC_CLK_ENABLE();

  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);


  GPIO_InitStruct.Pin = B1_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);


  GPIO_InitStruct.Pin = LD2_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(LD2_GPIO_Port,&GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_PULLUP;

  HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_PULLDOWN;

  HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_PULLDOWN;

  HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);


}


char Get_Direction()

{

if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==0&&HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==1)

return 'L';

else if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==1&&HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8)==0)

return 'R';

else return 'M';

}


void Turn_Left()

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,1);

HAL_Delay(300);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}


void Turn_Right()

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,1);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

HAL_Delay(300);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}


void Fix_Forword()

{

if(Get_Direction()=='L')

while(Get_Direction()=='L'||Get_Direction()=='M')

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,1);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

if(Get_Direction()=='R')

while(Get_Direction()=='R'||Get_Direction()=='M')

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,1);

}

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}


int tflag=0;


void Car_Directions(int dir)

{


switch(dir)

{

case 0://停止

tflag=0;

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

Fix_Forword();

break;

case 1://前进

tflag=0;

Fix_Forword();

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,1);

break;

case 2:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,1);

if(tflag==0)

{

tflag=1;

Turn_Right();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

case 3:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

if(tflag==0)

{

tflag=1;

Turn_Right();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

case 4:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

if(tflag==0)

{

tflag=1;

Turn_Right();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

case 5://后退

tflag=0;

Fix_Forword();

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

break;

case 6:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

if(tflag==0)

{

tflag=1;

Turn_Left();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

case 7:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

if(tflag==0)

{

tflag=1;

Turn_Left();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

case 8:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,1);

if(tflag==0)

{

tflag=1;

Turn_Left();

}

else if(tflag==1)

{

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);

}

break;

default:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);

Fix_Forword();

break;

}

}


int main()

{

uint8_t s='0';

HAL_Init();

     SystemClock_Config();

    MX_GPIO_Init();

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,0);

    USART2_Init(115200);

USART3_Init(115200);

Motor_Init();

OLED_Init();

HTS221_Init();

HTS221_Calibration();

UVIS25_I nit();

RGBLED_Init();

RGB_LED_Set(10,10,20);

 

    ADC1_Init();

EXTI_IRQHandler_Config(0,0);

Fix_Forword();

while(1)

  {

HAL_UART_Receive(&huart3,&s,1,1);

printf("%c\n",s);

Car_Directions(s-'0');

  }

}


void SysTick_Handler()

{

  HAL_IncTick();

  HAL_SYSTICK_IRQHandler();

}


演示效果

初始化,打开小车12V供电和遥控板5V供电,小车控制板循环接收遥控板的指令,遥控板使用一个ADC摇杆发送小车行动指令,控制小车前进、后退、左转、右转、停止。

评论区(1 )
  • snake7674: 好大的蓄电池啊

    回复