最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

可编程自动盲开瓶器

时间:2017-05-18 10:39来源:未知 作者:admin 点击:
胶盲目开启使用硅窗台,确保电机直接与顶盲齿线,如图所示。 还胶控制面板到你想要的位置。 你如果太重要支撑面板或拆卸前面板。 让一切干通宵。 步骤51:线穿线 将窗帘绳在外壳和供电系统,下孔。 电源线应抓住和
可编程自动盲开瓶器

前一段时间我改变了我的房间,使开闭卷帘难。像大多数人一样,我关上百叶窗,天黑时,我不得不把灯打开。同样,我打开盲在早晨当我醒来的时候让太阳。的方式,我已经改变了我的房间让存取拉线盲人的困难。因此我决定,我需要打开和关闭盲自动方式。

虽然不是我最初的设计理念可以作为一个安全装置。即当度假,使用自动功能的开启与关闭盲给家的印象。

解决的办法是创造一种方法,自动开启或关闭盲,需要时,或在预定的时间。

因此,盲目的揭幕战应该能够做到以下几点:—

  • 具有高可靠性的自动运行
  • 灵活的使用,这样我可以改变当盲人自动打开/关闭。
  • 有一个手动-让盲人可以打开或关闭时。
  • 是以我目前的卷帘–兼容,所以我不需要买个新的。
  • 低成本–我不想花费过多成本的项目。
  • 安全-确保外部电源是合适的,在厂家指导工作。

我选择使用Arduinos为控制器由于其广泛的支持库和低成本。

我用融合360设计和模型的3D打印的部件,因为它是一种使用方便、实惠的CAD程序设计部分,使快速和容易的。融合360也支持和记录,因为这样,我会更喜欢它的其他三维建模中的应用。

盲目的揭幕战由一个直流电机控制盲轮通过一个定制的齿轮系统。盲人是通过控制面板操作,让您打开或关闭盲或设定自动定时功能。RTC(实时时钟)用来增加盲器自动定时功能。在盲目的停止点是由颜色的布条在盲人的顶部和底部的控制,这些都是由一个传感器检测。

该项目的成本约为30££70(约$ 38 - 90美元)取决于你已经拥有的哪些部分和你源的任何需要的部分。我没有包括任何特定的工具成本。在下面,我会认为你是自信的直流电子,Arduinos有基本的了解。

我要说的是这是一个相当漫长的教学,但我想确保我覆盖尽我所能,我建议你读到最后才开始。我有尽可能多的信息,我可以和我希望你学到的东西以及享受下面。

最后,本人不承担任何责任或义务的任何损失或人员伤害或财产损失。

所有的出路,让我们建立!

步骤1:概述

简介

基本上,盲目开放使用一个直流电机驱动的定制齿轮。盲人可以在这个齿轮的线,事实证明,盲目拉涨或跌,这取决于它的旋转方向。

发动机

电机旋转的方向是通过连接到两个继电器控制,这些都是用来反所提供的电压的极性,从而改变运动的方向。在本质上,我们使用的是H型桥

控制面板:

控制面板是激光切割亚克力板,采用了20x4 LCD(液晶显示器)和四个按钮,分别用于程序的盲目开。

盲目的方向和状态:

盲人的定向运动是由红色和绿色条纹纸的使用控制。这条也作为一个触发停止盲目的运动。他们被放置在顶部(红色)和底部(绿色)的盲。一个传感器监视盲人这些条状物的存在,当检测到,这取决于它的颜色集盲人的方向(向上或向下)的下一个动作。

Arduino(X2):

使用两Arduinos原因是一个Arduino可以完全致力于监控彩色传感器操作。

主要的Arduino:

主要的Arduino负责驱动LCD,RTC,电机并检查其他Arduino。Arduino采用电隔离继电器模块,需要作为电动机运行了12v控制电机运行,而Arduino的5V,简化设计和布线,升压转换采用5V从Arduino的电源引脚的12V汽车需求。我们可以使用一个升压转换器与外部电源,电机只需要150ma运行,相比其他汽车相当少量的电流。

二Arduino:

二Arduino是用来监测传感器。它是专门为这个功能,只需要一点代码。它是不是可能导致错过检测对盲人带其他功能中断。这个Arduino告诉主Arduino的盲是拉一个信号线高。一个信号线被拉高的时候盲目完全,和其他被拉高的时候盲目完全失望。

步骤2:融合360

融合360

我用融合360印刷部件模型。如果你有兴趣在盲人的齿轮为蓝本,或者你需要修改的文件以适应你的盲线,阅读-如果不跳过这个和下一步。

设计的齿轮,我需要知道的三件事:

  • 球的中心之间的距离对链-这是测得11.4mm。
  • 的球在链直径测定为5mm。
  • 我想要的齿轮是粗直径。

我第一次拿起一个粗糙的直径为30毫米的齿轮,这是小,减少最终单元的尺寸和接近齿轮的大小对卷帘,意味着系统将以1:1的比例。

这个粗糙的直径,然后我需要工作多少个球可以装在齿轮因为球之间的线,这也需要占使它保持在齿轮教。

由于齿轮是圆形的,我们可以使用PI(π)我们的计算。出圆的周长公式是π* D.所选定的直径是30毫米,乘以PI会给我们94.248,这就是齿轮的圆周。

找到距离每个球的中心之间的链,我们可以简单地从同一侧的边缘使用一组游标卡尺测量两个不同的球,如上图所示。我还测量了球是直径5mm的。

有了这些数据,我只是简单地把齿轮的圆周的球的中心之间的距离来找出许多等距的凹槽可以容纳。计算:94.248(周长)/ 11.4(距离)= 8.267。然而,我们需要完整的数字,这个数字下降到8圆细。

由此,我们现在知道,8槽需要在球的特征。

如上图所示,让齿轮容纳的d轴的直径测量,我没有样条第一,为6毫米。然后我测量它与样条和它来5.5毫米。因此我们知道,样条的缩进0.5mm。

步骤3:融合360个设计

360设计的融合

设计齿轮遵循这些步骤,参照步数图中的数字。:

  1. 画一个圆,有一个直径30毫米的融合360。
  2. 画一个8双面多边形任意大小,其中心点为界同。(按TAB键选择参数输入侧边的数量)
  3. 使用尺寸工具(按“D”)选择多边形的一边。进入11.4(盲线球之间的距离)为参数框。
  4. 对于多边形的每一个点,一个直径5mm的画了一个圈。
  5. 删除中心圆,画一个新的,这将是稍大,确保在此圆周相交的8个较小的圆的中心点。
  6. 修剪(不在键盘上)的小界和删除内多边形的外部。
  7. 装饰部分的大的圆的周长,进入小圈子。
  8. 在齿轮的中心画一个圆,一个直径6毫米
  9. 画出两条垂直的线:一个在圈内,另一个在内圈的边缘。使用尺寸工具改变之间的距离,这些线是0.5mm。
  10. 装饰线条过多,以及内圆周长,没有内线相交,这样就留下了“D形”。
  11. 退出草图模式和挤压齿轮是6mm厚。
  12. 出口齿轮作为STL和打印。

步骤4:零件清单

零件清单

盲目建设开启,你将需要下列工具和配件。我已经编译链接和价格表,使其更容易源这些零件。<em>请注意,这些价格只有当前的出版日期,仅供参考。</em>

 

组件


部分(如标记图) 零售商&链接 成本
1 Arduino原型板 亚马逊 5.99美元
2和3的Arduino UNOS /莱昂纳多*

Digi-Key亚马逊

约:18美元- 24美元
4 RTC模块

亚马逊

5.59美元
5 - Relay Module

亚马逊

6.99美元
6直流升压转换器

亚马逊

10.29美元

7倍12.4mm X 12.4mm
矩形板的开关

快速电子

约:4.30美元
8 Adafruit tcs34725

Digi-Key亚马逊

约:7.95美元- 13美元
9条董事会

Digi-Key

5.75美元
10跳线

亚马逊

7.97美元
11 20x4 I2C液晶

亚马逊

10.99美元
12高扭矩12V直流电机
(30rpm)

亚马逊

13.22美元
13~5m,6芯报警线

Digi-Key

每平方米2.02美元
#p#分页标题#e#

你还需要一个5V 12V电源能够驱动Arduino。

*最Arduinos将工作,只要他们是基于开源模型和支持上述的图书馆。

工具/其它部分


工具 零售商&链接 成本
1 - 2倍3mm亚克力板材 亚马逊 9.65美元
2 - 1X标记笔
3-needle-nosed钳

亚马逊

5.70美元
4螺丝起子

亚马逊

5.94美元
5 m3x10mm六角螺钉

亚马逊

4.03美元
5 M3螺母

亚马逊

5.14美元
5 m3x5mm六角螺钉

亚马逊

7.32美元
5立方米垫圈

亚马逊

6.84美元
6克伦普工具

亚马逊

23美元
7 - Silicon

亚马逊

4.36美元
7 - Silicon gun

亚马逊

8.99美元
8女性卷曲

亚马逊

6.99美元
8 Blind Cord *

亚马逊

1.70美元
剥线钳

亚马逊

16.17美元
热收缩管
2.5mm I/D,2:1的收缩率

绝缘胶带

亚马逊

4.67美元
度量艾伦的钥匙

亚马逊

6.56美元
连接线

亚马逊

6.18美元
热胶枪

亚马逊

9.99美元
烙铁和焊锡

亚马逊

19.99美元
多用表

亚马逊

13.99美元

小钻

亚马逊

3.95美元

亚马逊

49美元
公制钻头

亚马逊

9.99美元

用于校准阶段,你需要一个USB电缆,达到形成盲到您的计算机或笔记本电脑。

我生活在英国,但帮助我们的美国兄弟/朋友我都试过了,其中可能包括美国供应商和粗糙的价格。<strong>请</strong><strong>记住,所有的尺寸都是度量。</strong>

如果你有困难,采购的任何部件,评论,我会尽量帮助。

笔记

*在这个项目中齿轮的设计是基于该线的使用已经过测试工作。

步骤5:3D打印的部件

以下部分需要3D打印在0.25分辨率和25%填充。我有一个融合360文件的颜色传感器支架,如果你需要修改的高度。

 
  • 颜色传感器安装v1_diytronics.f3d
    颜色传感器安装v1_diytronics.f3d
    下载在3D视图
  • 颜色传感器v4_diytronics.stl
    颜色传感器v4_diytronics.stl
    下载在3D视图
  • gear_diytronics.stl
    gear_diytronics.stl
    下载在3D视图
  • motorcover2_diytronics.stl
    motorcover2_diytronics.stl
    下载在3D视图
  • coverb_diytronics.stl
    coverb_diytronics.stl
    下载在3D视图

步骤6:电机装配

电机总成

ABS具有0.25位的分辨率和25%的填充打印以下部分。齿轮可以选择性的激光切割,如果3D版本不够强。

cover.stl

case.stl

gear.stl

使用2的m3x10mm螺钉,螺钉孔部分为例。然后夹的情况下在电机端和对齐两个螺钉与两垂直对齐的孔的电动机,如图所示。

拧紧螺丝,确保他们坐冲水。

现在,滑移齿轮(3D印刷或激光切割)在电机轴上,注意到“d”需要调整。

最后,排队盖并拧紧螺钉使用其他两m3x10mm。

步骤7:焊接电机

焊接电机

焊料两25厘米长度的电线的电机接线片。然后线程10热收缩管覆盖每个电机的凸耳和收缩以确保它形成一个良好的电气隔离长15mm。

步骤8:成分标记

成分标记

我们现在需要的马克在亚克力板各部件位置,安装之前。

  • 首先,把亚克力板放在你的窗台上,在你的盲目。现在把电机上的亚克力板,确保它是垂直与窗帘的帘线,如图所示。保持电机总成的亚克力板,升降板上翻转过来。标志上的安装孔的位置在丙烯酸汽车装配。
  • 下一步,将两Arduinos在碟子上,另一端在电机的安装使得Arduinos垂直符合对方。留个缺口(约1.5厘米)的两Arduinos之间。其次,继电器模块下到谷底Arduino,一隙(约2.5cm)。添加Boost变换器旁边的继电器模块,另一个缺口(约1.5cm)。<i style="font-weight: bold;">使用所附照片作为参考</i>。电机对准底部的盲是很重要的,精确定位的其它成分是不是关键。最后用记号笔标记每个孔表示在图上的亚克力板。

步骤9:钻井

钻井

删除所有的组件和用小钻标志中心的每个标记的是你。申请企业的压力,创建一个轻微的缩进。这将停止钻头钻孔时滑倒。#p#分页标题#e#<strong>小心</strong>不要滑倒造成伤害。然后用3mm钻头钻出来的孔,注意不要融化丙烯酸用错了钻头转速。如果需要,使用7mm钻头去除所有毛刺,但用手把位不钻。

步骤10:安装- Relay Module

安装- Relay Module

将对峙的继电器模块的丙烯酸
板,如上图。确保你使用垫圈防止亚克力板开裂。

如果需要将与针螺母尖嘴钳,但要小心不要过度拧紧这也会开裂的亚克力板。

最后将继电器模块在对峙使用四m3x5mm螺钉将其固定在的地方。

步骤11:安装- Arduinos和升压转换器

安装- Arduinos和升压转换器

使用上面的图作为参考:

创建站为Arduinos取舍和升压转换器:

每10个孔(2×3 Arduino,1×Boost变换器)

  • 地方上的每10–m3x10mm螺栓垫圈。
  • 把每个螺栓/洗衣机通过在亚克力板10孔。
  • 放一个垫圈的10个螺栓,三明治的亚克力板。
  • 螺丝M3螺母紧到手指的每个螺栓。

毕竟间隔就位安装2 Arduinos和在相应位置的升压转换器。其次在每个间隔垫圈在每个板上安全螺母。上面的图显示的安装板。

步骤12:安装电机

安装电机

电机是通过放置一个洗衣机在每个2 m3x10mm螺栓安装,然后翻转亚克力板,对准孔的齿轮组件。用螺栓和垫圈马达组件固定到亚克力板。

步骤13:布线

虽然不是必要的,良好的电缆管理使一个更好的看完成的项目。它也有助于诊断故障会给你一个更好的了解每个组件连接在一起。利用有线电视的关系可能和不完全独立的跳线的带状电缆。

步骤14:信号线的布线

信号线的布线

有线中继模块,你将需要6男女跳线。皮从带状电缆6根丝带但不分离成单个跳线。插头六线到继电器的标题,确保跳线或线不交叉如以上。你使用的颜色并不重要,只要确保你能确定每个电线你也知道这是在继电器引脚。

这也是一个很好的时间把线路板罩上Arduino电路板。只是确保引脚排列正确,推下来。

使用上面的图片作为参考,路线在一个Z字形的线,如上图所示。它的弯曲的线附近的连接器,所以他们触摸板容易,躺平,然后将它们备份在另一端可以插入Arduino。

使用下面的图表连接到Arduino继电器模块。(注:你的跳线的颜色可能有所不同)。

继电器模块 Arduino Uno
GND GND
1

2

3

4

VCC

5v铁盾

如前所述,第二Arduino告诉主Arduino的盲用两根信号线。路线男跳线的男主Arduino下,穿过他们的下方,如上图。将这些导线如下图所示:

初级Arduino(UNO) 二Arduino(列奥纳多)

步骤15:电机电缆布线

电机电缆布线

在连接电机,电机的电线旁边第一路继电器模块线。

要做到这一点,把这些线平和马克二点2毫米的导线两侧。钻这些孔用2.5毫米的钻头。然后线程一扎尾成一孔,循环在丙烯酸和线程退出其他的孔,如图所示。确保电线是平的,把领带,一孔的方形休息和拉尾删除所有冗余,如图所示。现在拧紧电缆接头和剪尾和一些刀具。

继续路由电机线弯曲到继电器模块的角落,保持平和非扭曲-尤其是拐弯。

重复的电缆接头安装过程解释上面安装一个额外的电缆接头。最后带电机电缆端。

步骤16:继电器接线

继电器接线

连接电机继电器模块。

电机连接线在每两底继电器通用连接(如图所示)。通过拧松螺钉端子,插线并重新紧固。

注意:我们不需要担心电机极性我们将配置该代码中的校准和测试过程中。

步骤17:继电器接线功率(负)

继电器接线功率(负)

我们现在需要连接继电器的升压转换器。

我们将使用“普通”的常闭(NC)的上下两继电器触点。

带两线一短一长的两端。

使用短导线长度连接在每个底部的两个继电器NC终端机。

使用丝长块连接一个继电器的NC终端机的升压转换器的接地端子。

该线路将确保电机触点接地默认操作期间。

然后,重复上述过程,常开(NO)在继电器-这个时间去正输出端对Boost变换器的接触,确保该线也在PCB上,如上图所示。

步骤18:最后检查继电器接线

最后检查继电器接线

继电器接线现在看起来应该像上面的图片。

步骤19:升压变换器电路

Boost变换器电路

减少热量和增加可靠性/安全,升压转换器的功率也将通过继电器控制。在Boost变换器的正输入,常开(NO)之间的连接线从顶部第二继电器连接,同时确保该线路由下的PCB。

步骤20:最后的接力/升压转换器接线

最后的接力/升压转换器接线

添加一个较长的跳线(图中橙色)到普通的终端从顶部第二继电器。路的另一端的继电器模块在连接到VIN引脚上的Arduino Uno。#p#分页标题#e#这会给我们在杰克DC直接功率将意味着我们不需要担心电流。

接下来,更长的连接跳线(白图)到接地端子上的升压变换器输入电压端子。再次,线路跳线的另一端的继电器模块下,但这次插跳线到GND轨道的UNO。

最后将两长跳线(图中绿色)的常见和常开(NO)在顶部继电器端子。螺纹这两个跳线中继板下,离开结束无关,现在。

步骤21:液晶面板

液晶面板

液晶面板是激光切割出3毫米亚克力板材。我选择用紫色的丙烯酸为对比蓝色和绿色的按钮以及液晶显示器。

对于按钮的间隔板,我用6毫米亚克力但两堆叠3毫米的碎片也会工作。你将需要倒角上的一个间隔的长边(表示)是一个文件或砂光机。

我有需要激光在下面端切断控制面板部分的文件。如果你没有一个激光切割机,有许多公司提供加工服务。

在安装之前,请删除保护膜。

步骤22:面板组件

面板组件

这个盒子是用的T型槽,使控制面板应安装螺钉一起举行。这样做的好处是,装配容易,同时使控制面板是更强大和更强大的。

开始组装,首先在每个20 m3x10mm六角螺钉放洗衣机,后面跟着一个螺母。把螺母和螺纹冲洗结束(如图所示),我们需要尽可能多的距离尽可能的螺母和螺钉头之间的装配。同时,预留按键间隔与屏幕开关面板。

钻两个孔,用4毫米的钻头在一个侧面板,它们之间留出3毫米的间隙。

把控制面板的顶部和底部面板插在背板的长边,其次是通道2侧面板为背板的两侧(你可以插入这些在横盘如果顶部和底部面板造成阻塞)。

把一个螺钉的T型槽,滑动螺母为矩形(如图所示)。应该是六角螺母和垫圈的头滑过的亚克力边缘上足够的间隙。当正确安装,拧紧螺母的手指紧避免开裂。

重复此过程来安装其它螺钉,确保你没有安装面板与液晶器吗。

步骤23:液晶板

液晶显示板

安装液晶显示模块,先将4 m3x10螺丝M3垫圈为四孔的亚克力板。确保螺栓和垫圈对丙烯酸有字母刻在它的表面。其次在每个螺丝M3垫圈,后跟一个螺母和紧固的手指紧。

现在,一个M3螺母在每个螺旋但不要拧紧螺母时,一半的螺纹。还添加了M3垫圈螺纹所以休息在螺母。这作为一个平台,每个安装孔的液晶显示模块将休息。

将液晶显示模块在4螺纹,确保红色的I2C接口板边上没有按钮切断(图上的)。

通过增加一个垫圈,新兴的螺纹瓶口,使洗衣机顶部的PCB,紧随其后的是另一个M3螺母。拧紧螺母下来仔细。

如果屏幕不与面板平(以字母边刻),螺丝螺母略微休息重新拧紧螺母直至冲顶。

步骤24:按键面板信号电缆

面板按钮信号电缆

决定你想要的控制面板应安装及其位置对盲器位置测量。请允许任何电缆路由即Windows下的海豹、转弯等添加2.5这个长度允许内部布线。然后将6报警电缆长度这个长度。

留出一段电缆你剪掉。随着电缆其他长度,带外套回2.5cm,这将为按钮1,2,3,4和接地信号。我们将只使用5的6线,装饰的白色线回来。

<strong>重要</strong>:马克电缆约2cm每一端与绝缘胶带。这样我们可以很容易地识别它后来在建。

步骤25:按钮面板接地连接

按钮面板接地连接

按钮安装在一块长条板,通过丙烯酸间隔然后连接到控制面板。这样做的好处是,它允许按钮坐冲水对控制面板,使单位更圆滑。

切下一块板,大约是60毫米×20毫米安装按钮,所有的引脚遵循相同的模式(如图所示)。使用衬垫来保证他们都是直直的线。确保按钮的一个长边尽可能接近,使板不会接触到液晶模块安装时。焊接这些按钮的地方,和苗条的腿之后。

加入其他引脚与跳线(如图上的黑点),如图所示的突出黄色线在图表上的照片或黑色线条。

焊锡丝的<u>表面</u>上的轨道,我们需要板的顶部是清晰的信号电缆。

步骤26:按键面板信号线

面板按钮信号布线

从左边的按钮(<u>按钮标记为1</u>),插入一根从报警电缆通过顶部的面板,使钢丝伸出轨道按钮信号引脚连接到。在将焊线。<em>颜色的线并不重要,但如果你有黑色的保留地。</em>

<em>注:</em><em>我打了按钮信号引脚,跟踪模式(橙色)和线图。</em>

重复此过程,使用不同的线每次剩下的按钮。为接地线,焊接到任何轨道,普通跳线焊接。

这里是连接,注意上升按钮数从右键:

按钮号 线的颜色
1个按键(左)

植物

按钮2 黄色
按钮3

红色

按钮4(右) 蓝色
GND

黑色

提示:如果导线断裂或你犯了一个错误,你可以焊接到轨道的表面而不是

步骤27:按键面板安装

按钮面板安装

安装按钮,先用热胶枪胶垫在板上。最好的办法是对隔板的一角,填补胶然后推下来(如图中1步)。然后填写倒角用胶水,小心加热丝的胶枪的喷嘴(图中2步)。

让这凉爽然后确保导线朝向边缘而不是液晶面板,按安装按钮插入切口。

只要你幸福,一切都适合,除去PCB,在支架的顶部,用热胶,然后按回原位(图中3步)。

最后,用热胶在前面板上的垫片加强一切(图中4步)。或者,使用额外的胶在PCB导线给他们额外的力量。

步骤28:液晶屏线

液晶屏线

随着报警电缆长度,等你把。带回来的外套的一端约6厘米。然后缩短的黄色和白色线4厘米。带这些电线卷曲女性卷曲每根钢丝

切成6×20mm长度的热收缩和放一片在每一个卷曲的电线。确保端边缘的热收缩是冲洗底部的卷曲和应用热收缩。

提示:用热收缩和卷曲放入沸水收缩并拍干厨房卷。

步骤29:连接

联系

完成面板组件,首先从红色的I2C控制器板拆下背光跳线。塞在女性卷曲的<u>黄色</u>和<u>白色</u>线进入这些头代替。这种控制背光和清除跳线,取代它的线,我们可以打开或关闭。蓝色和绿色的电缆进行I2C数据屏幕。我们使用这种方法,因为它减少了多少线需要与显示界面。

现在,连接线,如下表所示:#p#分页标题#e#

液晶显示器的头 线的颜色
GND 黑色
VCC

红色

SDA 蓝色
SCL

植物

步骤30:最后的面板组件

最后的面板组件

线报警电缆贯穿孔洞的侧面板,钻前。为按钮面板电缆做的一样好。

最后,将前面板顶部的情况下。当你这样做时,轻轻的拉警报电缆中的任何多余的长度。用剩下的四个m3x10mm螺钉固定面板的休息的情况下。

步骤31:颜色传感器的制备

颜色传感器的制备

准备颜色传感器,焊接头的水平上的孔(如图中1步)。这是因为没有足够的空间盲和天花板之间的头和焊接电缆是否正常。

其次,衡量电缆需要达到从盲人顶到盲器是安装。再次,增加15厘米,这最后的长度,然后把电缆。

带回来的外套,并把蓝线后面。带每个线(图中2步)。这些电线卷曲卷曲和每个女性绝缘热收缩卷曲。

提示:你可以用绝缘胶带代替热收缩。

检查支架适合放置传感器,确保引脚上的倒角边。你可以运用一些温和的压力,得到传感器坐好。如果间隙太小或传感器坐不均匀,两侧略文件。同样,如果差距太大,用一些硅举行它在的地方。

最后,导线的连接如图所示:

颜色传感器 线的颜色
VIN 红色
GND

黑色

SCL 白色
SDA

黄色

国际的

植物

3v3 没有连接
发光二极管 没有连接


注意:引脚标记3V3和LED都没有用

步骤32:颜色传感器支架

颜色传感器支架

颜色传感器安装通过3D打印支架固定在天花板上。

安装支架,把一滴硅与盲支架线的上限,所以当盲人安装支架安置在盲人中心。

注:我用硅来安装传感器作为比钻孔传感器到天花板。

然后将托架上的硅,指向倒角朝向窗户,这是哪里的电缆将出来。

提示:最好是离开架过夜(24小时)为硅固化之前使用。

步骤33:Roller Blind校正

Roller Blind校正

在硅固化安装颜色传感器确保电线来自边缘的倒角。你可以选择使用一个电缆夹锤成的天花板或墙壁移动电缆的方式进行。

把百叶窗下降到所需的关闭位置和马克盲用钢笔颜色传感器下(一点应该做的)。这将成为百叶窗关闭位置。

现在,把盲到所需的位置和标记的另一点,上面的。

步骤34:Roller Blind Markers

卷帘标记

打印附件的PDF文件,剪出两个彩色标记条。

剪下两条双面胶带大小相同,适用于彩色条离开支持录音。

删除你的盲目,它奠定了平。找到更低的分数(职位)然后剥铲绿条和立场,使带钢在马克中心。

然后找上标记(当盲降),重复上述过程,但红带。

最后,卷起盲手动重新安装它的繁文缛节应该颜色传感器下。

 
  • colouredstrips.pdfcolouredstrips.pdf
    下载

步骤35:RTC

RTC

添加最后的成分是RTC(实时时钟)如前所述,这将使用I2C总线。

如果你正在使用RTC从提供的连接引脚应该读(左起)32K,SQW,SCL,SDA,VCC,GND。

开始仔细弯曲RTC的销使他们是直的而不是直角的。我们需要做的是RTC的个子很高,很容易被淘汰的线路板以及阻塞的Arduino的标题。

步骤36:RTC配线

RTC配线

线的RTC,首先插入面包板的左上角,记住的RTC地面头销定位(标记的线路板是一个好主意),然后拆下RTC。

剪一段线,增加10mm的最终长度,达到对屏蔽接地轨在线路板上的接地排。带5mm的电线两端弯成直角,每。然后将电线的一端为接地轨,和另一端插入接地排在线路板上,如图所示。

的VCC连接一样。这个连接到GND行左,如图所示,图中的红色条。

作为液晶显示器和RTC必须连接到I2C总线,我们需要把在线路板上的两排作为总线。做这个选择在不受阻碍的其他组件板的右下区两排。

1。路线一件销A5的UNO(或销3如果用Arduino列奥纳多)哪一行,这两个你选的,是最接近地面轨道上盾。此行将作为一个总线的SCL数据(图中蓝线)。

2。连接另一个跳线针A4(或销2如果用Arduino列奥纳多)到其他行你选。这条线是一个总线SDA(图中绿色)。

三.将跳线从SDA总线,你向行,旁边是RTC的VCC线(红色)。

4。然后添加另一个跳线连接从SCL总线,你也向第四RTC排。

最后检查你的接线参考图,然后安装RTC模块,确保所有的引脚线正确。

步骤37:上拉电阻

上拉电阻

我们需要添加引体向上电阻的I2C总线作为这些停止信号浮动给Arduino的虚假信号。以两4.7k电阻器(黄色、紫色、红色)连接每一条腿SDA和SCL总线,你让。

然后将每个电阻的另一端在电路板的同一行。添加这行和VCC轨之间的跳线,如图所示。

步骤38:控制面板电缆的制备

控制面板电缆的制备

在控制面板的线的另一端,带回来的套管暴露6个人的电线,确保你没有从标记线删除标记。

的标记线,削减白丝条,卷曲和其他5线绝缘。

为无标记线从控制面板,条状,卷曲和所有6线绝缘。

从颜色传感器来报警电缆一样,削减蓝线。#p#分页标题#e#

我将假定的跳线颜色和报警电缆电线是相同的,因为它使得它更容易理解,阅读时。

步骤39:按钮连接

按钮连接

按钮连接到Arduino头如图所示,使用先前<u>标记的电缆</u>:

线的颜色 Arduino的头
蓝色 十二
红色

十一

黄色
植物

黑色

GND

步骤40:显示连接

显示连接

我们现在要连接显示器的盲目开。

使用<strong>未标记</strong>的电缆连接到液晶显示模块,将<strong>红色</strong>线到<strong>+5 V</strong><strong>轨</strong>。然后连接到<strong>GND轨</strong><strong>黑</strong>丝。

数据线的连接电缆,<strong>绿色</strong>(SCL)的<strong>SCL总线</strong>你之前做。

同时,将<strong>蓝色</strong>跳线(SDA)的<strong>SDA总线</strong>,你做了,如图所示图中,标记为“SDA线。

步骤41:电缆整理

电缆整理

拆卸底部Arduino连接黄色和白色的线从液晶显示器电缆连接到两个运动员来自继电器模块。

然后躺两报警电缆用胶带把他们的地方,平。

步骤42:底Arduino

底部的Arduino

把底部的Arduino回来,确保它与每个螺丝M3和M3螺母垫圈。确保电缆不引起Arduino弯曲。如果他们这样做,然后把Arduino上的螺钉添加一些更多的垫圈。

替代的是连接到顶部的Arduino的信号线。这里是连接了:

初级Arduino(UNO) 二Arduino(列奥纳多)

然后连接5V跳线在底部的Arduino上Arduino和5V。确保电缆到5V,不是VIN因为这可能会损坏Arduino。跟进这连接另一个跳线GND之间在底部的Arduino上Arduino和GND。

作为颜色传感器也连接到Arduino的底部,这还需要有线连接。为此,按照下面的连接,指的是你使用的是Arduino的类型:

线的颜色 伊诺列奥纳多 Arduino Uno
红色 VCC VCC
黑色

GND

GND
白色

3(SCL)

A5(SCL)
黄色

2(SDA)

A4(SDA)
植物

3v3

不习惯

不习惯
国际的

不习惯

不习惯


注意:引脚3V3和int都没有用

步骤43:Arduino IDE的制备

Arduino IDE的制备

确保你有最新Arduino IDE下载和安装。下载并安装3个图书馆使用,在Arduino IDE先打开库管理器(素描>包括图书馆>管理库)中键入“rtclib”(没有引号)到搜索栏。

安装库发布Adafruit通过从下拉菜单中选择的最新版本,点击安装,如上图所示。

重复这一过程,安装在图书馆但型”rtclib”(没有引号),如图所示。

安装上图书馆是I2C液晶,然而这个图书馆已经被下载。

首先,点击在这里下载zip文件。当它被下载,打开Arduino IDE导航素描>添加文件。

然后浏览到该位置下载.zip文件保存(在下载文件夹默认),选择ZIP文件并单击“打开”。

步骤44:颜色传感器的标定

颜色传感器的标定

底部的两个彩色条纹的Arduino告诉盲人除了通过寻找一个特定的颜色的颜色传感器的读数差。它通过检查读数来自颜色传感器对所发现的校准值的盲目,看到这条已经被发现。

现在我们将发现需要输入的代码,看看当两条和盲目的物质在它下面的颜色传感器的读数值。

要做到这一点,只是上传附加码底Arduino,选择板你使用通过:工具>板>。

然后打开盲,绿条是下面的颜色传感器。通过工具>系列监控或按下打开串口监视器Ctrl键++M

等待5左右秒,值稳定,然后写下一个值(R,G,每柱B和C),确保你记录这些值为绿色带。

<em>注:可能会有变化,在每一</em><em>列的</em><em>但这应该只相差约10 - 20,这是很好的代码的原因。</em>

然后把百叶窗下(这样的红色条下方的传感器)和记录这些新的价值观。确保你离开至少5秒的稳定值。再次,确保你写下的这些值是红色条。

最后卷盲了一半所以,正常盲材料在传感器。离开5秒记录这些值,标记为“正常”。

 

代码

代码本身可以被复制和粘贴到下面,Arduino IDE,或下载一个文件。伊诺和进口到Arduino IDE:

/ *代码自动盲器校准由diytronics:< a href =“http:/ / www.instructables。COM /会员/ diytronics /”> HTTPS:/ / www.instructables。COM /会员/ diytronics / 
 </a> 
 *使用Adafruit tcs34725色彩传感器库:< a href =“http / / / / adafruit_tcs34725 GitHub网站Adafruit”> HTTPS:/ / www.instructables。COM /会员/ diytronics / 
 </a> 
 * / 
 
 #包括<<丝。”
 #包括“adafruit_tcs34725。H”
 
 adafruit_tcs34725 TCS = adafruit_tcs34725(tcs34725_integrationtime_700ms,tcs34725_gain_1x);//初始化传感器
 
虚空(void){ 
串口设置。开始(9600);//设置串行
 
如果(TCS。begin()){ //如果传感器fetected 
串行out.println(“传感器成功地检测”);/ /通知其他用户
 } { //如果传感器没有发现
 println系列。(“不tcs34725发现…check your wiring"); //Notify user
    while (1);
  }
}

void loop(void) {
  uint16_t r, g, b, c, colorTemp, lux; 
  
  tcs.getRawData(&r, &g, &b, &c);
  
  Serial.print("R: "); Serial.print(r, DEC); Serial.print(" "); //Print red values
  Serial.print("G: "); Serial.print(g, DEC); Serial.print(" "); //Print green values
  Serial.print("B: "); Serial.print(b, DEC); Serial.print(" "); //Print blue values
  Serial.print("C: "); Serial.print(c, DEC); Serial.print(" "); //Print clear values
  Serial.println(" ");
}

下载

 
  • calibaration_file_for_blind_opener_diytronics.inocalibaration_file_for_blind_opener_diytronics.ino
    下载

步骤45:颜色传感器的计算

#p#分页标题#e#
颜色传感器的计算

我们现在已经收集了价值为每个颜色的条带,以及盲目的材料。现在我们将把价值转化为代码,颜色传感器可以告诉它是什么看。

这段代码可以看一个从传感器来的值(R,G,B或C)。为带不同的颜色,一定会对某些条高值。例如,红色的价值就高了很多,在红带比绿色的条。因此,我们只需要看看一个值为绿色和红色是对立的色彩,因此,红色和绿色的值将是相同的在一个红色的物体,例如。

首先,看值记录你从每一条上一步。

我们现在需要找到红色和绿色带读数之间的差异大。

比较并写出红、绿两条带之间的差异,蓝色和透明值(减去任何值从大值小)。

然后写下这两个数的<strong>最大的</strong>区别,以及颜色的值来自。

例如,我的最大的不同是在绿色价值观,如上图所示,我会写“4780绿条和3039条(红色,绿色价值)”。

步骤46:底Arduino的代码

我们现在可以上传实际的代码运行在底部的Arduino。

可以复制和粘贴以下代码到Arduino IDE或下载并打开它。

/* Code for Automatic Blind BOTTOM ARDUINO -- by DIYtronics: <a href="https://www.instructables.com/member/diytronics/"> <a href="https://www.instructables.com/member/diytronics/"> https://www.instructables.com/member/diytronics/
</a>
</a>
 *  Using Adafruit TCS34725 colour sensor library : <a href="https://github.com/adafruit/Adafruit_TCS34725"> <a href="https://www.instructables.com/member/diytronics/"> https://www.instructables.com/member/diytronics/
</a>
</a>
 */
#include <Wire.h>
#include "Adafruit_TCS34725.h"

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Variables
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int redreading;
int greenreading;
int bluereading;
int clearreading;
int reading;
int redstripvalue;
int greenstripvalue;
int materialvalue;
int tolerance;
int materialcolour;

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1x);//初始化颜色传感器
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /设置
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
无效setup() { 
系列。开始(9600);//串口设置
而(!串行){ 
;/ /等待串口连接。需要USB 
 } 
 pinmode(4,输出);//定义引脚
 pinmode(5,输出);
 digitalwrite(4,低);
 digitalwrite(5,低);
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /值
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
;/替换值红带读< ------------------------------------------------------------------------------ / .......... redstripvalue = 
;/替换值绿色条阅读<< ------------------------------------------------------------------------------ / .......... greenstripvalue = 
;/ /更换材料的阅读价值< ------------------------------------------------------------------------------ .......... materialvalue = 
 materialcolour = ..........;/ /更换点:redreading,greenreading,bluereading或clearreading所依赖的颜色你的盲材料阅读------------------------------------------------------------------- 
公差= ..........;/ /替换点与公差(通常300)< ------------------------------------------------------------------------------ 
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 / 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 } 
 
无效loop() { 
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /值
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
阅读= ..........;/ /更换点:redreading,greenreading,bluereading或clearreading依赖于它的颜色你带读数来自<< ------------------------------------------------------------------------------ 
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Loop
///////////////////////////////////////////////////////////////////////////////////////////////////////////////


  uint16_t c, r, g, b;
  
  tcs.getRawData(&r, &g, &b, &c); 
  redreading = r, DEC;
  greenreading = g, DEC;
  bluereading = b, DEC;
  clearreading = c, DEC;
  

  
  if(reading > (redstripvalue - tolerance)){  //If the value from the colour sensor is under the max limit for red, but over the min limit for red, it must be red
   if (reading < (redstripvalue + tolerance)){
    Serial.println("Red Detected");
    digitalWrite(4, HIGH); //Set pins accordingly
    digitalWrite(5, LOW);

  }
  }

  if (reading > (greenstripvalue - tolerance)){  //If the value from the colour sensor is under the max limit for green, but over the min limit for green, it must be green
   if (reading < (greenstripvalue + tolerance)){
    Serial.println("Green Detected");
    digitalWrite(4, LOW); //Set pins accordingly
    digitalWrite(5, HIGH);
  }
  }
  if (materialc颜色>(materialvalue容忍)){ //如果材料值检测,设置相应的
 digitalwrite引脚(4、低);
 digitalwrite(5,低);
 } 
 
  • bottom_arduino_code_blind_opener_diytronics.inobottom_arduino_code_blind_opener_diytronics.ino
    下载

步骤47:颜色传感器的代码

颜色传感器的代码

在代码中你刚刚下载/复制,有6个变量,需要修改,所有标有代码中的一个大箭头(< ------------)使它更容易找到他们(注意,第六个变量是略低)。

注意:更换点时,不小心删除分号()!

 

第一个变量是redstripvaluegreenstripvalue

这两个变量,只需更换点代码中的每个变量的差异最大的两个数字,你在上一步中发现。确保从红带的价值去红带变,从绿色带去绿色带变量的值。

第三个变量materialvalue

此变量,取代点无论是你之前的记录为盲材料的最高值(我们称之为“正常的”)。

第四个变量materialcolour

更换点哪个颜色(<strong>R</strong> <strong>edreading</strong> <strong>greenreading</strong>红色,绿色,蓝色或<strong>clearreading</strong> <strong>bluereading</strong>清楚)你只用于最高盲材料价值(第三项)。

第五个变量容忍

这个变量调整边界的颜色检测。更换点与300号。我增加了这个功能,如果你有任何问题,颜色传感器。如果是难以分辨颜色,减少100的增量值。同样的,如果有麻烦的颜色,增加100的增量数。

最后的变量阅读

简单地代替这两者(<strong>redreading</strong>颜色为红色,<strong>greenreading</strong>绿色、蓝色或<strong>clearreading</strong> <strong>bluereading</strong>清楚)你用不同颜色条(变量1和2)。

上传

确保保存代码并点击“编译”按钮(在左上打勾)或按Ctrl键+R确保Arduino是连接电脑和正确的COM端口和Arduino的选型(这应该已经完成了),上传的代码。

步骤48:代码上传

我们现在准备上传代码的最后一位!

首先,下载的代码在这一步的底部找到,或者复制下面的框。

/ * 
 **这个例子使用F马尔帕蒂达的newliquidcrystal图书馆。获得:
 * < a href =“http:/ / Bitbucket. org / fmalpartida /新液晶”> HTTPS:/ / Bitbucket. org / fmalpartida /新liquidcryst…</a> 
 * 
 *也rtclib基于< a href =“http:/ / GitHub。COM / Adafruit / rtclib”> HTTPS:/ / Bitbucket. org / fmalpartida /新liquidcryst…</a> 
 * 
 *写的diytronics:< a href =“http:/ / www.instructables。COM /会员/ diytronics /”> HTTPS:/ / Bitbucket. org / fmalpartida /新liquidcryst…</一> 
 * / 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /库包含:
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 #包括<<丝。”
 #包括<液晶。”
 #包括<< liquidcrystal_i2c。H > 
 #包括“rtclib。H”
 rtc_ds3231 RTC;
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /液晶在实例
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
DDR    0x27 
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Variable Declerations
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int seconds;
int minutes;
int hours;
int menu;
int upminutesa = 0;
int uphoursa = 0;
int dwnminutesa = 0;
int dwnhoursa = 0;
int setupminutesa = 0;
int setuphoursa = 0;
int setdwnminutesa = 0;
int setdwnhoursa = 0;
int upminutesb = 0;
int uphoursb = 0;
int dwnminutesb = 0;
int dwnhoursb = 0;
int setupminutesb = 0;
int setuphoursb = 0;
int setdwnminutesb = 0;
int setdwnhoursb = 0;
int active = 1;
int selcounter;
int senseLED = 3;
int rval;
int gval;
int bval;
int minup;
int hourup;
int mindwn;
int hourdwn;
int blindposi应用= 0;
 int redreading;
 int greenreading;
 int bluereading;
 int起来;
 int DWN;
 INT SEL;
 int ESC;
 int prevup =高;
 int prevdwn =高;
 int prevsel =高;
 int disprelay = 7;
 int TIMEC;
 int setcounter;
 int setcountera;
 int计数器;
 int greenstate;
 int RedState;
 int状态= 1;
 int trigcounter;
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 /按钮引脚
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
 int扣件= 12;
 int buttondwn = 11;
 int buttonsel = 10;
 int buttonesc = 9;
 int计数器= 0;
 int dwncounter = 0;
 int esccounter = 0;
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 / /其他定义
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 int功率= 6;#p#分页标题#e#= 2; //Green detection from other Arduino
int redpin = 3; //Red detection from other Arduino

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //Sync RTC and Computer time
Serial.begin(9600); 

pinMode(buttonUP, INPUT_PULLUP); //Use internal pullups for control panel switches
pinMode(buttonDWN, INPUT_PULLUP);//^
pinMode(buttonSEL, INPUT_PULLUP);//^
pinMode(buttonESC, INPUT_PULLUP);//^

pinMode(disprelay, OUTPUT); //Configure relay output pins
pinMode(power, OUTPUT); //^
pinMode(fwd, OUTPUT);//^
pinMode(bwd, OUTPUT);//^


digitalWrite(disprelay, LOW); //Set default to turn backlight on

digitalWrite(power, HIGH); //Have everything else off
digitalWrite(fwd, HIGH);//^
digitalWrite(bwd, HIGH);//^
     
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD Setup
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

lcd.begin (20,4); //Configure LCD
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); //^
lcd.setBacklight(HIGH);//^
mainmenu();//^

pinMode(senseLED, OUTPUT); //Configure LED
digitalWrite(senseLED,LOW); //Configure LED
pinMode(redpin, INPUT); //Configure sensor input
pinMode(greenpin, INPUT); //Configure sensor input

digitalRead(greenpin); //Read sensor from Arduino
digitalRead(redpin); //Read sensor from Arduino
blindposition = 1; //Retact blind
}


void loop()
{

 getbutton(); //Get menu button presses
 printtime(); //Update time
 checktime(); //Check if blind needs to move
 
 redstate = digitalRead(redpin); //Get sensor
 greenstate = digitalRead(greenpin); //Get sensor
 
 checkblind(); //Check position
 
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Get Time From I2C RTC
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
无效gettime() { 
如果(!RTC。begin()){ //报道如果RTC没有发现
串行out.println(“找不到
 RTC”);而(1);
 } 
如果(RTC。lostpower()){ 
串行out.println(“RTC失去动力,让我们的时间!; //Sets time if power lost.
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  DateTime now = rtc.now(); //Update time
  seconds = (now.second()); //Update seconds
  minutes = (now.minute()); //Update minutes
  hours = (now.hour()); //Update hours
    }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Print Time to LCD
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

void printtime(){ //Print the time on screen
    gettime(); //Get the time from RTC
    lcd.setCursor(10,0); 
    lcd.print("T:");
    lcd.setCursor(12,0);
    lcd.print(hours, DEC); //Use DEC to convert to numbers
    lcd.setCursor(14,0);
    lcd.print(':');
    lcd.setCursor(15,0);
    lcd.print(minutes, DEC); //Use DEC to convert to numbers
    lcd.setCursor(17,0);
    lcd.print(':');
    lcd.setCursor(18,0);
    lcd.print(seconds, DEC); //Use DEC to convert to numbers
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Displays Menu
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 void mainmenu(){ //Reddraw static menu
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("Disp PWR");
  lcd.setCursor(1,1);
  lcd.print("Set Open Time");
  lcd.setCursor(1,2);
  lcd.print("Set Down Time");
  lcd.setCursor(1,3);
  lcd.print("MANUAL TRIGGER");
 }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Shows cursor
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cursorpos(){ //Update/Move cursor
   if (active == 1){
   if (counter == 0){
    lcd.setCursor(0,0);
    lcd.print(">");
    lcd.setCursor(0,1);
    lcd.print(" ");
    lcd.setCursor(0,2);
    lcd.print(" ");
    lcd.setCursor(0,3);
    lcd.print(" ");
    menu = 1;
   }
    
  if (counter == 1){  //Update/Move cursor
    lcd.setCursor(0,1);
    lcd.print(">");
    lcd.setCursor(0,0);
    lcd.print(" ");
    lcd.setCursor(0,2);
    lcd.print(" ");
    lcd.setCursor(0,3);
    lcd.print(" ");
    menu = 2;
  }
  
  if (counter == 2){  //Update/Move cursor
    lcd.setCursor(0,2);
    lcd.print(">");
    lcd.setCursor(0,1);
    lcd.print(" ");
    lcd.setCursor(0,0);
    lcd.print(" ");
    lcd.setCursor(0,3);
    lcd.print(" ");
    menu = 3;
  }
  
  if (counter == 3){  //Update/Move cursor
    lcd.setCursor(0,3);
    lcd.print(">");
    lcd.setCursor(0,1);
    lcd.print(" ");
    lcd.setCursor(0,2);
    lcd.print(" ");
    lcd.setCursor(0,0);
    lcd.print(" ");
    menu = 4;
   }
 }
 if(active == 0){ //If set open time selected show this
   oTimedisplay();
 }
   if(active == 2){ //If set close time selected show this
    cTimedisplay();
   }
 }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Open Time
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

void opentime(){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Menu");

  }
  
void getbutton(){ // Get button input and assign to correct variables
   up = digitalRead(buttonUP);
  dwn = digitalRead(buttonDWN);
  sel = digitalRead(buttonSEL);
  esc = digitalRead(buttonESC);
  if(esc == LOW){
    active = 1;
    mainmenu();
    Serial.print("ESC");  // Get button input and assign to correct variables
    upminutesa = setupminutesa;
    upminutesb = setupminutesb;
    uphoursa = setuphoursa;
    uphoursb = setuphoursb;

    dwnminutesa = setdwnminutesa;
    dwnminutesb = setdwnminutesb;
    dwnhoursa = setdwnhoursa;
    dwnhoursb = setdwnhoursb;
    digitalWrite(disprelay, LOW);
    motorstop(); //stop motor if selected
  }
  switch(counter){ //loop logic keepin numbers within the limit
  case 4:
    counter = 3;
    break;
  case -1:
    counter = 0;
    break;
 } 
 
如果((!= prevup)/测试开关机
 &(上= =低)){ 
柜台;
如果(主动= = 0){ 
 setcounter + +;
 
 } 
(主动= =如果2){ 
 setcountera + +;
 
 } 
 digitalwrite(disprelay,低);
 } 
 prevup =!= prevdwn)/测试开关机
 &(DWN = =低)){ 
计数器+;如果(主动= = 0 
){ 
 setcounter --;
 
 } 
(主动= =如果2){ 
 setcountera --;
 
 } 
 digitalwrite(disprelay,低);
 } 
 prevdwn =胆胃宁!= prevSel)  //testing switch press
  &&(sel == LOW)){
    if (countera < 3){
    countera ++;
    setcounter = 0;
    }
    else{
      countera = 0;
    }
    
      if (menu == 1){
      disPWR();
       
    }
    if (menu == 2){
        oTime();
      }
      
    
      
    if (menu == 3){
      cTime();
      
    }
    if (menu == 4){
      trig();
    }
    }
 

prevSel = sel;

}
void disPWR(){
  Serial.println("disPWR");
  digitalWrite(disprelay, HIGH);
  lcd.clear();
}

void oTime(){ 
  active = 0;
  lcd.clear();
  lcd.setCursor(0 ,0);
  lcd.print("Set Open: ");
  lcd.setCursor(0,1);
  lcd.print("Prog Time> ");
  //
  lcd.setCursor(12,1);
  lcd.print(upminutesa);
  //
  lcd.setCursor(13,1);
  lcd.print(upminutesb);
  //
  lcd.setCursor(14,1);
  lcd.print(":");
  //
  lcd.setCursor(15,1);
  lcd.print(uphoursa);
  //
  lcd.setCursor(16,1);
  lcd.print(uphoursb);
  //
  lcd.setCursor(0,2);
  lcd.print("Edit Time> ");
  }
  
  void oTimedisplay(){
  lcd.setCursor(12,2);
  lcd.print(setupminutesa);
  //
  lcd.setCursor(13,2);
  lcd.print(setupminutesb);
  //
  lcd.setCursor(14,2);
  lcd.print(":");
  
  lcd.setCursor(15,2);
  lcd.print(setuphoursa);
  
  lcd.setCursor(16,2);
  lcd.print(setuphoursb);
  lcd.setCursor(0,3);
  lcd.print("Sel Digit>");

  if (countera == 0){  //First hour digit
    lcd.setCursor(12,3);
  lcd.print("^");
 switch (setcounter){
  case 3:
  setcounter = 2;

  case -1:
  setcounter = 0;
 }
  setupminutesa = setcounter;
  
 }
  
  if (countera == 1){ //Second hour digit
    lcd.setCursor(13,3);
  lcd.print("^");
  switch (setcounter){
  case 10:
  setcounter = 9;

  case -1:
  setcounter = 0;
 }
 switch (setupminutesa){
  case 2:
  
  switch (setcounter){
  case 5:
  setcounter = 0;
 }
  
 }
  setupminutesb = setcounter;
  }
  
  if (countera == 2){ //First Minute digit
    lcd.setCursor(15,3);
  lcd.print("^");
    switch (setcounter){
  case 6:
  setcounter = 5;

  case -1:
  setcounter = 0;
 }
  setuphoursa = setcounter;
  }
  
  if (countera == 3){ //Second minute digit
    lcd.setCursor(16,3);
  lcd.print("^");
  switch (setcounter){
  case 10:
  setcounter = 9;

  case -1:
  setcounter = 0;
 }
  setuphoursb = setcounter;
  }
  Serial.println("Done");
  }


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void cTime(){  //Menu for setting close time
  active = 2;
  lcd.clear();
  lcd.setCursor(0 ,0);
  lcd.print("Set Close: ");
  lcd.setCursor(0,1);
  lcd.print("Prog Time> ");
  //
  lcd.setCursor(12,1);
  lcd.print(dwnminutesa);
  //
  lcd.setCursor(13,1);
  lcd.print(dwnminutesb);
  //
  lcd.setCursor(14,1);
  lcd.print(":");
  //
  lcd.setCursor(15,1);
  lcd.print(dwnhoursa);
  //
  lcd.setCursor(16,1);
  lcd.print(dwnhoursb);
  //
  lcd.setCursor(0,2);
  lcd.print("Edit Time> ");
  }
  
  void cTimedisplay(){
  lcd.setCursor(12,2);
  lcd.print(setdwnminutesa);
  //
  lcd.setCursor(13,2);
  lcd.print(setdwnminutesb);
  //
  lcd.setCursor(14,2);
  lcd.print(":");
  
  lcd.setCursor(15,2);
  lcd.print(setdwnhoursa);
  
  lcd.setCursor(16,2);
  lcd.print(setdwnhoursb);
  lcd.setCursor(0,3);
  lcd.print("Sel Digit>");

  if (countera == 0){  //First hour digit
    lcd.setCursor(12,3);
  lcd.print("^");
 switch (setcountera){
  case 3:
  setcountera = 2;

  case -1:
  setcountera = 0;
 }
  setdwnminutesa = setcountera;
  
 }
  
  if (countera == 1){ //Second hour digit
    lcd.setCursor(13,3);
  lcd.print("^");
  switch (setcountera){
  case 10:
  setcountera = 9;

  case -1:
  setcountera = 0;
 }
 switch (setdwnminutesa){
  case 2:
  
  switch (setcountera){
  case 5:
  setcountera = 0;
 }
  
 }
  setdwnminutesb = setcountera;
  }
  
  if (countera == 2){ //First Minute digit
    lcd.setCursor(15,3);
  lcd.print("^");
    switch (setcountera){
  case 6:
  setcountera = 5;

  case -1:
  setcountera = 0;
 }
  setdwnhoursa = setcountera;
  }
  
  if (countera == 3){ //Second minute digit
    lcd.setCursor(16,3);
  lcd.print("^");
  switch (setcountera){
  case 10:
  setcountera = 9;

  case -1:
  setcountera = 0;
 }
  setdwnhoursb = setcountera;
  }
  Serial.println("Done");
  
}

void trig(){ //Keep track of blind position
  trigcounter ++;
  switch(trigcounter){
    case 3:
    trigcounter = 1;
  }
  if(trigcounter == 1){
    blindposition =  1;
  }
  if(trigcounter == 2){
    blindposition =  2;
  }
  Serial.println("Trig");
}


void motorfwd(){ //Move motor forwards
  digitalWrite(power, LOW);
  digitalWrite(bwd,HIGH); 
  digitalWrite(fwd,LOW); 
}

void motorbwd(){ //Move motor backwards
  digitalWrite(power, LOW);
  digitalWrite(fwd,HIGH);
  digitalWrite(bwd,LOW);
}

void motorstop(){ //Stop the motor
  digitalWrite(power, HIGH);
  digitalWrite(fwd,HIGH);
  digitalWrite(bwd,HIGH);
}



void checktime(){ //Check the time form the RTC
  DateTime now = rtc.now();
  minup = upminutesa*10 + upminutesb;
  hourup = uphoursa*10 + uphoursb;

  mindwn = dwnminutesa*10 + dwnminutesb;
  hourdwn = dwnhoursa*10 + dwnhoursb; 
  
  if(minup == now.hour()){
  if(hourup = =现在。minute()){ 
 blindposition = 1;} } 
 
 
 
如果(hourdwn = =现在。minute()){ 
如果(mindwn = =现在。hour()){ 
 blindposition = 2;} } } 
 
 
 
 
 
无效checkblind() { //检查
盲目状态。如果(blindposition = = 1){ 
如果(greenstate = =高){ 
 motorstop();
 blindposition = 3;}如果
 
(greenstate = =低){ 
 motorfwd();
 } }如果
 
(blindposition = = 2){ 
如果(RedState = =高){ 
 motorstop();
 blindposition = 3;}如果
 
(RedState = =低){ 
 motorbwd();
 } }如果
 
(blindposition = = 3

连接<u>上</u>Arduino和选择合适的板和COM端口,以前所做的那样。然后继续上传代码。

 
  • blindopener2m_diytronics.inoblindopener2m_diytronics.ino
    下载

步骤49:电压调整

电压调整

最后一步是调整硬件从升压转换器的输出电压。

首先,除去正输出线和电源的盲刀采用直流输入。用你的万用表,将积极探索正极端子块和黑探讨负端子(标记在PCB)。

然后将电位器用螺丝刀到多表的读数是12v。

注意:您可能需要改变转动方向,如果电压下降。

最后取下电源并重新插入正极线。

步骤50:粘贴

#p#分页标题#e#
胶合

胶盲目开启使用硅窗台,确保电机直接与顶盲齿线,如图所示。

还胶控制面板到你想要的位置。你如果太重要支撑面板或拆卸前面板。

让一切干通宵。

步骤51:线穿线

线穿线

将窗帘绳在外壳和供电系统,下孔。电源线应抓住和拉通过小心不要让你的手指被困!。<u>拆下电源当第一三个球出来的另一端</u>。如果电机转向错误的方式,交换引脚4和5前的Arduino。

拆下盲、拔齿。然后插入线和扭曲的部分,进入盲拉球通过。

休息中的齿轮托架,它通常是安装拉绳教。然后,重新安装盲-确保它卷起了。

然后安装夹连接线从电机到松尾从盲目的齿轮。你可能需要调整的线,它是教和适合在夹。

步骤52:测试和使用

测试和使用

的盲揭幕战已经结束!测试单元的作品,将DC桶杰克和确保电源是。这个盲人应该作出自己的方式到顶部和停止时功率应用。该控制面板的主要接口,它有4个按钮:,胆胃宁(下),选择(选择)和ESC(逃):

<strong>上下</strong>移动光标或改变一些在其中的菜单。

<strong>SEL</strong>将选择一个功能从主菜单或选择一个数字来调整菜单。

<strong>Esc</strong>将返回到主菜单。

面板也有4个菜单功能说明如下:

DISP压水堆:

关闭背光。按Esc键然后DWN把显示回。

设置开放时间:

允许您配置的开放时间。SEL将推移动光标。按向上/ DWN将增加/减少的数字。(注:单位小时的时间格式。作品)。我也实现逻辑,确保您设置的时间是一个实际的24hr时间,例如你不能设置34:86作为时间。

设置关闭时间:

作为开放时间功能相同而设置的关闭时间。

手动触发:

手动切换开启或关闭之间的盲。

步骤53:文件

这里是所有的文件,如果你需要任何人。

谢谢你阅读下面,我希望你学到的东西。

- diytronics

 
  • bottom_arduino_code_blind_opener_diytronics.inobottom_arduino_code_blind_opener_diytronics.ino
    下载
  • blindopener2m_diytronics.inoblindopener2m_diytronics.ino
    下载
  • colouredstrips.pdfcolouredstrips.pdf
    下载
  • calibaration_file_for_blind_opener_diytronics.inocalibaration_file_for_blind_opener_diytronics.ino
    下载
  • diytronics_blindgeard.dxfdiytronics_blindgeard.dxf
    下载
  • diytronics_box_plan.pdfdiytronics_box_plan.pdf
    下载
 
(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片