安徽网站建设价格,服装设计方案,网站平面设计完成后 与客户怎样沟通,宜宾百度网站建设兄弟,如果你看到这篇,只能说明你A测也挂了,没办法,哥们太菜了,抄的太假过不了你电有些老师的慧眼 这坨#x1f415;⑩我先吃为敬 环境搭建可以参考这个兄弟的博客
一、题目要求
实现功能#xff1a;使用 Arduino UNO 微控制器#xff0c;搭建一个 PC 上位机远程气压检测控… 兄弟,如果你看到这篇,只能说明你A测也挂了,没办法,哥们太菜了,抄的太假过不了你电有些老师的慧眼 这坨⑩我先吃为敬 环境搭建可以参考这个兄弟的博客
一、题目要求
实现功能使用 Arduino UNO 微控制器搭建一个 PC 上位机远程气压检测控制 系统。
功能Arduino UNOAtmega328P通过串行接口组件与上位机 PC 进行双向 通信PC 机用串口调试助手软件向 Arduino UNO 发送学生自己的学号Arduino UNO 收到后在 LCD 上显示学生的学号并且向 PC 机发送当前的气压值。PC 机上的串口调试助手软件接收窗口显示收到的气压值。 Arduino UNO 控制驱动直流电机当环境气压等于或高于预定的气压860 学号末位数hPa时启动直流电机转动当环境气压低于预定的气压860 学号末位数hPa时直流电机停止转动。同时实时环境气压在 LCD 和 PC 机的串口调试助手软件接收窗口显示。如学生学号末位数为 5手动增加气压 等于或超过设定的气压值 865 hPa8605865时驱动直流电机开始转动。 LCD 第一行显示 ID学号第二行显示 PRESS气压值 PC 机串口调试助手软件发送窗口显示学号 PC 机串口调试助手软件接收窗口显示 Pressure气压值
二、设计思路
此电路可以在一个密封环境中维持低于865hPa的气压值,当BMP180检测到气压高于或者等于此值时电机开始转动,往外抽气,当气压低于此值时电机停止转动抽气 可以考虑应用于维持稳压的环境比如低压进行的化学反应 放拟什么够皮呢 三、仿真结果展示
我的学号是20009101015,最后一位是5,那么使电机转动的气压阈值是865,也就是说气压大于等于865时电机转动,气压小于865时停止转动 计算预定值放上你软件仿真结果截图包含直流电机停止时和启动时的LCD和PC机串口调试助手软件发送和接收窗口的显示结果传感器数值、电机转速等简单地说明和分析仿真结果证明自己的测试过程。 我实验使用串口调试软件为XCOM,其发送和接收位于同一窗口中 最初Atmega328P启动时,在com口打印了我自定义的调试信息,表明bmp传感器已经注册,此时传感器设置初始压强为860,液晶显示器无显示,电机不转动,程序会阻塞等待com的消息
于com口发送学号20009101015后,串口接到Pressure:860信息,液晶显示器第一行打印ID:20009101015,第二行打印压强PRESS:860,由于压强没有超过865,电机不会转动
手动上调bmp传感器的压强数值到865,达到阈值,电机开始转动,转速从0开始增大
四、参考文献
Adafruit_BMP085.h
西电A测串口通信仿真-CSDN博客
五、程序设计 #include Wire.h
#include Adafruit_BMP085.h
#include LiquidCrystal.h // LCD控制相关库
#define EMPIN 7 //电机使用io7口
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 初始化LCD
Adafruit_BMP085 bmp; //这位更是重量级
String str1 ID:;
String str2 ;
String str3 ;
String PRE PRESS:;
String Pre Pressure:;
String id;
int len;
int last 0;
int pressure_limit;
int pressure_real;
int pressure_real_last;
int one_time_flag false;
void setup() {//setup只会在最开始执行一次,因此各种初始化,获取学号适合放在这里Serial.begin(9600); // 初始化串口设置波特率为9600lcd.begin(16, 2); //初始化1液晶显示器有6列2行pinMode(EMPIN, OUTPUT); // 设置连接直流电机引脚工作模式id getInput();str1 id;lcd.setCursor(0, 0);lcd.println(str1);len id.length();last id.substring(len - 3, len - 2).toInt();// Serial.println(last);pressure_limit 860 last;pressure_real_last 0;
}
String getInput() {Serial.flush();while (Serial.available() 0);delay(100);return Serial.readString();
}
void loop() {//loop会一直循环执行,适合启动后执行重复的操作,可以在其中定义并检查flag避免重复pressure_realbmp.readPressure()/100;if (pressure_real ! pressure_real_last) {//pressure_real_last是个flag,只有实时温度变化时才会刷新液晶屏和com口pressure_real_last pressure_real;str2 PRE String(pressure_real);str3 Pre String(pressure_real);lcd.setCursor(0, 1);lcd.print(str2);Serial.println(str3);if (pressure_real pressure_limit) {digitalWrite(EMPIN, HIGH);} else {digitalWrite(EMPIN, LOW);}}delay(100);
}