我计划测量井中的水位,该井深约10 m,最大水位可达5 m。我的计划是使用超声波传感器HC SR04来测量深度,然后通过ZigBee将其传输到我家中的Raspberry Pi。传感器和ZigBee模块一起使用。

可供选择的参数为:


低功耗:我计划使用电池供电,因此优先考虑低功耗。截至目前,我还没有电源使用的目标,电池更换之间的间隔,甚至没有使用哪个电池。由于这更多的是学习项目,并且在我家中,所以我很灵活,但是功耗更低。
低成本:这对我来说是一个学习项目,我不想花很多钱
在油井内工作:整个项目将在油井内工作,并且将暴露在恶劣的阳光和雨水下。我将提供一个很好的案例和保护。但是我的要求是传输传感器数据,并且我愿意接受其他传输方式。从我的井到Raspberry Pi的距离约为6米,中间有一堵墙。我计划在水泵运行时每10分钟和每分钟两次测量水深(每天大约20分钟)。

评论

这感觉相当广泛,或者可能是题外话。板上的任何小型MCU都适用。如果您不确定Zigbee,建议您查看BBC micro:bit,它带有BLE并带有电池连接器。

如果要使用Zigbee无线电,则至少应评估将其与MCU(通常为ARM Cortex-M)CPU结合使用的部件。并不意味着您必须走那条路,但如果您决定不这样做,则应有充分的理由。

“井内”是什么意思?案件会在水下吗?不要期望水下的Xbee模块有任何发射或接收。许多工作在2.4 GHz频带上,该频带被水充分吸收。其他的则工作在900 MHz左右,也可能无法很好地穿透水。如果情况不是在水下,则使用xbee固定6m +墙即可。

“井内”是指将设备放置在井内,但要高于水。

#1 楼

微控制器选择的一般过程。





总结对微控制器的要求。例如,在这种情况下:



1个硬件计时器,用于测量触发脉冲和回波脉冲之间的时间。

2个GPIO引脚与传感器连接回声和触发引脚。
可能是UART,用于连接RF通信模块。

1个ADC输入用于监视电池电压。引脚控制器,通常也可能需要使用编程器引脚。


确定所需的CPU性能和内存要求。使用8位MCU是否足够?或者您需要32位MCU?可接受的CPU时钟速度是几十MHz还是1 MHz就足够了?需要多少程序存储器,RAM和ROM?

鉴于所描述的应用程序,您不需要很高的计算性能。也许8位控制器就足够了(尽管不会比32位控制器便宜很多,所以您可以在这里根据价格决定)。如果不是很关键,则可以使用电源电压和系统时钟频率最低的低功耗模式与几乎所有类型的控制器相处。带有专用的低功耗MCU内核,例如(ARM®Cortex®-M0或M0 + CPU内核)。通常,数据表中包含大多数低功耗模式/ VCC / SysClk频率的表格,更好的表格还会列出每个外设的功耗。
开发者工具。我认为这是一个非常重要的方面。专用的硬件编程器工具可能会花费很多钱,因此通常我会选择已经拥有编程器的MCU。当您改用其他家族或品牌时,最好投资具有板上编程器的开发板,该板上可稍后用于对自定义板进行编程。通常,总是首先检查能够将程序下载到微控制器会花费多少。带有集成的可编程应用程序MCU的此类RF模块,可以在处理RF通信部分的同时运行固件。此类模块适用于BLE,WiFi和ZigBee以及可能用于许多其他技术。这一切都将在您为设备提供的机箱上找到。例如,如果机箱不是100%防水的,那么选择哪个MCU都没关系。


TL; DR;这是产品特定的部分。


您可以选择价格为0.87 $ / 1片的ATtiny25在Farnell上。 8位8针因此不会占用太多空间。在掉电模式下,在禁用看门狗的情况下,在3 V时消耗0.2μA电流。如果启用了看门狗,则消耗2-4μA。在eBay上约2美元)。 (请注意:您应该使用Arduino软件串行库来连接RF通信模块,因为该MCU仅具有硬件SPI。)总的来说,它体积小,价格便宜,并且功耗相对较低,但是位差分的UART可能虽然使它复杂化。它具有2 kB的程序存储器,足以满足您的需求。
或者使用ARM Cortex M0,后者在待机模式下消耗2μA,在停止模式下消耗5μA。这样的MCU例如是STM32F030F4,其成本为1.09 $ / 1片。它是功能更强大的32位控制器,最大系统时钟频率为48 MHz,但您只能看到+ 0.2 $。它带有16 kB程序存储器,远远不够完成此简单任务。它具有SPI,UART,I2C和许多其他外设。
编程将花费更多,专用的编程器在Farnell花费20美元。我认为这不值得。相反,您可以投资F0系列的开发板,该开发板具有板载编程器(ST-LINK)。 STM32F0发现板成本约为10美元。您可以开始使用此开发板进行原型设计,以后再用作编程器。


评论


请注意,发现板和核板的ST-LINK通常可用于板本身以外的其他MCU。不确定该特定的板,但从外观上看,它使用SWD,可以使用右侧的跳线断开连接。这样做的好处是ST-LINK不仅是程序员,而且是在线调试器,极大地简化了开发过程。

–乔纳斯·谢弗(JonasSchäfer)
17年1月27日在8:09

另外,如果您不在乎XBEE的答复,则可以使用ATtiny的通用串行接口来获取UART,该UART的速度比按需完成的软件实现要快。

–乔纳斯·谢弗(JonasSchäfer)
17年1月27日在8:09

值得一提的是,无线电模块经常带有非专用的MCU资源(并且存在一些模块来简化类型专用)。 CPU通常与RF堆栈共享,因此您需要接受定期中断等。

– Sean Houlihane
17年1月27日在10:21

当低功耗操作(电池)很重要时,ULPBENCH是很好的资源。

– neonzeon
17年1月27日在14:46



#2 楼

为了简化编程和降低成本,我可能会从某种Arduino模块(或低成本克隆)开始。超声波传感器的代码已经存在,ZigBee的示例代码也已经存在,例如使用Digi XBee模块。在后者上,您将XBee连接到串行端口,并与古老的“ AT”命令界面建立连接后,便有了一个点对点通道,可以向下发送任何文本(到Raspberry Pi )。 ZigBee并不是最便宜的短距离通信类型,但是XBee模块在过去5年中的实际价格有所下降。基于Arduino的语言,但在这种情况下,您将很大程度上将其他用户已经存在的脚本合并在一起。

如果您在Google周围找到“ Arduino睡眠模式”,则会发现一些示例,这些示例说明如何将Arduino置于低功耗模式,并偶尔唤醒以进行阅读,进行交流,然后重新-进入睡眠模式。

评论


尽管使用ATmega芯片可以实现良好的电源管理,但典型的Arduino板具有寄生功率消耗,这将严重限制电池寿命。

–克里斯·斯特拉顿(Chris Stratton)
17年2月2日在4:23