找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10345|回复: 2
收起左侧

基于STM32的智能小车无线环境监测系统(完整版资料)

  [复制链接]
ID:296303 发表于 2018-6-3 23:08 | 显示全部楼层 |阅读模式
本文介绍了一款使用由意法半导体公司生产的STM32为核心控制器,在MDK4.70软件开发平台下设计开发的智能小车。文中介绍了整个设计的需求分析、方案选择、硬件部分、软件部分、传感器的选择与布局、电路板的安装、以及整车的测试与评估。
0.jpg
本次设计最终采用STM32为主控制器,此款芯片功能强大,足以满足整个设计的需求,选用最常用高灵敏度的红外光电传感器完成循迹功能,采用MG995舵机和HC-SR04超声波模块配合完成避障功能,采用MQ-2烟雾气敏传感器完成烟雾浓度探测功能,采用DHT11温湿度传感器模块完成温湿度探测功能,采用NRF24L01无线发射接收模块完成与上位机之间的无线通信功能,采用SIM800C模块完成与管理者手机通讯功能。程序经过多次测试和改进,能够较健壮的运行。最终能够很好地实现上述功能。

演示视频:
0.png
智能小车无线环境监测系统
SmartCar_NF2401
是遥控板程序
SmartCar_Update
是小车程序

小车实现了 循迹、蔽障、检测湿度、温度、烟雾、并通过NF2401传给遥控板,遥控板显示出温度湿度烟雾状态等。遥控板可以可控制小车任意行走或者执行任意模式。小车还实现SIM800发短信和打电话功能,当温度、湿度、烟雾状态超标时,给指定手机发短信,打电话!

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "24l01.h"          
  8. #include "stm32f10x_tim.h"
  9. #include "stm32f10x_rcc.h"


  10. u16 Change_mode_cnt=0;//变换模式计数
  11. u8 Change_mode=1; //改变发送接收模式
  12. u8 NRF2401_Rxbuf[10];
  13. u8 NRF2401_Txbuf[10];


  14. void TIM1_INIT()
  15. {
  16.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  17.           NVIC_InitTypeDef NVIC_InitStructure;
  18. //??TIM2
  19. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //????
  20.    /* TIM2 configuration */
  21.    TIM_TimeBaseStructure.TIM_Period=10-1;//??,??????ARR??
  22.    TIM_TimeBaseStructure.TIM_Prescaler=899;//???????1Mhz
  23.    TIM_TimeBaseStructure.TIM_ClockDivision=0x00;
  24.    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//????
  25.    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//???
  26.    
  27.   
  28.    
  29.    /* Clear TIM2 update pending flag */
  30.    TIM_ClearFlag(TIM1,TIM_FLAG_Update);//??????
  31.    
  32.    /* Enable TIM2 Update interrupt */
  33.    TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//????
  34.          
  35.          
  36.           
  37.      //??TIM3????
  38.      NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;
  39.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//??????1
  40.      NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//?????0
  41.      NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  42.      NVIC_Init(&NVIC_InitStructure);
  43.                  
  44.                   /* TIM2 enable counter */
  45.    TIM_Cmd(TIM1,ENABLE);//?????


  46. }

  47. int main(void)
  48. {         
  49.        
  50.        
  51.         u8 key;                     
  52.         delay_init();                     //延时函数初始化          
  53.         NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  54.         uart_init(9600);                 //串口初始化为9600
  55.         LED_Init();                             //LED端口初始化
  56.         LCD_Init();        //初始化LCD
  57.         KEY_Init();         //按键初始化       

  58.         NRF24L01_Init();            //初始化NRF24L01
  59.           TIM1_INIT();
  60.         POINT_COLOR=RED;//设置字体为红色
  61.         LCD_ShowString(60,50,200,16,16,"WarShip STM32");       
  62.         LCD_ShowString(60,70,200,16,16,"NRF24L01 TEST");                  
  63.         while(NRF24L01_Check())        //检查NRF24L01是否在位.       
  64.         {
  65.                 LCD_ShowString(60,90,200,16,16,"NRF24L01 Error");
  66.                 delay_ms(200);
  67.                 LCD_Fill(60,130,239,130+16,WHITE);
  68.                 delay_ms(200);
  69.         }
  70.         LCD_ShowString(60,90,200,16,16,"NRF24L01 OK");
  71.         NRF24L01_TX_Mode();
  72.                                                                           
  73.         //LCD_ShowString(60,130,200,16,16,"NRF24L01 OK");
  74.         //LCD_ShowNum(60,130,200,6,16);
  75.         POINT_COLOR=BLUE;//设置字体为蓝色
  76.         while(1)
  77.         {
  78.          key=KEY_Scan(0);
  79.                 NRF2401_Txbuf[0]=1;
  80.     if(key==KEY_UP)
  81.                 NRF2401_Txbuf[1]=1;
  82.         else if(key==KEY_LEFT)
  83.                 NRF2401_Txbuf[1]=2;
  84.         else if(key==KEY_DOWN)
  85.                 NRF2401_Txbuf[1]=3;
  86.         else if(key==KEY_RIGHT)
  87.                 NRF2401_Txbuf[1]=4;
  88.         else;
  89.                
  90.                
  91.          if(Change_mode==0)//RX模式
  92.          {
  93.                 LCD_ShowString(60,110,200,16,16,"NRF24L01 RX_Mode");       
  94.                 LCD_ShowString(60,130,200,16,16,"Received DATA:");       
  95.                 NRF24L01_RX_Mode();       
  96.            while(1)                 
  97.                 {                                                                                   
  98.                         if(NRF24L01_RxPacket(NRF2401_Rxbuf)==0)//一旦接收到信息,则显示出来.
  99.                         {
  100.                                 LCD_ShowString(60,150,200,16,16,"Temperature:");
  101.                                 LCD_ShowNum(160,150,NRF2401_Rxbuf[1],2,16);

  102.                                 LCD_ShowString(60,170,200,16,16,"Humidity:");
  103.                                 LCD_ShowNum(160,170,NRF2401_Rxbuf[2],2,16);

  104.                                 LCD_ShowString(60,190,200,16,16,"Smokestate:");
  105.                                 LCD_ShowNum(160,190,NRF2401_Rxbuf[3],1,16);
  106.                                 Change_mode=1;
  107.                        
  108.                         }
  109.               if(Change_mode)
  110.               break;                               
  111.                                     
  112.                 }
  113.         }
  114.         else//TX模式
  115.         {                                                            
  116.                 LCD_ShowString(60,110,200,16,16,"NRF24L01 TX_Mode");       
  117.                 NRF24L01_TX_Mode();
  118.                 while(1)
  119.                 {                                                              
  120.                         if(NRF24L01_TxPacket(NRF2401_Txbuf)==TX_OK)
  121.                         {       
  122.                                  LCD_ShowString(60,210,200,16,16,"Car_State:");
  123.                                   LCD_ShowNum(160,210,NRF2401_Txbuf[1],1,16);
  124.                                   Change_mode=0;                               
  125.                         }
  126.                         else;
  127.                
  128.                         if(!Change_mode)
  129.       break;                               
  130.                 }
  131.        
  132.           
  133.         }   
  134.        
  135. }
  136. }

  137. void TIM1_UP_IRQHandler(void)
  138. {
  139. TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
  140.         Change_mode_cnt++;
  141.         if(Change_mode_cnt>50)
  142.         {
  143.                 Change_mode_cnt=0;
  144.                 //Change_mode=~Change_mode;
  145.         }
  146. }
  147.        

复制代码
0.png

0.png

所有资料51hei提供下载:
基于STM32的智能小车无线环境监测系统(完整版).zip (18.53 MB, 下载次数: 258)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:469436 发表于 2019-1-16 22:43 | 显示全部楼层
很好啊很需求这个东西
回复

使用道具 举报

ID:414804 发表于 2019-12-8 19:38 | 显示全部楼层
拿走了,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表