查看: 571|回复: 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 | 显示全部楼层
    串口检查了一遍没问题
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Wemos D1解析blinker气象数据制作中文台历
    Wemos D1解析blinker气象
    blinker气象数据能够非常方便的获得各地气象数据从Serial中打印出来,我用Wemos D1,
    LD3320怎么才能编译成功?
    LD3320怎么才能编译成功?
    一开始从http://www.waveshare.net/study/article-11-1.html下了VoiceLED-V2文件,然
    怎么在Arduino 1.0.6版本下载ESP8266?
    怎么在Arduino 1.0.6版本
    因为某种需要,只有Ardunio1.0.6版本可以用,它的首选项是下面这样的,工具开发板下面
    【分享】UNO直接测量电容容量
    【分享】UNO直接测量电容
    查找 Arduino 库的时候,偶然间看到了 Capacitor 这么个库,可直接用 UNO 测试电容,1
    【原创】尝试手工焊接16U2版本UNO
    【原创】尝试手工焊接16U2
    之前发过一个帖子,焊接了 CH340 版本的 UNO,运行良好。 然而对于原版的设计方案(16
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表