開箱介紹
在CW小程序中購買了小車,其中的包裝特別好,外面有個箱子來裝著,其中我們將外包裝拆開,可以看見我們本次購買的小車的本體,我購買的是焊接完成的,所以我可以開箱直接試用,方便很多,如果大家追求方便可以購買成品,如果想鍛煉其中也有推薦的開發套件可以自行焊接。
其中到手的主要物品在這里:

其中還有電池和電池充電器,就沒拍攝進來。
小車展示

小車正面圖
其中小車底板。經過后面才發現其中前面小車的LED燈沒有焊接,估計是人工焊接的時候忘記焊接LED燈,導致我以為其中是沒有LED,導致后面循跡一直出現問題,后面補了3個燈實現補光操作。
小車資料
其中讓我感覺社區搭建很不錯,其中的資料都是在飛書中可以找到,我下載了其中的小車代碼,然后在keil5中進行調試。
小車功能實現
紅外和循跡控制小車
其中main函數的代碼估計是調試代碼放上來其中的注釋有點多,后面簡約通過ai修改了一下,將其中的功能大致分為幾個部分。
char oled_disbuff[25];
uint8_t key;
uint16_t SpeedDelay = 150;
uint8_t car_state, last_car_state;
int16_t speed = 0, last_speed;
uint8_t change_speed_flag, speed_illegal_flag, change_car_state_flag, avoidance_flag, Gray_voice_flag;
float Hc04_val;
float power_val;
?
// 函數聲明
static void handle_key_input(void);
static void update_car_state(void);
static void update_display(void);
static void initialize_hardware(void);
?
/**
* @brief 主函數
* @param None
* @retval int32_t
*/
int32_t main(void)
{
// 硬件初始化
initialize_hardware();
// 設置初始舵機角度
Set_car_Angle5(90);
// 初始化狀態變量
last_car_state = car_state;
last_speed = speed;
// 主循環
while (1)
{
// 處理按鍵輸入
handle_key_input();
// 傳感器數據更新
Hc04_val = Get_Disance(); //獲取超聲波
power_val = get_power_val(); //計算電壓
// 發送速度到語音模塊
//send_spd_to_voice();
// 避障功能
//avoidance_fun();
check_Gray_and_changeState();
// 更新小車狀態
update_car_state();
// 更新顯示
update_display();
IR_fun();
}
}
?
/**
* @brief 硬件初始化函數
* @param None
* @retval None
*/
static void initialize_hardware(void)
{
SYSCTRL_Configuration();
LED_Init();
Buz_Init();
BTIM1_Init();
key_Init();
Uart_Init(); // UART1 PA9(T) 10
AC6328A_Init(); // UART2 PA2(T) 3
Servo_car_tail_Init(); // GTIM1 PB8
IR_Init();
OLED_Init();
HC_SR04_Init();
WS2812_Init();
Motor_Init(); // 與舵機共用GTIM1 PB3 4 5 12
ADC_track_Init(); // 舵機和ADC循跡采集口共用 循跡ADC PA1 4 5 6
}
?
/**
* @brief 處理按鍵輸入
* @param None
* @retval None
*/
static void handle_key_input(void)
{
key = get_keyval();
switch (key)
{
case 1:
buz_flag = 1;
car_state = 0; // 停止狀態
change_car_state_flag = 1;
break;
case 2:
buz_flag = 1;
car_state = 6; // 前進狀態
speed = 200;
change_car_state_flag = 1;
break;
default:
break;
}
}
?
/**
* @brief 更新小車狀態
* @param None
* @retval None
*/
static void update_car_state(void)
{
switch (car_state)
{
case 0: // 停止
Car_Stop();
WS_shadow(2);
Send_RGB(1, 0, 0, 0);
Send_RGB(3, 0, 0, 0);
break;
case 1: // 前進
if (gray_flag == 0)
Car_Run(speed);
check_Gray_and_changeState();
Send_RGB(2, 0, 255, 0);
Send_RGB(1, 0, 0, 0);
Send_RGB(3, 0, 0, 0);
break;
case 2: // 后退
Car_Run(-speed);
Send_RGB(2, 255, 0, 0);
Send_RGB(1, 0, 0, 0);
Send_RGB(3, 0, 0, 0);
break;
case 3: // 左轉
Car_Left(speed);
Send_RGB(1, 255, 0, 0);
Send_RGB(2, 0, 0, 0);
Send_RGB(3, 0, 0, 0);
break;
case 4: // 右轉
Car_Right(speed);
Send_RGB(3, 255, 0, 0);
Send_RGB(1, 0, 0, 0);
Send_RGB(2, 0, 0, 0);
break;
case 5: // 搖尾巴
wagtail();
Car_Stop();
WS_shadow(2);
Send_RGB(1, 0, 0, 0);
Send_RGB(3, 0, 0, 0);
break;
case 6: // 循跡
GrayscaleSensor_fun(); // 當前被注釋
break;
default:
break;
}
}
?
/**
* @brief 更新OLED顯示
* @param None
* @retval None
*/
static void update_display(void)
{
uint8_t D1, D2, D3;
// 顯示超聲波距離
if (Hc04_val == 0xffff || Hc04_val == 0)
OLED_Printf(1, 8, OLED_6X8, "HC04_Error ");
else
OLED_Printf(1, 8, OLED_6X8, "Distance:%.0fcm ", Hc04_val);
// 獲取循跡傳感器數據
get_track_data(&D1, &D2, &D3);
// 顯示系統狀態信息
OLED_Printf(1, 0, OLED_6X8, "Hello");
OLED_Printf(1, 16, OLED_6X8, "%d", car_state);
OLED_Printf(1, 24, OLED_6X8, "%d", avoidance_flag);
OLED_Printf(1, 32, OLED_6X8, "Sensor:%d %d %d", D1, D2, D3);
OLED_Printf(1, 40, OLED_6X8, "Power_Voltage:%.2f", power_val);
// 更新OLED顯示
OLED_Update();
}
?
/**
* @brief 系統時鐘配置
* @param None
* @retval None
*/
void SYSCTRL_Configuration(void)
{
/* 0. HSI使能并校準 */
SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV1);
?
/* 1. 設置HCLK和PCLK的分頻系數*/
SYSCTRL_HCLKPRS_Config(SYSCTRL_HCLK_DIV1);
SYSCTRL_PCLKPRS_Config(SYSCTRL_PCLK_DIV1);
?
SYSCTRL_SystemCoreClockUpdate(96000000);
}
?
/**
* @brief 檢查小車狀態變化
* @param None
* @retval None
*/
void check_car_state(void)
{
if (last_car_state != car_state)
{
last_car_state = car_state;
change_car_state_flag = 1;
}
if (last_speed != speed)
{
last_speed = speed;
change_speed_flag = 1;
}
}
?
簡單的來說,其中小車上電就是超聲波避障的功能,但擁有小車的我們誰不想控制小車,讓小車循跡呢。其中大致框架已經幫我們寫好了,我們只需要簡單的調用就能實現操作,其中主函數啟動紅外功能,在while循環中接收指令碼,就能實現小車的移動功能。

外紅功能展示。

循跡功能展示,其中使用按鍵1開啟和按鍵2關閉。
因為手頭沒有白燈,只有藍燈導致其中紅外循跡可能有點不準。
總結
其中小車的功能性和趣味性很足,其中還有更多的功能藍牙控制,超聲波循跡等待大家探索,我也是特別喜歡小車,擁有一臺屬于自己的小車是多少電子人的追求,也是簡單上手也體驗到小車運動的快樂,大家喜歡的話,可以在CW32社區中查詢靈眸小車。
審核編輯 黃宇
-
CW32
+關注
關注
1文章
281瀏覽量
1691
發布評論請先 登錄
CW32L012小型機器人控制評估板活動 四足機器人+智能小車 開箱評測
**CW32L012****開發評估板的第一個程序**
白嫖的CW32小車的藍牙模式使用教程
CW32L012小機器人的電機控制
使用芯源CW32的CW32L012開發評估板做了spi屏幕驅動
CW32L01????????????????????????????????????1的測評分享
CW32L012小車組裝調試
堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!
堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!
MHMF012L1U2M-MINAS A6NL系列 (RTEX) 技術資料 -基本功能規格篇- 松下
MHMF012L1U2-MINAS A6S 系列 技術資料 -基本功能規格篇- 松下
MHMF012L1U1-MINAS A6BU 系列 技術資料 -基本功能規格篇- 松下
MHMF012L1T2M-MINAS A6B 系列 (EtherCAT) 技術資料 -基本功能規格篇- 松下
MHMF012L1T2-MINAS A6BL (EtherCAT) 系列 技術資料 -基本功能規格篇- 松下

【CW32L012小車測評】到手小車測評其中基本功能
評論