“目的地有很多伪装……”,或者我们使用CANNY 3 tiny和光敏电阻自动控制灯泡

有关Habr 上一篇文章中,我告诉您了我如何以礼物的形式收到Canny3微型控制器。我们“闪烁” LED,按下一个按钮。就此而言,原则上可以完成实验。

但是,在过去的两周里,我一直在听有关The Witcher的声读物,因此对Destination变得更加认真。根据制造商网站上显示的信息,CANNY系列控制器主要用于各种汽车系统和专用设备的自动化。

问题是,没有人会允许我用“金手”在一辆真正的汽车中四处张望,总的来说,我怕汽车。因此,我必须购买专门用于本文的小型车灯和光敏电阻。您不会这样做,以免激怒命运。

今天,我们将控制器和汽车灯连接到12V电源,向COM端口发送消息,根据灯自动包含灯,并尝试使用高频PWM控制器。

您是否也相信目的地的力量?那么,您将受到猫的欢迎。





第一部分:简介


第一部分:简介
第二部分:组件和注意事项
第三部分:如何将数据写入COM端口
第四部分:连接自动灯和光敏电阻并对其进行编程第五
部分:尝试使用PWM降低灯的亮度
第六部分:结论

在本文开头,我提醒您我在DIY电子产品方面没有太多经验。许多年前,我涉足CraftDuino-国产Arduino克隆。除了他为我做的那些“工艺”德祖格里克这实际上是我在DIY电子产品方面的经验有限。

显然,知道我对国内发展的热爱之后,我决定给Canny3。

即使在准备上一篇文章的过程中,我也感到惊讶的是,该控制器不仅可以由5V供电,而且还可以由12V供电,而输出电压与输出电压相同。输入,每个通道的最大电流高达100mA。在我看来,这很有趣,因为我以前的CraftDuino无法做到。

通过使用公式的简单计算P=UI我意识到每个控制器输出的最大功率约为1.2瓦。为了以防万一,决定拿起一个有动力储备的灯。选择落在0.9 W LED灯泡上。

但是,我仍然不想单调地烧掉我的新年礼物,在连接之前,我决定询问开发人员我是否正确理解了所有内容。
令我惊讶的是,他们不仅回答了我,而且还建议如果将多个输出组合在一起,功能将成比例地增加。在那之后,决定购买比灯更强大的东西,而选择权落在了插入点烟器中的汽车风扇上。但是,为了避免从文章中得出“醋味”,我决定将对汽车风扇的操作推迟到下一次。


第二部分:设备和注意事项


因此,在实验开始时,我有以下几点:

  • 充电和发射装置“ Orion Vympel-55”。我已经有了它,幸运的是,它不仅可以为电池充电,而且还可以作为一个宽范围的电源(包括12 V);



  • LED自动灯“ Skyway H3。SH3-9SMD-5050 W.” 据我了解,该灯泡可用于各种头灯,但我无处可挡,因此我选择了功率和连接方便性而无需焊接。



    顺便说一句,回到功率计算公式,我决定测量电流并确保我适合允许的100 mA。理论上,灯泡的电流应为I=P/U=0.9/12=0,075A
    但是从测量结果来看,结果要少一些。虽然也许我只是做错了什么。



  • 光敏电阻FR-765。我之所以选择他,是因为商店里没有其他东西了。



好吧,我当然有:一个控制器,一个面包板,电线,鳄鱼等。

在上一篇有关Canny 3的文章中,我确实赞扬了控制器,但事实证明,美中不足的是一只苍蝇。上一次我没有使用套件随附的捆绑电缆束,但是这次我不能没有它。

由于我使用烙铁的情况很差,因此我希望将其用量减少到最低限度。因此,最后,我收集了所有可拆卸连接上的电路。我使用了特殊的电线(爸爸,妈妈,妈妈,爸爸),面包板和鳄鱼夹。

而且,如果控制器的开发人员不应该为这样的事实而责怪,那就是在剥皮电缆的过程中,我受到了几次割伤,那么,由于我钩住了“木制”线束,部分原因是出于他们的良心,我的整个结构掉到了地板上。

一方面,止血带是一件好事。为了将控制器安装在车内,我认为线束是正确的。其中的电线绞合在一起,如果绞合得很好,则它们完全适合连接器“母亲”,即我的“面包板”电线。另一方面,用面包板的电缆进行实验是不方便的,因为“橡树电线”,即使将控制器正面朝上的漂亮照片也很难做到。

我说得更高一点,我不想使用烙铁,但至少一次,他们必须武装自己。

为了测量来自光敏电阻的信号,我们需要将其“插入”到控制器的模数转换器(ADC)中。但是事实是,与我以前的Craftduino不同。以Canny为例,事实证明有必要放置跳线。

开始时,我没有仔细阅读文档,并认为控制器的5和6输出是A5和A6的输出。我什至编写了一个程序,并尝试了很长时间才能阅读。自然,我没有成功,因为默认情况下,没有进行初步准备,第5和第6通道就可以用作正常的离散输入。

看完控制器的文档后,我意识到自己仍然需要焊接。您不知道我如何害怕“整理”所有内容。
上一次我尝试在电路中焊接一些我为我做的东西 德祖格里克,我设法在焊接处附近的所有电容器中填充焊料。
这次的焊接过程很简单。足够小心地在焊道上滴一滴焊料就足够了。

下图是我的跳线的外观:



我仅将第六个输出连接到通道A6,我不敢焊接第五个通道,以免意外地在两个跳线中填充焊料。

纯粹从理论上讲,可以通过将孔和6号端子连接起来而无需焊铁。但这将带来极大的不便。

下图显示了5号引脚和ADC A5号引脚与爸爸妈妈的连线:



开始工作之前,您应该注意的最后一件事。

注意!不要一一重复,我将在本文中进一步描述。不要懒惰地用焊接替换插入式连接,接起较粗的电线,阅读文档。我不是这些问题的专家,所以我“尽我所能”将所有内容放在一起。我还建议您仔细监视火灾隐患,不要让设备无人看管。我几次闻到了一些阴燃的气味。好吧,即使在电源中也有防止短路的保护措施(我也安排了)。因此-请小心。

同样,不要忘记,尽管我们拥有的电压和电流很小,但在电压下仍然接触带电部件可能会很痛苦(特别是如果用身体受伤的部位戳戳它们)


第三部分:如何将数据写入COM端口


为了以某种方式校准我们的环境光传感器,我们需要了解它根据光水平发送给控制器的值是多少。为此,我们需要将数据从ADC输出到监视器。当与Arduino及其克隆合作以解决此类问题时,我使用了COM端口监视器。

对于Canny 3 tiny,从虚拟COM端口读取数据的过程并不比Arduino复杂得多。但是有一个关键的区别。 CannyLab开发环境没有自己的COM端口监视器。
之所以使用Hterm,是因为它是跨平台的,轻巧的并且不需要安装。但是您可以使用其他任何东西。

我还要说更多,没有什么可以阻止我们使用Arduino IDE COM端口监视器。

Windows 10系统上的所有组件都可以立即使用,而不必为虚拟COM端口单独安装驱动程序。但是以防万一,我要说的是该驱动程序似乎与CannyLab开发环境捆绑在一起(位于drv \ canny3tiny_vcp文件夹中)。

为了不进一步解释与将数据发送到USB虚拟COM端口相关的图表块如何工作,我将举一个简单的示例。

今天,作为锻炼,我们将使用控制器发送消息“ HABR”。首先,您需要下载IDE CannyLab。可以在开发者的官方网站上轻松找到它。

顺便说一下,我使用的是CannyLab v 1.42,但我认为在以前的版本中,图表的性能不会有问题。

在上一篇文章的第3章中概述了为新控制器编写软件的过程以及使用Cannylab的基本原理

创建一个新图表,在对话框中选择Canny 3 tiny。然后,我们将块,常量和寄存器传输到图中,如下面的屏幕截图所示。当然,不必传输文本标签;在执行图的过程中,没有任何依赖于文本标签的问题。



如果您不想自己动弹,可以使用GitHub下载本文的图表

应该注意的是,向COM端口发送消息有点奇怪,您必须在镜像中用一对字符写字母,但是您可以习惯它。

我将分部分进行解释。

“参数设置”块中我们设置USB VCP驱动程序设置。首先,在虚拟COM端口上启用传输模式,然后设置传输消息的长度。在我们的示例中-包括换行符在内的6个字符。

“消息文本”块中我们以常量编写消息文本(不要忘记切换到“ chr”模式),并将这些常量传送到相应的驱动程序寄存器。我再次提请您注意我们以相反的顺序在消息对本身和驱动程序寄存器中写入消息的事实。

最后一块“消息传输”以指定的频率将我们的消息发送到COM端口。为此,我们使用PWM模块。不要将其与RF PWM混淆,我们将在连接灯泡时使用它。在这种情况下,块生成时间“ 0”的一半,而后半部分“ 1”。您可以“按时播放”周期的大小并进行填充以增加或减少发送消息的频率。

为了检查控制器的运行,必须将绿色LED连接到该PWM模块。如果一切正常,LED将以发送消息的频率闪烁。在上一篇文章中

我已经说过如何向控制器编写程序。但是,在过去的时间里,我学到了另一个很酷的技巧。

当我们将控制器连接到计算机时,它将进入程序记录模式。以前,为了进入运行时模式,我从计算机上卸下了控制器,并将USB充电卡入了计算机。

原来,有一种更简单的方法。将控制器连接到计算机的USB端口并单击CannyLab中的“连接”按钮后,转到“设备”菜单并选择“运行”



控制器开始执行记录的程序,并通过USB端口供电。此后,控制器也将在COM端口的监视器中变为可用。的确,为了切换回程序录制模式,需要将控制器卸下并重新插入计算机的USB端口。

这是Hterm COM端口监视器中的“ HABR”。注意数据传输速度和其他设置。



这是Arduino IDE COM端口监视器:



图为记录图表后控制器的工作方式:



红色LED表示已通过计算机的USB端口接收到电源,绿色“闪烁”为通过虚拟USB COM端口发送的消息。


第四部分:我们连接并编程汽车灯和光敏电阻。


首先,我们将考虑最简单的选项。只需将灯连接至控制器的1号端子,并将光敏电阻连接至6号端子(ADC)。

一切都非常简单,但以防万一,我画了一张图:



但是在这里看起来很生动:



我们将电源的“-”和“ +”连接到Canny 3的相应端子上,第1针连接到灯罩,而灯的“尾巴”在面包板的面包板上加上一个加号。

使用光敏电阻,一切也很简单。另外,我们将面包板从总线带到面包板,负号去往控制器的6号引脚,该引脚先前与跳线连接至ADC。

我已经在上面写过我的整个结构从桌子上摔了好几次。因此,在照片上,导体的颜色及其进入面包板的入口点可能略有不同。

现在,我们将编写一个程序。



考虑我们封锁的新日子。

让我们从“从ADC获取值并将其转换为套件”块开始
在此块中,我们转换ADC(0至1023)可以在照度(lux)下给我们的值。

我们需要在光照较浅的情况下进行一次测量,而在较暗的条件下进行一次测量。

因此,在“来自”的值中,我记录了最小的ADC读数“ 0”,而在“来自”的结果中记录了照明水平零值。

“ value to”中,我记录了ADC读数= 20,并且相应的照度等于300 lux,我在“ result to”中输入了结果

我没有光敏电阻的参数的详细描述,但是我怀疑它没有完全线性的特性,但是对于我们来说这已经足够了。

预检查在模拟器中如何执行该图。我在这里写了有关CannyLab模拟器中工作的更多详细信息

这就是我的



结论假设光敏电阻将10传递给ADC,“显示(MAP)”这本质上是线性缩放。十正好是我们刻度尺的一半,这意味着输出将是0-300范围(即150)的一半。这低于指定的300 lux电平,因此,一个被发送到1号通道寄存器(1号输出),灯泡将点亮。 。但是它不会立即打开,只有在黑暗中至少持续一秒钟(1000毫秒)时才会打开。

为了了解我们将在COM端口中收到什么消息,我将模拟器中的值显示切换为十六进制格式。



考虑“ VCP消息设置寄存器D1:D0,值3130进入其中。我们记得这是一对字符,每个部分代表一个十六进制字符代码。事实证明,31h是ASCII中的字符代码“ 1”,30是ASCII中的零代码。

“ VCP D3:D2消息安装寄存器”中,我们将相应地具有字符“ 0”和“ 5”。我们按照从D0到D3的顺序收集成对的字符值:``0'',``1'',``5'',``0''。所以我们得到了0150 lux。

但是正如他们所说的“不是一个模拟器……”。让我们看看实际发生的情况。

在枝形吊灯和自然光(组合照明)下进行测量:



工厂度计和我们自制的度计读数几乎完全吻合。

日光下测光:



更加糟糕。

这可能是由于光敏电阻特性的非线性所致,也是因为我们将缩放比例下限设置为零,但是为了提高测量精度我们不会使该图复杂化,例如,我们的主要目的是理解获取照明值的一般原理。并且提高精度可能会延迟到在汽车或家中实施这些项目之前。

我们检查电路的操作,用手指合上传感器,然后松开手指。



现在,当房间里只有黑暗时,有一个选择:



灯亮着。一切正常。


第五部分:尝试使用PWM降低灯泡亮度


让我们通过更改灯的亮度使该方案复杂一点。为此,我们需要一个高频PWM(RF PWM),在Canny 3 tiny中,它在3号和4号输出上实现。
我决定使用4号输出

。连接方案实际上将保持不变。简单地说,我们将输出4连接到灯上,而不是输出1,



这就是它在组装时的外观。所不同的是,框架现在不是蓝色,而是蓝色。



该图也没有太大变化。



我不会详细绘制该图。输出4的配置的主要变化,我们将其用于PWM。在本节中,我们必须设置“填充设置寄存器”它花费的时间从2到255微秒,我决定不冒险,选择254.请注意,它一次安装了两个通道(第3号和第4号)。然后,我们在“ PWM通道启用寄存器4号 ”中写入“ 1”,从而包括灯泡的PWM。

“以PWM模式(低亮度)打开灯”块中,对我们来说新的只是“设置4号填充通道的寄存器,μs”,只要在光电传感器上方的照明水平小于250 lux,我们将在其中写入值“ 10”。在1秒内。

下图显示了灯泡已打开,但光线暗淡。



如果您希望灯泡更亮,则只需将常数“ 10”的值更改为更大的数字即可。例如,您可以使用数字127,在我们的示例中,它是填充RF PWM周期所需时间的一半,这意味着灯的亮度大约是一半。



应该注意的是,该灯的RF PWM效果非常明显。这是三张照片:第一张,我们将“ 4号通道填充寄存器”中设置为10 µs,第二张-110 µs,右侧-210 µs。



原则上,据我所知,本示例中的自动灯用于位置信号,有时还用于汽车的雾灯。
我认为,如果我们完善方案和图表,则可以在较旧的机器上实现在低照度下包括背光。没错,您需要考虑夜间人工照明的效果。这样一来,在道路上,隧道中以及迎面驶来的汽车的前照灯都没有熄灭。或者可以控制车厢内的灯,例如,Ziguli或Niva车门上的灯在打开时不会总是点亮。


第六部分:结论


在撰写本文的过程中,我产生了强烈的怀旧感。
在研究所学习期间,我的朋友和同学Seryoga拥有别致的蓝色VAZ 2107品牌轿车。他只是对他不做的事情:他会附上某种软管(以增加增压力),在车厢内安装风扇,以便通过单独的按钮打开汽车,然后按一下按钮即可使汽车启动(仅在旋转钥匙的情况下)点火)。通常,他只是没有“调整”他的“吞咽”。从那时起已经过去了很多年,我的朋友搬到了一辆更坚固的汽车上,但是我不敢想象如果他10年前得到这个控制器,他会用他的Zhiguli做什么。

由于这篇文章,我也想起了我的目的地。毕竟,我以自动化工程师的身份学习了很多年,但我并不是一天只从事专业工作。
事实证明,进入DIY世界真是太酷了。在组装电路的过程中,不止一次地“卡住”了一个按钮,以打开/关闭灯泡和LED。当某些东西按预期工作时,这是一种令人愉悦的感觉。我还意识到,使用图对控制器进行编程比在Arduino IDE中编写代码更沉思。对程序的看法完全不同。

在撰写本文时,我为自己订购了一个不带线束的Canny 3 mini版本。现在,我要休息一下,写一篇有关在面包板上安装该控制器的文章,我们将单独分析其帮助下的更多照明自动化示例。

, , .

UPD:
, , :


  1. «, , – !» CANNY 3 tiny.
  2. « ...» (CANNY Arduino) Raspberry PI.
  3. « ?» bluetooth Xamarin (Android).

All Articles