Мы продолжаем публикацию обзора онлайн-курса "Строим роботов и другие устройства на Arduino", начало здесь. Итак, долго ли коротко, закончилась вторая неделя онлайн-курса робототехники от МФТИ. Признаться, неделя оказалась очень насыщенная всевозможными темами. Вот примерный перечень, который я выделил для себя: Успешно пройдя тест и собрав предложенные схемы из уроков, задумался, как можно улучшить ту или иную схему или собрать что-нибудь свое. Первое что пришло на ум — модернизация датчика освещенности. Реализация, предложенная в уроке, просто снимала значение с фоторезистора и посылала его в последовательный порт.  Модернизированная версия должна использовать семисегментный индикатор для вывода чисел от 0 (минимальная освещенность) до 9 (максимальная освещенность). Индикатор должен быть подключен через сдвиговый регистр. С помощью двух кнопок должна осуществляться установка минимального и максимального уровня освещенности. Сдвиговый регистр нужен для того, чтобы не задействовать по пину Arduino на каждый сегмент, а вместо этого обойтись меньшим числом пинов. По сути, сдвиговый регистр преобразует последовательный вывод данных (по одному биту за единицу времени) в параллельный (несколько бит за единицу времени). В нашем случае вместо семи пинов Arduino нам понадобится лишь три. В редакторе Fritzing у меня получилось такое устройство. Таким образом оно выглядит вживую. 
За основу были взяты схемы работы со сдвиговым регистром и фоторезистором. Обратим внимание, что на плате фоторезистор подключен несколько иначе, чем в видеоуроке — там мы снимали значение напряжения на фоторезисторе относительно земли, а в схеме снимаем падение напряжения относительно питания. Так сделано, чтобы немного упростить программу — с увеличением уровня освещенности сопротивление фоторезистора падает. Следовательно, при том же токе уменьшается падение напряжения. Поэтому на аналоговом входе будет тем выше напряжение, чем выше уровень освещенности, и наоборот. Теперь дело за малым — доработать исходный код. За основу была взята все та же программа для вывода значения на семисегментный индикатор. Из особенностей — при установке максимального уровня освещенности пришлось вычитать некоторую константу (max_light = value — 10), подобранную эмпирическим путем. Это необходимо для того, чтобы избежать “дребезжания” при максимальном уровне освещенности, т. к. значение напряжения, снятого с фоторезисторе нестабильно. Компилируем скетч, загружаем в Arduino и проверяем. Сначала в мониторе порта... 
А затем вживую Как видим, устройство успешно работает в том виде, как его описывали. Конечно, еще есть куда его улучшать — например, можно добавить звуковой сигнал, когда освещение падает ниже определенного уровня — это будет означать, что нужно включить дополнительное освещение на рабочем месте. Также в будущем можно будет изменить саму программу, используя массивы и дополнительные функции. В заключение еще раз повторю, что неделя получилась очень насыщенная на различные темы. Отметим, что с момента публикации курса в Arduino IDE появилась встроенная функция Serial Plotter, которая частично перекрывает рассматриваемые в уроках функции среды Processing. Также в конце недели авторы пришли к идее модульности, когда конечное устройство собирается из готовых элементов — модулей, например, кнопки с уже встроенным подтягивающим резистором, готового датчика света, где фоторезистор и обычный резистор уже собраны в делитель напряжения, и тому подобных. Однако, устройство можно без труда собрать на макетной плате, что и было сделано. Вопрос читателям, приходилось ли вам самостоятельно изготавливать корпус для ваших устройств? Какие материалы вы для этого использовали? Может быть, картон, фанеру, оргстекло или, что не редкость сегодня, печатали на 3D-принтере?