查看: 412|回复: 7

[未解决] 关于远程控制空调的方法与建议

[复制链接]

该用户从未签到

发表于 2019-4-21 20:18 | 显示全部楼层 |阅读模式
本帖最后由 a247451877 于 2019-4-21 23:56 编辑

我是一个刚接触arduino的初学者,想做一个能够远程监控室内温度,并且可以控制室内空调进行室内温度改变的方法
遇到关键的问题有两个:
1.使用什么比较简单的方法能够实现远距离传输信息和控制arduino(例如高温警报给你的手机,然后让你能够控制空调)
2.怎么控制空调的运行。
这里本人想了一个方法:
1.利用红外传感器对着空调接收器进行控制。(但查了一下资料发现红外的代码很麻烦)
就想问下还有没有其他比较简单的方法

另外
关于问题1的 使用什么通信模块比较好,并且能够相互传输数据的。
希望有大神能给个完整的总体方案(适合于初学者的)

  • TA的每日心情
    奋斗
    2019-6-9 21:59
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-4-22 08:47 | 显示全部楼层

    回帖奖励 +3 金币

    1.  让arduino具备上网功能即可
    2.  红外控制,不是很麻烦(自己用红外接收先测试下遥控对应的编码,然后放到arduino里面即可

    esp8266--互联网---手机

    该用户从未签到

     楼主| 发表于 2019-4-22 18:38 来自手机 | 显示全部楼层
    可是连外网是不是要自己搭个服务器

    该用户从未签到

     楼主| 发表于 2019-4-22 18:39 来自手机 | 显示全部楼层
    cporoske 发表于 2019-4-22 08:47
    1.  让arduino具备上网功能即可
    2.  红外控制,不是很麻烦(自己用红外接收先测试下遥控对应的编码,然后放 ...

    他们说连外网需要自己搭服务器
  • TA的每日心情
    奋斗
    2019-6-9 21:59
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-4-22 20:18 | 显示全部楼层
    不是有blinker这个吗你研究下这个就行了

    该用户从未签到

     楼主| 发表于 2019-4-22 23:59 | 显示全部楼层
    Arduino:1.8.5 (Windows 10), 开发板:"Arduino/Genuino Uno"

    C:\Users\澶ф妸鏄焅AppData\Local\Temp\arduino_modified_sketch_624349\sketch_apr22a.ino:1:21: fatal error: OneWire.h: No such file or directory

    compilation terminated.

    exit status 1
    为开发板 Arduino/Genuino Uno 编译时出错。

    在文件 -> 首选项开启
    “编译过程中显示详细输出”选项
    这份报告会包含
    这个是怎么回事啊
    我连了DS18B20  然后根据代码输进去显示是这个

    该用户从未签到

     楼主| 发表于 2019-4-23 00:00 | 显示全部楼层
    代码如下
    #include <OneWire.h>


    OneWire  ds(10);  // 连接arduino10引脚

    void setup(void) {
      Serial.begin(9600);
    }

    void loop(void) {
      byte i;
      byte present = 0;
      byte type_s;
      byte data[12];
      byte addr[8];
      float celsius, fahrenheit;
      
      if ( !ds.search(addr)) {
        Serial.println("No more addresses.");
        Serial.println();
        ds.reset_search();
        delay(250);
        return;
      }
      
      Serial.print("ROM =");
      for( i = 0; i < 8; i++) {
        Serial.write(' ');
        Serial.print(addr, HEX);
      }

      if (OneWire::crc8(addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          return;
      }
      Serial.println();

      // the first ROM byte indicates which chip
      switch (addr[0]) {
        case 0x10:
          Serial.println("  Chip = DS18S20");  // or old DS1820
          type_s = 1;
          break;
        case 0x28:
          Serial.println("  Chip = DS18B20");
          type_s = 0;
          break;
        case 0x22:
          Serial.println("  Chip = DS1822");
          type_s = 0;
          break;
        default:
          Serial.println("Device is not a DS18x20 family device.");
          return;
      }

      ds.reset();
      ds.select(addr);
      ds.write(0x44,1);         // start conversion, with parasite power on at the end
      
      delay(1000);     // maybe 750ms is enough, maybe not
      // we might do a ds.depower() here, but the reset will take care of it.
      
      present = ds.reset();
      ds.select(addr);   
      ds.write(0xBE);         // Read Scratchpad

      Serial.print("  Data = ");
      Serial.print(present,HEX);
      Serial.print(" ");
      for ( i = 0; i < 9; i++) {           // we need 9 bytes
        data = ds.read();
        Serial.print(data, HEX);
        Serial.print(" ");
      }
      Serial.print(" CRC=");
      Serial.print(OneWire::crc8(data, 8), HEX);
      Serial.println();

      // convert the data to actual temperature

      unsigned int raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
          // count remain gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
        // default is 12 bit resolution, 750 ms conversion time
      }
      celsius = (float)raw / 16.0;
      fahrenheit = celsius * 1.8 + 32.0;
      Serial.print("  Temperature = ");
      Serial.print(celsius);
      Serial.print(" Celsius, ");   
      Serial.print(fahrenheit);
      Serial.println(" Fahrenheit");
    }

    该用户从未签到

     楼主| 发表于 2019-4-23 00:02 | 显示全部楼层
    串口检查了一遍没问题
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    ArduinoJason6教程由ArduinoJson作者Benoit亲自出马一对一教学
    ArduinoJason6教程由Ardui
    这几天我觉得社区教学好像缺了点什么,呃呃~我想一想好像是缺少了ArduinoJson6的教学
    Arduino+L298N小车实例教程
    Arduino+L298N小车实例教
    (第一次写教程,如有错漏,敬请拍砖)Arduino+L298N小车实例教程Arduino小车是一个非
    零知开源分享-蓝牙模块与手机APP通信
    零知开源分享-蓝牙模块与
    本篇文章中将讲解蓝牙模块与安卓手机APP进行通信。1、说明MCU:零知开发板-标准板模
    DHT库无法被找到
    DHT库无法被找到
    今天在安装了DHT库之后在编译时却显示无法找到库,请问我是在哪里安装出错了,谢谢大
    (可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示
    (可远程)ESP8266读DHT11
    原理讲解 原理简述:利用发布订阅模式。第一步,先读取DHT11温湿度数值,第二步,新
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表