Proteus+FPGA项目设计联合仿真

本项目包含proteus仿真arduino,fpga控制pwm,solidworks制图,web网站。

项目名称:化学工厂有毒气体监控和预警系统

项目简介:主要包含温度传感器,声光模块,lcd显示屏,直流电机,烟雾传感器,红外线传感器。

这里先post一个arduino代码。(由于代码是自己写的,所以注释废话啥的比较多,见谅😓)

//先设计,设计完了立刻调试,不要等到最后一起!!
//引用传感器库
#include <MQ2.h> //气体浓度高,数值越高
#include <dht11.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins



//定义传感器引脚

//如果用int类型来命名引脚的话 int DHT11PIN 2  会占用内存空间 一共只有2KB的空间可以用来存储运算数据,如果我们写了很多类似的int型代码,则有可能会出现内存不足的现像,尽可能的节约对SRAM的使用,这就出现了#define LED 13;这种写法
//为了防止后面的esp8266需要中断口 改为9号引脚
#define smog_AI A0 
#define smog_DI 3  //暂时用不到
#define flame_DI 4
#define buzzer_DO 5
#define light_yellow 6
#define light_red 7
#define relayPin 8
#define DHT11PIN 9
LiquidCrystal lcd(15, 14, 12, 11, 10, 2);
//0、1为Rx、Tx 针脚,这两个针脚一般作为串口使用,非串口设备尽量不占用该针脚。(Rx发送,Tx接收)
//2、3为中断口,分别对应中断0、中断1,需要中断功能的设备,必须接入此。
//2~13、A0~A5,共18个针脚,都可以作为数字针脚,编号连起来,分别是2~19。
//13针脚只能为OUTPUT模式,只能作为输出端,不能用作输入端。
//A6、A7针脚只能用做模拟信号,不能用作数字信号。
//除了0、1、13、A6、A7这几个针脚比较特殊外,其他的针脚都可以按照正常功能使用。也就是说,2~12、A0~A5这17个针脚,基本可以放心使用
//3,5,6,9,10,11 可以输出pwm波


//定义气体传感器 保存烟雾数据
float smogValue=800;  //variable to store sensor value

dht11 DHT11;  //类名
String incomingByte;
String inData;
String function;



//定义预警阈值
#define GAS_THRESHOLD 300 //没有找到合适的,暂定300
#define TEMP_THRESHOLD 30  //预警系统只对最高温度进行响应,由于项目的可拓展性强,所有的阈值都来自于一般产品中的指导数值
#define HUM_THRESHOLD_min 45  //暂时没想到湿度的危害
#define HUM_THRESHOLD_max 45

void setup() {
  
  //初始化传感器引脚
  pinMode(DHT11PIN,INPUT);
  pinMode(smog_AI,INPUT);
  pinMode(flame_DI,INPUT);
  pinMode(buzzer_DO,OUTPUT);
  pinMode(light_yellow,OUTPUT);
  pinMode(light_red,OUTPUT);
  pinMode(relayPin, OUTPUT);

  lcd.begin(16, 2);
 // Print a message to the LCD.
  lcd.print("TEMPRATURE: ");
  
  
  Serial.begin(9600);

}

void loop() {
  //dht11读取温湿度数据
  int chk = DHT11.read(DHT11PIN);

  
  //dht11读取数据,打印
  float humiditity =DHT11.humidity;
  float temp = DHT11.temperature;
  Serial.print("Humidity (%): ");
  Serial.println(humiditity);
  delay(100);
  //Serial.println(humiditity, 2);
  Serial.print("Temperature (oC): ");
  Serial.println(temp);
  delay(100);

  //mq2读取打印气体浓度
  smogValue = analogRead(smog_AI); 
  Serial.print("Smog Value: ");
  Serial.println(smogValue);
  delay(100);
  lcd.setCursor(0,1);  
  // Print a message to the LCD.  
  lcd.print(humiditity);
  lcd.setCursor(0,2);
  lcd.print(temp);
  

  
  //红灯亮,蜂鸣器响,启动继电器
  if(digitalRead(flame_DI) == LOW && digitalRead(smog_DI) == LOW && temp >= TEMP_THRESHOLD) //当模拟值大于1时蜂鸣器鸣响,阈值根据实际测试进行修改,为了防止误报,加入多条件限制 温度加入是考虑到吸烟的情况
   {
    Serial.println(" | Fire detected!  ");
    
    digitalWrite(buzzer_DO,HIGH);//设置该引脚为高电平
    delay (100);
    digitalWrite (buzzer_DO,LOW);//设置该引脚为低电平
    delay(100);//输出pwm波为200ms 占空比50%
    digitalWrite(buzzer_DO,HIGH);//设置该引脚为高电平
    delay (100);
    digitalWrite (buzzer_DO,LOW);
    delay(100);    
    digitalWrite(light_red,HIGH); 
    delay(140); 
    digitalWrite(light_red,LOW);
    delay (70);
    digitalWrite(light_yellow,HIGH); 
    delay(120);
    digitalWrite(light_yellow,LOW); 
    delay(80);

    digitalWrite(relayPin,HIGH);
    delay(160);
    digitalWrite(relayPin,LOW);
    delay(40);          //由于arduino只能处理单线程,所以必须中断。 多个设备依次执行任务时,delay的时间应保持一直,如果相差一个数量级以上,在proteus中效果不明显
             
    

    
  }
  //mq2检测气体浓度和温度 黄灯闪烁 蜂鸣器启动
  else if(digitalRead(smog_DI) == LOW && temp >= TEMP_THRESHOLD) 
   {
    digitalWrite(relayPin,LOW);
    Serial.println(" | Smoke detected!  "); 
    
    digitalWrite(buzzer_DO,HIGH);//设置该引脚为高电平
    delay (100);
    digitalWrite (buzzer_DO,LOW);//设置该引脚为低电平
    delay(100) ;
    digitalWrite(light_red,HIGH); 
    delay(140); 
    digitalWrite(light_red,LOW);
    delay (70);
    digitalWrite(light_yellow,HIGH);
    delay(120); 
    digitalWrite(light_yellow,LOW);
    delay (80);

  }//dht11检测气体 红黄灯闪烁 
  else if(digitalRead(smog_DI) == LOW){
    digitalWrite(light_red,HIGH); 
    delay(140); 
    digitalWrite(light_red,LOW);
    delay (70);
    digitalWrite(light_yellow,HIGH); 
    delay(120);
    digitalWrite(light_yellow,LOW); 
    delay(80);
    
    }
//  //dht11检测温度 黄灯闪烁 蜂鸣器启动
//  else if (temp >= TEMP_THRESHOLD)
//  { 
//    digitalWrite(relayPin,LOW);
//    Serial.println(" | Heated temperature!  "); 
//    
//    digitalWrite(buzzer_DO,HIGH);//设置该引脚为高电平
//    delay (100);  //不能设置的太小 不然proteus仿真结果不明显看不出来
//    digitalWrite (buzzer_DO,LOW);//设置该引脚为低电平
//    delay(100) ;
//    digitalWrite(light_yellow,HIGH); 
//    delay(120);
//    digitalWrite(light_yellow,LOW); 
//    delay(80);
//    }
    else if(temp >= TEMP_THRESHOLD){
    digitalWrite(light_yellow,HIGH); 
    delay(120);
    digitalWrite(light_yellow,LOW); 
    delay(80);
      }

//    int ledPin = 9; // PWM波输出引脚
//
//void setup() {
//  pinMode(ledPin, OUTPUT); // 设置引脚为输出模式
//}
//
//void loop() {
//  for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) { // 逐渐增加PWM占空比
//    analogWrite(ledPin, dutyCycle); // 生成PWM波
//    delay(10); // 延时一段时间
//  }
//  for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) { // 逐渐减小PWM占空比
//    analogWrite(ledPin, dutyCycle); // 生成PWM波
//    delay(10); // 延时一段时间
//  }
//}

    
    
    
      if(Serial.available()>0){//串口数据接收
        char ch=Serial.read();
        if(ch == 'a'){
        digitalWrite(light_yellow,HIGH);
        }else if(ch == 'b'){
    digitalWrite(light_yellow,LOW);
        }else if(ch == 'c'){
        digitalWrite(light_red,HIGH);
        }else if(ch == 'd'){
    digitalWrite(light_red,LOW);
        }else if(ch == 'e'){
    digitalWrite(buzzer_DO,HIGH);
        }else if(ch == 'f'){
    digitalWrite(buzzer_DO,LOW);
        }else if(ch == 'g'){
    digitalWrite(relayPin,HIGH);
          }else if(ch == 'h'){
    digitalWrite(relayPin,LOW);
          }
   }
}

C#示例

solidwork示例

web示例

Proteus仿真的库 https://mp.csdn.net/mp_blog/creation/editor/new/128996230

Arduino代码【免费】Proteus+FPGA项目设计联合仿真(Arduino源代码)-公共安全文档类资源-CSDN文库

C#代码Proteus+FPGA项目设计联合仿真(C#上位机)资源-CSDN文库

solidwork源文件Proteus+FPGA项目设计联合仿真(solidworks)资源-CSDN文库

Verilog代码(设计时应注意 时钟频率周期太长 不足以显示一个完整的pwm波 )

Proteus+FPGA项目设计联合仿真(FPGA仿真)资源-CSDN文库

Web代码Proteus+FPGA项目设计联合仿真(Web)资源-CSDN文库

Proteus仿真Proteus+FPGA项目设计联合仿真(proteus)-公共安全文档类资源-CSDN文库

由于自己在做项目的时候发现网上的有关资源少得可怜,特写此博客。

注:以上内容仅供参考,如有因为抄袭而引起的事件,本人概不负责!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值