本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

自制基于气候变化的服装穿搭助手-MEGR 3171
发布时间:2021-04-30
分享到:
自制基于气候变化的服装穿搭助手-MEGR 3171
发布时间:2021-04-30
分享到:

对于许多忙碌的人来说,节省一秒钟的时间也很有帮助。使用此系统,您不再需要花费时间来考虑适合天气的最佳服装。该系统使用三个粒子氩气感测温度和湿度,并输出服装组合以获得最佳舒适度。

该系统通过三个传感器对温度、湿度进行局部测量,并将数据发送到粒子氩,粒子氩对这些数据进行评估,并生成理想的服装组合,且温湿度值会显示在液晶显示器上。

流程图:

硬件组件:

  • 粒子氩
  • 温度传感器
  • DHT22温度传感器
  • 标准液晶显示器 16*2
  • 旋转电位计 10kΩ
  • 试验板
  • 跳线

电路图:

1、湿度传感器电路图

2、温度传感器电路图

3、液晶显示电路图

设计步骤:

步骤一

为各个传感器布线、编码,使其能够相互独立地正确执行功能。

下图为三个回路的图像,液晶显示器显示使用从另外两个传感器收集的数据的初步测试结果。

代码:

1)温度传感器代码

//这个#include语句是由粒子IDE自动添加的。
#include <ThingSpeak.h>

TCPClient client;

unsigned long myChannelNumber = 1352061;
const char * myWriteAPIKey = "RUZQZYJ8SDJ84MXY";

int B = A5;
int C = D7;
int previouschecktime = 0;
double temperature_celcius() {
    return (analogRead(B) *(3.3/4096) -.5)/ .01;
    // 从模拟读数到毫伏的转换,以及制造商偏移

// 应该是直接连接
#define Data_Upload_Frequency 10000


void setup() {
    ThingSpeak.begin(client);
    
Particle.variable("outputTemperatureCelcius133171",temperature_celcius);
Particle.subscribe("recievedconfirmation",clean);
Particle.subscribe("Howard_LCD",sweep);
pinMode(C, OUTPUT);
}


void loop() {
temperature_celcius();
int fahr;
    fahr = ((1.8*temperature_celcius())+32); //将摄氏温度转换为华氏温度
if (previouschecktime + Data_Upload_Frequency < millis()){
    previouschecktime = millis();
    }
     Particle.publish("Gordon_TempC", String(temperature_celcius()));
    Particle.publish("Gordon_TempF", String(fahr));
    
     ThingSpeak.writeFields(1352061, myWriteAPIKey); 
      ThingSpeak.setField(3,fahr);
}


      
void clean(const char *event, const char *data){
    if (data){
    digitalWrite(C, HIGH);
    delay(2000);
    digitalWrite(C, LOW);
    delay(8000);
    }
}

void sweep(const char *event, const char *data){
    if (data){
    delay(5000);
    digitalWrite(C, HIGH);
    delay(2000);
    digitalWrite(C, LOW);
    }
}

void tempsubscribe(const char *event, String data){
    int dataval;
    dataval=String(data).toInt();
    if (dataval > 80){
    digitalWrite(B, HIGH);
    }
    else{
    digitalWrite(B, HIGH);
    delay(1000);
    digitalWrite(B, LOW);
    }
    if ((previouschecktime + Data_Upload_Frequency < millis()) && (dataval)) {
    int previouschecktime = millis();
    delay(4000);
    publishdata();
    }
}

 
void publishdata() {
    Particle.publish("recievedconfirmation", "TemperatureRecieved1", PRIVATE); 
    }

2)温湿度传感器代码

//这个#include语句是由粒子IDE自动添加的。
#include <Adafruit_DHT.h>

//这个#include语句是由粒子IDE自动添加的。
#include <ThingSpeak.h>

//本例假设传感器插入到CONN2中
#define DHTPIN D6     // what pin we're connected to

//这里我们定义使用的传感器类型
#define DHTTYPE DHT11        // DHT 11 

DHT dht(DHTPIN, DHTTYPE);

bool humid = false;

TCPClient client;

unsigned long myChannelNumber = 1352061;
const char * myWriteAPIKey = "RUZQZYJ8SDJ84MXY";

void setup() {
    
    ThingSpeak.begin(client);
    
 pinMode(D7, OUTPUT);
 Serial.begin(9600); 
 dht.begin();
 Particle.subscribe("Howard_LCD", l, ALL_DEVICES);

}

void loop() {
    //在测量之间等待几秒钟。
    delay(2500);

   //读取温度或湿度大约需要250毫秒!
    //传感器读数也可能高达2秒
    float h = dht.getHumidity();
    //读取温度为摄氏度
    float t = dht.getTempCelcius();
    //读取温度为华氏温度
    float f = dht.getTempFarenheit();

    //检查是否有读取失败,并提前退出(重试)。
    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }
    
    Particle.publish("Wilton_TempF", String (f));
    Particle.publish("Wilton_Humidity", String (h));

  ThingSpeak.setField(1,h);
  ThingSpeak.setField(2,f);
  
  Serial.print(dht.getHumidity());
  Serial.println("h");
  Serial.print(dht.getTempFarenheit());
  Serial.println("t");

  
  ThingSpeak.writeFields(1352061, myWriteAPIKey);  

  delay(5000); // ThingSpeak只会接受每15秒的更新。

}

    void l(const char *event, const char *data) {
        
            digitalWrite(D7, HIGH);
            delay(2000);
            digitalWrite(D7, LOW);
            delay(1000);
       
    }

3)液晶显示器代码

//这个#include语句是由粒子IDE自动添加的。
#include <LiquidCrystal.h>

//这个#include语句是由粒子IDE自动添加的。
#include <Adafruit_DHT.h>

//本例假设传感器插入到CONN2中
#define DHTPIN D6     // what pin we're connected to


//这里我们定义使用的传感器类型
#define DHTTYPE DHT11        // DHT11 

//DHT dht(DHTPIN, DHTTYPE);
int tempf=0;
int humidity=0;
LiquidCrystal lcd(5, 4, 3, 2, 1, 0);

void setup() {

  lcd.clear();
  lcd.begin(16, 2);
  //lcd.设置光标(0,0);
  //lcd.显示(" 温度 ");
  //lcd.设置光标(0,1);
  //lcd.显示("湿度");
  Particle.subscribe("Wilton_Humidity", h, ALL_DEVICES);
  Particle.subscribe("Gordon_TempF", f, ALL_DEVICES);
    // 打开一个串行端口来监控传感器值
    //顺序.开始(9600); 
   //顺序.显示("DHT11 test!");

    //dht.开始();
}

void loop() {
    // 在测量之间等待几秒钟
    delay(2000);


    Particle.publish("Howard_LCD",PUBLIC);
}
    void f(const char *event, const char *data) {
    // 通过串行方式打印数据
    lcd.clear();
   String temp=data;
   tempf=temp.toInt();
    lcd.setCursor(0,0);
    lcd.print(data);
    lcd.setCursor(4,0);
    lcd.print("F     ");
    if (tempf > 72) {
  lcd.setCursor(8,1);
  lcd.print("Shorts");
   }else {
  lcd.setCursor(8,1);
  lcd.print("Pants");
    }
}
    void h(const char *event, const char *data) {
    
    lcd.clear();
    lcd.setCursor(7,0);
    lcd.print(data);
    lcd.setCursor(10,0);
    lcd.print("%     ");
    String humid=data;
    humidity=humid.toInt();
    if (humidity > 64) {
  lcd.setCursor(0,1);
  lcd.print("T-Shirt");
   }else {
  lcd.setCursor(0,1);
  lcd.print("LSleeve");
}
    }

步骤二

让粒子氩处理、输出数据,通过让传感器使用粒子发布功能将收集的数据发送到云中,并使用粒子订阅功能从这些数据中提取液晶显示器显示来实现的。一旦数据被拉进液晶显示器代码,它可以被评估和配置,以输出基于温度和湿度的服装组合。

步骤三

查看的配置显示数据。通过将衣服的细节限制在各层(即短袖层、长袖层和外层)来实现的。温度和湿度的显示也包括在内,以说明通常感觉更热或更冷的人,并允许这种类型的人根据自己的偏好调整建议。

测试:

为了显示温度感应功能,将传感器带入HVAC单元出现故障的房间。除了低湿度外,这个房间还非常温暖(可以在下图中看到)。为了显示湿度,将DHT-22传感器放置在潮湿环境中一段时间​​,然后将其带入除湿建筑物。显示温度和湿度的图表如下所示:

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论