(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

7.4. Практикум: Умные огни

На этом практическом уроке с помощью датчика яркости на микроконтроллере TI-Innovator Hub вы будете регулировать количество LED индикаторов, включенных на внешней плате TI-RGB Array.

Вы научитесь:

  • Использовать датчик яркости, чтобы регулировать индикаторы на внешней плате TI-RGB Array
  • Регулировать диапазон яркости, подходящий для работы с внешней платой TI-RGB Array
  • Проверять, что все 16 LED индикаторов включаются в зависимости от яркости

Умные огни

Когда в комнате темнеет, свет загорается ярче. Представьте себе "умный дом", в котором нет выключателей! Вам предстоит написать программу, которая измеряет яркость в комнате и в соответствии с этим показателем включает больше или меньше LED индикаторов.

Примечание для учителя: Одной из основных сложностей в данной задаче является то, что ВСЕ LED индикаторы должны реагировать на значение яркости, включая граничные условия, когда все индикаторы включены или все выключены. Учащимся, возможно, придется отрегулировать значения диапазона яркости brightness.range(), чтобы он соответствовал условиям освещения. Для контроля яркости может пригодиться простой фонарик на смартфоне.

1. Как обычно, начните работу с создания нового проекта Python Hub, используя конструктор rgb_array(), и напишите цикл с оператором while, чтобы при этом программа завершалась при нажатии на кнопку esc.

cb = rgb_array()
while get_key() != "esc":

2. Перед циклом с оператором while настройте диапазон яркости brightness.range(), чтобы он соответствовал количеству LED индикаторов на внешней плате TI-RGB Array, которые можно включить: от 0 до 16.

Зайдите в меню: menu > TI Hub > Hub Built-in Devices > Brightness Input > range(min,max) и вставьте следующее выражение:

brightness.range(0,16)

Используйте значения 0,16, потому что эти числа являются диапазоном количества LED индикаторов, которые можно включать на электроплате.

Максимальное значение, которое может произвести датчик - это 16. Можно ли утверждать, что минимальное значение равно 0?

Примечание для учителя: На датчике сложно получить значение яркости 0. Следующий шаг иллюстрирует, как конвертировать значение яркости в целое число.

3. В блоке оператора while начните со считывания уровня яркости с помощью выражения brightness.measurement() и сохраните это значение в переменной (bright).

bright = brightness.measurement()

Функция производит десятичное число с плавающей запятой. Его нужно конвертировать в целое число с помощью следующего выражения:

bright = int(bright)

Или объедините два выражения в одну операцию:

bright = int(brightness.measurement())

Примечание для учителя: Какое из двух выражений выбрать - дело предпочтения и опыта!

4. Перед тестированием своей программы добавьте выражение text_at(), которое можно найти в меню: menu > TI Hub > Commands:

text_at(7, str(bright), "left")

Не забудьте, что вам нужно выражение str(bright), потому что функция text_at() требует отображения строки. Вы можете либо ввести str() вручную, либо вставить его из меню: menu > Built-ins > Type.

Запустите программу, чтобы убедиться, что появляются все семнадцать значений (от 0 до 16). Если этого не произошло, тогда отрегулируйте диапазон range(). Попробуйте использовать искусственный источник света, например, фонарик портативный или на своем смартфоне.

Примечание для учителя: Достижению идеального результата порой мешают меняющиеся условия освещения. Но чем больше учащиеся практикуются, тем быстрее научатся, как с этим справляться.

5. Так как 0 это значение самых темных условий яркости, а 16 - самых ярких, то нам нужно, чтобы число включающихся LED индикаторов было противоположным: когда уровень яркости = 0, нужно включить все 16 LED индикаторов, а при уровне яркости 16 нужно включить 0 LED индикаторов.

Напишите выражение для переменной включения индикаторов lites, исходя из переменной яркости bright.

lites = ? ? ?

6. Можно также сделать так, чтобы все LED индикаторы выключались:

if lites == 0:
  cb.all_off()
else:

7. Нам необходимо, чтобы все LED индикаторы были чувствительны к яркости, поэтому мы будем использовать цикл с оператором for для постоянного контроля состояния каждого LED индикатора. Переменная lites является определяющим фактором при выключении или включении LED индикатора:

for i in range(1,17):

(Помните, что значение 17 не обрабатывается в цикле, поэтому переменной i присвоены значения от 1 до 16, которые представляют собой 16 LED индикаторов.)

8. Завершите написание программы, добавив выражение if...else..., которое посылает микроконтроллеру TI-Innovator Hub информацию о том, какие LED индикаторы включены, а какие выключены.

Подсказка: Если переменная lites равна 1, то нужно включить 0 LED индикаторов. Когда lites равна 16, нужно включить все LED индикаторы (от №0 до №15). Используйте значения цветов (255,255,255), чтобы индикаторы горели ярко белым.

Не забудьте выключить все LED индикаторы в конце программы.

Примечание для учителя: Пример кода программы:

cb = rgb_arry()
brightness.range (0,16)
while get_key() !="esc":
  bright = brightness.measurement()
  bright = int(bright)
  text_at (7,str(bright),"left")
  lites = 16 – bright
  if lites == 0:
    cb.all_off()
  else
    for i in range (1.17) :
      if i <= lites
        cb.set(i-1,255,255,255)
      else:
        cb.set(i-1,0,0,0)
cb.all­_off()

Совет: Подсоедините микроконтроллер TI-Innovator Hub к источнику питания и используйте выражение cb==rgb_array ("как лампу"), чтобы LED индикаторы горели ярче.

Усложняем задачу: Вместо того чтобы включать или выключать каждый LED индикатор, сделайте так, чтобы программа постепенно увеличивала или уменьшала яркость следующего LED индикатора. Используйте десятичные числа с плавающей запятой для переменных bright и lites, а значение дробной части числа для постепенного включения LED индикатора.