用Arduino设计一个智能日晷

2018-03-26 07:34刘正云谢作如
中国信息技术教育 2018年5期
关键词:日晷针脚舵机

刘正云 谢作如

日晷是白天通过测日影定时间的仪器。利用日晷计时的方法是人类在天文计时领域的重大发明。但传统日晷的最大不足在于要靠人工去看时间,这很不方便。如果利用Arduino配合传感器做一个可以自动判断时间的智能日晷,能否既保留古代科技的伟大,又结合现代科技的神奇呢?

● 日晷的工作原理

在设计智能日晷之前,我们首先要知道日晷的工作原理,这要从影子开始说起。当物体被太阳照射时,会有影子产生。在一天的不同时刻,影子的长短以及方向在不断改变。首先,是影子长短的改变,早晨物体的影子最长,随着时间的流逝,影子逐渐缩短,直至中午达到最短,一过中午,影子又慢慢变长;其次,是影子方向的改变,在北回归线以北的地方,早晨影子在西边,中午影子在北边,傍晚影子在东边。

日晷通常由晷针和晷面组成,垂直穿过圆盘中心的是晷针,与地轴平行;石制的圆盘叫做晷面,安放在石台上,呈南高北低,与赤道平行。从原理上来说,根据影子的长度或方向都可以计时。一天当中,太阳最高位于正南,为地方时12点。根据每小时走15度的运动规律,太阳的运动轨迹每变动15度,时差就相差一小时。日影与太阳位置保持相反,太阳的位置变动多少度,影子的位置也会跟着变动多少度。早晨,影子投向盘面西端的卯时附近(如图1);当太阳达正南最高位置(上中天)时,针影位于正北(下)方,指示着当地的午时正时刻(如图2)。午后,太阳西移,日影东斜,依次指向未、申、酉各个时辰(如图3)。

日晷的晷面有十二个刻度,即子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥,分别代表了十二个时辰,每个刻度与现代时间的对应关系如图4所示。根据日晷的运行原理,只要利用传感器得到影子的方向,就能计算出当前的时间。那么,利用什么办法能获知影子的方向呢?有一个很简单的办法,在一个晷针或者晷盘的下方布满光线传感器,即光线传感器阵列,哪个方向的传感器数值最小,就可以得知影子的方向。但是这样需要好多个光线传感器,又浪费又不好看。于是,笔者采用了一个折中的方案,让舵机带着一个光线传感器转动,然后算出数值最小的角度。至于时间的显示,可以用LED来表示,发光比晷盘上的数字更加明显。

● 智能日晷的硬件实现

首先要设计的是晷面和晷针。笔者使用AI设计软件分别设计出晷面以及装器材的盒子,用激光切割机切割出来,并在晷盘上放置七个LED发光模块,分别代表早晨6点、8点、10点,中午12点,下午2点、4点、6点这七个时间点,两个LED发光模块的中间则对应上午7点、9点,中午11点,下午1点、3点、5点,如图5所示。

将智能日晷的晷针根部连接舵机模块,晷针上连接横向结构件,并放置光线传感器模块,整个智能日晷的启动由按钮控制。按下按钮,程序启动,舵机转动并带动晷针在晷面上方转动180度,用光线传感器模块测量七个时辰十三个时间点的阴影强弱程度,光线最弱位置的时间点即为此时的具体地方时间,若地方时为上午6、8、10、12时及下午2、4、6时整,则对应LED发光模块点亮;若地方时为上午7、9、11时及下午1、3、5时整,则其左右两边的LED发光模块一起点亮。

智能日晷用到的硬件器材清单如下:Romeo控制器(可以用任何一款Arduino主板)、LED发光模块、模拟环境光线传感器、舵机、按钮。分别将七个LED发光模块连接在Arduino Romeo控制器的数字针脚上,如针脚2、3、4、5、6、7、8;将光线传感器接在Arduino Romeo控制器的模拟针脚上,如模拟针脚1;将舵机接在Arduino Romeo控制器的数字针脚,如针脚11;同时,将控制程序启动的按钮接在控制板的数字针脚上,如针脚13,硬件连接如图6所示。

● 智能日晷的软件实现

智能日晷的程序主要包含三个部分:一是获取各个角度的光线数值;二是计算出最小的数值位置;三是显示时间。即移动点亮相应的LED。智能日晷运行流程图如图7所示。

在应用启动之初,首先,需要将七个LED(针脚2~8)全部熄灭,将舵机转到0度待命,同时将0度(也就是早上6点)位置上的光線值赋给最小光线值变量minLight,程序如下页图8所示。

主程序第一部分是转动舵机并获取晷面上午6点到下午6点共13个时间点所在位置光线值的程序。使用数组light[]存放不同位置的光线值。舵机在晷面不同时间点的具体位置依次转动,根据日晷工作原理可知,每两个时间点间隔15度。因此,舵机转动、舵机下方对应LED点亮、光线传感器获取不同时间点位置的光线值并将其存储在数组中的具体程序如下页图9所示,变量a为数组light[]的下标。根据数学运算可得知,舵机转动角度为a×15,舵机下方对应LED针脚值为a÷2+2。

其次,也是智能日晷最重要的地方,是求出不同时间点位置光线值中最小的一个,也就是太阳阴影的所在点,哪个时间点位置光线值最小,该位置所显示的时间点即为此时具体地方的时间。

求13个数值中的最小值,可将第一个数值与后面一个数值相比较,取两者之间较小的一个,再与下一个数值进行比较,取小者,依次循环,直至将13个时间点的光线值全部比较完毕,程序中将最小光线值用minLight表示,将最小光线值时所对应的下标a赋值给servoLocation,LED所在针脚值变量用ledLocation表示,ledLocation由数组的下标a换算而来,ledLocation=a÷2+2。

minLight初始值已經在应用启动准备程序中被赋值为早上6点位置的光线值,第二部分主程序如图10所示。

最后,将晷针移至光线最暗的时间点位置,并点亮此处的LED发光装置。倘若晷针正好指向LED发光装置,则点亮该LED;倘若晷针指向两个LED发光装置之间,则同时点亮其左右两个LED发光装置。通过servoLocation取余2的值,来判断光线最暗的时间点位置是在一个LED上方,还是两个LED中间,其数学运算表达式为“servoLocation % 2”(如图11)。

当然,整个智能日晷由按钮按下启动,千万不要忘记按钮功能实现的程序编写。

● 拓展提升

完成硬件和代码后,现在可以开始测试了:按下按钮,晷针运行180度之后,又回到光线最暗的地方,并点亮了相应的LED发光装置。当看到日冕变得智能后,有没有一种“老树开花”的感觉呢?

当然,要实现影子的智能测量还有很多方法,利用摄像头识别也是很好的方案之一。这需要学习图片处理方面的知识,要求较高,并且智能硬件要改为树莓派或者lattepanda,才能完成图像数据的运算处理。

● 结语

智能日晷是一个非常适合中小学生的研究项目,其价值是将现代电子技术与古代天文科学原理相结合,通过动手造物的形式,让学生真正理解影子、太阳和时间之间的关系。小学科学课程中本来就有相关的学习内容,二者完全可以结合起来学习。

通过现代电子技术,重新对传统工具、玩具等进行设计,可以改造成很有趣的STEAM项目,如使用距离传感器制作手势控制的二胡;使用马达和无线遥控器制作可遥控的电动龙舟;使用蜂鸣器、LED发光模块等制作更具互动效果的舞狮;利用多个舵机、MP3模块和激光切割设计独具一格的皮影;等等。在Mixly、Ardublock、Scratch等图形化编程软件的帮助下,智能硬件的学习门槛已经越来越低,它有必要作为一个学习工具在中小学课堂中普及。

参考文献:

[1]王德昌.日晷——时间的雕塑和测量[J].科学,2005,57(04):55-58.

[2]日晷[EB/OL].https://baike.baidu.com/item/%E6%97%A5%E6%99%B7/765113?fr=aladdin,2018-1-1.

猜你喜欢
日晷针脚舵机
时间的雕塑
穿越时空的记忆
褶皱艺术
主板功能不浪费 扩展针脚要会用
简易日晷
在确定圆心的过程中认识圆
论明末清初日晷设计的特点
海太克HS—1100WP数字舵机
超音速舵机保护器
菜鸟看模型