Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Государственный гимн США с подсветкой и звуком

Компоненты и расходные материалы

Arduino Nano R3
Имейте в виду, что у него 4 разных процессора, я использую 328P (старый загрузчик)
× 1
Зуммер
Подойдет любой старый зуммер. Я использовал зуммер на 16 Ом.
× 1
Кнопочный переключатель SparkFun, 12 мм
Не совсем тот, который я использовал, но мой был 6x6x6 мм
× 2
Кулисный переключатель 250 В, 3 А
Подойдет любой выключатель питания. Я использовал корпус на 9 В с переключателем, но он спрятан в моем корпусе, поэтому я добавил переключатель снаружи. Просто ищите любой кулисный переключатель.
× 1
Резистор 330 Ом
Подойдет любой резистор, но он произведет расчет светодиодов и убедитесь, что вы не перешли через светодиодный выход или Не более 40 мА на контакт Nano. 330 Ом - стандартное значение для любого стартового пакета Arduino.
× 3
LED (общий)
6 светодиодов или сколько угодно. 2 красных, 2 белых и 2 синих. Красный светодиод, который я использовал, был 2,2 В, а остальные 3,2 В каждый светодиод. Дает 9,7 мА и 6,7 мА при сопротивлении 330 Ом. (помните, я использую 2 на выход, поэтому ~ 13 мА и ~ 20 мА, что составляет половину максимального выходного тока вывода)
× 6
Макетная плата SparkFun с возможностью пайки - мини
Подойдет любая макетная плата, припаяйте или не припаяйте, как вам кажется. Или вы можете обойтись без него, просто просверлив отверстия и дерево и склеив детали на месте.
× 1
Батарея 9 В (стандартная)
множество вариантов включения. Я использовал батарею на 9 вольт с футляром и выключателем. Вы можете использовать только USB-кабель или даже 4 батарейных блока AA, если вы соответствуете требованиям Nano входа. Сожалею, что заплатил лишние деньги за тот, у которого был переключатель включения / выключения, поскольку я использовал отдельный переключатель.
× 1

Необходимые инструменты и машины

Паяльник (универсальный)
На ваше усмотрение, если вы хотите паять

Об этом проекте

В прошлом году я начал программировать будущий рождественский свет и музыкальный проект. Это побочный проект, который кто-то попросил меня сделать и подумал, что это будет весело. Изначально это должна была быть одна песня с подсветкой, но это просто отстой.

Вот ссылка на случай, если у вас возникли проблемы с видео:

https://youtu.be/C2jyn80Mjus

В этом проекте используется Arduino Nano. В этом проекте я использую две разные кнопки для создания двух разных песен с помощью функции Tone (). Один из них - звук «зарядки», а другой - «Государственный гимн США». Пока кнопки не нажаты, он дает просто случайное освещение для эффектов.

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

Моя цель публикации этого проекта - поделиться некоторыми вещами, которые я узнал в дизайне / кодировании, чтобы, если вы делаете что-то подобное, это могло помочь.

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

Вот как устроена система питания. Я выбираю батарею на 9 В по размеру и не зависящую от сети USB или питания компьютера.

Вот как это выглядит после того, как все пропаяно изнутри. Настоятельно рекомендую паять только верхнюю крышку, а затем добавлять стороны позже

Код

  • USA_ANTHEM_Updated.ino
USA_ANTHEM_Updated.ino Arduino
Баннер со звездами со светодиодами, зарядкой, звуком, всеми функциями. Просто скопируйте и вставьте.
 / * Баннер со звездами и светодиодами Создано Райаном Эби, июнь 2018 г. Структура кода - Базовая петля для ссылки на другие функции целое число для частоты (Гц) и длительности (время в n) -Светодиодный индикатор выбирается мной полуслучайно при написании функции -Функция построена для увеличения высоты тона при каждом воспроизведении (сбрасывается до нормальной высоты тона при запуске / аппаратном сбросе) -Pitch рассчитано как 1/12 от целого или 0,06 Дизайн кнопок / разводка-3 набора светодиодов красного, синего и зеленого на каждом канале, включая 2 из каждого параллельно. -Внешняя кнопка сброса-кнопка запуска для песни-прерывание песни для зарядки * /// ********************************************** *************** Объявленные целые числа const int ChargeButton =3; // (Nano D3) вывод uno 2 должен быть выводом прерывания const int StartButton =5; // (Nano D5) uno pin 4 const int BuzzerPin =9; // (Nano D9) uno pin 9 const int RedLED =6; // (Nano D6) uno pin 6 const int WhiteLED =7; // (Nano D7) uno pin 7 const int BlueLED =8; // (Nano D8) uno pin 8 int n =1000; // объявляя целое число, это значение будет меняться с каждой песней int DurationOn =n; // объявление целого числа в дальнейшем будет использоваться в статистических вычислениях int DurationRest =n; // объявление целого числа в дальнейшем будет использоваться в вычислениях stacatto // сумма x и y должна быть 1 У меня есть другие примечания по этому поводу позже float x =.66; // объявление числа с плавающей запятой на время с плавающей запятой y =.34; // объявление числа с плавающей запятой для времени выключения // скорость, с которой индикаторы случайным образом мигают во время ожидания кнопки input int Twinkle_Rate =250; // обратите внимание, что при резком увеличении кнопки могут не реагировать в 100% случаев // более низкая частота мерцания улучшает реакцию на нажатие кнопки // устанавливает целые числа для состояний кнопки int StartButtonState; int ChargeButtonState; // обратите внимание, середина C - 4C (квартиры B и квартиры E) int Note1 =233; // 3Bb 233 Гц int Note2 =294; // 4D 294 Гц int Note3 =330; // 4E 330 Гц int Note4 =349; // 4F 349 Гц int Note5 =392; // 4G 392 Гц int Note6 =440; // 4A 440 Гц int Note7 =466; // 4Bb 466 Гц int Note8 =523; // 5C 523 Гц int Note9 =587; // 5D 587 Гц int Note10 =622; // 5Eb 622Hz int Note11 =698; // 5F 698 Гц // ******************************************* ****************** Функция заряда / заряд Songvoid () {n =600; // скорость, с которой исполняется песня // Формат:запись штифта (ов), тон с определенной частотой (таким образом, он не подлежит // изменениям в конце национального гимна, подробнее об этом позже), задержка на то же время, что и тон для синхронизации музыки, // запись выключенных контактов и задержка для отдыха digitalWrite (RedLED, HIGH); тон (BuzzerPin, 392, н / 3); задержка (n / 3); digitalWrite (RedLED, LOW); задержка (70); digitalWrite (WhiteLED, HIGH); тон (BuzzerPin, 523, н / 3); задержка (n / 3); digitalWrite (WhiteLED, LOW); задержка (70); digitalWrite (BlueLED, HIGH); тон (BuzzerPin, 659, н / 3); задержка (n / 3); digitalWrite (синий светодиод, НИЗКИЙ); задержка (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); тон (BuzzerPin, 784, n * 3/4); задержка (n * 3/4); digitalWrite (синий светодиод, НИЗКИЙ); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); задержка (70); digitalWrite (BlueLED, HIGH); тон (BuzzerPin, 659, н / 4); задержка (n / 4); digitalWrite (синий светодиод, НИЗКИЙ); задержка (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); тон (BuzzerPin, 784, n * 2); задержка (n * 2); digitalWrite (синий светодиод, НИЗКИЙ); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); delay (70);} // ***************************************** ******************** Функция SingleDWvoid SingleDWwithNote (int HZ, int TurnOn, int Duration, int Staccato) {// Герцы, в которых находится нота (см. Примечание №) / / Turn on =pin (красный / белый / синий светодиод), который будет настроен // продолжительность - это сколько времени // Staccato 1 =yes, 0 =no приводит к слегка укороченной ноте, или высокое значение int x как просто короткая пауза if (Staccato ==1) {DurationOn =Duration * x;} // как долго светятся звуковые сигналы и индикаторы - это DurationShort else if (Staccato ==0) {DurationOn =Duration;} digitalWrite (TurnOn, HIGH); тон (BuzzerPin, HZ, DurationOn); задержка (DurationOn); digitalWrite (TurnOn, LOW); if (Staccato ==1) {DurationRest =Продолжительность * y; задержка (DurationRest); }} // ******************************************** **************** Функция национального гимна США / Songvoid USNationalAnthem () {n =577; // скорость, с которой воспроизводится звук, рассчитывается из:60 000 (мс / коэффициент ударов в минуту) / 104 ударов в минуту =577 мс / * значение четверти составляет n половинное значение в n * 2 восьмых нотах это n / 2 восьмерки с точками - n * 3 / 4 * / // целые числа x и y предназначены для стаккато / добавления паузы после примечания // обратите внимание, что x + y должен =1 или int. n rate будет сброшен // уменьшите x и увеличьте y, чтобы ноты были более четкими и резкими / приподнятыми x =.92; // истинное стаккато составляет примерно 1/2 или 2/3 значения, поэтому значение x от 0,5 до 0,7 для истинного стаккато y =.08; //1.00-.92(x value) =.08 // бары 1-5, строки 1 SingleDWwithNote (Note4, RedLED, n * 3/4, 1); SingleDWwithNote (Note2, WhiteLED, n / 4, 1); SingleDWwithNote (Примечание1, RedLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Note4, RedLED, n, 1); SingleDWwithNote (Note7, WhiteLED, n * 2, 1); SingleDWwithNote (Note9, BlueLED, n * 3/4, 1); SingleDWwithNote (Note8, WhiteLED, n / 4, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Note3, BlueLED, n, 1); SingleDWwithNote (Note4, RedLED, n * 2, 1); SingleDWwithNote (Note4, RedLED, n / 2, 1); SingleDWwithNote (Note4, RedLED, n / 2, 1); // bar6-9 строка 2 SingleDWwithNote (Note9, BlueLED, n * 3/2, 1); SingleDWwithNote (Note8, WhiteLED, n / 2, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note6, BlueLED, n * 2, 1); SingleDWwithNote (Note5, WhiteLED, n / 2, 1); SingleDWwithNote (Note6, BlueLED, n / 2, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note4, BlueLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Note1, BlueLED, n, 1); SingleDWwithNote (Note4, RedLED, n * 3/4, 1); SingleDWwithNote (Note2, WhiteLED, n / 4, 1); // 10-13 баров, строка 3 SingleDWwithNote (Note1, RedLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Note4, RedLED, n, 1); SingleDWwithNote (Note7, WhiteLED, n * 2, 1); SingleDWwithNote (Note9, BlueLED, n * 3/4, 1); SingleDWwithNote (Note8, WhiteLED, n / 4, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Note3, BlueLED, n, 1); SingleDWwithNote (Note4, RedLED, n * 2, 1); SingleDWwithNote (Note4, RedLED, n / 2, 1); SingleDWwithNote (Note4, RedLED, n / 2, 1); // такт 14-17, строка 4, конец страницы 1 SingleDWwithNote (Note9, BlueLED, n * 3/2, 1); SingleDWwithNote (Note8, WhiteLED, n / 2, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note6, BlueLED, n * 2, 1); SingleDWwithNote (Note5, WhiteLED, n / 2, 1); SingleDWwithNote (Note6, BlueLED, n / 2, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note4, BlueLED, n, 1); SingleDWwithNote (Note2, WhiteLED, n, 1); SingleDWwithNote (Примечание1, RedLED, n, 1); SingleDWwithNote (Note9, BlueLED, n / 2, 1); SingleDWwithNote (Note9, BlueLED, n / 2, 1); // столбцы 18–21, строка 5, начало страницы 2 SingleDWwithNote (Note9, BlueLED, n, 1); SingleDWwithNote (Note10, RedLED, n, 1); SingleDWwithNote (Note11, WhiteLED, n, 1); SingleDWwithNote (Note11, WhiteLED, n * 2, 1); SingleDWwithNote (Note10, RedLED, n / 2, 1); SingleDWwithNote (Note9, BlueLED, n / 2, 1); SingleDWwithNote (Note8, WhiteLED, n, 1); SingleDWwithNote (Note9, BlueLED, n, 1); SingleDWwithNote (Note10, RedLED, n, 1); SingleDWwithNote (Note10, RedLED, n * 2, 1); SingleDWwithNote (Note10, RedLED, n, 1); // бары 22-25, строка 6 SingleDWwithNote (Note9, WhiteLED, n * 3/2, 1); SingleDWwithNote (Note8, BlueLED, n / 2, 1); SingleDWwithNote (Note7, WhiteLED, n, 1); SingleDWwithNote (Note6, RedLED, n * 2, 1); SingleDWwithNote (Note5, BlueLED, n / 2, 1); SingleDWwithNote (Note6, RedLED, n / 2, 1); SingleDWwithNote (Note7, WhiteLED, n, 1); SingleDWwithNote (Note2, BlueLED, n, 1); SingleDWwithNote (Note3, RedLED, n, 1); SingleDWwithNote (Note4, WhiteLED, n * 2, 1); SingleDWwithNote (Note4, RedLED, n, 1); n =n * 1,08; // 60 000/96 ударов в минуту =625 мс; просто небольшое отставание // столбцы 26-28, строка 7 SingleDWwithNote (Note7, WhiteLED, n, 1); SingleDWwithNote (Note7, WhiteLED, n, 1); SingleDWwithNote (Note7, WhiteLED, n / 2, 1); SingleDWwithNote (Note6, BlueLED, n / 2, 1); SingleDWwithNote (Note5, RedLED, n, 1); SingleDWwithNote (Note5, RedLED, n, 1); SingleDWwithNote (Note5, RedLED, n, 1); SingleDWwithNote (Note8, WhiteLED, n, 1); SingleDWwithNote (Note10, RedLED, n / 2, 1); SingleDWwithNote (Note9, BlueLED, n / 2, 1); SingleDWwithNote (Note8, WhiteLED, n / 2, 1); SingleDWwithNote (Note7, RedLED, n / 2, 1); // бары 29-30 SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note6, BlueLED, n * 2, 1); // 2x для удержания SingleDWwithNote (Note4, RedLED, n / 2, 1); SingleDWwithNote (Note4, RedLED, n / 2, 1); SingleDWwithNote (Note7, BlueLED, n * 3/2, 1); SingleDWwithNote (Note8, WhiteLED, n / 2, 1); SingleDWwithNote (Note9, BlueLED, n / 2, 1); SingleDWwithNote (Note10, RedLED, n / 2, 1); п =п * 1,2; // большая задержка // такты 31-34 конец песни SingleDWwithNote (Note11, WhiteLED, n * 2, 1); // дополнительное удержание свободного SingleDWwithNote (Note7, RedLED, n / 2, 1); SingleDWwithNote (Note8, WhiteLED, n / 2, 1); SingleDWwithNote (Note9, BlueLED, n * 3/2, 1); SingleDWwithNote (Note10, RedLED, n / 2, 1); SingleDWwithNote (Note8, WhiteLED, n, 1); SingleDWwithNote (Note7, RedLED, n * 3, 1); // удерживает только 3 значения // разбивает все ноты на 3 шага //1,06, полученное из теории музыки. Сделайте заметку в герцах, а затем разделите на // примечание под ним (острые и плоские считаются как примечание) до 1,06 // Вы можете удалить следующий абзац, чтобы избежать изменений частоты, или изменить его, если хотите Note1 =Note1 * 1,06 * 1,06 * 1,06; Примечание2 =Примечание2 * 1,06 * 1,06 * 1,06; Note3 =Note3 * 1.06 * 1.06 * 1.06; Note4 =Note4 * 1.06 * 1.06 * 1.06; Note5 =Note5 * 1.06 * 1.06 * 1.06; Note6 =Note6 * 1.06 * 1.06 * 1.06; Note7 =Note7 * 1.06 * 1.06 * 1.06; Note8 =Note8 * 1.06 * 1.06 * 1.06; Note9 =Note9 * 1.06 * 1.06 * 1.06; Note10 =Note10 * 1.06 * 1.06 * 1.06; Note11 =Note11 * 1.06 * 1.06 * 1.06;} // ************************************ ************************* Twinkle void Twinkle (int Twinkle_Time) // Поместите число в (), чтобы показать, как долго происходит мерцание {// построено эта функция предназначена для другого использования, поэтому у нее есть причудливый начальный необязательный расчет // изменяет время и скорость на меньшее целое число, обратите внимание, что передняя часть раундов Twinkle_Time =Twinkle_Time / Twinkle_Rate; // в этом случае Tiwkle Time =to Twinkle Rate, поэтому значение равно 1 для (Twinkle_Time; Twinkle_Time> 0; Twinkle_Time--) // поскольку значение 1, обрабатывается только один раз {int B =random (1,4); // случайное целое число от 1, 2 или 3 int C =random (1,4); // случайное целое число 1, 2 или 3 // нет проблем, если оба целых числа одинаковы, только один светодиод загорается, добавляет к случайности // оценивает каждое целое число для запуска на определенном цвете светодиода if (B ==1) { digitalWrite (RedLED, HIGH);} if (B ==2) {digitalWrite (WhiteLED, HIGH);} if (B ==3) {digitalWrite (BlueLED, HIGH);} if (C ==1) {digitalWrite ( RedLED, HIGH);} if (C ==2) {digitalWrite (WhiteLED, HIGH);} if (C ==3) {digitalWrite (BlueLED, HIGH);} delay (Twinkle_Rate); // светодиод остается включенным в течение устанавливаем период времени // а затем записываем соответствующие светодиоды в низкий уровень. холодно, возможно, упростите и просто запишите все 3 младших, что может ускорить синхронизацию if (B ==1) {digitalWrite (RedLED, LOW);} if (B ==2) {digitalWrite (WhiteLED, LOW);} if (B ==3) {digitalWrite (BlueLED, LOW);} if (C ==1) {digitalWrite (RedLED, LOW);} if (C ==2) {digitalWrite (WhiteLED, LOW);} if (C ==3) {digitalWrite (BlueLED, LOW);}}} // ************************************ ************************ Setupvoid setup () {pinMode (ChargeButton, INPUT_PULLUP); // вводит как вход и включает внутренний подтягивающий резистор для кнопки pinMode (StartButton, INPUT_PULLUP); // вводит как вход и включает внутренний подтягивающий резистор для кнопки pinMode (RedLED, OUTPUT); // светодиод настроен как выход pinMode (WhiteLED, OUTPUT); // светодиод настроен как выход pinMode (BlueLED, OUTPUT); // светодиод настроен как выход pinMode (BuzzerPin, OUTPUT); // Зуммер настроен как выход // digitalWrite (ChargeButton, HIGH); нет необходимости, поскольку он включен как подтяжка, это просто избыточный // digitalWrite (StartButton, HIGH); нет необходимости, так как он включен как подтягивающий, он просто избыточен // устанавливает все светодиоды в LOW, чтобы избежать ошибок. Для моего дизайна HIGH =ON, LOW =OFF digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); digitalWrite (синий светодиод, НИЗКИЙ); } // ********************************************* *************** Main Loopvoid loop () {// считывает состояния кнопок, контакты были подключены к внутреннему резистору, настроенному как высокий // контакты будут иметь низкий уровень при нажатии StartButtonState =digitalRead (StartButton); // низкий =нажатый ChargeButtonState =digitalRead (ChargeButton); // низкий =нажатый // сравнивает с целыми числами, чтобы выполнить 1-й функциональный вывод, который был зарегистрирован как низкий // частота выборки для чтения кнопок - int twinkle_rate (0,25 секунды) if (StartButtonState ==LOW) {USNationalAnthem ();} else if (ChargeButtonState ==LOW) {Charge ();} else {Twinkle (Twinkle_Rate);} // если контакты не нажаты, то светится! снова ... и снова ... и снова ...} 

Схема

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

Производственный процесс

  1. Схема с переключателем
  2. Праздничные огни
  3. Ткань с лосьоном
  4. Acceed:12-портовый гигабитный коммутатор с 4-мя портами SFP
  5. Мониторинг температуры с помощью Raspberry Pi
  6. Переключатель / светодиодная панель с Arduino для FS2020
  7. Оператор C++ Switch Case с ПРИМЕРОМ
  8. switch… case в C (оператор Switch в C) с примерами
  9. Оператор Java Switch-Case с примером
  10. Национальная сеть MEP ™ соединяется с миноритарными производителями