一目了然地控制电器,无线电遥控模型,电动婴儿车



在我以前的文章中,我谈到了如何帮助瘫痪者与外界进行交流:传达他们的欲望,写信,仅使用他们的眼睛和跟踪视线的设备(眼动仪)浏览互联网。 在这种情况下,实际上,一个人仍然受到计算机和床铺世界的限制。

在这里,我将讨论最简单的方法(以我自己的观点),以自己改变外界的东西:在新年树上打开灯或花环,在无线电控制下控制全地形车,使电动车向正确的方向移动。

目录内容


引言
所需组件
将Arduino连接到计算机
电源插座控制方案
电机控制电路

引言


除了本文中介绍的注视跟踪设备和免费软件外,我们还需要将计算机连接到外部对象的设备。

尽管出售了可以通过计算机控制的各种设备,但对我而言,最简单,最便宜的选择是使用两个部分:一个Arduino开发板和一个多继电器开发板。

如果您从未接触过Arduino,仍然不会停止阅读,那么将来您会发现在这种情况下使用它非常简单,有很多基于Arduino的儿童设计师并非没有。

同时,如果您不熟悉电气安全性并且从未在房屋中进行电气接线,请不要尝试重复使用与插座连接的电路!

您需要了解的所有关于Arduino的信息:这是一种小型设备,可以插入计算机的USB端口,然后可以根据收到的说明打开/关闭其触点上的电信号。

信号的功率很低,因此为了控制功能更强大的东西(例如电灯泡),我们放置了一个继电器单元,该继电器单元根据Arduino的信号来闭合和断开外部设备的控制触点。 另外,继电器将Arduino +计算机的电路与被管理设备的电路隔离。
因此,下面将描述的电源插座和电动机的控制电路的基础如下:两个部分通过电线相互连接,通过USB电缆连接到计算机,并且电线连接到我们想要控制的部分:



在现实世界中,它可能看起来像这样:



我们从计算机发送命令,Arduino的触点之一打开/关闭继电器,这是任何设备的开关或设备上的单独按钮。

所需组件


我们将需要它(括号中是当地商店的2018年价格。那些在中国购买可以节省很多钱,但会浪费时间):

1)带有USB电缆的Arduino UNO板(可能在售后市场,便宜的CH340而不是昂贵的FTDI)(450卢布)

2)具有四个继电器的电路板,该继电器在5伏电压下工作,并能够控制220伏电压的设备。 (450卢布)。 仍然有工作在12伏特上的电路板,请勿混淆!

3)一束用于连接两个板的电线。 在我的情况下,由于继电器模​​块具有引脚触点,而Arduino具有插座,因此需要在一侧带有插座而另一侧带有引脚的电线。 购买电线(150卢布)时,请看一下板上的连接器。



将Arduino连接到计算机


首先,从www.arduino.cc安装Arduino编程软件:

在页面https://www.arduino.cc/en/Main/Software上,单击“ Windows Installer”:



点击“仅下载”:



下载并运行安装程序:



我们在所有方面都达成共识:









安装程序后,使用USB电缆连接Arduino板和计算机。

Arduino板上的指示灯点亮,并且在设备管理器中,您会看到一个新端口已出现,并且已为其分配了一定的编号,例如COM3:



让我们将其编号更改为COM9,因为将来所有内容都将专门与COM9绑定。 为此,右键单击它,调用上下文菜单并在其中选择“属性”:



在“端口参数”选项卡上,单击“高级”按钮:



最后,选择“ COM9”作为COM端口号。



使用“确定”按钮关闭所有打开的窗口,然后拔下并插入USB电缆以验证如果将Arduino插入到计算机的同一USB端口中,它将继续通过COM9端口进行连接:



现在从站点调用并配置最近安装的Arduino程序:



在“工具”菜单中,设置“ Arduino UNO”板和端口“ COM9”:



现在,一切准备就绪,可以收集计划并为计划注入生命。

电源插座控制方案


如果您不熟悉电气安全并且从未在房屋中进行过接线,请勿尝试重复此图! 该电路会危及生命!

再次,控制问题:

  • 您知道如何区分相线和插座中零线吗?
  • 您是否知道如何对电线进行振铃并确保插入后没有短路?

如果您不确定要回答这些问题,请请经验丰富的人员来组装电路。

现在到了重点。

它是这样的:


套接字连接图如下所示:



我们直接向插座提供零,并通过继电器提供相位。 如果执行相反的操作,则可以使用,但是可能会因关闭故障设备而引起电击危险。 也就是说,抢占已关闭的故障电视,这将使您震惊。

如果房屋有保护接地,请使用接地插座。

接下来是我的参考设计。 在其中,我对电线的颜色犯了一个错误:中性线的颜色变成了棕色,相变成了蓝色。 注意这一点。

我们从一块板子上取一块合适大小的板子(从左到右):Arduino,继电器块,四个插座,一个将电线压到板上的支架。



我们切掉多余的部分,并用凿子在电线上开槽,以便它们自由地安装在插座下面。



我们用螺丝将Arduino开发板和继电器块拧到板上,并放置塑料垫圈。



如果垫圈不在手边,则可以切下销钉:



准备电线:切成所需的长度,然后将其从绝缘层剥去。 建议在与插座和继电器接触的地方用烙铁给它们镀锡。



用支架将电线按到板上,以免拉出。



我们连接电线并拧紧插座。 我们称之为连锁。





根据上图,我们用一束电线将Arduino开发板连接到继电器单元。



我们用非导电材料的保护层覆盖木板。 这必须在此处执行,因为危及生命的电压适用于继电器块! 在极端情况下,至少要包裹继电器的电触点。

我将硬塑料制成的容器用作外壳,并用螺钉将其固定:



切记在USB电缆上打一个孔。



将设备连接至计算机,但请勿将其插入电源插座

我们启动“ Arduino”程序并将其复制到此处:

//     2,3,4,5 int Relay1=2, Relay2=3, Relay3=4, Relay4=5; void setup() { pinMode(Relay1,OUTPUT); pinMode(Relay2,OUTPUT); pinMode(Relay3,OUTPUT); pinMode(Relay4,OUTPUT); Serial.begin(9600); } void loop() { delay (200); // 1.     while(Serial.available()) { switch(Serial.read()) { case '0': //    digitalWrite(Relay1,0); break; case '1': //    digitalWrite(Relay1,1); break; case '2': //    digitalWrite(Relay2,0); break; case '3': //    digitalWrite(Relay2,1); break; case '4': //    digitalWrite(Relay3,0); break; case '5': //    digitalWrite(Relay3,1); break; case '6': //    digitalWrite(Relay4,0); break; case '7': //    digitalWrite(Relay4,1); break; } // switch } // while } 

然后单击Arduino中程序的下载按钮(请参见下图)。 如果一切顺利,那么我们将看到“下载完成”字样。



检查我们的设备是否执行了命令。 为此,请调用端口监视器:



现在,我们输入数字1 ,然后按Enter或“提交”按钮:



将听到继电器的特征性咔嗒声,第一个插座中的触点将连接到相线。 用测试仪检查一下。 然后拨数字0,继电器将断开触点。

查看程序的文本,您可以看到如果我们输入其他数字会发生什么:

3.2-打开,关闭第二个插座

5,4-打开,关闭第三个插座

7.6-打开,关闭第四个插座

用测试仪检查这些插座的连接。 检查后,您可以将电线连接到网络中的电压,然后开始打开/关闭真实设备。

我们的下一个任务是一目了然地打开和关闭设备。 为此,我们配置本文中描述的bkb程序(需要该程序的最后版本!)

假设我们要打开和关闭灯和圣诞树花环。
在标准的Paint程序中,我们以BMP格式绘制四个200x200的图形:



我们还将创建四个批处理文件: c.cmd,d.cmd,e.cmd,f.cmd

它们将包含用于将字符1,0、3、2发送到COM9端口的命令。 而且我们还记得它们打开和关闭了第一个和第二个插座。 在这些文件的两行之间没有空行很重要!

c.cmd:

 MODE COM9: BAUD=9600 DATA=8 STOP=1 PARITY=N to=off xon=off odsr=off octs=off rts=off idsr=off dtr=off echo 1 > com9: 

d.cmd:

 MODE COM9: BAUD=9600 DATA=8 STOP=1 PARITY=N to=off xon=off odsr=off octs=off rts=off idsr=off dtr=off echo 0 > com9: 

e.cmd:

 MODE COM9: BAUD=9600 DATA=8 STOP=1 PARITY=N to=off xon=off odsr=off octs=off rts=off idsr=off dtr=off echo 3 > com9: 

f.cmd:

 MODE COM9: BAUD=9600 DATA=8 STOP=1 PARITY=N to=off xon=off odsr=off octs=off rts=off idsr=off dtr=off echo 2 > com9: 

我们将覆盖bkb程序的grid目录中创建的.bmp.cmd文件。

在表格模式下启动bkb程序后,将出现带有图片的第五行:



当我们将目光停留在图片上时,将启动相应的操作。

注意! 启动程序后的第一次,该操作不起作用。 随后的所有时间-它起作用。 这是由于以下事实:在端口的首次初始化期间,DTR线上的信号发生了变化,这导致Arduino重新启动,持续了大约三秒钟。

他们说可以用烙铁解决,但是我不敢从事这种珠宝工作。 因此,现在,请记住,第一次需要打开两次。

备注

您可能已经了解,在.cmd文件中,您可以调用任何外部程序。 如果您有可以通过命令行控制的任何设备,则您自己可以通过将必要的操作分配给表中的任何图片来执行此类命令。

电机控制电路


我的朋友升级了陀螺踏板车,并将其替换为婴儿车的后轴。 管理是通过Arduino板通过遥控器进行的。



我们决定尝试给孩子一个机会,让他们一眼就能控制婴儿车。 为此, 轮椅控制模式添加到bkb程序中



在此模式下启动后,屏幕上会出现箭头,外观使程序将控制字符发送到COM9端口,然后由童车解释为向前/向后移动,向左/向右旋转并停止。


在确定婴儿车的状态时,我决定使用相同的程序对履带式坦克模型进行远程控制。 这也是非常有用的事情。 首先,孩子获得了对控制婴儿车有用的技能。 其次,这只是一个令人兴奋的游戏。



坦克的每条轨道都由可以向前或向后移动的杆控制。 向前移动操纵杆时,他按下按钮,迫使电动机向前旋转。 向后移动操纵杆时,他按下了按钮,这使电动机沿相反方向旋转。 不能同时按下两个按钮-前进和后退是不可能的。
根据下图,继电器单元已连接到遥控器的按钮。 该电路不允许同时激活“电动机前进”和“电动机后退”按钮。 一个继电器打开/关闭电动机,第二个继电器选择正向或反向。

根据上图,在控制面板上找到按钮已连接的地方并连接到它们。

请注意,与之前的电路不同,Arduino通过引脚6到9控制继电器块。



我通过连接器将继电器块连接到遥控器,以便可以轻松断开遥控器并单独使用:



Arduino需要下载的程序从计算机接收与用于控制电动婴儿车相同的命令:

F向前
B背
L向左
R右
停止

该程序的文本在下面给出。

 //     6,7,8,9 int Relay1=6, Relay2=7, Relay3=8, Relay4=9; int heartbeat=0; //     void setup() { pinMode(Relay1,OUTPUT); pinMode(Relay2,OUTPUT); pinMode(Relay3,OUTPUT); pinMode(Relay4,OUTPUT); Serial.begin(9600); } void RCStop() { digitalWrite(Relay1,0); digitalWrite(Relay2,0); digitalWrite(Relay3,0); digitalWrite(Relay4,0); } void RCForward() { digitalWrite(Relay1,1); digitalWrite(Relay2,1); digitalWrite(Relay3,1); digitalWrite(Relay4,1); } void RCBack() { digitalWrite(Relay1,1); digitalWrite(Relay2,0); digitalWrite(Relay3,1); digitalWrite(Relay4,0); } void RCLeft() { digitalWrite(Relay1,1); digitalWrite(Relay2,0); digitalWrite(Relay3,1); digitalWrite(Relay4,1); } void RCRight() { digitalWrite(Relay1,1); digitalWrite(Relay2,1); digitalWrite(Relay3,1); digitalWrite(Relay4,0); } void loop() { // 1.     while(Serial.available()) { switch(Serial.read()) { case 'S': //  ! RCStop(); heartbeat=0; break; case 'F': //  ! RCForward(); heartbeat=0; break; case 'B': //  ! RCBack(); heartbeat=0; break; case 'L': //  ! RCLeft(); heartbeat=0; break; case 'R': //  ! RCRight(); heartbeat=0; break; } // switch } // while // 2.    //       -   delay(10); heartbeat++; if(heartbeat>30) { heartbeat=30; //    ! RCStop(); //   -   } } 

如果与计算机的连接中断(0.3秒内没有字符到达,则Arduino将关闭电动机)。 可以通过在控制眼睛的同时闭上眼睛来模拟这种情况。 Aitreker将无法确定视角方向,也不会发送信号。 电机将停止。

我为坦克模型配备了摄像机,通常称为交换率或FPV(第一人称视角),该摄像机以大约5.8 GHz的频率传输模拟信号。 我拿着最便宜的相机之一,也配备了发射器和天线:AKK BA-3。 它花了我1050卢布。 带有发射器的相机非常小,可以装在Lego人物手中:



要使相机正常工作,需要做的就是将其连接到电源(3.2伏至5.5伏)。 然后用一个按钮选择发射器的范围,频率和功率。

相机会明显发热,因此我建议设置最小功率(25毫瓦)。 此外,我将其连接到6伏电压的储罐电池,该电压超过了允许值。 因此,我不知道它将持续多久。 我建议您使用稳压器为相机供电。

安装摄像机时,我将Lego构造函数的一个元素粘贴到了水箱上,其余的元素已经通过简单的连接连接到了它。 这样可以轻松拆卸和整理相机。 同样,当撞到障碍物时,相机可以简单地折叠起来,这样可以避免损坏。



为了接收来自摄像机的视频信号,我使用了Everyine ROTG01接收器。 他花了1800卢布不换新币。 它只是一个带有天线的盒子,可以连接到计算机的USB端口,并且可以作为USB相机看到。 也就是说,我们在Windows中启动Camera应用程序,然后查看接收器接受什么。 即使在开始时,您也需要按住接收器上的唯一按钮,以便接收器扫描以太并找到我们相机发送信号的频率。

通常,我们在计算机中需要三个USB端口:

-对于IT跟踪器
-对于Arduino,控制水箱控制面板
-用于视频接收器



我们开始从相机(例如“ Camera”程序)输出图像。 我们启动bkb程序并选择电动婴儿车的控制模式。

视频中显示了接下来可能发生的情况:


可以看出,运动速度,特别是转弯速度,太大了。 因此,如果选择无线电控制的模型,请选择最慢的模型。 挖掘机之类的东西。

为什么不带成品的“间谍机器人”呢?


我落入其中之一,例如HappyCow 777-325。



我很高兴:他拥有一切,并具有遥控器,视频传输功能,并且行驶非常缓慢。 但是,有一个功能-它只能通过Android或iOS中的应用程序进行控制。 好了,我们将通过Android的远程控制来解决此问题,例如,使用scrcpy

但是事实证明,除了可纠正的缺陷(相机的视角狭窄)之外,该机器还有一个无法纠正的缺陷。 通过Wi-Fi传输的视频存在严重的延迟。
就是说,这个机器人已经坠毁很久了,大家都在踩油门,以为它还没有遇到障碍。

我认为对于一个正在学习远程控制机器的孩子来说,这是不可接受的。

因此,机器人辞职了。 虽然我会从中借用机箱。

结论


祝您在重复和开发上述技术解决方案中一切顺利。

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


All Articles