Arduino Commute Checker:13个步骤(附图)

Arduino Commute Checker:13个步骤(附图)

目录:

Anonim

在这个Instructable中,我将向您展示如何制作Arduino Commute Checker,这是一种使用ESP8266来检查下班回家最快方式的设备!它将使用我的Arduino Google Maps库考虑交通状况,点亮最快的路线。

查看上面的视频,快速了解这些功能。

如果路线上的交通正常,路线将亮起绿色,如果它比正常情况更糟,它会亮起黄色,如果它真的很糟,它会亮起红色。

还有一个7段显示屏,显示旅程需要多长时间以及显示时间。

它也安装了一些非常酷的ESP8266库,它使用WiFiManager,它允许你配置你的WiFi和一些额外的参数,而无需重新编程你的板。

该项目的总成本约为25美元,是一个周末项目,需要时间。

我将详细介绍完成此项目的每个步骤。包括如何获得适合您通勤的地图。您可以根据需要添加或删除任意数量的路由。

希望你发现这个教学有用,如果你遇到它的任何部分,请告诉我,我会非常乐意尝试帮助!

供应:

第1步:你需要什么

当我设计项目时,我希望尽可能保持简单。令人惊讶的是,该项目所需的电子设备很少,我想尝试只使用通常具有或至少容易获得的工具。

零件清单:

  • 23厘米Ribba相框
    • 资源:宜家
    • 价钱: $10
    • 这是一个深刻的画框。这只是欧洲的E5:)
  • Wemos D1 Mini
    • 资源:全球速卖通
    • 价钱: $2.80
    • 任何ESP8266开发板都应该做(NodeMCU,Adafruit Feather Huzzah esp8266等)。 D1 mini带有引脚头,我稍后在项目中使用它
  • 一堆5mm PL9823
    • 资源:全球速卖通
    • 价钱: 20美元6.60美元
    • 这些与Neopixels基本相同,甚至可以与Neopixel库配合使用。根据您的地图,您需要的金额因项目而异
  • 4位7段显示
    • 资源:全球速卖通
    • 价钱: $1.30
    • 它使用TM1637芯片,中间有双点。
  • 220uF电容器
    • 资源:全球速卖通
    • 价钱: 120pc套件2美元
    • 这用于LED电源的平滑电容器。
  • 220pF陶瓷电容器
    • 资源: 全球速卖通
    • 价钱: 300pc套件1.60美元
    • 我在我的第一个PL9823 led的数据和地面之间需要这个,没有它它没有用(虽然我之前使用过的一些neopixels)。电平移位器也可以工作。
  • 面包板
    • 资源:全球速卖通
    • 价钱: 10美元2美元
    • 用于将项目焊接到。
  • 螺钉接线端子
    • 资源:全球速卖通
    • 价钱: 20美元1.20美元
    • 这些是可选的,但是可以方便地移除和调试protoboard。
  • 线
    • 资源: 任何地方!
    • 单芯线更适合将LED连接在一起,但最终连接到电路板更好,因此两种类型都有好处。

需要的工具:

  • 钻一个5毫米的木头钻头
  • 烙铁
  • 用于切纸的锋利刀具
  • 彩色打印机
  • 热胶枪
  • 胶带(我使用电绝缘胶带,粘性越小,越有趣!)
  • 用于测量和切割的尺子

我还使用blu-tac在切割和焊接时将东西固定在某些地方,但这是可选的。

第2步:设置Arduino / ESP8266环境

我认为最好尽早为你的ESP8266和Libraries设置软件。有用的是库都带有示例草图(文件 - >示例 - >库名),我们可以用它来分阶段测试部分电路。我觉得Arduino项目对于逐件测试事情非常重要,没有必要连接10个意图一起工作的传感器,它不起作用,也不知道从哪里开始查找问题!

我将在稍后的步骤中为该项目提供完整的草图,并将通过需要对其进行修改。

设置Arduino IDE:

(如果您已经使用arduino IDE编写了ESP8266程序,请跳至安装库部分)

我不知道这是不是我在懒惰,或者我是否工作聪明!,但Becky Stern在Instructables上如何通过物联网类中的Arduino IDE设置ESP8266做得非常好,如果您是ESP8266开发的新手,可能值得一试!

现在,请确保按照软件设置课程中列出的步骤进行操作。跟进使LED闪烁。只需一个小闪烁的LED就可以改变世界!

安装库:

这个项目有很多我们需要安装的库。这些库涵盖了许多内容,从控制LED到连接到谷歌地图。

通过以下方式打开Arduino Library Manager:

这将弹出库管理器窗口,在搜索栏中搜索以下库并安装它们。

  • GoogleMapsApi (我为连接Google Maps API而编写的库)
  • WifiManager (为了配置Wifi凭证而不重新编程,我有两个instructables更详细地解释这个)
  • Json Streaming Parser (Google Maps API库需要)
  • ArduinoJson (用于以JSON格式保存配置文件)
  • 双重复位检测器 (使用这样你可以按两次重置按钮以启用WifiManager上的配置模式)
  • Adafruit Neopixel (用于控制可寻址RGB LED)
  • 程序NtpClient (用于保持7段显示器上使用的时钟时间)

有一个库不在库管理器上,我已经要求作者添加它并且他们认为这是一个好主意,但在编写这个无法构建的时候它还没有。搜索 TM1637 如上所述,以防它确实被添加,但幸运的是,自己添加它并没什么大不了的。

  • 转到库的GitHub页面
  • 在页面右侧有一个绿色的克隆/下载按钮,单击它并单击“下载为Zip”。将此zip文件保存在计算机上易于查找的任何位置。
  • 在Arduino IDE中,请访问:
    • 草图 - >包含库 - >添加.Zip库…
  • 导航到您下载的zip文件。

第3步:准备安装

好!现在是真正开始的时候了!

框架配有照片支架,但其中心的孔太小。我们需要做的第一件事就是切割底座以使孔更大。

我们需要拆除框架,如照片一所示。没有工具需要它只是分开。

  • 弯曲框架背面的凸片并取下衬垫
  • 取出白色照片底座。
  • 取下垫片,小心地从框架上取下玻璃。我们不需要这个项目的玻璃。

将白色底座放在一个你不介意切割的表面上

我认为在测量或切割之前将它固定到位是个好主意,我正在使用蓝光标签。

我们现在需要在底座上标记切割的位置,我用尺子的宽度作为向导(大约3厘米,或美国货币的一英寸和四分之一)。用铅笔轻轻地标记所有4个边。您应该最终得到一个正方形,如图所示。

小心地使用锋利的刀子和标尺的导向器切割安装座。在广场的角落相遇的地方要小心,因为我们不想越过它们。我的建议是让刀子完成工作(不要太费力)并小心你要靠近尺子。

我对自己的结果非常满意!

第4步:获取地图

接下来,我们需要我们将用于项目的地图。这一步有很多文字,因为如果人们不太熟悉照片编辑等,我会尽量做一个描述性的文章。我保证它不会像它看起来那样长!

转到Google地图并缩放和定位地图,以便显示您想要点亮的所有路线。请记住,您将把它放在方形支架上,因此请确保它们居中并适合方形(我们可以稍后测试)。

拍摄地图的屏幕截图。按键盘上的ALT + PrtScn键可以显示窗口或按下Mac上的cmd + shift + 4。 (如果你在Linux上,你就是自己的!)

我们现在需要编辑照片,我喜欢Paint.net for windows,因为它免费且易于使用。 (我没有找到类似的mac,如果你有推荐,请告诉我!)

打开paint.net,转到编辑 - >然后按粘贴,这会将屏幕截图复制到paint.net(它可能会询问有关扩展画布,对此说“是”。)

我们现在需要裁剪出适合框架的正方形。在paint.net的右下角,您可以更改其测量的值,将其更改为英寸

从工具栏中选择“矩形选择”,在您希望方块的左上角按下鼠标,按住shift(这使矩形选择一个正方形)并选择一个8.5英寸的正方形(测量在旁边你把它改成英寸的地方)。请记住,mount将覆盖部分照片。一旦您对所选内容感到满意,请选择图像 - >裁剪为选择。

这是一个很好的点,打印出地图的黑白版本,看看它如何适合安装,只要确保你可以看到你的所有路线,你真的不希望LED靠近边缘。如果路线不合适,您可能最好调整谷歌地图上的缩放并重新开始。我的第一次尝试的路线太靠近边缘了。

为了方便我们以后放置页面,最好给自己一条标记地图每个边缘中心的引导线。转到图层 - >创建新图层

选择工具栏上的形状图标,确保它设置为矩形,使画笔宽度为1.从左上角的照片外部开始按住鼠标,然后将鼠标拖动到右侧的照片外部。向下移动鼠标,直到底栏上的第二次测量为4.25(测量值在您将测量值更改为英寸的位置旁边)。

重复上述步骤,除了将鼠标移动到照片底部并向右移动,最后应该显示4个方块,如图所示

现在选择您的矩形选择工具并从靠近照片左上角的某处开始,再次按住shift并绘制一个正方形

按删除键,现在将留下4行标记地图每侧的边缘。线的长度不需要与支架覆盖它完全相同。

创建另一个新图层,并为每个要放置每个RGB LED沿不同路径放置的位置添加标记,如上一张照片所示。如果路线采用共同的路径,路线可以共享LED(例如,所有3条路线都使用“Scotty's Steakhouse”附近的点)。再打印出黑色和白色,因为我们会破坏它!仔细检查它是否适合安装,然后打印出彩色副本。

第五步:让我们钻一些洞

从页面上剪下方形图,它不需要完美切割,因为安装将覆盖边缘。我建议您在剪切时将页面按下以保持静止状态。

标记背景每个边缘的中心点,使用我们添加到照片中的指南(如下图所示)将地图对齐。

使用PVC胶带将地图粘贴到背衬上,PVC胶带在此处工作良好,因为它不够粘,不能撕裂背衬。我把磁带放在下面图片的中间位置,但你最好不要覆盖你的指南,确保一切都排好,只需将磁带放在角落里。

标记您的支持的顶部,您不希望最终不知道以后更改页面的方式!

您可以使用框架分隔器为自己提供一个高度可以在不损坏工作台的情况下钻孔的平台,尝试在钻孔边缘附近钻孔,因为在中间钻孔时背衬有点过于柔软。

从每个点的页面正面钻孔。

背面的远端可能有一些孔,如上图所示,有点爆裂。您可以通过在废料木材上钻孔,而不是使用分隔板来最小化这一点。尽管它不应该产生太多差异,但最好刮掉或磨掉这个公寓的任何不良情况。

第6步:让一些洞捅

奇怪的是,这个项目的一部分是我努力寻找能够很好地工作并且不需要特殊设备的解决方案。解决方案有点奇怪,但我认为结果不言自明!

剪下地图的彩色版本,并使用与之前相同的准则将其粘贴到背衬上。确保这次录音很好。

如果您将背景保持在灯光下,您应该可以看到地图后面的所有洞,希望它们与地图上的点对齐!用铅笔/钢笔在地图上钻一个洞

现在拿一个LED,然后戳穿你穿过的洞,然后从地图的正面戳穿它(与它们结束的方式相反)

这将为您留下一个令人惊讶的干净洞!

然后取下LED并将其放回另一侧的孔中。重复所有LED

第7步:为7段显示腾出空间

首先,我们需要从7段显示中删除标题。加热4个引脚上的焊料并使用钳子将其从显示屏上移除。添加更多焊料可能会使所有4个焊点一次更容易变为液体。

用铅笔在地图正面标记一个点,在那里你想要显示器的一角给我,并画出显示器的尺寸。您只想绘制显示器部件的测量值,而不是PCB。

小心地剪切标记矩形的地图,您希望同时标记背景。

抬起页面并继续穿过背衬,我发现整个方向都是推刀,一旦完成就切割。

如果显示器没有穿过孔,则使用文件,或者用刀子刮削孔的一些内部部分。它应该如下所示。

步骤8:组装电路板(第1部分 - ESP8266)

现在让我们进入电路板。我们需要做的第一件事就是将公头插针焊接到wemos d1 mini上。我喜欢使用blu tac将标头固定到位,确保它们是直的。

用任何东西支撑对方。在每个引脚上涂一点焊料。对另一方重复相同的操作。

现在取出母头插针,将它们推到电路板上的公头上。将母头穿过原型板并在每侧焊接几个引脚以固定到位。

现在我们有一个完美尺寸的电路板插座,用于固定Wemos,但如果需要可以轻松更换。

步骤9:组装电路板(第2部分 - 电路板的其余部分,不是很多)

现在我们需要添加其余的电路,我们将基于第一张图中电路图的电路。

放置螺丝端子。您可以使用少量焊料将它们固定到位。

将电容器添加到电路中。只需将它们朝螺丝端子弯曲即可将它们固定到位。

添加一些单芯线,两端约半英寸。一个端子应连接到5v引脚,一个连接到G,一个端子连接到您想要的任何GPIO引脚(我使用D3)。将电线和电容器焊接到螺钉端子上。还要将电线焊接到电路板连接器上。

为上述7段显示螺丝端子添加电线。一个端子应连接到3.3V,一个连接到D5(DIO)和D6(CLK),然后一个连接到G(我只是将它连接到另一个从另一个端子接地的电线)并将它们焊接到螺丝端子和板连接器。

通过将一些PL9823 LED连接到面包板并运行Adafruit Neopixel库中的“stripTest”来测试电路板。确保调整LED的数量以及LED所连接的正确引脚的草图

第10步:欢迎来到Solder Town

现在是焊接LED的时候了。人们如何耐心焊接LED立方体我永远不会理解!这不是太糟糕,但剥线需要一段时间,所以它不会太快。

我能给出的一个非常重要的建议就是以相同的方式排列所有LED,这将使您的生活变得更加轻松。看一下图1,看看PL9823 LED的引脚。 注意: 如果您使用不同的LED(如Neopixels),请确保检查LED的引脚是否有所不同。

弯曲第一个LED的D-Out朝向第二个LED的D-In,如果需要,将D-In推向D-Out(在你开始的地方或你去的顺序并不重要,你可以调整稍后在代码中订购)。

对所有LED重复此操作,然后将它们焊接在一起,切掉任何大量的LED。如果某些LED的D-Out没有到达下一个D-In,请在它们之间使用一些电线。

对所有LED稍微向上弯曲VCC支脚,并在所有LED之间焊接单芯线。不需要按顺序排列,他们只需要在某个时刻建立彼此的连接。

以类似的方式向下弯曲GND腿,并在所有它们之间焊接单芯线。

如果你有它,将绞线焊接到第一个LED并将其连接到电路板的端子(单芯将很好,但它的灵活性较差)。为了与螺丝端子建立更牢固的连接,我建议如下图所示折叠电线(模糊,对不起!)。

从Adafruit Neopixel库运行“strandTest”示例,以确保它按预期工作。确保修改它以获得正确的引脚和适当数量的LED

将绞合线焊接到7段显示器的背面,并将其连接到螺钉端子。最好在背面添加一些胶带,以便在弯曲导线时将压力从连接中移开。从TM1637库运行示例(确保更新引脚)。

你现在应该处于良好的状态!

第11步:收集一些信息

我们需要获得一些修改草图的信息。

Google地图位置:

我们需要获得的第一件事是传递到Google Maps Api的位置,以便它可以返回流量数据。转到maps.google.com并右键单击您要开始旅程的位置,然后选择“此处的路线”。

然后右键单击您希望结束旅程的位置并选择“到此处的路线”

最后右键点击指示检查哪条路线的某个地方(即使地图默认选择正确的路线只有原点和目的地,我建议在地图上添加另一个点以确保它正在检查该路线)。重新排序左上方蓝色框中的点,以便新点位于中间。您现在可以从地址栏中的URL获取位置值。

注意:如果您需要添加更多路点以获取所需路线,只需右键单击地图并从URL获取与以前相同的方式添加另一个目的地。

记下这些值并再次重复这些步骤以获取所需路线的信息。

Google Maps API密钥:

Google Maps API要求您注册一个密钥才能使用他们的服务,这是完全免费的,只需要一分钟。

  • 转到此页面
  • 点击“获取密钥”
  • 按照说明获取密钥
  • 确保以下网址适合您的浏览器(最后更改密钥!):http://maps.googleapis.com/maps/api/directions/json?origins = Galway,+ Ireland &destinations =都柏林,爱尔兰&departure_time =现在与traffic_model = best_guess&关键= PutYourNewlyGeneratedKeyHere

记下这把钥匙。

时区偏移:

您需要获取时区的偏移量,转到以下网站并搜索与您在同一时区的城市。记下“以秒为单位的偏移”列中的值。

每条路线中包含的LED:

我们需要获取每条路线中包含的所有LED的LED地址列表。

从编号LED开始,连接到ESP8266的第一个LED是地址0,第一个连接到的LED是地址1,依此类推,标记所有LED。你的最后一个地址应该比你拥有的LED数量少一个(因为我们从0开始)

现在,每条路线标记当该路线有效时哪些LED应亮起。我使用电子表格来标记哪些,但您可以轻松使用页面。如您所见,所有3条路线的LED 0都亮起,LED 1仅点亮B等。所有LED应分配至少一条路线!

第12步:软件时间(也称为真理的时刻!)

您需要做的第一件事就是从我的Github上获取该项目的草图

当您在IDE中拥有该文件时,我要做的第一件事就是单击“验证”按钮(看起来像一个勾号),以确保您正确设置了所有内容。

-----------

向下滚动到评论“更改以下内容以适应您”并进行以下更改

  • 如果您使用的引脚与我不同,请更换引脚
  • NUMBER_OF_ROUTES 如果您有不同的号码,请更改路线数量
  • NUMBER_OF_LEDS 更改LED的总数
  • BRIGTHNESS LED是多么明亮,我会把它留到像16这样低的东西,我发现它效果最好,但如果需要可以增加
  • 时间服务器 无需更改时间服务器
  • NTP_OFFSET 是您在上一步中获得的偏移值
  • MEDIUM_TRAFFIC_THRESHOLD & BAD_TRAFFIC_THRESHOLD s是在变为黄色或红色之前路线应该比正常旅行时间慢的时间量,您可能想要使用这些值来看看哪些适合您。有一点需要注意的是,交通中的旅行时间往往少于正常的旅行时间,因此门槛应该低于您的预期。
  • apiKey(可选) 您可以在此处将API Key从上一步添加到草图中,但您也可以通过配置门户页面添加它(我将在下一步中向您展示)。我没有将它添加到我的草图中(主要是因为我可以与你们分享我的草图而不改变它!)
  • delaybetweenApiCalls 是时候检查谷歌地图的新旅行时间的延迟。请求总量必须低于每天2500,请记住,每条路线都是自己的请求。
    • 比如说你有5条路线
    • 这意味着您可以在一天内查看谷歌地图500次
    • 一天有86400秒,所以如果你检查500次,这意味着你可以每173秒检查一次
    • 这将是delayBetweenApiCalls = 1000 * 173; (约每3分钟一次)
  • delayBetweenDisplayChange 是7段在显示旅行时间和实时之间循环的频率。我发现每15秒就相当不错,但如果你愿意,可以改变它
  • 起源 应该是您在上一步中从Google地图网址获得的旅程开始的价值
  • 目的地 是您在上一步中从Google地图网址获得的旅程结束的价值
  • 路由LED阵列是每个路由的LED列表,使用您在上一步中收集的表。
    • 阵列中的第一个LED将是显示路径时点亮的最后一个LED,因此按照您希望它们点亮的相反顺序放置地址。
    • 为其他路由创建新数组,它们的名称并不重要。
  • populateRoutes 方法有调用 setRoute 方法,你应该为每个路由有一个setRoute调用,它们应该像这样修改
    • 参数1 - Id - 为每条路线增加此值
    • 参数2 - 路径名称 - 表示路径名称的字符串,仅用于串行监视器,因此不重要
    • Param 3 - Waypoint - 上一步中收集的路径的点值。 需要在它之前有“via:”!
      • 如果你需要一个路线的多个路径,它们应该在它之前都有“via:”并用“%7C”分隔
      • 例如“via:waypoint1%7Cvia:waypoint2”
    • Param 4 - LED阵列 - 上面定义的路径的LED阵列
    • 参数5 - LED计数 - 阵列中的LED数量
    • 参数6 - 路线标签 - 7段显示的标签。
      • 我已经定义了字母F(如果你需要更多,请问你是否遇到麻烦!)

那应该是它!上传代码并交叉手指:)

第13步:最后 - 配置

我们需要做的最后一件事是配置WiFi和API密钥(如果您没有在上一步中设置它)。

我们正在使用一个名为WiFi Manager的库,它可以在ESP8266上托管自己的接入点,以便您配置设置(如果您想将设备带到新网络,这很方便)

注意:如果您使用手机进行配置,请通过电子邮件或其他方式向自己发送API密钥,因为手机在连接到配置门户时将失去互联网连接

插入设备并按下ESP8266上的重置按钮两次,这将强制配置模式。 Conf应出现在7段上。

您现在应该看到一个名为“RouteCheck”的新WiFi网络,连接到它,密码是“密码”(如果需要,可以在草图中更改)。

打开浏览器并尝试访问任何网站,您应该被重定向到配置页面。单击“配置WiFi”按钮。您可以单击要连接的WiFi网络名称,然后在密码框中键入密码。

将API密钥添加到下面显示的框中

编辑: 哎呀,我忘了提一旦一切正常,你需要热熔胶到位!将每个LED热胶粘到位,并将七段显示器和原型板热胶粘到框架上。请参阅此步骤附带的照片,例如我的热粘合(请参阅,它不需要整洁!)

而已!如果你还在这里,谢谢你坚持下去!希望您喜欢这个项目,如果您对任何步骤有任何疑问,请告诉我。

二等奖

2017年物联网大赛