旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家

2020-05-292.2万
AI 快速预览详细 收起
本项目介绍了如何利用闲置旧手机、Arduino和DTMF模块制作一个智能家庭管家。通过电话拨号,用户可以控制灯带的颜色变化和风扇的开关。项目中使用的DTMF模块能够识别电话通话中的键盘音频拨号,传输速度快且抗干扰能力强。硬件连接简单,只需按照提供的电路图进行连接,并下载程序到Arduino UNO板。此外,还需要设置旧手机来电自动接听模式。这个项目不仅适合STEM教育场景,也适用于偏远山区或地下室等无网络环境。

前言:

要知道如今的时代是智能大数据时代,人们对于手机的要求也是越来越高。我们的手机也越来越智能和豪华,甚至我们手中的手机就是饱含一切衣食住行的绝对保障。然而,智能手机虽然非常的方便,但是更新换代是非常的快,但是一款手机在人们手中是不会超过几年的时间,甚至每一年都会有各大手机厂商的最新版手机发行,而且人们不买还不行,不买你的手机随着系统的更新用不到最后,它会越来越卡顿。

所以现在几乎人人家里都有一两个那种很卡但是其实还能打电话的手机,大多数人都是拿去换盆了。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图1

想当初重金买的手机,现在就拿去换个几块钱的不锈钢盆,多么亏呀。

所以本贴重点来了,此乃变废为宝系列,今天就教大家如何用家里的旧手机+Arduino+DTMF模块等来打造一个智能管家,它可以控制你家里的电器哟(PS:由于为了方便演示,我只做了一个小型模型,但是原理都是一样的,并且所用继电器其实是可以承受10A电流 250V电压的所以其实完全可以接其他家用电器的,比如实现一键煮饭,一件键关灯,一键烧热水等等功能,我下面会详细讲解制作过程和源码,希望大家去拓展完善玩出更多的花样儿)。

你说啥???你家没有旧手机,全是新手机???那还不简单,再买一个新手机,现在的手机不就是旧手机了吗,哈哈哈{:5_133:}。开个玩笑,大家还是要理智消费,如果没有手机其实可以用DFrobot家的SIM7600CE-T 4G(LTE) Arduino扩展板代替。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图6

哈哈,我们先来看酷炫的效果演示视频吧,看完在讲解制作过程(建议带上耳机听,非专业设备录制,收音效果不太好,见谅呀)。





材料准备

  1. DFR0017  数字继电器模块(Arduino兼容)
  2. DFR0411    Gravity: 130 直流电机风扇 Arduino电机风扇模块-DFRobot
  3. SEN0117       Speech Synthesizer Bee语音合成模块带喇叭
  4. DFR0216-2    DFRduino UNO R3(含USB线|传感器扩展板)
  5. FIT0656       WS2812 RGB 全彩灯带(7灯珠)
  6. FIT0418       手机耳机/麦克风二合一转接头
  7. 插入SIM卡的手机两个(一个自用手机,一个闲置旧手机)
  8. 杜邦线若干

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图2

主要模块功能讲解

下面我只讲核心的模块,DTMF模块和WS2812灯带,其实其他的模块DFRobot家的产品wiki上面有详细的使用说明。

DTMF模块讲解:

DTMF(Double ToneMulitiFrequency,双音多频)作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,因此,可广泛用于电话通信系统中。但绝大部分是用作电话的音频拨号。另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。
DTMF是用两个特定的单音频组合信号来代表数字信号以实现其功能的一种编码技术。两个单音频的频率不同,代表的数字或实现的功能也不同。这种电话机中通常有16个按键,其中有10个数字键0~9和6个功能键*、#、A、B、C、D。由于按照组合原理,一般应有8种不同的单音频信号。因此可采用的频率也有8种,故称之为多频,又因它采用从8种频率中任意抽出2种进行组合来进行编码,所以又称之为“8中取2”的编码技术。

这是一款双音多频的音频解码扩展板,能够解码普通电话发出的奇特“噪音”。比如按下按键的声音、电话接通的声音等等,通过模块的解码可以转化为特定的数字信号,然后传递给Arduino用于触发其他动作。不论是固定电话,还是手机,只要通过音频线将声音传输到模块中,即可进行解码。这种电话遥控Arduino的方式,方便简单、可靠,并且它不需要连接到WIFI网络中,也就是说它可以胜任其他没有WIFI的复杂环境,比如一些偏远山区,地下室等场所。

通俗的来讲就是DFrobot家的这个DFMF模块它可以识别电话通话中的键盘的音频拨号,切传输快,抗干扰能力强,并且他兼容Arduino,所以它将是我把闲置旧手机变费为宝的核心模块。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图3

WS2812灯带原理讲解:

该灯带仅需一根信号线即可控制所有LED,每一颗LED都是一个独立的像素点,每个像素点都是由R,G,B三基色颜色组成,可实现256级亮度显示,完成16777216种颜色的全真色彩显示,同时像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还内置信号整形电路,有效保证了像素点光的颜色高度一致。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图4

让我们首先仔细看看LED灯条。它由5050型RGB LED灯组成,其中集成了非常紧凑的WS2812B LED驱动器IC。根据三个红色、绿色和蓝色LED的强度,我们可以模拟出我们想要的任何颜色。这些LED灯的优点在于我们只需使用Arduino开发板上的一个引脚即可控制整个LED灯条。每个LED在每端有三个连接器接口,两个用于供电,一个用于数据。箭头表示数据流方向。前一个LED的数据输出焊盘连接到下一个LED的数据输入焊盘。我们可以将灯带切割成我们想要的任何尺寸,也可以使用电线增加LED灯距离。

当然如果灯带上的灯珠太多,会导致arduino UNO驱动电流更不上,需要换更强大驱动能力的主板。

所有硬件准备好后,按照下图进行连接(图实在是画的丑,将就看吧。。。)。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图5

硬件接线说明:

喇叭按如图所示插在语音模块上,语音模块插在IO扩展板上,IO扩展版插在DTMF扩展板上,DTMF扩展版插在Arduino UNO板上,哈哈哈,感觉像在套娃。。。

DTMF上的音频接口插入音频线,音频线的另一头插入闲置旧手机的音频接口。

灯带的数据引脚接在UNO板的数字D13脚,灯带的正负极分别接在数字脚D13旁边的正负极上。

继电器的数字引脚接在UNO板的 数字D4引脚,继电器的正负极分别接到数字引脚D4旁边的正负极上。

风扇的正极接在继电器的NO脚(NO表示常开),继电器的com脚接到IO扩展版板的5v,风扇的负极接到IO扩展版的负极。

按照如图所示连接好电路后,便可以给uno供电下载程序啦。

把usb供电线插入电脑usb端口,然后打开arduino ID(如果没有安装可以去arduino官网下载安装),选择tools,然后选择开发板Arduino UNO,选择对应的串口(这里我的是COM12),选择完成后我们还需要安装相应的库文件(库文件在附件中)。

旧手机别换盆啦,教你结合DTMF模块做一个智能家庭管家图7

开始编写调试程序啦,并且上面都有注释,如果有什么疑问可在下方评论或者私信。

程序如下:

/*! *  
 *用DTMF+Arduino模块做一个智能管家
 *
 */
#include <DFRobot_NeoPixel.h>
#include <SoftwareSerial.h>
#include <dtmf.h>
#include "Syn6288.h"
// 创建对象
DFRobot_NeoPixel   neoPixel_7;

DFRobotDFPlayerMini myDFPlayer;

SoftwareSerial     softSerialmp3(10, 11);

Syn6288 syn;
uint8_t text9[]={0x20,0xCE,0xD2,0xCA,0xC7,0xD6,0xC7,0xC4,0xDC,0xB9,0xDC,0xBC,0xD2,0xD0,0xA1,0xB6,0xAB,0xBF,0xAA,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x31,0xB9,0xD8,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x32,0xB4,0xF2,0xBF,0xAA,0xBA,0xEC,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x33,0xB4,0xF2,0xBF,0xAA,0xC0,0xB6,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x34,0xB4,0xF2,0xBF,0xAA,0xD7,0xCF,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x35,0xB4,0xF2,0xBF,0xAA,0xB7,0xDB,0xBA,0xEC,0xB5,0xC6,0xC7,0xEB,0xB0,0xB4,0x36,0xB4,0xF2,0xBF,0xAA,0xB7,0xE7,0xC9,0xC8,0xC7,0xEB,0xB0,0xB4,0x37,0xB9,0xD8,0xB1,0xD5,0xB7,0xE7,0xC9,0xC8,0xC7,0xEB,0xB0,0xB4,0x38,0xB4,0xD3,0xCC,0xFD,0xC7,0xEB,0xB0,0xB4,0x39};//说明 
uint8_t text1[]={0x20,0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xBF,0xAA,0xB5,0xC6 };   //已为您开灯
uint8_t text2[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB9,0xD8,0xB5,0xC6};   //已为您关灯
uint8_t text3[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB4,0xF2,0xBF,0xAA,0xBA,0xEC,0xB5,0xC6};   //已为您打开红灯
uint8_t text4[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB4,0xF2,0xBF,0xAA,0xC0,0xB6,0xB5,0xC6};   //已为您打开蓝灯
uint8_t text5[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB4,0xF2,0xBF,0xAA,0xD7,0xCF,0xB5,0xC6};   //已为您打开紫灯
uint8_t text6[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB4,0xF2,0xBF,0xAA,0xB7,0xDB,0xBA,0xEC,0xB5,0xC6};   //已为您打开粉红灯
uint8_t text7[]={0xB4,0xF2,0xBF,0xAA,0xB7,0xE7,0xC9,0xC8};   //已为您打开风扇
uint8_t text8[]={0xD2,0xD1,0xCE,0xB9,0xC4,0xFA,0xB9,0xD8,0xB1,0xD5,0xB7,0xE7,0xC9,0xC8};   //已为您关闭风扇
int myDtmf;

//void printDetail(uint8_t type, int value);

DTMF dtmf; 

// 主程序开始
void setup() {

  Serial.begin(9600);
  neoPixel_7.begin(13, 7);//灯带数据脚连UNO数字引脚13,灯珠数7
  pinMode(4,OUTPUT);   //继电器数据脚连接UNO数字引脚4,设为输出模式
  digitalWrite(4,LOW); //默认置低
   neoPixel_7.clear(); //关闭灯带

  delay(500);

}
void loop() {
  // 读DTMF代码并且用串行输出

  myDtmf = dtmf.getDTMF();
  if( myDtmf != -1 )
  { 
    Serial.println(myDtmf);
    delay(100);
    switch(myDtmf)
    {
      //打开灯带,默认颜色彩虹色
      case 1:
        {  syn.play(text1,sizeof(text1),1);//合成text1,背景音乐1
          delay(500);
          neoPixel_7.showRainbow(0, 6, 1, 360);
          //neoPixel_7.rotate(1);
          //delay(1000);

          // delay(100);
           break;
        }
        //关闭灯带
       case 2:
        { 
          syn.play(text2,sizeof(text2),2);//合成text2,背景音乐2
          delay(500);
          neoPixel_7.clear();

          //delay(100);
          break;
         }
         //打开红灯
         case 3:
        { 
          neoPixel_7.setRangeColor(0, 6, 0xFF0000);
          syn.play(text3,sizeof(text3),3);//合成text3,背景音乐3
          delay(500);
         // neoPixel_7.clear();

          //delay(100);
          break;
         }
         //打开蓝灯
          case 4:
        { 
          neoPixel_7.setRangeColor(0,6, 0x00FFFF);
          syn.play(text4,sizeof(text4),4);//合成text4,背景音乐4
          delay(500);
          //neoPixel_7.clear();

          //delay(100);
          break;
         }
         //打开紫灯
           case 5:
        { 
          neoPixel_7.setRangeColor(0, 6, 0x993399);
          syn.play(text5,sizeof(text5),5);//合成text5,背景音乐5
          delay(500);
          //neoPixel_7.clear();

          //delay(100);
          break;
         }
         //打开粉红灯

           case 6:
        { 
          neoPixel_7.setRangeColor(0, 6, 0xFF6666);
          syn.play(text6,sizeof(text6),6);//合成text6,背景音乐6
          delay(500);
          //neoPixel_7.clear();

          //delay(100);
          break;
         }
         //打开风扇
       case 7:
        {
          syn.play(text7,sizeof(text7),7);//合成text7,背景音乐7
          delay(500);
          digitalWrite(4,HIGH);

          //delay(100);
           break;
        }
        // 关闭风扇
        case 8:
         {
          syn.play(text8,sizeof(text8),8);//合成text8,背景音乐8
          delay(500);
          digitalWrite(4,LOW);
           // delay(100);
           break;
          }
          //管家播报说明
        case 9:
      {
         syn.play(text9,sizeof(text9),9);//合成text9,背景音乐9
         delay(30000);
         break;
      }
        default:
          break;

  }

  } 
}
      程序烧录完成后,还需要对连接音频线的闲置旧手机进行设置成来电自动接听模式。设置方法如下:(由于每个品牌的手机设置有一定差异化,我就不放图啦,实在操作不来,可以百度一下你的手机品牌的设置方法,这个很简单的,我相信一定不会难道大家的)
1. 点击设置
2. 进入电话设置
3. 进入接听设置
4. 选择自动接听
5. 选择3s延时
到这一步后,智能管家系统就搭建完成啦。用我们的手机给你的智能管家打电话(拨打旧手机上的电话卡的电话号码),然后它会自动接听哦,接听后在键盘输入相应的号码,它就会帮你执行相应的操作哟,是不是很炫酷呀,哈哈哈。
     虽然程序里面有,但是我这里还是介绍一下我的智能家庭管家小东的功能:
拨打通电话后,按9——语音播报功能说明,说明每个按键号码的功能。
                        按1——为您开灯(演色默认为七彩色)
                        按2——为您关灯
                        按3——为您打开红灯
                        按4——为您打开蓝灯
                        按5——为您打开紫灯
                        按6——为您打开粉红灯
                        按7——为您打开风扇
                        按8——为您关闭风扇
我只是做了一个模型演示,相当于抛砖引玉咯,由于我是租的房,不敢给房东搞得太花哨,哈哈哈,希望有小伙伴可以把它真正用到自己的家中,欢迎和我讨论交流哟。


库文件和代码.rar

594.6 KB, 下载次数: 6806

程序中所用库下载

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
pATAq
pATAq
可是旧手机不敢换脸盆,里面的数据怕泄露
pATAq
pATAq
第一次听说这个模块,学习了
dofanng
dofanng
这个要是真用在家里得换什么板子才能搞定呀
代码应该敲的东
代码应该敲的东
作者
回复dofanng
你想真正控制家里面的设备,多加几个继电器就搞定啦,把设备都和继电器相连
代码应该敲的东
代码应该敲的东
作者
回复dofanng
板子一样的呀,只是需要把灯接继电器上
LuckyE
LuckyE
强力支持啊!这个
代码应该敲的东
代码应该敲的东
作者
回复LuckyE
哈哈,谢谢呀
- 没有更多了 -