Рекламное объявление
Вы можете делать все что угодно с помощью мигающих светодиодов, и в этом простом проекте мы создадим небольшое устройство, которое подсвечивает сообщения в воздухе, когда вы махаете им взад-вперед. Это проще, чем вы думаете, а общая стоимость деталей составляет менее 5 долларов.
Этот проект использует оптическую иллюзию, называемую постоянством зрения, чтобы текст появлялся в воздухе. Вы, вероятно, сталкивались с этим явлением, когда кто-то быстро перемещал зажженный бенгальский огонь ночью Мы будем использовать Arduino и некоторые светодиоды, чтобы имитировать этот эффект. Этот проект прост в сборке, с несколькими компонентами и небольшой пайкой (хотя, если вам нужны советы по началу работы с паяльником, ознакомьтесь с это руководство Узнайте, как паять, с помощью этих простых советов и проектовВас немного пугает мысль о раскаленном железе и расплавленном металле? Если вы хотите начать работать с электроникой, вам нужно научиться паять. Позвольте нам помочь. Подробнее ).
Тебе понадобится
- Arduino (я использовал Nano за 2 доллара, потому что он компактный и дешевый, но любая модель должна подойти).
- 5x Красные светодиоды.
- 5x Резисторы 220 Ом.
- 1x Держатель батареи 9v.
- 1x Кулисный переключатель.
- 1x часть прототипа.
- Корпус для готового продукта (я использовал небольшую картонную коробку, окрашенную в черный цвет).
Вам также понадобится паяльник и немного припоя, чтобы соединить все это.
Хотя это и необязательно, некоторые паяльные фитили могут оказаться очень полезными в случае ошибок пайки. Макет и некоторые соединительные провода также полезны для проверки вашей схемы.

электропроводка
Проводка не может быть проще. Сначала подключите Arduino, светодиоды и резисторы, как показано на этой схеме.

Контакты D2-D6 подключаются к каждому резистору, соответственно, которые присоединены к положительному аноду (длинной ветви) каждого светодиода. Катод соединен с землей, которая соединяется с Arduino. Когда это будет сделано, это должно выглядеть примерно так:

Вот и все: наша схема готова! Мы добавим корпус батареи и переключатель к нему позже, но это все, что нам нужно, чтобы проверить, работает ли он.
Код
Теперь подключите Arduino к компьютеру и откройте Arduino IDE. Если вы новичок в использовании Arduino и хотите хорошее руководство по началу работы, эта ссылка Начало работы с Arduino: руководство для начинающихArduino - это платформа для прототипирования электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении. Он предназначен для художников, дизайнеров, любителей и всех, кто заинтересован в создании интерактивных объектов или сред. Подробнее будет полезно.
Откройте новый эскиз и скопируйте этот код в. Код был изменен с этот проект и вы можете скачать его полностью в этом Гисте.
// как долго работает каждый светодиод int delayTime = 1; // как долго между каждым int charBreak = 3; // как долго ждать, пока сообщение закончится, прежде чем оно повторится. int resetTime = 20; int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; void setup () { pinMode (LED1, OUTPUT); pinMode (LED2, OUTPUT); pinMode (LED3, OUTPUT); pinMode (LED4, ВЫХОД); pinMode (LED5, OUTPUT); } int a [] = {1, 6, 26, 6, 1}; int b [] = {31, 21, 21, 10, 0}; int c2 [] = {14, 17, 17, 10, 0}; int d [] = {31, 17, 17, 14, 0}; int e [] = {31, 21, 21, 17, 0}; int f [] = {31, 20, 20, 16, 0}; int g [] = {14, 17, 19, 10, 0}; int h [] = {31, 4, 4, 4, 31}; int i [] = {0, 17, 31, 17, 0}; int j [] = {0, 17, 30, 16, 0}; int k [] = {31, 4, 10, 17, 0}; int l [] = {31, 1, 1, 1, 0}; int m [] = {31, 12, 3, 12, 31}; int n [] = {31, 12, 3, 31, 0}; int o [] = {14, 17, 17, 14, 0}; int p [] = {31, 20, 20, 8, 0}; int q [] = {14, 17, 19, 14, 2}; int r [] = {31, 20, 22, 9, 0}; int s [] = {8, 21, 21, 2, 0}; int t [] = {16, 16, 31, 16, 16}; int u [] = {30, 1, 1, 30, 0}; int v [] = {24, 6, 1, 6, 24}; int w [] = {28, 3, 12, 3, 28}; int x [] = {17, 10, 4, 10, 17}; int y [] = {17, 10, 4, 8, 16}; int z [] = {19, 21, 21, 25, 0}; int eos [] = {0, 1, 0, 0, 0}; int excl [] = {0, 29, 0, 0, 0}; int Ques [] = {8, 19, 20, 8, 0}; int space [] = {0, 0, 0, 0, 0}; void displayLine (int line) { int myline; myline = линия; if (myline> = 16) {digitalWrite (LED1, HIGH); myline- = 16;} else {digitalWrite (LED1, LOW);} if (myline> = 8) {digitalWrite (LED2, HIGH); myline- = 8;} else {digitalWrite (LED2, LOW);} if (myline> = 4) {digitalWrite (LED3, HIGH); myline- = 4;} else {digitalWrite (LED3, LOW);} if (myline> = 2) {digitalWrite (LED4, HIGH); myline- = 2;} else {digitalWrite (LED4, LOW);} if (myline> = 1) {digitalWrite (LED5, HIGH); myline- = 1;} else {digitalWrite (LED5, LOW);} } void displayChar (char c) { if (c == 'a') {for (int i = 0; я <5; i ++) {displayLine (a [i]); задержка (delayTime);} displayLine (0);} if (c == 'b') {for (int i = 0; я <5; i ++) {displayLine (b [i]); задержка (delayTime);} displayLine (0);} if (c == 'c2') {for (int i = 0; я <5; i ++) {displayLine (c2 [i]); задержка (delayTime);} displayLine (0);} if (c == 'd') {for (int i = 0; я <5; i ++) {displayLine (d [i]); задержка (delayTime);} displayLine (0);} if (c == 'e') {for (int i = 0; я <5; i ++) {displayLine (e [i]); задержка (delayTime);} displayLine (0);} if (c == 'f') {for (int i = 0; я <5; i ++) {displayLine (f [i]); задержка (delayTime);} displayLine (0);} if (c == 'g') {for (int i = 0; я <5; i ++) {displayLine (g [i]); задержка (delayTime);} displayLine (0);} if (c == 'h') {for (int i = 0; я <5; i ++) {displayLine (h [i]); задержка (delayTime);} displayLine (0);} if (c == 'i') {for (int it = 0; это <5; это ++) {displayLine (i [it]); задержка (delayTime);} displayLine (0);} if (c == 'j') {for (int i = 0; я <5; i ++) {displayLine (j [i]); задержка (delayTime);} displayLine (0);} if (c == 'k') {for (int i = 0; я <5; i ++) {displayLine (k [i]); задержка (delayTime);} displayLine (0);} if (c == 'l') {for (int i = 0; я <5; i ++) {displayLine (l [i]); задержка (delayTime);} displayLine (0);} if (c == 'm') {for (int i = 0; я <5; i ++) {displayLine (m [i]); задержка (delayTime);} displayLine (0);} if (c == 'n') {for (int i = 0; я <5; i ++) {displayLine (n [i]); задержка (delayTime);} displayLine (0);} if (c == 'o') {for (int i = 0; я <5; i ++) {displayLine (o [i]); задержка (delayTime);} displayLine (0);} if (c == 'p') {for (int i = 0; я <5; i ++) {displayLine (p [i]); задержка (delayTime);} displayLine (0);} if (c == 'q') {for (int i = 0; я <5; i ++) {displayLine (q [i]); задержка (delayTime);} displayLine (0);} if (c == 'r') {for (int i = 0; я <5; i ++) {displayLine (r [i]); задержка (delayTime);} displayLine (0);} if (c == 's') {for (int i = 0; я <5; i ++) {displayLine (s [i]); задержка (delayTime);} displayLine (0);} if (c == 't') {for (int i = 0; я <5; i ++) {displayLine (t [i]); задержка (delayTime);} displayLine (0);} if (c == 'u') {for (int i = 0; я <5; i ++) {displayLine (u [i]); задержка (delayTime);} displayLine (0);} if (c == 'v') {for (int i = 0; я <5; i ++) {displayLine (v [i]); задержка (delayTime);} displayLine (0);} if (c == 'w') {for (int i = 0; я <5; i ++) {displayLine (w [i]); задержка (delayTime);} displayLine (0);} if (c == 'x') {for (int i = 0; я <5; i ++) {displayLine (x [i]); задержка (delayTime);} displayLine (0);} if (c == 'y') {for (int i = 0; я <5; i ++) {displayLine (y [i]); задержка (delayTime);} displayLine (0);} if (c == 'z') {for (int i = 0; я <5; i ++) {displayLine (z [i]); задержка (delayTime);} displayLine (0);} if (c == '!') {for (int i = 0; я <5; i ++) {displayLine (excl [i]); задержка (delayTime);} displayLine (0);} if (c == '?') {for (int i = 0; я <5; i ++) {displayLine (Ques [I]); задержка (delayTime);} displayLine (0);} if (c == '.') {for (int i = 0; я <5; i ++) {displayLine (eos [i]); задержка (delayTime);} displayLine (0);} if (c == '') {for (int i = 0; я <5; i ++) {displayLine (пробел [i]); задержка (delayTime);} displayLine (0);} задержка (charBreak); } void displayString (char * s) {for (int i = 0; я <= strlen (s); i ++) {displayChar (s [i]); } } void loop () {// Изменить текст внутри, чтобы изменить отображаемый текст. // Обязательно сохраните скобки и кавычки. DisplayString ( ".. привет ..."); задержка (40); }
Сохраните эскиз и загрузите его на свою доску. Если вы получаете какие-либо ошибки, убедитесь, что вы выбрали правильную плату и com-порт. Ваши светодиоды должны начать мерцать. Если они этого не делают, проверьте все свои соединения на макете. Целые числа, объявленные в начале кода, определяют, как быстро отображается текст. Чем выше число, тем быстрее вам придется махать устройством. Я обнаружил, что числа, используемые здесь, работали хорошо.
Теперь, чтобы сделать быстрый тест. Отключите Arduino от USB-кабеля и прикрепите держатель батареи к контактам VIN и GND вашего Arduino.

Теперь, когда вы можете перемещать его, осторожно попробуйте повернуть светодиоды перед собой. В воздухе должно появиться несколько букв, если вокруг вас достаточно темно. Я обнаружил, что это помогло настроить мой телефон, чтобы захватить это.

Оно работает! Теперь, чтобы сделать его немного более постоянным.
Утюги наготове!
Положите плату Arduino, резисторы и светодиоды на вашу плату таким образом:

Конечно, вы можете сделать макет настолько компактным, насколько пожелаете, если схема остается неизменной. Убедитесь, что вы оставляете по крайней мере по одной линии протокарты на каждой стороне вашего Arduino для компонентов и блока питания. Если вы новичок в электронике, вот некоторые отличные советы для вас Электроника для начинающих: 10 навыков, которые нужно знатьМногие из нас никогда даже не трогали паяльник - но изготовление вещей может невероятно выгодно. Вот десять самых базовых навыков самостоятельной электроники, которые помогут вам начать работу. Подробнее .
Мы будем паять светодиодные катоды вместе в линию, чтобы найти общий язык, так же, как мы это делали, когда делали наши Светодиодная матрица Обновите свой рождественский венок с помощью светодиодной матрицы Motion ActivatedЭтот рождественский венок "Сделай сам" использует матрицу Arduino и LED для создания удивительного дисплея с подсветкой, который поразит ваших друзей и семью. Подробнее .

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

Теперь повторим ту же задачу, но на этот раз подключив другой конец наших резисторов к ножкам Arduino. Это самая сложная часть пайки. Каждый резистор крепится к одному выводу Arduino, иначе схема не будет работать так, как это было задумано Я сделал несколько ошибок здесь и должен был использовать фитиль припоя, чтобы удалить нежелательный припой несколько раз.
После того, как вы сделали все правильные соединения, дважды проверьте, что ни один из них не пересекается со своими соседями. Если у вас есть доступ к мультиметру здесь, вы можете использовать режим непрерывности, чтобы проверить, что каждый вывод имеет только непрерывную линию к своему резистору. Если вы только что получили мультиметр, есть отличное руководство по началу работы в этой статье. 7 DIY технических навыков, чтобы учить своих детей, потому что школы не будут Подробнее

После того как вы проверили каждое соединение, отрежьте лишнюю длину от ножек резисторов.
Добавляя силы
Теперь протяните кусок провода от вывода GND вашего Arduino к отверстию рядом с местом, где заканчивается ваша линия припаянных катодов, и поместите черный провод вашего держателя батареи рядом с ним.

Теперь припаяйте провод к выводу GND, аналогично тому, как мы это делали с резисторами, и припаяйте оба провода к концу линии катодов, чтобы создать общее заземление для цепи.
Наконец, подключите провод к контакту VIN вашего Arduino и поместите переключатель между этим проводом и аккумулятором. Извиняюсь за выключатель с горячим клеем на этой фотографии, мне пришлось разобрать готовую машину, чтобы сфотографировать этот этап!

После того, как все спаяется, вставьте батарею и нажмите на переключатель. Поздравляем! Схема сделана. Если вы ничего не видите, внимательно проверьте каждый паяный шов, чтобы увидеть, где может произойти обрыв или короткое замыкание.
ограда
Теперь, когда это работает, давайте поместим это в коробку. Здесь использовалась окрашенная картонная коробка, хотя вы могли сделать что-то более постоянное, используя коробку, купленную в хобби-магазине, или даже старую коробку для посуды. Для дополнительной поддержки, вы можете даже напечатать свой собственный 3D на один из этих дешевых 3D-принтеров. 5 дешевых 3D-принтеров, которые вы можете купить сегодняНесколько лет назад даже самые дешевые 3D-принтеры были неудобно близки к отметке в 1000 долларов - теперь вы можете приобрести качественный 3D-принтер всего за 400 долларов. Подробнее
Сократите свой прототип до нужного размера, забив его и аккуратно снимая ненужные детали.

Поместите свою схему в корпус и отметьте, где должны пробиваться светодиоды и переключатель. При желании вы также можете отметить, где разъем USB на плате Arduino пересекается с краем, так что вы можете подключить его, чтобы изменить текст, не открывая коробку. Просверлите или прорежьте нужные отверстия в корпусе.

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

Работа выполнена!
Закройте свой корпус, и все готово! Чтобы изменить текст, подключите USB-кабель к плате Arduino и измените текст в скобках после DisplayString в петля метод. Найдите темное место и получайте удовольствие!

Вы уже создавали POV-машины и знаете, как улучшить дизайн? Планируете ли вы построить один самостоятельно? Расскажите нам о своем проекте в комментариях ниже, мы будем рады его услышать!
Ян Бакли - независимый журналист, музыкант, исполнитель и продюсер, живущий в Берлине, Германия. Когда он не пишет или не играет на сцене, он возится с электроникой или кодом «сделай сам» в надежде стать сумасшедшим ученым.