周末该做什么:远程控制对讲机,无预算的重新映射Nextion,与Onlaym摊牌



有时在星期五,这里的小说被认为是可以接受的。今天当然不是星期五,但这不是一个虚构的故事,而是三个与我的生活有关的迷你小说。

匆忙的读者可能还想知道什么关系可以真正将对讲机和Internet提供商联系起来。这是正确的,因为我也没有立即想到这一点。

但是,所有事情(Arduino,平庸的生活黑客,电话争吵)都是有秩序的。



Sim-sim,打开!


老实说,按照我的版本对讲机的遥控器几乎没有用,我什至在开始之前就完全意识到了这一点。因此,为了证明这项工作的正当性,正如他们所说的那样,我不得不运用所有的想象力提出一些案例。

首先,我决定,如果我还没有设法回家,我会以这种方式让客人在门廊中热身。或者,我不会特别烦恼事先获得钥匙-毕竟,您只需将手机设置好,以便它发出命令就可以在我进屋时打开门。

对于普通人来说,这听起来很疯狂,但正如他们所说,按照aspera ad astra。

我真的很想在这种情况下使用几个继电器,这些继电器从操作开始就一直在中央控制器中处于闲置状态。实际上,这种情况是荒谬的:当时只有4个继电器的块,而只需要两个。而且,我不想再等一个月来进行两次中继,所以我从手头收集了东西,立即开始担心冗余。

但是,对讲机。通常,对讲系统的自动打开并不是唯一的事情。例如,在Geektimes,同志在2013年(当时30美元),Cluster不仅制造了遥控器,还为客人制造了答录机

这是迄今为止我在这堂课中看到的最酷的东西。

但更早之前,RadioKota和许多其他主题论坛的访客在“开瓶器”等设备上玩得很开心 -通话时立即将对讲机解锁。

我不会重复任何一个。首先-因为很困难,并且因为我已经有一个工作的控制器,我打算赋予它新的权力。第二个原因更为明显:细节太多,理解太少,如果冒犯了作者,我深表歉意。

当然,对我而言,一点也不有意义。也就是说,我绝对不喜欢该计划,该计划为拨打公寓号码的任何人打开了大门。

因此,对我的开启器的基本要求是:

1)使用中央控制器通过Internet和无线电进行控制
2)最小程度地防止未经授权的访问
3)内部干扰最小

开始



我首先熟悉了对讲机的工作原理,这是我在这里借用的

该管的工作原理非常简单:放置该管时,其电阻为50欧姆,当移开该管时,该电阻约为1欧姆。400欧姆,当按下锁定释放按钮时,电阻以千欧姆为单位测量。...无呼叫时,线路中没有电压。当有电话打进来并且听筒放置大电流并且电压变为5-7V时,当听筒不存在并且电阻被称为无穷大且电压最大时。听筒关闭时的15V电压约为10V。当按下电压按钮时,最大值约为。15V-按下按钮等于换行。


在Digital的情况下,这稍有不同,因为手机的文档,但是我有KM-2NO(顺便说一句,我感谢Digital发布方案):

1.在“通话”模式下的电流消耗18-22 mA
2.安装在外壳上的带有管子
的线路中的电压1.5-2.5 V 3.带升高的管子的线路中的电压5.8-6.5 V


因此,我对管道的电路图有了更详细的了解:



我发现电阻方面的一切都完全相同,并且很可能数字的其余逻辑与Visit几乎没有什么不同。

我注意到我的修改没有LED的事实。但是事实证明这是正确的,因为这一事实使将呼叫信息传输到中央控制器变得非常容易。

即:通话响起,LED“点亮”,光耦合器点亮,在控制器引脚上,我们的电平从高电平变为低电平。

因此,我安装了4N35光耦合器而不是LED,其输出直接发送到Arduino。根据来自同一Internet 的标准方案



而且由于我想获得最少的细节和可用的控制器资源(其中数字引脚被证明是最有价值的(Uno的引脚数量不足)),而不是10K上拉电阻,因此我使用了Arduino内置的上拉电阻。

当连接到数字引脚时,它看起来像这样:

#define ringPin _

pinMode(ringPin, INPUT_PULLUP);


连接到模拟引脚时:

#define ringPin _

pinMode(ringPin, INPUT);
digitalWrite(ringPin, HIGH);


我决定从微控制器放光子。我无法证明这一点,但我认为由可能的取货导致误报的风险较小。他可能是错的,但到目前为止,一切正常,但有提示 他们不是。

至于上面示例中的接地,您需要了解:尽管接地在图中似乎很常见,但事实并非如此-实际上,实际上是光电隔离。好吧,为此他就是一个例子。

摆脱我!


彻底摆脱对讲电路的决定并不是立即做出的,而是不可避免的。顺便说一句,我非常想起六年前的情况,当时我看到安装ACS时如何形成带有电磁锁的尴尬时刻。

我不知道它是怎么发生的,但是事实证明城堡以某种方式起作用了。那个“爬网”,然后什么也没有,安装程序本身已经断了头。但是最后有人建议它们在控制电路中某处(或类似地方)发生意外短路。当然,由于按照说明进行了明确设置,因此我们检查了所有内容,当然并没有取得太大的成功。

完全相同的锁具有完全相同的构造,这增加了油量,但在另一层上却可以正常工作。

短暂地,他们决定此事发生在门本身上,门上装有锁。我认为,建议在安装过程中将其卡入电枢,然后将电枢接地,从而对锁产生意想不到的影响(对表壳可能具有控制锁)。

总的来说,它们整理得很长且乏味。我不想在家里重复同样的事情。

因此,我没有以最简单的方式节省电线并连接继电器触点:

1)常闭一个继电器-与上按钮SW1串联(因为此按钮在正常状态
是闭合的)2)常开另一个继电器-与SB1门打开按钮并联(因为此按钮通常是打开的)

当然,继电器控制触点已连接到微控制器的空闲数字引脚(仍然是万用表)。

总的来说,很容易想象它花了六根线:两根用于光耦合器,另外四根用于继电器。

对于插图的原始性,我深表歉意:

从对讲机




由Arduino




此处的继电器仅以示意图形式显示。重复一次,因为我使用了带有完整填充物的现成的继电器模块-光耦合器,晶体管,二极管等。我强烈建议不要将裸继电器连接到Arduino。

...并且不再给我打电话!


在这个阶段,我已经能够按照以下原则通过计算机或智能手机通过Internet或局域网轻松打开门铃:

1)门铃响起时,控制器进入允许模式以打开门40秒钟。时间是根据数字门电话的文档选择的,表明呼叫信号的持续时间正好是40秒。

即在更长的时间里,保持条件打开是没有意义的。

2)控制器通过Internet(HTTP POST)接收到打开命令后,控制器将顺序切换继电器。首先,它打开电子管继电器,以模拟其上升。然后,在短暂的停顿后,打开按钮继电器闭合,从而模拟其按下。之后-“释放”按钮并“挂断”电话。

测试台非常原始:



如果我作为KTSDV-12-2的骄傲拥有不知道这样做有何不便-每次需要打开/关闭某些东西时都要在遥控器或电话跑动,那么可能会停止这样做。

特别是,如果我最近还没有完成带有触摸屏台式气象站,并且看来还没有充分发挥其潜力。



简而言之,我很快(实际上-并非)向气象站添加了最常见且最粗俗的具有调幅功能的433 MHz发射机,这些吨数在Aliexpress上以可笑的价格出售。

结果,气象站已成为对讲机的另一个控制点,因此,如果门铃响了并且您坐在对讲机旁,则没有断开电话的感觉,因为可以从屏幕上直接进行操作:

1)打开锁

2)缓慢提起听筒(根据文档,通话持续1.5分钟,通话40秒),进入对讲机,接听并决定是否打开

电话3)接听电话(控制器接听并立即“向下”管)

要做到这一点,当然,必须稍微修改气象站的代码和接口,但我一路上,凡是有显示图形恼人的bug发现(因为它变成了-在我的DNA,但这是另一回事)。

顺便说一下,新接口现在看起来根本不像HAL。现在,一切都变得如此丰富多彩和有趣,您只需要笑即可。您会了解:我不喝冰沙,赶时髦的人不咬我,家里没有朗伯,材料使我前所未有地动摇:



当对讲机响起时,此屏幕将替换气候数据:此时,中央控制器发出无线电命令,气象显示对此作出响应。

在这里可能有点不合逻辑,但中心的钟声主要会告知您有关内部通话的信息​​。按下它(此处不合逻辑)会以最野蛮的方式使对讲机声音静音-通过模仿升高和降低听筒的过程。

左边的城堡是城堡的开口。右侧的手机-拿起听筒可以模拟通话的开始。

从通话开始40秒后,屏幕变为主屏幕,而不是立即按图标按钮。如果控制器突然没有“听到”命令,这使您可以按几次,这在使用的无线电信道类型中并不罕见。

演算法


正如我提到的,起初我很谦虚,只想做一件事:在电话中和通话时按命令打开对讲机。

但是玩了几天后,我意识到站在对讲机前面并在屏幕上戳是一项相当无聊的任务,当您接近入口处时允许“延迟”打开更为有趣。然后,仅需拨打门电话面板上的公寓号码,瞧,门就打开了。

最后,我认为在这种情况下,一般来说,禁止开放是有道理的。

但是后来他团结起来,然后放手,拿起了一个更有用的工具,通常称为Occam的剃刀,并迅速摆脱了多余的实体。即:因为我正在做遥控器,所以不是要关闭它。因此,根本不需要关机。

其次,根据清醒(而不是通常)的思想,事实证明,在调用时立即通过命令打开命令或通过给定命令打开命令之间没有特殊区别。

最后,回到控制的人体工程学,我想说的是,模式越多-普通人使用它们的机会就越少。是的,我很无聊,但是正如我想象的那样,我在不同的场合有三种模式,所以我意识到我仍然会使用一种模式。

因此,模式为1,命令为1,并且有两个处理器:

1)如果对讲机振铃,则控制器允许在通话开始后40秒内打开

2)如果首先收到打开命令,则控制器会在收到命令后的N分钟内允许打开并等待呼叫(这是为了准备对讲机以便在通往房屋的途中

打开

打开命令可能有两个来源:1)HTTP POST-通过本地网络或Internet(例如:myserver.com/?sim-sim-openup发出的请求,即您至少可以从吉隆坡打开

2)从房屋的面板或按钮发出无线电命令(在我的实现中,通过RC-Switch库

而且由于整个结构都连接到听筒而不影响其功能,对讲机可以继续以通常的方式使用(呼叫听筒喜按钮),即 国内,无法欣赏技术进步的优点,也无需深入研究细节。

突然奖金


即使您不使用开门器功能,现在事实证明控制器也会通过对讲机定期通知有人在抓挠入口门。对我来说,作为一个好奇的人,这些信息并非没有兴趣-现在我会定期收到它。

更重要的是,即使您用门开关关闭了门铃听筒,该功能也继续起作用。潜在地,这意味着,如果您突然需要暂时排除与他通话的可能性,那么现在使对讲机保持禁用的可能性较小。

不幸的是,对讲电路是如此关闭时,无法远程控制锁(似乎中央单元认为在这种情况下,无论手机的实际位置如何,手机都“挂了”)。

和美化


由于我一直在努力减少内部干扰,因此我必须根据控制器和门铃在门的不同侧并且控制器带电而门铃没有电的情况下,决定如何连接到中央控制器。



最后,我决定将电缆延伸到门框后面并用3D打印机上打印的装饰面板关闭其片段比占据另一个带电源的插座要好。



我认为在我的条件下,这是最佳选择。是的,该中继开始了业务,但是具有广播频道-仍然会保留。

重新映射下一步


在谈到桌面天气显示(如果需要的话,气象站)时,我提到在整理过程中,我设法损坏了主要组件-Nextion触摸屏本身。

故障没有影响他的板载微控制器和数据显示器的操作,但是触摸屏几乎失灵。但是,通过实验,我发现即使您在某个位置的Nextion板上没有施加太大的压力,也可以通过这种方式恢复屏幕左半边(大约)的灵敏度。

这个技巧虽然不稳定,但并非总是如此,但它经常足够使我忍受,考虑订购新屏幕。

当然,这让我感到高兴和悲伤。一方面,可以实现部分可操作性。另一方面,我想多玩一些图表。然后我突然意识到自己陷入了一个愚蠢的陷阱:由于某种原因,我迷上了整个屏幕区域,因为我可以自由地将“非工作”按钮转移到工作区域。

我了解对于许多人来说,这确实是一个平庸的决定。但我想与那些喜欢走极端的人分享无辜的喜悦。

因此,我弄清楚了,稍微改变了按钮的大小,在脑海中画了一个新的虚拟控制电路!我们几乎完全恢复了部分取消显示的功能。

它是:



它变成了:



但是,在此过程中,我不得不杀死一个完美主义者,然后将原来的屏幕门禁电话控制屏幕重做为工作最少的屏幕:



现场直播




当技术支持不合理时


似乎在所有这些起伏中,即使没有一个细节,也有可能完成:我突然发现对讲机(以及其后的自动化的其余部分)在从外部网络访问时不再受到控制。

也就是说,当通过家庭网络连接到Internet并连接到外部地址时,所有命令都可以完美地工作(而不是根据内部类型192.xxx.xxx.xxx),但是它们同样可以完美地拒绝从其他运营商的网络中执行(我尝试了两次)。

您应该立即了解,这些命令是通过HTTP请求传输到路由器的特定外部端口的,并且已经从那里重定向到必要的内部IP和端口。

自2013年推出以来,该计划一直没有出现任何问题,直到目前的计划出现了问题。而且我仍然确定这不是我的错。但我不知道如何检查。

实际上,起初我想对Beeline发誓,因为起初我以为问题出在移动互联网上。但是后来我团结起来,找到了另一个提供商,尝试了一下,发现通过它遇到了同样的问题。

然后我打电话给Onlaym,并尽我所能解释权利要求的实质。作为回应,他们普遍向我解释:

:
TCP/25 – -;
TCP/135-139, TCP/445 UDP/135-139 – , MS Windows;
TCP/23, TCP/161, UDP/69 UDP/161– .

, , .


反过来,我坚持要求我的端口a)不在此范围内,b)不能按预期工作,并且c)我没有进行任何更改。

豌豆墙怎么样?

好吧,我该怎么办,然后我有礼貌地解释说,尽管我知道我每个月不幸的450卢布对他们来说并不能解决天气问题,但是从这种胡说八道中,我将寻找同样的废话,但至少会奏效。

作为回应,他们再次喃喃地说他们是在向我提供IP,然后是我所有的问题。好吧,我决定,然后是我。根据一个坚决的决定,我首先检查了该系统在另一个端口(转移到一个单元)上的可操作性-它可以工作。然后,他在Tasker中对端口号进行了灵活的配置,实际上,方向盘是自动的。

实际上,按照我所描述的痛苦:我客观地真的想了解在这种情况下谁错了。因为我觉得自己是个白痴,所以我重新启动了路由器并检查了设置(而且,是我主动提出的,而不是在“专家”的提示下进行的),但他们仍然把我送到地狱,暗示着我的双手弯曲。

屏幕外


总之,我用于本世纪的建设:

1)KTSDV-12-2-1 pc。
2)门电话听筒数字KM-2NO-1个
3)光耦合器4N35-1个
4)扁平电缆10芯(使用了6芯,但还是放了一切-以防万一)-3 m。5
)电缆连接器-2个。爸爸妈妈
6)带Nextion触摸屏的自制天气显示 -1个。
7)用于修改天气显示的433 MHz发射器(来自此类套件)-1个。
8)1kΩ光电耦合器电阻-1个

选项:

更新了Nextion的界面

测试代码(与KTSDV-12-2集成并提供完整的服务功能之前,仅用于理解思路)
#include <RCSwitch.h> //   http://code.google.com/p/rc-switch/


#define ringTimeOut 40000 //       2094
#define openTimeOut 300000 //    allowOpen        
#define handsetPin A3 //    0
#define openPin A4 //    (1)
#define ringPin 7 //   (3)
#define ringCode 360500 //        
#define doorBell 3395840 //       
#define openCode 255899 //     
#define openDelay 1500 //    
#define handsetDelay 2500 //    
#define txPin 8

unsigned long ringTime, openTime; //    
boolean ring = false;
boolean ringRepeat = false; //       
boolean allowOpen = false; //     

RCSwitch mySwitch = RCSwitch();

//  
void openDoor() {
    
    digitalWrite(handsetPin, LOW);
    delay(handsetDelay);
    digitalWrite(openPin, LOW);
    delay(openDelay);
    digitalWrite(openPin, HIGH);
    digitalWrite(handsetPin, HIGH);
    ring = false; //   
    allowOpen = false; //      
    // sendMail(37); //           
}


void setup() {
  Serial.begin(9600);
  mySwitch.enableTransmit(txPin); //  
  mySwitch.enableReceive(0); //  
  pinMode(handsetPin, OUTPUT); //    
  pinMode(openPin, OUTPUT);
  pinMode(ringPin, INPUT_PULLUP  );
  digitalWrite(handsetPin, HIGH); //  
  digitalWrite(openPin, HIGH);
  Serial.println("Ready");
}

void loop() {
  
  if (digitalRead(ringPin) == LOW && ring == false) { //            
    ring = true; //    
    ringTime = millis();
    // sendMail(36); //     
    mySwitch.send(ringCode, 24);
    Serial.println("Sent ringCode");
    if (ringRepeat == true) { //      
      mySwitch.send(doorBell, 24);
      Serial.println("DoorBell repeat");
    }
    Serial.println("Ring-ring!");
  }

if ((millis() - ringTime) > ringTimeOut && ring == true) { //   40  (   )    
  ring = false; //   
  Serial.println("Ring reset");
  // sendMail(38); //      
}

//   
if (ring == true && allowOpen == true) {
  openDoor(); //  
  Serial.println("Door opened via net");
}

if (ring == false && allowOpen == true) { //  ""   
  if ((millis() - openTime) > openTimeOut) { //       
   allowOpen = false; 
   // sendMail(39); //     
  }
  
}

//   

if (mySwitch.available()) { //
    int value = mySwitch.getReceivedValue();
    if (value != 0) {
      Serial.println(mySwitch.getReceivedValue());
      switch (mySwitch.getReceivedValue()) {
        
        case openCode: //   
          if (ring == true) {
            mySwitch.disableReceive();
            openDoor(); //  
            Serial.println("Door opened via radio");
            mySwitch.enableReceive(0); //   
          }
          break;
    }
    mySwitch.resetAvailable();
  }

//   
}

}






我在精彩的png网站上为界面拍照

Source: https://habr.com/ru/post/zh-CN400367/


All Articles