Конструируем роботов на Arduino. Умный замок [Алёна Антоновна Салахова] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Arduino

®

Умный замόк

А. А. Салахова

КОНСТРУИРУЕМ
РОБОТОВ

на

Arduino

Умный замόк
2-е издание,
электронное

Лаборатория знаний
Москва
2021

УДК 373.167
ББК 32.97
С16

С е р и я о с н о в а н а в 2016 г.
Ведущие редакторы серии Т. Г. Хохлова, Ю. А. Серова
Салахова А. А.
С16
Конструируем роботов на Arduino○ . Умный замóк /
А. А. Салахова. — 2-е изд., электрон. — М. : Лаборатория
знаний, 2021. — 60 с. — (РОБОФИШКИ). — Систем. требования: Adobe Reader XI ; экран 10". — Загл. с титул.
экрана. — Текст : электронный.
ISBN 978-5-93208-527-1
R

Стать гениальным изобретателем легко! Серия книг «РОБОФИШКИ» поможет вам создавать роботов, учиться и играть
вместе с ними.
Вы соберете на платформе Arduino собственное запирающее
устройство, благодаря которому можно безопасно хранить ценные
вещи.
Для технического творчества в школе и дома, а также
на занятиях в робототехнических кружках.
УДК 373.167
ББК 32.97

Деривативное издание на основе печатного аналога: Конструируем роботов на Arduino○ . Умный замóк / А. А. Салахова. —
М. : Лаборатория знаний, 2018. — 57 с. : ил. — (РОБОФИШКИ). — ISBN 978-5-00101-094-4.
R

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных
техническими средствами защиты авторских прав, правообладатель вправе требовать
от нарушителя возмещения убытков или выплаты компенсации

ISBN 978-5-93208-527-1

© Лаборатория знаний, 2018

Здравствуйте!

Издание, которое вы держите сейчас в руках, — это не просто описание
и практическое руководство по выполнению конкретного увлекательного проекта по робототехнике. И то, что в результате вы самостоятельно
сумеете собрать своими руками настоящее работающее устройство, —
конечно, победа и успех!
Но главное — вы поймёте, что такие ценные качества характера,
как терпение, аккуратность, настойчивость и творческая мысль, проявленные при работе над проектом, останутся с вами навсегда, помогут
уверенно создавать своё будущее, стать реально успешным человеком,
независимо от того, с какой профессией свяжете жизнь.
Создавать будущее — сложная и ответственная задача. Каждый день
становится открытием, если он приносит новые знания, которые затем
могут быть превращены в проекты. Особенно это важно для тех, кто
выбрал дорогу инженера и технического специалиста. Знания — это
база, которая становится основой для свершений.
Однако технический прогресс зависит не только от знаний, но и от
смелости создавать новое. Всё, что нас окружает сегодня, придумано
инженерами. Их любопытство, желание узнавать неизведанное и конструировать то, чего никто до них не делал, и создаёт окружающий
мир. Именно от таких людей зависит, каким будет наш завтрашний
день. Только идеи, основанные на творческом подходе, прочных знаниях и постоянном стремлении к новаторству, заставляют нас двигаться
вперёд и формируют мир, в котором мы живём.
И сегодня, выполнив этот проект и перейдя к следующим, вы сделаете очередной шаг по этой дороге.
Успехов вам!
Команда Программы «Робототехника:
инженерно-технические кадры инновационной России»
Фонда Олега Дерипаска «Вольное Дело»

3

Дорогой друг!

Если ты добрался до платформы Arduino или Espruino, значит, ты настоящий инженер! Ты прошёл большой путь в робототехнике и решил
перейти на новый уровень — создание роботов на Arduino! Теперь всё
будет совершенно серьёзно! Тайны настоящего роботоконструирования
ждут тебя!
Хочется сделать свой дом «умнее»? Мы тебе поможем! Какое устройство встречает тебя прямо у входной двери, а если точнее — на ней?
Конечно, речь идёт о замкеǯ. Все знают, что самые лучшие замки, которые надёжно защищают тебя и твоё имущество, — кодовые. С помощью
Arduino или Espruino ты сможешь сделать настоящий кодовый замок:
его можно будет открыть лишь зная код или с помощью электронного
ключа. Незваные гости не пройдут! Более того, ты сам запрограммируешь музыку для сигнала тревоги и установишь множество крутых
дополнительных функций!

4
Powered by TCPDF (www.tcpdf.org)

История появления замков

Сегодня всё чаще используются электронные кодовые запирающие
устройства, снабжённые множеством датчиков и открывающиеся карточками, но и привычные нам штифтовые металлические замки по-прежнему охраняют наши квартиры, рабочие и школьные кабинеты, дачи и т. д.
У каждого в кармане одежды или сумки найдётся ключ с зазубринами,
вставляющийся в замочную скважину. Но так было не всегда.
На Древнем Востоке, как и в Древней Европе, особой популярностью
пользовались навесные замки, принцип работы которых был прост:
в запирающей позиции засов удерживался с помощью выступающих
пазов и пружин. Замок открывался с помощью ключа, который распрямлял или прижимал пружины. Позднее, в XIX веке, появились
специальные кодовые замки, прародители электронных, которые открывались с помощью набора букв или цифр на вращающихся дисках.
Вешались и специальные колокольчики, которые начинали звенеть,
когда кто-либо касался замка.
В 1847 году Лайнус Йейл изобрёл замок цилиндрического типа,
ключ к которому мог иметь множество различных конфигураций.
Большинство современных ключей имеет данную форму. Не прошло
и двух десятилетий, как американцы Мэкнил, Доддз
и Урбан запатентовали кодовый замок «Эврика»
(см. рис. 1), который имел целых пять цилиндров,
что защищало его от случайного набора кода и расширяло количество возможных комбинаций до чуть
более миллиона вариантов. Замок оценили сразу же:
он долгое время охранял сейфы казначейства США.
В России был свой чудо-замок, сделанный полностью вручную, — «Русский висячий замок», созданный при Николае II (1868–1918). Ключ не вставлялся, а ввинчивался в замочную скважину особым
образом благодаря резьбе. В запертый замок вставлялась затычка, полностью маскирующая скважину,
а ключ убирался в футляр.
В 20-х годах XX века Уолтер Шлаге придумал
Рис. 1. Кодовый замок
«Эврика», 1884 год
помещать цилиндрический механизм штифтового

5

Рис. 2. Открытие «своим» ключом

Рис. 3. Попытка открыть «чужим» ключом

замка в дверь между наружной и внутренней ручками. В таком типе
замков выдвижные штыри, приводящиеся в движение с помощью ключа с зазубринами, входили в специальные выемки непосредственно
в металлическом цилиндре внутри двери (до Шлаге часть с выемками
размещалась в дверном косяке). (На рис. 2 и 3 показана работа цилиндрического механизма штифтового замка.) Казалось бы, вот он —
современный надёжный и удобный замок!
Однако самым надёжным стал электронный замок (конечно, при условии обеспечения бесперебойной подачи энергии). Комбинацию кода
для него не подслушать по щелчкам (как в случае с кодовым замком
для сейфов), такой замок не залепить жевательной резинкой (как в
случае со штифтовым замком), не отогнуть (как пружины в навесном).
Чаще всего электронное запирающее устройство ты можешь встретить как составляющую часть домофона. Твои родители застали кодовые замки, отпирающие общие двери. Можешь ли ты сказать, чем
же они отличаются от современных домофонов? Отсутствием ключа! Для прохода требовалось набрать специальный код на клавиатуре,
и дверь открывалась. Подобная система обязана была обеспечить порядок
в подъезде и не дать войти чужим людям, однако новая на тот момент
технология настолько сильно отличалась от привычного штифтового
замка, что жители выписывали код и наклеивали его на лицевую часть
домофона, чтобы не забыть. В домах, где пользователи вели себя осмотрительнее, подводила сама техника. Чтобы устройство было устойчивым к случайной механической поломке, его части делались из металла.
К сожалению, сплав кодового замка по прошествии времени темнел или
приводил к стиранию цифр с часто используемых кнопок. Правильный
код от подъезда легко было узнать по стёртым кнопкам.
Современные домофоны — это средство связи с каждой квартирой
в подъезде, электронный кодовый замок, отпирающийся тремя способами (рис. 4). Кстати, сейчас это уже трудно себе представить, но
в начале 2000-х годов по домофонам связь была симплексной, то есть
две стороны не могли говорить одновременно. Сегодня клавиатура домофона служит в основном для набора номера квартиры.

6

Рис. 4. Современные домофоны

Первый способ открытия замка напрямую связан с передачей информации в квартиру: после звонка хозяин аппарата с помощью кнопки
дистанционно открывает дверь, посылая сигнал от квартиры до замка
на двери подъезда.
Второй способ, как ты уже догадался, заключается в открытии двери
прикладыванием ключа. Ключ представляет собой металлическую «таблетку», состоящую из двух частей, одна из которых похожа на круглую
батарейку. В 1991 году американская компания Dallas Semiconductors
разработала новый стандарт для записи кодов — «Touch Memory», что
в переводе с английского означает «касающаяся память», то есть «па-

7

мять, активирующаяся с помощью прикосновения».
Чтобы повысить популярность устройства, в 1997 году
его название изменили на iButton. Маленькая круглая
«таблетка» диаметром около 1,7 см, сделанная из нержавеющей стали, быстро вошла в обиход. iButton
совершенствовали, появлялись новые модели, способные хранить больше информации, добавлялась защита
страниц этой информации, но самое широкое распространение получила первая модель — DS1990 или же
обновлённая — DS1990A (рис. 5). «Таблетка» подобной
Рис. 5. Устройство
модификации хранит в памяти только собственный сеiButton DS1990A
рийный номер, состоящий из 48 бит информации, то
есть цепочки из 48 нулей и единиц. Она хорошо переносит высокие (до +85 С) и низкие (до –40 С) температуры и потребляет мало энергии, скорость считывания серийного номера — менее 0,005 с1. Перечисленный набор параметров отлично подходит для
применения iButton в качестве идентифицирующего устройства-ключа.
Чтобы информацию с ключа можно было считывать и использовать, нужно соответствующее устройство типа 1-Wire. Это название
переводится как «один провод» и обозначает шину, по которой передача данных осуществляется в обе стороны (от устройства и к нему)
на низкой скорости. Казалось бы, что здесь необычного? Ответ кроется в названии: в этой технологии для передачи данных и питания используется один-единственный канал. Обмен осуществляется
с помощью двух проводов: по проводу питания и данных передаётся ток с определённым сопротивлением, зачастую 2,2 кОм. Простота строения, минимальная стоимость материалов, неприхотливость
к внешним условиям позволяют использовать устройства 1-Wire массово, в том числе в домофонах.
Наконец, третий способ отпирания домофона — это набор комбинации цифр. Он является запасным и сервисным. Завод-изготовитель закладывает определённую комбинацию для возможности обслуживания
домофона и подъездной двери в случае поломки приёмника и ключа.
После установки в доме код обычно меняют. Новый код знает только
обслуживающая компания, к которой в экстренной ситуации может обратиться специалист, официально прикреплённый к дому.
Существует также системный код. Его задачи намного шире, чем
просто открыть дверь. Ввод кода позволяет перевести домофон в состояние программирования. В данном режиме доступны:
• изменение номера первой квартиры (если в подъезде, например, квартиры с номерами от 60 до 120);
1

8

Смотри официальную спецификацию iButton DS1990A.

• изменение сервисного кода (чтобы не смогли войти чужие);
• подключение/отключение квартир (когда они физически подсоединены проводами, необходимо их внести в память устройства и сделать
доступными для звонка);
• запись/удаление ключа-«таблетки» из памяти устройства;
• сброс настроек к заводским.
Стоять у подъезда, даже собственного, и с помощью взлома проверять работу домофона — дело неприличное, более того — незаконное!
Чтобы узнать, как же работает кодовый замок и 1-Wire, мы предлагаем тебе собрать собственное запирающее устройство. Только представь:
у тебя будет замок, собранный своими руками! Вперёд, инженер!
ЧТО ТАКОЕ ESPRUINO

На обложке написано Arduino, а в заголовке главы — Espruino. Подвох? Обман? На самом деле нет. Espruino является частью семейства
Arduino-совместимых платформ. Все платы семейства могут быть подключены друг к другу, потому что имеют один и тот же интерфейс:
цифровые входы и выходы, одинаковое напряжение. Их различие заключается в микропроцессоре, в наборе размещённых на одной плате
устройств или просто в производителе.
Фирменные платы Arduino обрабатывают язык программирования
Wiring — аналог C++, на котором пишутся самые популярные компьютерные игры и некоторые операционные системы, прочие сложные
приложения. Это удобный, но относительно сложный язык, требующий
большого внимания к типам получаемых данных.
Главное различие заключается в том, что Espruino использует язык
программирования JavaScript (сокращённо JS). Работа с ним имеет ряд
преимуществ. Данный язык предназначен для написания специальных
сценариев работы (наборов действий) с объектами, причём объектом
может быть любая переменная или результат действия над мотором
или датчиком. Сценарий JS не имеет строгой последовательной структуры расположения внутри себя элементов, то есть ты можешь описывать в коде функции, применяемые к датчикам или переменным, тогда,
когда это будет удобно тебе. Сценарий компилируется и выполняется
построчно, а не весь сразу. Данная особенность JS полезна при использовании языка в качестве функционального («активного») дополнения
HTML — языка гипертекстовой разметки страниц в Интернете. Когда
на странице в браузере что-то движется или запрашивается ввод текста, это работа JS. Даже если у пользователя была плохая скорость
передачи или ошибка в получении данных, например обрыв связи, он
увидит успевшую загрузиться часть. Веб-разработка тесно связана с ди-

9
Powered by TCPDF (www.tcpdf.org)

зайном. Зачастую за описание действий сайта отвечает дизайнер, которому, например, понадобилось вставить слайд-шоу, создать плавные переходы между вкладками при наступлении определённых событий. Для
того чтобы дизайнер справился собственными силами, JS создан лёгким для понимания и применения. В связи с описанным ранее гаджеты
с управлением под JS легко связываются с различными веб-сервисами
и контроллерами «умных» домов, а также отлично подходят для создания метеостанций.
В России платы, аналогичные размерам Arduino, обрабатывающие
JS, делает компания «Амперка». Повторяющая по размеру Arduino Uno
плата «Iskra JS» совместима со всеми модулями для первой платы.
Ты можешь повторить данный проект на Arduino Uno. Процесс сборки будет аналогичен. Переписав код на Wiring, ты полностью воссоздашь проект на Espruino, то есть портируешь1 его на другую платформу.
2

°
Оборудование:

• Светодиод «Пиранья» (Troyka Module).

• Плата Iskra JS (или другая плата типа

• Соединительные

Espruino).
• Компьютер (минимальные требования):
ОС

Windows XP,

Windows 8,

провода

«папа-папа»

(пучок из 65 штук).
Vista,

Windows 7,

Windows 8.1,

Windows 10

• Ключ iButton (ключ от домофона).
• Кабель

microUSB

для

подключения

Iskra JS к компьютеру.

(32/64 bit)/Linux Mint, Ubuntu, Fedora/

• Батарейный отсек 4АА (для четырёх эле-

Mac OS X, оперативная память не ме-

ментов питания), гнездо питания 2,1 мм

нее 512 Мб, процессор — 1,1 ГГц (или

с клеммником, элементы питания типа

быстрее), свободное пространство на

АА, 4 шт. (или Power Bank — внешний

диске — 200 Мб.

аккумулятор для мобильных устройств).

• Браузер Google Chrome и доступ в Интернет.

• Крестовая отвёртка.
• Карандаш.

• Плата расширения Troyka Shield.

• Линейка.

• Макетная плата BreadBoard Mini (170

• Ножницы.

точек).

• Изоляционная лента.

• Микросервопривод FS90.

• Лист картона или картонная коробка.

• ИК-приёмник (Troyka Module).

• Двухсторонний скотч.

• ИК-пульт.

• Монета2.

• Модуль кнопки (Troyka Module).
• Зуммер (Troyka Module).
• Резисторы 220 Ом (10 шт.) или резистор 2,2 кОм.
1
2

10

°

Примечание: многие из перечисленных компонентов входят в набор «Йодо» компании «Амперка».

Портировать — сделать доступным для запуска на другой платформе, переписать или оптимизировать, сохраняя набор доступных для конечного пользователя функций и внешний вид.
Подойдёт любая. Все монеты Банка России или СССР являются проводниками, мы их изучали
и проверяли.

Обозначения
В тексте тебе встретятся следующие обозначения.
1. Пин (от англ. «pin» — контакт) — это вход или выход на плате
Arduino Uno, плате расширения Troyka Shield или макетной плате.
2. Скрипт — это программа, которую обрабатывает Espruino.
3. 5V (5 вольт) — обозначение напряжения питания платы.
4. GND (от англ. «ground» — земля) — заземление электрических
элементов.
5. // — обозначение в программе однострочных комментариев, в которых приводится дополнительная информация.
6. /*текст*/ — обозначение в программе комментариев из нескольких строк.

11

Этап 1. Устройство
замка

Рассмотри общую схему запирающего устройства (рис. 6). Для чего используется каждый компонент? Как ты думаешь, какую плату не видно на схеме? Попробуй мысленно представить поэтапное подключение
устройства. Теперь начинай его собирать. Внимательно рассмотри рисунки и прочитай подписи к ним. В случае затруднений обращайся за
помощью к взрослым.

Рис. 6. Общая схема готового устройства

12

Этап 2. Сборка

ШАГ 1. СБОРКА ОСНОВЫ

Компоненты:
• плата Iskra JS, 1x;
• плата расширения Troyka Shield, 1x;
• макетная плата BreadBoard Mini, 1x.

Макетная плата позволяет быстро и просто соединять контакты без
пайки. Выбранная плата ещё удобнее, если ты хочешь сделать устройство компактным и не «висячим на проводах».
1. Соедини вместе плату Iskra JS
и плату расширения Troyka Shield,
как показано на рисунке.

13

2. Сними с задней поверхности макетной платы бумажную защиту,
затем аккуратно наклей Breadboard Mini на Troyka Shield поверх перфорированной части платы — места для пайки. Теперь ты
сможешь легко соединять компоненты с помощью проводов «папа-папа».
ШАГ 2. ПОДКЛЮЧЕНИЕ CЕРВОМОТОРА

Компоненты:
• сервомотор, 1х;
• крыло для сервомотора (на выбор), 1х;
• линейка или деревянный/пластмассовый запор, 1х;
• двухсторонний скотч или клей, 1х;
• ножницы, 1х.

1. Подключи шлейф сервомотора
к цифровому выходу № 13 (Digital 13) на плате расширения Troyka Shield. Коричневый провод
должен быть рядом с буквой G,
а жёлтый — с S.

Кстати! Для лёгкого запоминания можно
воспользоваться ассоциацией «Сигнал (S) —
Вольтаж (5V) — Грунт (GND)».

Ты заметил, что на Troyka Shield рядом со второй группой цифровых выходов стоит не V, а загадочное V2? Не пугайся! Дело в том, что
данная плата расширения поддерживает подачу разного напряжения
на две группы. Для некоторых модулей или датчиков требуется 3,3V,

14
Powered by TCPDF (www.tcpdf.org)

а не привычные 5V. По умолчанию,
то есть в соответствии с заводскими
настройками, плата работает в режиме подачи 5V на все выходы. За
режимы отвечает особая перемычка,
показанная на рис. 7.
Когда переключатель стоит в положении V2  5V, второе напряжение
равно основному (то есть V2 V).
Рис. 7
Если переключатель стоит в положении «IOref  V2», то включено изменение второго напряжения (V2)
и на цифровые выходы № 8–13 подаётся ток с напряжением 3,3V. Убедись, что на сервопривод подаётся ток со стандартным напряжением
(5V), при меньшем мотор не сдвинется.
2. Установи лопасть для замка.
В комплекте есть разные вертушки, но самая удобная из них —
вытянутая деталь. Насади лопасть
на шестерёнку, чтобы деталь была
расположена параллельно длинной части сервомотора.

Если ты собираешься устанавливать замок на дверцу шкафа или
сейфа большого размера, то тебе, возможно, понадобится нарастить
запирающую деталь.
3. Прикрепи с помощью двухстороннего скотча или клея дополнительную часть запора к основной.

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

15

ШАГ 3. ПОДКЛЮЧЕНИЕ TROYKA-МОДУЛЕЙ

Компоненты:
• зуммер (Troyka-модуль), 1х;
• кнопка (Troyka-модуль), 1х;
• светодиод «Пиранья» (Troyka-модуль),
1х;
• ИК-приёмник (Troyka-модуль), 1х;
• тройной шлейф «мама-мама», 4х.
Опционально (для удобного размещения
датчиков):
• полоска картона 9 u1,5 см, 1х;
• двухсторонний скотч, 1х;
• ножницы, 1х.

Обрати внимание, что все датчики
формата Troyka-модуль подключаются к Troyka Shield одинаково.
Тройной шлейф подсоединяется
к модулям, как показано на рис. 8.

Рис. 8

1. Соедини шлейфом модуль светодиода и цифровой выход № 1
(Digital 1) на Troyka Shield, соблюдая цвета.

16

2. Соедини шлейфом модуль кнопки
и цифровой выход № 2 (Digital 2)
на Troyka Shield, соблюдая цвета.

3. Соедини шлейфом модуль зуммера и цифровой выход № 5 (Digital 5) на Troyka Shield, соблюдая
цвета.

4. Соедини шлейфом модуль инфракрасного приёмника и цифровой
выход № 7 (Digital 7) на Troyka
Shield, соблюдая цвета.

17

Задания по желанию
5. Отрежь от двухстороннего скотча четыре одинаковых куска шириной 0,7 см. Ты можешь сделать это на глаз — по размеру обжатых
концов шлейфов.
6. Наклей на край картонной полоски первый кусок скотча и прикрепи
шлейф подключённого модуля. «Посади» остальные датчики рядом.

Теперь шлейфы не будут мешать, а при тестировании рабочая поверхность датчиков будет всегда открыта.
Молодец! Ты подключил все датчики!
ШАГ 4. СБОРКА ДАТЧИКА 1-WIRE

Компоненты:
• длинный красный провод «папа-папа»,
1х;
• короткий красный провод «папа-папа»,
1х;
• длинный чёрный провод «папа-папа»,
1х;
• короткий оранжевый провод «папа-папа», 1х;
• резистор 220 Ом, 10х, или резистор
2,2 кОм, 1х.

18

Ты раньше сталкивался с резисторами? Резистор — это радиотехнический компонент, который изменяет сопротивление (R) в электрической цепи. Помещённый в цепь резистор сопротивляется течению тока,
преобразовывая его излишки в тепло. Чем больше сопротивление, тем
большая часть тока переходит в тепло.
Резисторы бывают разного номинала. Из курса физики ты знаешь
про закон Ома. В честь его создателя названа единица измерения сопротивления — Ом. Закон Ома описывается следующей формулой:
I

U,
R

где R — сопротивление; U — напряжение; I — сила тока.
Для считывания iButton потребуется сопротивление 2,2 кОм. Подключение в электрической цепи может
быть двух типов: последовательное и
параллельное. При последовательном
подключении резисторов выполняется очень простое правило:
R

Кстати! Для быстрого запоминания формулы закона Ома есть
секретный способ. Закрой на рисунке справа неизвестный элемент и получи готовую формулу.

R1  R2  }  Rn .

Да, значения просто суммируются! Это удобно для быстрого изменения сопротивления в цепи. Поэтому мы взяли 10 резисторов на 220 Ом.
При суммировании итоговое значение быстро растёт, что удобно, когда
надо сильно увеличить исходный параметр.
Если бы ставилась задача использовать меньшее сопротивление, то
резисторы бы подключались в цепи параллельно. Тогда формула выглядела бы следующим образом:
R

1
1
R1

+

1
R2

1

1

+ R +…+R
3
n

.

Значительно сложнее, не правда ли?
Таким образом, добавляя или убирая последовательно соединённые
резисторы на макетной плате, ты сможешь контролировать сопротивление, необходимое для работы с устройствами
1-Wire.
Ты уже понял, как и что мы будем соединять. Осталось понять, как различать резисторы. Возьми один из них и внимательно
его рассмотри (рис. 9).
Рис. 9. Резистор

19
Powered by TCPDF (www.tcpdf.org)

Догадался ли ты, что цветные полосы на нем нанесены не просто
так? На крохотных элементах писать номинал затруднительно, поэтому
используют особый код, который в случае с резисторами чаще всего
состоит из четырёх или пяти цветных полос.
Существуют следующие правила:
• золотыми и серебряными могут быть только кольца на 3-й и 4-й позициях;
• каждому цвету соответствует число;
• допуск показывает класс качества резистора, то есть насколько велика
погрешность (в процентах).
Цвет

Первое
кольцо

Второе
кольцо

Множитель

Допуск, %

Чёрный

нет

0

1

Не бывает

Коричневый

1

1

10

±1

Красный

2

2

100

±2

Оранжевый

3

3

1 000

Не бывает

Жёлтый

4

4

10 000

Не бывает

Зелёный

5

5

100 000

±0,5

Синий

6

6

1 000 000

±0,25

Фиолетовый

7

7

10 000 000

±0,1

Серый

8

8

100 000 000

±0,05

Белый

9

9

1 000 000 000

Не бывает

Золотой

Не бывает

Не бывает

0,1

±5

Серебряный

Не бывает

Не бывает

0,01

±10

Используя приведённую выше таблицу, ты легко определишь, какой
номинал был у резистора на рис. 9:
1) первое красное кольцо даёт 2;
2) второе красное кольцо даёт ещё одну 2, подписанную справа от
первой, то есть 22;

20

3) коричневое кольцо показывает, что полученное число необходимо умножить на 10, то есть 22 u10 220 Ом;
4) допуск составляет r 5%. Значит, рабочее сопротивление в цепи
с использованием резистора равно 209–231 Ом.
Поздравляем! Ты научился определять сопротивление резисторов
в электрической цепи. Теперь давай подключим резисторы.
1. Подогни ножки резистора, как
показано на рисунке.

2. Поставь резистор к пинам макетной платы таким образом, чтобы
ножки входили в разные соседние
шины, согласно схеме.

3. Подключи следующий резистор
одной ножкой к той же шине, что
и предыдущий, а второй — к следующей шине. Это и будет последовательное соединение.
Повторяй шаги 1–3 до тех пор,
пока не будет подключено достаточное количество резисторов до
достижения 2,2 кОм. Если ты взял
резисторы на 220 Ом, то тебе потребуется 10 последовательно соединённых элементов.

21

4. Подключи к макетной плате питание. Для этого соедини коротким
красным проводом «папа-папа»
выход 5V на плате Troyka Shield
и шину макетной платы, к которой подключён первый резистор.

5. Соедини с помощью оранжевого провода «папа-папа» пин рядом с ножкой последнего резистора с цифровым входом № 10
(Digital 10) на Troyka Shield. Это
обеспечит возможность измерения
напряжения 1-Wire.

6. Подключи провода для 1-Wire.
Подключи красный провод «папа-папа» к свободному пину на
шине, где располагается ножка
последнего резистора. Подключи
чёрный провод «папа-папа» к выходу GND на Troyka Shield. Для
удобства ты можешь скрепить
вместе
оставшиеся
свободные
концы проводов, но только так,
чтобы оголённые контакты не соприкасались.
Готово! Ты создал собственное устройство 1-Wire! Молодец!

22

Этап 3. Установка
программного обеспечения
на компьютере
Платы типа Espruino отличаются от Arduino, но для них программное обеспечение также распространяется бесплатно. Более того, тебе не
придётся устанавливать какие-либо объёмные программы, максимум —
браузер Google Chrome.
1. Запусти Google Chrome. Если у тебя он не установлен, то скачай
установочный файл по адресу: http://google.com/chrome. В нём
удобно инсталлировать дополнительные расширения и мини-приложения.
2. Теперь установи в Chrome среду программирования Espruino Web
IDE. Ты можешь найти её в интернет-магазине Chrome, однако мы
упростили задачу и сократили длинную ссылку до приятного вида:
https://goo.gl/zu6MlF. Выбери в открывшемся окошке Установить.

Отлично! Ты установил среду программирования Espruino Web IDE.

23

3. Чтобы её запустить, перейди на
вкладку Приложения в Google
Chrome (в новых версиях — Сервисы). Если у тебя не получилось
найти вкладку, введи в адресной
строке: chrome://apps/.
4. Выбери на открывшейся странице
со значками Espruino Web IDE.

5. Установи библиотеки для работы
с Troyka-модулями. Для этого открой в браузере Google Chrome
ссылку (мы снова сократили её
для тебя): https://goo.gl/ao308u.
В среде Espruino Web IDE появится окно с подтверждением установки дополнительных настроек,
нажми Ok.

Дополнительные библиотеки значительно сократят время написания
кода. Сценарии, написанные на языке JavaScript, традиционно называют скриптами, они сохраняются с расширением js. Здесь среда программирования Espruino Web IDE имеет одну особенность: она сохраняет файл без расширения.
Превосходно! Теперь ты можешь приступить к написанию и загрузке
скрипта в твоё устройство.

24
Powered by TCPDF (www.tcpdf.org)

Этап 4. Первый запуск
и проверка оборудования

1. Подключи с помощью USB-кабеля плату Iskra JS к компьютеру.
2. Рассмотри внимательно интерфейс среды. Кликни по кнопке с пиктограммой платы (показана на рисунке красной стрелкой).

3. Выбери в открывшемся списке
порт, к которому подключена
Iskra.

25

В зависимости от операционной системы обозначения могут быть
разными:
Операционная система

Обозначение порта

Windows

COM

Linux

/dev/ttyACM

Mac OS

/dev/cu.usbmodem

Прежде чем подготовить программу, следует убедиться, что всё оборудование подсоединено и работает правильно. Требуется проверить,
есть ли сигнал от датчиков, отображает ли информацию дисплей
и правильно ли собран блок питания.
4. Перепиши для проверки компонентов приведённый ниже скрипт
в поле программы:
//Подключение библиотеки для ИК-приёмника:
var ir = require(‘@amperka/ir-receiver’)
//Объявление, к какому цифровому входу он подключён:
.connect(P7);

Библиотека для связи с устройствами по шине с низкой скоростью
передачи данных («один провод») входит в набор стандартных функций. Просто укажи, к какому цифровому входу подключён датчик:
var oneWire = new OneWire(P10);
//Подключение библиотеки для работы с кнопкой:
var trigger = require(‘@amperka/button’)
//Объявление порта, к которому она подключена:
.connect(P2);
//Чтобы использовать «Пиранью», требуется подключить библиотеку
var light = require(‘@amperka/led’)
//и указать нужный цифровой выход:
.connect(P1);
//Для лёгкости использования зуммера требуется библиотека:
var buzzer = require(‘@amperka/buzzer’)
//Объявление порта, к которому подключён зуммер:
.connect(P5);

26

//Подключение сервопривода. Сначала надо подключить библиотеку:
var key = require(‘@amperka/servo’)
//Объявление цифрового выхода для управления приводом:
.connect(P13)
//При включении гаджета замок должен быть в положении «закрыто»,
//то есть в положении 90 градусов.
.write(90);

Отлично! Настала пора разобраться с вводом кода с ИК-пульта. Для
этого тебе понадобится функция библиотеки: r.on. Когда на ИК-приёмник поступает сигнал (он его «ловит», от англ. «receive»), требуется
обработать полученные данные.
5. Пока перепиши код. О том, почему внутри не так много разнообразных функций, ты узнаешь позднее.
ir.on(‘receive’, function(code) {
//Внутренняя функция, обрабатывающая полученный сигнал (code).
light.turnOn(); //Включение светодиода.
buzzer.turnOn(); //Выключение зуммера.
key.write(0); //Перевод мотора сервопривода в положение 0 градусов.
print(code); //Вывод на экран кода нажатой клавиши пульта.
});
//Проверка работы кнопки.
trigger.on(‘press’, function() {
/*Необходимо выполнить поиск устройств на шине 1-Wire.
*Достаточно первого найденного устройства
*(нумерация с 0). Выведи адрес на экран.*/
print(oneWire.search()[0]);
buzzer.turnOff(); //Выключение зуммера.
light.turnOff(); //Выключение светодиода.
});

Кстати! Обрати внимание, как оформлены
отступы в тексте скрипта. В программировании также существуют правила хорошего тона, призванные обеспечить понятность кода для другого человека. Обрати
внимание на переменные. Правила их именования: написание со строчной латинской
°

°
буквы, второе слово без пробела с заглавной. В языке JavaScript учитывается регистр. Не используй написание русских
слов латинскими буквами! Функции вызываются по принципу: объект.функция
(параметр).

27

6. Загрузи скрипт в устройство. Для этого снова нажми на кнопку
с пиктограммой платы

.

7. Нажми на любую клавишу на ИК-пульте. Должен загореться светодиод «Пиранья» и включиться зуммер, а в окне терминала — появиться код нажатой кнопки. (Код не совпадает с названием кнопки,
указанным на пульте.) Если этого не произошло, проверь, вставлена
ли в пульт батарейка.
8. Нажми на кнопку на своей самостоятельно сделанной планке. Зуммер и светодиод должны выключиться, а в окне терминала появиться «undefined». Если не получилось, проверь шлейф модуля кнопки.
9. Проверь работу 1-Wire-устройства. До этого момента оно показывало, что ключ не найден. Приложи к нижней части iButton контакт
красного провода, а к боковой части ключа — контакт чёрного провода. Нажми синюю кнопку.

В терминале должен отобразиться адрес ключа из 16 символов. Если
всё равно показано «undefined», значит, устройство 1-Wire подключено неправильно.
10. Отсоедини USB-кабель. Теперь проверь, как твой гаджет работает с
батарейным отсеком. Согласись, будет неудобно, если из собранного
тобою устройства (например, сейфа) будет торчать кабель. Подключи штекер блока питания ко входу Iskra JS.
Если всё получилось, то ты без преувеличения большой молодец,
ведь ты сам собрал кодовый замок, а об этом даже и не мечтали
многие поколения, жившие раньше!
Если что-то не сработало, не расстраивайся. Проверь ещё раз орфографию и пунктуацию в скрипте. Возможно, где-то случайно
был упущен знак или произошла ошибка при обработке команды
устройством.

28

Этап 5. Сборка корпуса
устройства

Конечно, ты можешь разместить замок без корпуса, потому что он будет находиться внутри сейфа или шкафа, но если ты не хочешь, чтобы
за провода постоянно цеплялись сами охраняемые объекты, рекомендуем всё же сделать корпус.

Компоненты:
• лист картона или картонная коробка,
1х;
• двухсторонний скотч, 1х;
• ножницы, 1х;
• линейка, 1х;
• монета, 1х.

1. Возьми или сделай небольшую картонную коробку. Это может быть
коробка из-под лампочки. Подойдёт любая упаковочная тара прямоугольной формы.
2. Подумай, как удобнее будет разместить устройство в корпусе, чтобы
оно оптимально занимало пространство.
3. Вырежи отверстие для сервомотора. Габариты выступающей части:
2,1 u 1,2 см. Подумай, как это отверстие лучше разместить.
4. Подготовь отверстия для кнопки и светодиода. Ты можешь их поместить на разные панели или на одну панель. Картонная планка
позволяет удобно размещать датчики рядом друг с другом. Размер
отверстия для кнопки — 1,1 u 1,1 см, размер отверстия для светодиода — 0,7 u 0,7 см.
5. Пустим в ход деньги! Сделай на той же панели, где будет располагаться кнопка, отверстие для монетки. Вырежи круг, который будет

29
Powered by TCPDF (www.tcpdf.org)

чуть меньшего диаметра, чем сама монета. Затем подклей с помощью скотча монету с тыльной стороны панели. Не забудь сделать
крохотное отверстие для подведения к iButton провода «земля».
6. Собери длинные стороны коробки, оставив свободной панель с отверстиями и ей противоположную. Закрепи всю конструкцию скотчем.
7. Вставь в отверстия сервопривод, кнопку и светодиод. Убери лишние
части картона, если они мешают плотному креплению.
8. Вложи
внутрь
коробки
поставленные друг на друга модуль питания и плаКстати! Для придания конструкции большей эстетики заготовку можно обклеить
ту. Втяни внутрь корпуса
белой бумагой.
провода от Troyka-модулей,
сам зуммер и ИК-приёмник. Не беспокойся, он будет работать через картон. Зато теперь
ты знаешь, почему Arduino-совместимые проекты часто именуют
звучным словом «sandwich», то есть «бутерброд».

30

9. Подведи к монете провода 1-Wire. Прижми контакт красного провода к монете с тыльной стороны и закрепи скотчем или изолентой.
10. Выведи свободный контакт чёрного провода с тыльной стороны наружу, чтобы он в дальнейшем касался ключа. Аккуратно закрепи
провода.

11. Закрой коробочку, подняв оставшиеся панели. Закрепи их скотчем.
Поздравляем! Ты закончил сборку устройства и изготовил для него
корпус. Твоё устройство полностью исправно и ожидает, когда ты дашь
ему команды. Чего же ты ждёшь? Вперёд!

31

Этап 6.
Создание программы
для устройства
ЛОГИКА ПРОГРАММЫ

Программа «умного» замка должна обрабатывать два события:
• открытие двери с помощью ввода кода с ИК-пульта;
• открытие двери с помощью ключа iButton.
При первом способе открытия двери следует задать два режима:
пользовательский и сервисный. В пользовательском режиме будет считываться вводимый с клавиатуры пульта код и сравниваться с занесённым в память. Если коды совпадают, сервопривод переходит в положение «открыто». Сервисный режим запускается один раз и служит для
первичной установки правильного кода.
Второй способ открытия двери — с помощью ключа iButton. Пусть
датчик 1-Wire включается только после нажатия обычной тактовой
кнопки — это позволит сэкономить электроэнергию. Датчик считывает
информацию с приложенного ключа, и, если ключ соответствует нужному, сервопривод меняет положение крыла.
В свою очередь, кроме обычных (пользовательских) значений, необходимо реализовать возможность сохранения мастер-ключей (эталонов),
с которыми будут сравниваться все прочие ключи. В качестве идентификатора ключа выступает его адрес, считываемый с помощью датчика
1-Wire. При совпадении считываемого адреса с адресом мастер-ключа
сервопривод меняет положение крыла на «открыто».
Раз уж наш замок «умный», его требуется снабдить дополнительными функциями, например включающейся при попытке взлома (неверно
набранном коде доступа) сиреной. Также для удобства следует добавить возможность закрытия замка с помощью пульта и ещё несколько
интересных функций, которые мы рассмотрим позже.
Итак, составим план. Мы будем на него ориентироваться при написании кода.
Часть 1. Подготовка к работе:
1) инициализация датчиков и модулей:
• ИК-приёмник;
• 1-Wire;
• кнопка;

32

• светодиод «Пиранья»;
• зуммер;
• сервопривод;
2) объявление переменных:
• правильный код замка;
• пользовательский код замка (вводимый);
• счётчик количества введённых цифр;
• флаг установки настроек замка;
• адрес мастер-ключа iButton;
• адрес пользовательского ключа iButton;
3) подготовка часто используемых функций:
• функция «Тревога»;
• функция «Отключение тревоги».
Часть 2. Выбор режима работы замка:
1) пользовательский режим:
• открытие с помощью ИК-пульта;
• дополнительные и секретные режимы работы;
• открытие с помощью ключа iButton;
2) сервисный режим:
• ввод контрольного кода с помощью ИК-пульта;
• сохранение в память адреса мастер-ключа iButton.

Начнём программировать!
ШАГ 1. ЗАПУСК ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ESPRUINO WEB IDE

1. Запусти программную среду Espruino Web IDE с помощью браузера
Google Chrome.
2. Очисти в открывшемся окне поле программы.
3. Подключи с помощью USB-кабеля Iskra JS к компьютеру.
4. Нажми кнопку

и выбери порт с подключённым устройством.

ШАГ 2. СОСТАВЛЕНИЕ ПРОГРАММЫ
ДЛЯ ЭЛЕКТРОННОГО ЗАМКА

В текстовом редакторе (самом окне программы) начни вводить свой
код, руководствуясь пунктами данного шага.

33

Часть 1. Подготовка к работе
Чтобы работать с датчиками и устройствами, необходимо указать процессору путь, то есть номер цифрового выхода или входа, и название
устройства. Кстати, создатели Iskra JS тебе сильно помогли. Они создали библиотеки1, в которых описали все необходимые шаги для получения конечной информации или выполнения команды, поставив им
в соответствие простые служебные слова2.
1.1. Инициализация датчиков и модулей
Начнём подключение.
1. Ты уже подключал устройства в разделе проверки оборудования, теперь разберёмся в написанном подробнее. Начнём с ИК-приёмника:
var ir = require(‘@amperka/ir-receiver’)
.connect(P7);

В языке JavaScript переменная3 создаётся с помощью слова var без указания
Кстати! JS — язык для ленивых. Если нетипа записываемых в неё значений, то
обходимо вызвать несколько стандартных
есть достаточно просто сказать: «Это
или ранее описанных функций для одного
переменная A». Если ты сталкивалобъекта, то писать название объекта снося с другими языками программирова не обязательно. Например, в последней
вания, например Pascal, то знаешь,
приведённой строке кода понятно, что вычто они требуют указать тип данных
звана функция «присоединить» («connect»)
для переменной. JavaScript дарит тебе
для инфракрасного приёмника, описанная
в подключённой библиотеке.
свободу записывать что угодно и куда
угодно. Это удобно! Слово «require»
переводится с английского языка как «потребовать». Таким образом,
переменная потребовала для работы с собой библиотеку, находящуюся по указанному внутреннему адресу Espruino Web IDE.
Что значит загадочное P7 в скобках? Для модификации JavaScript,
используемой в IDE, это всего лишь обозначение цифрового выхода № 7 — порта (P — Port). Полностью было бы написано GPIO
(General Purpose Input and Output, то есть ввод и вывод общего
1

2

3

34
Powered by TCPDF (www.tcpdf.org)

Библиотека — набор специфических и часто используемых для определённых целей функций.
Их полностью описывает разработчик. Пользователь может вызвать функцию, указав название,
но не описывая её самостоятельно.
Служебные слова — зарезервированные для конкретного языка программирования слова. Они
являются названиями функций, описанных в библиотеках или стандартных для языка.
Переменная — именованная область памяти компьютера, использующаяся для хранения различных значений.

назначения). Такие порты делятся на два типа: цифровые и аналоговые, уже знакомые тебе.
Не всегда необходимо подключать библиотеки. В случае если модуль не специфический (например, произведённый специально «Амперкой»), то подойдут встроенные типы устройств Espruino.
2. Подготовим к работе датчик 1-Wire:
var oneWire = new OneWire(P10);

Следи за строчными и заглавными буквами. Это важно! oneWire —
название переменной, а OneWire — зафиксированное в языке обозначение типа устройств.
3. Подключи оставшиеся Troyka-модули, то есть кнопку, светодиод
«Пиранья» и зуммер:
var trigger = require(‘@amperka/button’)
.connect(P2);
var light = require(‘@amperka/led’)
.connect(P1);
var buzzer = require(‘@amperka/buzzer’)
.connect(P5);

Отлично! Ты установил связь между замком и внешним миром. Теперь, как создатель, подари замку способность отвечать.
4. Сразу закрой замок:
var key = require(‘@amperka/servo’)
.connect(P13)
.write(90);

Молодец! С подключением аппаратной части ты закончил. Но переходить к основной программе рано.
1.2. Объявление переменных
Espruino (Iskra JS) во включённом состоянии бесконечно повторяет
выполнение функций. Чтобы сохранять данные или хотя бы иметь
возможность их использовать, надо отвести в памяти специальные места — переменные.

35

1. Сразу создадим перечисленные переменные.
varsecret = ‘’; //Переменная для будущего «правильного», то есть мастер-кода.
var answer = ‘’; //Переменная для вводимого пользователем ответа.
var i = 0; //Переменная для счётчика количества введённых с клавиатуры цифр.
var setup = 0; //Переменная-флаг («да/нет»).

Кстати! Если переменные объявлены (созданы) вне всех функций программы, то их
называют глобальными. Это значит, что
доступ к хранящимся в них данным будет
обеспечен из любого места программы. Существуют также локальные переменные —
их объявляют внутри части программы,
например в цикле или функции. Такая
переменная доступна только в этом фрагменте кода.

Благодаря флагу будет известно,
была ли произведена установка
мастер-кода, это влияет на выбор
режима работы замка.
2. Тебе не кажется, что мы что-то
забыли? Созданы места для хранения данных с кодового замка,
но данные ключа-«таблетки» при
этом не учтены. Исправь ситуацию:

var master = 0; //Переменная для сохранения адреса ключа-кнопки хозяина.
var user = 0;//Переменная для сохранения адреса приложенного к датчику ключа.

1.3. Подготовка часто используемых функций
Многие взрослые говорят, что лень — это плохо. Но любой программист возразит, ведь она экономит не только время человека, но и память компьютера!
Чтобы не писать каждый раз одни и те же строки, от которых никуда не деться, используют небольшую хитрость — выделяют строки
в отдельные функции. Впоследствии фиксированную последовательность команд можно будет вызвать одной-единственной командой —
именем функции.
Для сейфового замка могут повторяться две ситуации: правильный
вход по паролю или, напротив, попытка взлома. В последнем случае
необходимо поднять тревогу.
1. Напиши функцию «Тревога»:
function alarm() {
print("Alarm! Save me, Master!"); //Вывод сообщения о взломе.
buzzer.beep(0.2, 0.1); //Включение сирены. В данном случае — зуммера.
light.blink(0.2, 0.1); //Включение мигалки (светодиода).
}

36

Ты заметил, что функции зуммера и светодиода имеют два параметра? Первое значение — это длительность включения звука/света, второе — время паузы.
Легко, не правда ли? Здесь объекты различались, поэтому их пришлось прописывать перед названием функции в обоих случаях.
Названия стандартных функций придуманы таким образом, чтобы их
не требовалось запоминать: «печатай» (print), «издай сигнал» или же,
как ты говорил в детском саду, «бибикай» (beep), «мигай» (blink).
Кстати, поскольку мы заговорили о детском саде, вспомним новогоднюю фразу: «Ёлочка, гори!». Она полностью описывает принцип вызова функций к объектам в JavaScript1.
Включать сирену — дело полезное. Стоит, однако, напомнить, что ты
можешь сам ошибиться во вводе кода или приложить неправильный
ключ. Слух соседей, кстати, тоже достаточно нежный, чтобы его столь
бессовестно портить2.
2. Напиши соответствующую функцию «Выключение тревоги»:
function stopAlarm() {
buzzer.turnOff(); //Выключение зуммера.
light.turnOff(); //Выключение светодиода.
}

Оборудование готово к получению команд, место в памяти отведено,
а часто используемые функции подготовлены. Пора приступать к основной части программы.
Часть 2. Выбор режима работы замка
Программа должна быть удобной для работы в автономном режиме,
а также для установки ключей и отладки.
2.1. Пользовательский режим
Пользовательский режим является более простым, чем защищённая
часть сервисного режима (установки), однако пользоваться ею предстоит намного чаще.
Правилом хорошего тона считается способность программы/устройства быть вежливой, то есть здороваться, прощаться и благодарить.
1

2

Информация к размышлению. Известная фраза дедушки Мороза в качестве команды будет выглядеть следующим образом: xmasTree.blink(0.2, 0.2);
В любом случае напомним, что на территории Российской Федерации действует Закон
№ 52-ФЗ «О санитарно-эпидемиологическом благополучии населения», или «Закон о тишине», предусматривающий денежный штраф за его нарушение.

37

Исследования крупных ИТ-компаний, занимающихся серьёзными разработками, показали, что пользователи иначе относятся к «культурным»
девайсам: обходятся с ними аккуратнее, реже ломают и т. п. Кроме
того, пользователю удобнее работать с оборудованием, которое само поясняет, какие действия необходимо совершить.
1. Пусть запирающее устройство просит установить пароль при первом включении или после сброса:
if (setup === 0) { //Если установка ещё не производилась,
print( //выводится сообщение с просьбой установить код.
"Please, enter new master-code."
);
}

В качестве маркера использовалась переменная setup (установка).
Если установка кода не проводилась, то значение равно 0 (логическое «нет»).
Ты заметил, что сравнение в JavaScript описывается с помощью
тройного знака «равно»? Это одна из особенностей данного языка
программирования.
2. А если код установлен? Опиши ситуацию. Пусть устройство предложит ввести имеющийся код или воспользоваться другим методом
(ключом).
if (setup === 1) { //Если секретный код уже установлен,
print( //выводится сообщение о необходимости ввести код
//или использовать другой метод (iButton).
"Please, enter code or use another method."
);
}

На самом деле мы схитрили в целях единообразия оформления кода.
В JavaScript допускается использование двойного знака «равно», как
в Python или C++, однако только если сравнивают не с нулём.
С вводной частью мы закончили. Теперь перейдём к функциональной.
2.1.1. Открытие с помощью ИК-пульта
Настала пора разобраться с вводом кода с ИК-пульта. Для этого тебе
понадобится функция библиотеки: ir.on(), где «on» переводится как
«включить». Ты заметил, что скобки у функции не пусты? Дело в том,
что раньше тебе не надо было передавать в набор команд какие-либо конкретные значения: инструкции касались лишь аппаратной части.

38

Здесь придётся поступить весьма странным образом: ты не только подашь значения, но и сделаешь другую функцию одним из аргументов!
Когда на ИК-приёмник поступает сигнал (он его «ловит» — «receive»),
требуется обработать полученные данные.
1. Напиши следующий код:
ir.on(‘receive’, function(code) {
//Внутренняя функция обрабатывает полученный сигнал (code).
light.toggle(); //Светодиод показывает, что идёт приём сигнала.

У самого замка нет дисплея, поэтому роль интерфейса выполняют
светодиод и зуммер. Пусть светодиод включится, чтобы показать,
что сигнал поступил. Слово «toggle» означает «тумблер/защёлка»,
то есть «переключатель». Ты можешь написать light.turnOn(), если
захочешь, от этого значение здесь не изменится.
Кстати, code может принимать следующие значения:
Кнопка ИК-пульта

Значение code

CHCH
CH+
PREV
NEXT
PLAY/PAUSE
VOLVOL+
EQ
100+
200+

16753245
16736925
16769565
16720605
16712445
16761405
16769055
16754775
16748655
16750695
16756815

Чаще всего при использовании запирающего устройства пароль уже
установлен и ожидается его ввод пользователем.
2. Обработай полученный сигнал. Если пароль уже установлен, то необходимо сохранить четыре знака в поле ответа как строку (набор
букв/символов). Его сохранение как числа нежелательно, поскольку
разные комбинации цифр могут дать одинаковую сумму.
if (setup === 1) {
if (i < 5) { //1