Skip to content

活动

光能计时器

高级 | MakeCode, Python | LED显示器, 光传感器, 按钮 | 13 气候, 传感器, 变量, 布尔逻辑, 输入/输出

第 1 步:制作

它是什么?

通过对灯保持开启状态计时来测量你的能源使用情况。 你也可以在气象站项目中使用此项目跟踪记录日照时长。

本项目是一系列项目的一部分,旨在提供问题解决和原型设计活动,探索全球可持续发展目标的技术解决方案。

学习目标

  • 如何使用传感器和代码来监测真实世界中的事件
  • 放置数据记录器来记录可靠的数据
  • 收集和整理一段时间内的数据,以发现能源使用情况
  • 解释和分析数据以便改变行为
  • 用户如何在使用系统前更改变量来对系统进行设置

使用方法

  • 首先使用光能测量仪项目了解打开或关闭灯时的读数。 请确保在即将放置监测micro:bit的同一地点以及相同照明条件下进行此操作,并确保日光不会触发开灯的假读数。
  • 将你的灯光读数加入到设置LIGHT变量的代码中。 我们暂时给了你数字100,但你可能需要在将代码刷入到你的micro:bit之前更改这个数字。
  • 连接一个电池盒,并将你的micro:bit放置在想要监测的电灯下。 当灯光关闭时,你应该看到显示屏上只有一个亮点,而当灯光开启时,显示屏完全点亮。 如果没有按照预期工作,请考虑再次使用灯光计项目来找到灯打开时的光亮级别,或者移动micro:bit。
  • micro:bit将保持计时。当按下按键B时,它将显示灯保持开启的状态有多少分钟了。

工作原理

  • 程序使用名为timing的布尔变量来控制运行。 布尔变量只能有两种值:true或false。
  • 如果光线传感器的读数高于你设置的水平,它会启动计时器并点亮整个LED显示屏。 如果读数低于你设置的水平,它会停止计时器并在显示器上仅显示一个亮点。
  • 本项目使用滞后变化来确保计时器不会在亮度值在阈值附近上下波动时不断地开、关。 其建立了较大的临界值区间,当变化幅度超出该区间时才会触发计时器开启或关闭。
  • 滞后处理在传感器控制系统中很常见,例如在有自动调温的供热系统中。 如果你将调温器设置为一定温度,当室温在你设置的数值附近波动时,你不希望不停地开启或关闭供暖。 滞后处理可防止这种情况发生。

所需材料

  • micro:bit
  • MakeCode或者Python编辑器
  • 电池盒(推荐)

第 2 步:编程

1from microbit import *
2display.show('L')
3
4LIGHT = 100  # <<< Enter your 'measured' reading here
5
6HYSTERESIS = 8
7LIGHT -= (HYSTERESIS/2)
8DARK = LIGHT - HYSTERESIS
9ON_IMAGE = Image('99999:99999:99999:99999:99999')
10OFF_IMAGE = Image('00000:00000:00900:00000:00000')
11timing = False
12start_time = 0
13total_time = 0
14reading = display.read_light_level()
15sleep(1000)
16
17def show_number(n):
18    # Make number display the same as MakeCode
19    if len(str(n)) == 1:
20        display.show(n)
21    else:
22        display.scroll(n)
23
24while True:
25    reading = display.read_light_level()
26    if reading < DARK:
27        if timing:
28            # it has just gone dark, update timer for 'on' time
29            end_time = running_time()
30            total_time += (end_time - start_time)
31            timing = False
32        
33    elif reading >= LIGHT:
34        if not timing:
35            # it has just gone light, start the timer
36            start_time = running_time()
37            timing = True
38        
39    if button_b.was_pressed():
40        # calculate and display cumulative time in minutes
41        minutes = total_time / 60000
42        if timing:
43            # adjust live for current ON time
44            minutes += (running_time() - start_time) / 60000
45        display.clear()
46        show_number(round(minutes))  # whole numbers only
47        sleep(500)
48
49    # update the display with the ON/OFF state
50    if timing:
51        display.show(ON_IMAGE)
52    else:
53        display.show(OFF_IMAGE)
54    sleep(1000)
55
56        

第 3 步:完善

  • 更改LED显示器上显示的模式以使电池能持续更长时间,或使显示变暗。
  • 使用记录的时间来计算你使用的电量和它可能需要的成本。 详细信息请参阅我们的能源成本计算项目
  • 使用相同的代码来测量日照时间。 使用光线测量仪项目来计算日光照射在micro:bit上的光亮值,以及阴天时的值。 你可能需要用一个半透明的盖子来减弱光照,并保护micro:bit免受雨淋。 例如,一个旧的塑料食品盒。