标题: arduino充氧仿真装置Proteus仿真程序 [打印本页]

作者: 橙小亮    时间: 2020-4-29 01:52
标题: arduino充氧仿真装置Proteus仿真程序
arduino充氧仿真装置仿真,这是用于给水进行充氧的,通过检测水压以及水温,再通过一个公式的计算,得到水中的氧含量。从而判断是否电机是否运行给水中鼓起充氧。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <OneWire.h>
  2. #include <DallasTemperature.h>
  3. #include <LiquidCrystal.h>
  4. #define MPX_PIN A1                        //定义压力传感器MPX4115的引脚连接
  5. #define LED_PIN     9                     //定义led指示灯的引脚连接
  6. #define MOTOR_PIN   9                     //定义电机的引脚连接
  7. #define DS18B20     10                    //定义ds18b20的引脚连接
  8. #define JIA_1       11                    //定义设定值+1的引脚连接
  9. #define JIAN_1      13                    //定义设定值-1的引脚连接

  10. OneWire oneWire(DS18B20);
  11. DallasTemperature sensors(&oneWire);

  12. LiquidCrystal myLcd(2,3,4,5,6,7,8);  //声明一个1602 LCD对象

  13. float temp = 0;  //初始化温度变量
  14. float mpx = 0;   //初始化压力变量
  15. float DOf = 5;
  16. int time_n = 0;   
  17. int time_num = 0;   
  18. float DOF = 5;        //初始设计氧含量的值

  19. void setup(){
  20.   // 初始库
  21.   sensors.begin();
  22.   
  23.   myLcd.begin(16,4);
  24.   pinMode(JIA_1,INPUT);
  25.   pinMode(JIAN_1,INPUT);
  26.   pinMode(MOTOR_PIN,OUTPUT);
  27.   analogWrite(MOTOR_PIN, 0);
  28.   Serial.begin(9600);
  29.   
  30.   myLcd.setCursor(0, 0);    //将1602 LCD光标移动到第一行第一列
  31.   myLcd.print(String("temp:"));
  32.   myLcd.setCursor(0, 1);    //将1602 LCD光标移动到第二行第一列
  33.   myLcd.print(String("mpx :"));
  34.   myLcd.setCursor(0, 2);    //将1602 LCD光标移动到第三行第一列
  35.   myLcd.print(String("Ture oxygen:"));
  36.   myLcd.setCursor(0, 3);    //将1602 LCD光标移动到第四行第一列
  37.   myLcd.print(String("Set oxygen :"));
  38. }

  39. void loop(){
  40.   
  41.   //测温
  42.   sensors.requestTemperatures(); // 发送命令获取温度
  43.   temp = sensors.getTempCByIndex(0);

  44.   //测压
  45.   mpx = analogRead(MPX_PIN);    //读取模拟量数据
  46.   mpx = map(mpx,54,973,15,115); //模拟量输出是54-973  测量的电压为15-115Pa**千万别改,测出来的
  47.   
  48.   //键盘检测
  49.   if(digitalRead(JIA_1) == HIGH){
  50.     DOF = DOF + 1;  
  51.     delay(100);        //消抖
  52.   }
  53.   else
  54.     DOF=DOF;
  55.    
  56.   if(digitalRead(JIAN_1) == HIGH){
  57.     DOF = DOF - 1;  
  58.     delay(100);       //消抖
  59.   }
  60.   else
  61.     DOF=DOF;
  62.    
  63.   //计算是否低于设定值
  64.   DOf = (mpx/101)*(471.01/(temp+31.98));      //101是大气压
  65.   if(DOf < DOF)
  66.     analogWrite(MOTOR_PIN, 255);
  67.   else
  68.     analogWrite(MOTOR_PIN, 0);
  69.   
  70.   //显示
  71.   myLcd.setCursor(5, 0);   
  72.   myLcd.print(String(temp) + String(" 'C"));
  73.   myLcd.setCursor(5, 1);  
  74.   myLcd.print(String(mpx) + String(" KPa"));
  75.   myLcd.setCursor(12, 2);   
  76.   myLcd.print(String(DOf));
  77.   myLcd.setCursor(12, 3);   
  78.   myLcd.print(String(DOF));
  79. }
复制代码

所有资料51hei提供下载:
充氧装置仿真.zip (3.44 MB, 下载次数: 35)


作者: 云天茗悠    时间: 2020-5-4 22:19
不错不错学习一下
作者: lovers    时间: 2020-6-19 08:20
设定氧气浓度那里 一直按没有反应啊,加到6就不动了
作者: Highnose    时间: 2020-10-24 12:10
请问楼主,这个压力传感器能放水里吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1