×

多功能自动化系统开源分享

消耗积分:0 | 格式:zip | 大小:0.73 MB | 2022-11-08

20153

分享资料个

描述

主意

制作自动化系统的想法来自我们的村屋,那里有鸡、狗和植物。我父亲制作了一个电子系统来自动化日常任务,例如给植物浇水、喂狗和喂鸡、给鸡开门等。他为那个系统使用了定时继电器​​,并且大部分时间都运行良好。但是,我们村的房子经常停电,导致我父亲的自动化系统出现问题。如果在一个继电器的分闸和合闸时间之间断电,当电回来时,它不会安排继电器的状态。当我们处理植物,主要​​是动物时,这是一个巨大的问题。而且定时继电器​​的成本比Netduino+Relay高,使用起来也不是你想的那么简单。

解决问题

为了解决这个问题,我申请了Netduino Contest的Idea Round,我的想法被接受了。我买了一个 16 通道 5V 继电器模块,用于多继电器控制。我需要知道时间。因此,我使用了一个外部 RTC 模块 DS3231 不仅可以获取实时时间,还可以获取星期几,这鼓励我每周编写一个程序作品。我写了一个循环函数,根据时间确定继电器的状态。此函数每秒循环一次并检查每个继电器的情况,然后比较来自 SD 卡(或直接来自代码——我在代码中解释)的继电器时间,并根据时间打开/关闭继电器。但是,我想独立使用传感器,以完成紧急需求。我设法连接了三个传感器,以用我的系统举例说明传感器的工作过程。

发展

由于缺乏互联网连接、时间和库存,开发过程对我来说有点困难。我在我们村的房子里,我不得不使用我的旧传感器,我没有足够的时间购买新的,因为运往村庄的货物受到限制。因此,我完成了我所拥有的。我熟悉 Arduino,这就是为什么示例项目的引脚图或电路对我来说很容易。我一直在努力集成 DS3231 并使用传感器(包括 LDR、水位和运动检测)。虽然有相关的教程,但大多数教程都有点老了。但是,Netduino 基金会很棒,而且大部分都是最新的!

我使用Netduino Foundation DS32xx 集成代码从 DS3231 RTC 模块获取时间数据。对于传感器,我尝试使用 SecretLabs.NETMF.Hardware.AnalogInput 参考,但 VS 2015 向我显示了一次又一次检查设备的错误。没有这个参考,所有的项目都像魅力一样运行。这就是为什么我检查了 AnalogInput 的库以了解如何从模拟输入中获取数据。之后,我从 Microsoft.SPOT.Hardware 获得了如下值:

Microsoft.SPOT.Hardware.AnalogInput waterLevel = new Microsoft.SPOT.Hardware.AnalogInput(Cpu.AnalogChannel.ANALOG_0);
Debug.Print("Water Level Sensor: " + (int)(waterLevel.Read() * 100));

我写了一个函数来确定继电器的情况。下面是我的函数的参数的示例和含义:

// Relay no:2 12:10 - 16:27 Only Tuesday
TimeToAct(2, currentHour, currentMinute, DayOfWeekToString(dayOfWeek), 12, 10, 16, 27, DetectDay(3));
///        
/// Main Alarm System       
///        
/// Relay No       
/// current Hour       
/// current Minute       
/// current Day String       
/// Relay opens: hr       
/// Relay opens: min       
/// Relay closes: hr       
/// Relay closes: min       
/// Relay opens at specific day or days of week
static void TimeToAct(int relayNo, int currentHour, int currentMinute, String currentDay, int hourAct, int minuteAct, int hourReAct, int minuteReAct, String[] daysAct)       {

我的代码在一天的操作中运行得很好(例如中继 6 仅在星期三工作)。然而,我的目标是让我的继电器每周工作好几天。我考虑过如何理解为多个操作选择了多少天,这是我的解决方案,使用素数:)

///        
/// Detect Day depending on first 7 prime numbers       
/// 2 --> Monday       
/// 3 --> Tuesday       
/// 5 --> Wednesday       
/// 7 --> Thursday       
/// 11 --> Friday       
/// 13 --> Saturday       
/// 17 --> Sunday       
/// If we want our relay to open only one day, we need to enter days' prime number, for instance 5 for Wednesday.       
/// If we want our delay to open multiple days, we need to multiply days' prime numbers.       
/// For instance, all the days of week, we need to enter 2*3*5*7*11*13*17 = 510510       
/// Monday + Tuesday = 2*3 = 6       
/// Wednesday + Saturday + Sunday = 5*13*17 = 1105       
///        
/// dayNumber       
/// Detect Day String array
       static String[] DetectDay(int dayNumber)
       {
           String[] days = { "", "", "", "", "", "", "" };
           for (int i = 0; i < 7; i++)
           {
               days[i] = "";
           }
           if (dayNumber % 2 == 0) { days[0] = "Monday"; }
           if (dayNumber % 3 == 0) { days[1] = "Tuesday"; }
           if (dayNumber % 5 == 0) { days[2] = "Wednesday"; }
           if (dayNumber % 7 == 0) { days[3] = "Thursday"; }
           if (dayNumber % 11 == 0) { days[4] = "Friday"; }
           if (dayNumber % 13 == 0) { days[5] = "Saturday"; }
           if (dayNumber % 17 == 0) { days[6] = "Sunday"; }
           Debug.Print("DayNo: " + dayNumber);
           Debug.Print("Days: ");
           for (int i = 0; i < 7; i++)
           {
               if (days[i].Length > 5)
               {
                   Debug.Print("-" + days[i]);
               }
           }
           return days;
       }

我的最后一个挑战是将数据存储在 SD 卡中。我有许多甚至超过 8GB 的​​ micro SD (SDHC) 卡。但是,Netduino 页面说您需要使用高达 2GB 的 SD 卡(不是 SDHC),这使我无法使用我的卡。我曾尝试与我的卡一起使用,但它不起作用。然后我决定使用 DS32xx 的 EEPROM 来存储所有数据。我从 Netduino.Foundation 找到了一个库,但是这个库导致 VS 出现问题(上面同样的错误)我需要存储数据,所以我为 SD 卡编写了代码,但我无法使用 SD 卡进行测试。

说明(用于制作项目)

  • 访问 Netduino网站并下载 Netduino 的固件更新程序。
  • 使用该程序更新您的 Netduino。
  • 下载并安装 Visual Studio 2015。
  • 在Windows上安装 .NET MicroFramework 和 Netduino SDK
  • 根据我的原理图将传感器和继电器连接到 Netduino。
  • 下载并使用 VS 2015 打开我的项目。
  • 部署代码!

结果

我很高兴也很自豪能够完成这个项目并找到解决我们问题的方法!我的系统可以处理许多事情,例如:

  • 根据小时、分钟和星期几编程 8 个继电器(现在限制为 8 个,但继电器计数可以增加)
  • 中继系统每周工作,可根据日、月或年防止出现问题。
  • 自动化系统帮助农民种植更好的作物并减少他们的工作。
  • 由于我的系统不需要互联网连接,它可以在世界任何地方工作。
  • 继电器可以通过传感器的值来控制,这也可以帮助农民在紧急情况下做植物或动物需要的事情。
  • 使用 SD 卡不仅有利于存储和检索数据,而且可以更轻松地对继电器进行编程。
  • 时间系统和传感器可以同时工作。(传感器优先控制继电器)
  • 农民可以为他们的目的添加许多传感器。
  • 如果发生停电,我的系统工作正常。
 

为了未来

  • 我可以添加 Internet 连接,无论是 WiFi 还是以太网,以有效地传输数据并更轻松地对继电器进行编程。
  • 通过有效的互联网连接,我可以制作一个应用程序来监控数据、编程继电器、确定传感器的值限制......这可以简化我的系统的使用。
  • 我可以使用 Grove 传感器来增加传感器数量。
  • 我可以增加继电器数量。
  • 我可以添加蓝牙传感器以更好地进行通信并修改继电器的时间表,而无需取下 SD 卡。这当然是为了离线使用。

最后

我真的很感谢 Wilderness Labs 给我们一个机会来解决我们使用 Netduino 的问题,他们的高级语言支持卡。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !