聚豐項目 > 基于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: 好大的蓄電池啊

    回復

草莓视屏app下载污-草莓视频污版下载-草莓视频大黄免费下载