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

Затемнение света с ШИМ с помощью кнопки

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

Arduino Mega 2560
× 1
Макет (общий)
× 1
Перемычки (общие)
Используемое количество может отличаться в зависимости от используемого метода.
× 11
LED (общий)
Подойдут любые цвета, но я рекомендую 3 разных цвета.
× 3
Кнопочный переключатель SparkFun, 12 мм
× 1
Резистор 330 Ом
× 4

Приложения и онлайн-сервисы

IDE Arduino

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

В этом проекте показано, как уменьшить яркость светодиодов (светоизлучающих диодов) с помощью Arduino. Он разделен на 3 раздела:

  • Затухающие огни
  • Затухание света с помощью кнопки
  • Затухание света с помощью кнопки (улучшение задержки)

Затухающие огни:

В конце этого раздела ваш проект должен выглядеть так.

Как видите, огни светятся ярче, затем постепенно снова тускнеют в порядке светофора. А теперь приступим.

Схема:

Как видите, светодиоды подключены к контактам 3, 6 и 9. Вы можете подключить светодиоды к любому контакту, который вам нравится, но вы должны не забыть изменить это в коде после этого.

Код:

Для начала добавьте это в свой код. Он указывает, какие компоненты, в данном случае, какие светодиоды входят в какие контакты.

  int ledRed =9; int ledYellow =6; int ledGreen =3;  

Теперь в void setup () укажите, являются ли контакты входными или выходными.

  void setup () {pinMode (ledRed, ВЫХОД); pinMode (ledYellow, ВЫХОД); pinMode (ledGreen, ВЫХОД);}  

Наконец, добавьте следующее в void loop () функция. Он сообщает MCU, что делать.

  void loop () {// Это только угасание красного света - ledRed // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); задержка (30); } для (int i =255; i> =0; i--) {analogWrite (ledRed, i); задержка (30); }}  

Что здесь происходит, это то, что MCU проверяет, есть ли целое число 'i' ниже 255 или нет. Если это так, значение 'i' увеличивается на единицу. Процесс задерживается на 30 миллисекунд, затем перезапускается. После того, как значение 'i' равно или больше 255, он вычитается на единицу при каждой проверке. Когда значение достигает 0, процесс повторяется снова.

Однако, если вы хотите изменить время, необходимое для исчезновения, вам придется изменить все delay () функции до желаемой суммы. Это не очень эффективно. Чтобы упростить и ускорить работу при изменении задержки () раз добавьте это в начало кода.

  const int fade =30;  

Он устанавливает значение по умолчанию, в данном случае время по умолчанию. Теперь измените каждую задержку () значение в (исчезновение) . Вы можете назвать это как-нибудь, если хотите. В результате ваш delay () функции должны выглядеть так.

  задержка (затухание);  

И код должен выглядеть так:

  int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, ВЫХОД); pinMode (ledGreen, OUTPUT);} void loop () {// ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledRed, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledGreen, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); }}  

Затухание света с помощью кнопки:

После этого раздела вы сможете добавить кнопку в свой проект.

Как видите, светодиоды меняются только после того, как я нажму кнопку. А теперь приступим.

Схема:

Возможно, вы заметили, что все светодиоды находятся в одном месте, но есть дополнительная кнопка.

Код:

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

  int button =7;  

Теперь в void setup () функция, добавьте это, чтобы сообщить MCU, является ли кнопка вводом вывода.

  pinMode (кнопка, INPUT);  

Также добавьте это в функцию.

  digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, HIGH);  

Он устанавливает стартовый свет. На этот раз начальный индикатор горит зеленым, но вы можете изменить его на красный или желтый, если хотите.

Теперь в void loop () произошли большие изменения. функция. Все, что было в loop () заменен функцией fadeLights () (имя может быть другим, если хотите). В цикле () теперь должно быть:

  void loop () {if (digitalRead (button) ==HIGH) {задержка (15); // программный дребезг if (digitalRead (button) ==HIGH) {// если кнопка нажата, функция fadeLights (); // вызывается fadeLights}} else {digitalWrite (ledRed, LOW); // если кнопка не нажата, горит зеленый светодиод digitalWrite (ledYellow, LOW); // будут включены, а остальные - нет. digitalWrite (ledGreen, ВЫСОКИЙ); }}  

Как упоминалось ранее, void fadeLights () функция будет иметь то, что было в цикле.

  void fadeLights () {for (int i =255; i> =0; i--) {// начинается с зеленого, поэтому необходимо, чтобы зеленый цвет исчезал analogWrite (ledGreen, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledRed, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); задержка (затухание); }}  

Если ваш проект работает так же, как на видео, вы все сделали правильно. Если последовательность неправильная, проверьте:

  • правильно ли написан ваш код
  • если вы подключили светодиоды к правильным контактам

И если ваши огни не включаются, проверьте

  • если вы подключили светодиоды к правильным контактам
  • правильно ли вы подключили провода
  • правильно ли вы написали формулу

Затухание света с помощью кнопки (улучшение задержки):

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

Как вы можете видеть здесь, когда я отпускаю кнопку, светодиоды возвращаются к порядку по умолчанию:

Красный - ВЫКЛ

Желтый - ВЫКЛ

Зеленый - ВКЛ

Схема:

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

Код:

Мы больше ничего не добавляем, поэтому не нужно ничего добавлять в начало. Однако, поскольку мы меняем задержку, нам нужно удалить это.

  const int fade =10; // в этом больше нет необходимости  

Для setup () нечего менять функция. В void loop () , нам нужно добавить еще заявление.

  void loop () {if (digitalRead (button) ==HIGH) {задержка (15); если (digitalRead (кнопка) ==ВЫСОКИЙ) {fadeLights (); }} else {// добавляем сюда digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, ВЫСОКИЙ); }}  

Это означает, что когда кнопка не нажата, программа выходит из fadeLights () . и переходит к else оператор, который имеет порядок светодиодов по умолчанию. В отличие от ранее - раньше кнопка не проверялась один раз fadeLights () был вызван.

Теперь измените все delay () функции для этого:

  for (int y =0; y <1000; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }  

В каждом цикле микропроцессор проверяет кнопку. Если он выпущен, возврат будет вызвана команда для остановки fadeLights () . По моим оценкам, выполнение каждого цикла for может занять около 10 микросекунд, что означает, что нам нужно делать это много раз, чтобы добиться желаемой скорости.

Надеюсь, вам понравился этот урок, и удачи в вашем проекте.

Код

  • Затухающие огни
  • Затухание света с помощью кнопки
  • Затухание света с помощью кнопки (улучшение задержки)
Затухающие огни Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, ВЫХОД); pinMode (ledGreen, OUTPUT);} void loop () {// ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledRed, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledGreen, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); }} 
Затухание света с помощью кнопки Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, ВЫХОД); pinMode (ledGreen, ВЫХОД); pinMode (кнопка, ВВОД); digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, HIGH);} void loop () {if (digitalRead (button) ==HIGH) {задержка (15); если (digitalRead (кнопка) ==ВЫСОКИЙ) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, ВЫСОКИЙ); }} void fadeLights () {для (int i =255; i> =0; i--) {analogWrite (ledGreen, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledRed, i); задержка (затухание); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); задержка (затухание); } для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); задержка (затухание); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); задержка (затухание); }} 
Затухание света с помощью кнопки (улучшение задержки) Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, ВЫХОД); pinMode (ledGreen, ВЫХОД); pinMode (кнопка, ВВОД); digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, HIGH);} void loop () {if (digitalRead (button) ==HIGH) {задержка (15); если (digitalRead (кнопка) ==ВЫСОКИЙ) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, НИЗКИЙ); digitalWrite (ledGreen, ВЫСОКИЙ); }} void fadeLights () {для (int i =255; i> =0; i--) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} для (int i =255; i> =0; i--) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} для (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}} // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// если кнопка отпущена if (digitalRead (button) ==LOW) {return; }}}} 

Схема


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

  1. Игра с гироскопом Arduino с MPU-6050
  2. Система посещаемости с использованием Arduino и RFID с Python
  3. Датчик DHT11 со светодиодами и пьезо-динамиком
  4. Ультразвуковой левитационный аппарат с использованием ARDUINO
  5. Unopad - MIDI-контроллер Arduino с Ableton
  6. Автоматическая система полива растений с Arduino
  7. Простой датчик препятствий с Arduino
  8. Найди меня
  9. Как измерить массу Земли с помощью Arduino
  10. 4-контактный ШИМ-контроль вентилятора, 25 кГц, с Arduino Uno