Реклама
Вы когда-нибудь хотели, чтобы у вас был собственный автомобиль Knight Industries «Две тысячи» (KITT) - вы знаете, от Knight Rider? Сделайте свою мечту на шаг ближе к реальности, создав светодиодный сканер! Вот конечный результат:
Что вам нужно
Для этого проекта не нужно много деталей, и их может быть много:
- 1 х Arduino UNO или аналогичный
- 1 х макет
- 8 х красных светодиодов
- 8 х 220 Ом резисторы
- 1 х 10 кОм потенциометр
- Мужчина к мужчине подключить провода
Если у вас есть Arduino стартовый набор Что входит в стартовый комплект Arduino? [MakeUseOf Объясняет]Ранее я представил оборудование Arduino с открытым исходным кодом здесь, в MakeUseOf, но вам понадобится нечто большее, чем просто Arduino, чтобы что-то из него построить и начать работу. Arduino "стартовые комплекты" ... Прочитайте больше вероятно, у вас есть все эти части (что можно сделать с помощью стартового набора? 5 уникальных проектов Arduino для начинающих, которые вы можете сделать с помощью только стартового комплекта Прочитайте больше ).
Почти любой Arduino будет работать, если он имеет восемь доступных контактов (Никогда не использовал Arduino раньше? Начните здесь Начало работы с Arduino: руководство для начинающихArduino - это платформа для создания прототипов электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении. Он предназначен для художников, дизайнеров, любителей и всех, кто заинтересован в создании интерактивных объектов или сред. Прочитайте больше ). Вы могли бы использовать сдвиговый регистр Программирование Arduino - игра с регистрами сдвига (еще больше светодиодов)Сегодня я попытаюсь немного рассказать вам о регистрах сдвига. Это довольно важная часть программирования Arduino, в основном потому, что они расширяют число выходов, которые вы можете использовать в обмен на ... Прочитайте больше для управления светодиодами, хотя это не нужно для этого проекта, так как Arduino имеет достаточно контактов.
План строительства
Это очень простой проект. Хотя это может выглядеть сложно из-за большого количества проводов, каждая отдельная часть очень проста. Каждый светодиод (LED) подключен к собственному выводу Arduino. Это означает, что каждый светодиод можно включать и выключать по отдельности. Потенциометр подключен к аналоговому Arduino в контактах, которые будут использоваться для регулировки скорости сканера.
Схема
Подсоедините внешний левый штырь (если смотреть спереди, штыри внизу) потенциометра к земле. Подключите противоположный внешний контакт к + 5v. Если это не работает должным образом, поменяйте местами эти контакты. Подключите средний вывод к аналогу Arduino через 2.
Подключите анод (длинную ножку) каждого светодиода к цифровым контактам с первого по восьмой. Подсоедините катоды (короткие ножки) к заземлению Arduino.
Код
Создайте новый эскиз и сохраните его как «knightRider». Вот код:
const int leds [] = {1,2,3,4,5,6,7,8}; // Светодиодные пины. const int totalLeds = 8; int time = 50; // Скорость по умолчанию void setup () {// Инициализировать все выходы для (int i = 0; я <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Сканирование справа налево time = analogRead (2); digitalWrite (leds [i], HIGH); время задержки); digitalWrite (светодиоды [i - 1], HIGH); время задержки); digitalWrite (светодиоды [i], LOW); } }
Давайте разберемся с этим. Каждый светодиодный вывод хранится в массиве:
const int leds [] = {1,2,3,4,5,6,7,8};
Массив - это, по сути, коллекция связанных элементов. Эти элементы определены как константы («const»), что означает, что они не могут быть изменены позже. Вам не нужно использовать константу (код будет отлично работать, если вы удалите «const»), хотя это рекомендуется.
Доступ к элементам массива осуществляется с помощью квадратных скобок («[]») и целого числа, называемого индексом. Индексы начинаются с нуля, поэтому «leds [2]» вернет третий элемент в массиве - контакт 3. Массивы делают код более быстрым для написания и чтения, они заставляют компьютер выполнять тяжелую работу!
Цикл for используется для настройки каждого вывода в качестве выхода:
для (int i = 0; я <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
Этот код находится внутри функции «setup ()», так как его нужно запускать только один раз при запуске программы. Для петель очень полезны. Они позволяют запускать один и тот же код снова и снова, каждый раз с разными значениями. Они идеально подходят для работы с массивами. Объявляется целое число «i», и только код внутри цикла может получить доступ к этой переменной (это известно как «область действия»). Значение i начинается с нуля, и для каждой итерации цикла i увеличивается на единицу. Когда значение i меньше или равно переменной «totalLeds», цикл «прерывается» (останавливается).
Значение i используется для доступа к массиву «leds». Этот цикл обращается к каждому элементу в массиве и настраивает его как выходной. Вы можете вручную ввести «pinMode (pin, OUTPUT)» восемь раз, но зачем писать восемь строк, когда можно написать три?
В то время как некоторые языки программирования могут сообщать вам, сколько элементов в массиве (обычно с синтаксисом, например, array.length), Arduino не делает его таким простым (он включает в себя немного больше математики). Поскольку количество элементов в массиве уже известно, это не проблема.
Внутри основной петли (void loop ()) еще два для петель. Сначала светодиоды включаются, а затем выключаются от 1 до 8. Второй цикл устанавливает светодиоды ВКЛ, а затем ВЫКЛ от 8 до 1. Обратите внимание, как установлен текущий вывод, а также включен текущий вывод плюс один. Это гарантирует, что всегда есть два светодиода одновременно, что делает сканер более реалистичным.
В начале каждого цикла значение банка считывается в переменную «время»:
время = аналоговыйЧитать (2);
Это делается дважды, один раз внутри каждого цикла. Это нужно постоянно проверять и обновлять. Если бы это было за пределами циклов, оно все равно работало бы, однако была бы небольшая задержка - он работал бы только после завершения цикла. Горшки являются аналоговыми, поэтому используется «analogRead (pin)». Это возвращает значения от нуля (минимум) до 1023 (максимум). Arduino способен преобразовывать эти значения во что-то более полезное, однако они идеально подходят для этого варианта использования.
Задержка между сменой светодиодов (или скоростью сканера) устанавливается в миллисекундах (1/1000 секунды), поэтому максимальное время составляет чуть более 1 секунды.
Расширенный сканер
Теперь, когда вы знаете основы, давайте рассмотрим что-то более сложное. Этот сканер будет зажигать светодиоды попарно, начиная снаружи и работая внутри. Затем он обратит это и пойдет изнутри наружу пар. Вот код:
const int leds [] = {1,2,3,4,5,6,7,8}; // Светодиодные пины. const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Скорость по умолчанию void setup () {// Инициализировать все выходы для (int i = 0; я <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; я 0; --i) {// Сканирование внутренних пар out time = analogRead (2); digitalWrite (leds [i], HIGH); digitalWrite (светодиоды [(totalLeds - i) - 1], HIGH); время задержки); digitalWrite (светодиоды [i], LOW); digitalWrite (светодиоды [(totalLeds - i) - 1], LOW); время задержки); } }
Этот код немного сложнее. Обратите внимание, как оба цикла идут от нуля до «halfLeds - 1» (3). Это делает сканер лучше. Если бы оба шлейфа выходили из 4 - 0 и 0 - 4, то одни и те же светодиоды мигали бы дважды в одной и той же последовательности - это выглядело бы не очень хорошо.
Теперь вы должны иметь работающий светодиодный сканер Knight Rider! Было бы легко изменить это, чтобы использовать больше или больше светодиодов, или реализовать свой собственный шаблон. Эта схема очень легко портировать на Raspberry Pi (новичок в Пи? Начни здесь Raspberry Pi: неофициальный урокЕсли вы являетесь нынешним владельцем Pi, который хочет узнать больше или потенциальным владельцем этого устройства размером с кредитную карту, это руководство не для вас. Прочитайте больше ) или ESP8266 Встречайте убийцу Ардуино: ESP8266Что если я скажу вам, что есть Arduino-совместимая dev-плата со встроенным Wi-Fi менее чем за 10 долларов? Ну, есть. Прочитайте больше .
Вы строите реплику KITT? Мне бы очень хотелось увидеть все комментарии Knight Rider в комментариях.
Джо - выпускник факультета компьютерных наук Университета Линкольна, Великобритания. Он профессиональный разработчик программного обеспечения, и когда он не летает на дронах и не пишет музыку, его часто можно встретить, фотографируя или снимая видео.