本文介绍了一款使用由意法半导体公司生产的STM32为核心控制器,在MDK4.70软件开发平台下设计开发的智能小车。文中介绍了整个设计的需求分析、方案选择、硬件部分、软件部分、传感器的选择与布局、电路板的安装、以及整车的测试与评估。
本次设计最终采用STM32为主控制器,此款芯片功能强大,足以满足整个设计的需求,选用最常用高灵敏度的红外光电传感器完成循迹功能,采用MG995舵机和HC-SR04超声波模块配合完成避障功能,采用MQ-2烟雾气敏传感器完成烟雾浓度探测功能,采用DHT11温湿度传感器模块完成温湿度探测功能,采用NRF24L01无线发射接收模块完成与上位机之间的无线通信功能,采用SIM800C模块完成与管理者手机通讯功能。程序经过多次测试和改进,能够较健壮的运行。最终能够很好地实现上述功能。
演示视频:
智能小车无线环境监测系统
SmartCar_NF2401
是遥控板程序
SmartCar_Update
是小车程序
小车实现了 循迹、蔽障、检测湿度、温度、烟雾、并通过NF2401传给遥控板,遥控板显示出温度湿度烟雾状态等。遥控板可以可控制小车任意行走或者执行任意模式。小车还实现SIM800发短信和打电话功能,当温度、湿度、烟雾状态超标时,给指定手机发短信,打电话!
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "24l01.h"
- #include "stm32f10x_tim.h"
- #include "stm32f10x_rcc.h"
- u16 Change_mode_cnt=0;//变换模式计数
- u8 Change_mode=1; //改变发送接收模式
- u8 NRF2401_Rxbuf[10];
- u8 NRF2401_Txbuf[10];
- void TIM1_INIT()
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- //??TIM2
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //????
- /* TIM2 configuration */
- TIM_TimeBaseStructure.TIM_Period=10-1;//??,??????ARR??
- TIM_TimeBaseStructure.TIM_Prescaler=899;//???????1Mhz
- TIM_TimeBaseStructure.TIM_ClockDivision=0x00;
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//????
- TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//???
-
-
-
- /* Clear TIM2 update pending flag */
- TIM_ClearFlag(TIM1,TIM_FLAG_Update);//??????
-
- /* Enable TIM2 Update interrupt */
- TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//????
-
-
-
- //??TIM3????
- NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//??????1
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//?????0
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* TIM2 enable counter */
- TIM_Cmd(TIM1,ENABLE);//?????
-
- }
- int main(void)
- {
-
-
- u8 key;
- delay_init(); //延时函数初始化
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为9600
- LED_Init(); //LED端口初始化
- LCD_Init(); //初始化LCD
- KEY_Init(); //按键初始化
-
- NRF24L01_Init(); //初始化NRF24L01
- TIM1_INIT();
- POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(60,50,200,16,16,"WarShip STM32");
- LCD_ShowString(60,70,200,16,16,"NRF24L01 TEST");
- while(NRF24L01_Check()) //检查NRF24L01是否在位.
- {
- LCD_ShowString(60,90,200,16,16,"NRF24L01 Error");
- delay_ms(200);
- LCD_Fill(60,130,239,130+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,90,200,16,16,"NRF24L01 OK");
- NRF24L01_TX_Mode();
-
- //LCD_ShowString(60,130,200,16,16,"NRF24L01 OK");
- //LCD_ShowNum(60,130,200,6,16);
- POINT_COLOR=BLUE;//设置字体为蓝色
- while(1)
- {
- key=KEY_Scan(0);
- NRF2401_Txbuf[0]=1;
- if(key==KEY_UP)
- NRF2401_Txbuf[1]=1;
- else if(key==KEY_LEFT)
- NRF2401_Txbuf[1]=2;
- else if(key==KEY_DOWN)
- NRF2401_Txbuf[1]=3;
- else if(key==KEY_RIGHT)
- NRF2401_Txbuf[1]=4;
- else;
-
-
- if(Change_mode==0)//RX模式
- {
- LCD_ShowString(60,110,200,16,16,"NRF24L01 RX_Mode");
- LCD_ShowString(60,130,200,16,16,"Received DATA:");
- NRF24L01_RX_Mode();
- while(1)
- {
- if(NRF24L01_RxPacket(NRF2401_Rxbuf)==0)//一旦接收到信息,则显示出来.
- {
- LCD_ShowString(60,150,200,16,16,"Temperature:");
- LCD_ShowNum(160,150,NRF2401_Rxbuf[1],2,16);
- LCD_ShowString(60,170,200,16,16,"Humidity:");
- LCD_ShowNum(160,170,NRF2401_Rxbuf[2],2,16);
- LCD_ShowString(60,190,200,16,16,"Smokestate:");
- LCD_ShowNum(160,190,NRF2401_Rxbuf[3],1,16);
- Change_mode=1;
-
- }
- if(Change_mode)
- break;
-
- }
- }
- else//TX模式
- {
- LCD_ShowString(60,110,200,16,16,"NRF24L01 TX_Mode");
- NRF24L01_TX_Mode();
- while(1)
- {
- if(NRF24L01_TxPacket(NRF2401_Txbuf)==TX_OK)
- {
- LCD_ShowString(60,210,200,16,16,"Car_State:");
- LCD_ShowNum(160,210,NRF2401_Txbuf[1],1,16);
- Change_mode=0;
- }
- else;
-
- if(!Change_mode)
- break;
- }
-
-
- }
-
- }
- }
- void TIM1_UP_IRQHandler(void)
- {
- TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
- Change_mode_cnt++;
- if(Change_mode_cnt>50)
- {
- Change_mode_cnt=0;
- //Change_mode=~Change_mode;
- }
- }
-
复制代码
所有资料51hei提供下载:
基于STM32的智能小车无线环境监测系统(完整版).zip
(18.53 MB, 下载次数: 259)
|