0 前言
🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 毕业设计 单片机循迹机器人小车
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:3分
🧿 选题指导, 项目分享:
1 简介
基于NRF24L01、DHT11和Arduino开发板制作无线温度监控器
2 主要器件
- Arduino UNO开发板
- NRF24L01收发器模块
- DHT11温湿度传感器
- LCD1602显示屏
- 10K电位器
- 连接跳线
- 面包板
3 实现效果
4 硬件设计
nRF24L01收发器模块
这些射频模块在Arduino爱好者中非常受欢迎。nRF24L01用于各种需要无线控制的应用。它们是收发器,这意味着每个模块都可以发送和接收数据。这些模块非常便宜,您可以将它们与任何微控制器一起使用。
主要的规格参数
- 低成本单芯片,2.4GHz GFSK射频收发器
- 带天线的范围:250Kb 速率(开放区域)>1000 米
- 电源:超低功耗
- 输入电压:3.3V
- 引脚:支持5V
NRF24L01引脚分布
nRF24L01的工作过程
使用2.4GHz频段,可以在250kbps到2Mbps的波特率下运行。如果在开放空间和较低波特率下使用,其范围可达100米。
该模块可以使用125个不同的通道,从而可以在一个地方拥有一个由125个独立工作的调制解调器组成的网络。每个通道最多可以有6个地址,或者说每个单元最多可以同时与6个其他单元通信。
电路图和硬件连接
本文中我们需要两个电路图来实现两个nRF24L01收发模块之间的无线通信。下面显示的第一个电路图是发射器部分。如下图所示组装电路。
发射器端由Arduino Uno开发板、nRF24L01收发模块和DHT11温湿度传感器组成。DH11的模拟输出引脚连接至Arduino开发板的A0引脚。
下面显示的第二个电路图是接收器部分。如下图所示组装电路。
接收器的电路由Arduino Uno开发板、nRF24L01收发模块和1602 LCD显示屏组成。NRF24L01收发模块通过SPI总线连接到Arduino开发板。LCD的引脚连接至Arudino的数字引脚,使用电位器调整LCD的背光亮度。
5 部分核心代码
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <DHT11.h>
int pin = A0;
DHT11 dht11(pin);
float temperature[2];
double Fahrenheit(double celsius) {
return ((double)(9 / 5) * celsius) + 32;
}
double Kelvin(double celsius) {
return celsius + 273.15;
}
RF24 radio(8, 9);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void) {
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void)
{
float temp, humi;
dht11.read(humi, temp);
temperature[0] = temp;
temperature[1] = humi;
radio.write(temperature, sizeof(temperature));
delay(1000);
}
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <DHT11.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
float temperature[2];
RF24 radio(8, 9);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void)
{
Serial.begin(9600);
lcd.begin(16, 2);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
lcd.print("Humidity & temp");
delay(2000);
lcd.clear();
lcd.print("Starting.....");
delay(2000);
}
void loop(void)
{
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read(temperature, sizeof(temperature));
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Humidity");
lcd.setCursor(9, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(temperature[1]);
lcd.print(" %");
delay(1000);
}
}
else
{
lcd.setCursor(0, 0);
lcd.print("No radio Found");
}
}