Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Atenuación de luces con PWM usando el botón pulsador

Componentes y suministros

Arduino Mega 2560
× 1
Breadboard (genérico)
× 1
Cables de puente (genéricos)
La cantidad que use puede diferir, depende del método que se use.
× 11
LED (genérico)
Cualquier color serviría, pero recomiendo 3 colores diferentes.
× 3
Interruptor de botón SparkFun de 12 mm
× 1
Resistencia de 330 ohmios
× 4

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Este proyecto le muestra cómo atenuar los LED (diodos emisores de luz) usando Arduino. Está dividido en 3 secciones:

  • Luces fundidas
  • Luces fundidas con botón pulsador
  • Fade Lights con botón (mejora para retrasar)

Atenuar luces:

Al final de esta sección, su proyecto debería verse así.

Como puede ver, las luces brillan más y luego gradualmente se vuelven más tenues en el orden de un semáforo. Ahora, comencemos.

El esquema:

Como puede ver, los LED están conectados en los pines 3, 6 y 9. Puede conectar los LED en el pin que desee, pero debe recordar cambiarlo en el código después.

El código:

Para comenzar, agregue esto a su código. Indica qué componentes, en este caso, qué LED van a qué pines.

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

Ahora, en la configuración vacía () función, indique si los pines son de entrada o de salida.

  void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, SALIDA);}  

Finalmente, agregue lo siguiente al bucle vacío () función. Le dice a la MCU qué hacer.

  void loop () {// Esto solo está apagando la luz roja - ledRed // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); retraso (30); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); retraso (30); }}  

Lo que está sucediendo aquí es que la MCU está verificando si el entero 'i' es menor que 255 o no. Si es así, el valor de 'i' aumenta en uno. El proceso se retrasa 30 milisegundos y luego se reinicia. Una vez que el valor de 'i' es igual o superior a 255, se resta en uno cada vez que se comprueba. Cuando el valor llega a 0, el proceso se vuelve a realizar.

Sin embargo, si quisiera cambiar el tiempo que tarda en desaparecer, tendría que cambiar todos los retardos () funciones a la cantidad que desee. Eso no es muy eficiente. Para hacer las cosas más fáciles y rápidas al querer cambiar el retraso () veces, agregue esto al comienzo de su código.

  const int fade =30;  

Lo que hace es establecer un valor predeterminado, en este caso, es un tiempo predeterminado. Ahora, cambie cada retraso () valor en (desvanecimiento) . Puede ponerle otro nombre si lo desea. Como resultado, su retraso () las funciones deberían verse así.

  delay (fade);  

Y el código debería verse así:

  int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT);} bucle vacío () {// ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledGreen para (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); }}  

Atenuar luces con botón pulsador:

Después de esta sección, podrá agregar un botón a su proyecto.

Como puede ver, los LED solo cambian después de presionar el botón. Ahora, comencemos.

El esquema:

Es posible que haya notado que todos los LED se mantienen en el mismo lugar, pero hay un botón adicional.

El código:

En primer lugar, debemos decirle a la MCU a qué pin se ha conectado el botón. Para hacer eso, agregue esto al comienzo de su código.

  int button =7;  

Ahora, en la configuración vacía () función, agregue esto para decirle a la MCU si el botón es Entrada de salida.

  pinMode (botón, ENTRADA);  

También agregue esto a la función.

  digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);  

Establece una luz de partida. Esta vez, el LED de inicio es verde, pero puede cambiarlo a rojo o amarillo si lo desea.

Ahora, hay un gran cambio en el bucle vacío () función. Todo lo que estaba en el bucle () ahora ha sido reemplazada por una función llamada fadeLights () (el nombre puede ser diferente si lo desea). En el bucle () ahora debería ser:

  void loop () {if (digitalRead (botón) ==HIGH) {delay (15); // software antirrebote if (digitalRead (button) ==HIGH) {// si se presiona el botón, la función fadeLights (); // fadeLights se llama}} else {digitalWrite (ledRed, LOW); // si el botón no está presionado, el LED verde es digitalWrite (ledYellow, LOW); // va a estar encendido y los demás no. digitalWrite (ledGreen, HIGH); }}  

Como se mencionó anteriormente, void fadeLights () la función va a tener lo que estaba en el bucle.

  void fadeLights () {for (int i =255; i> =0; i--) {// comienza en verde, por lo que necesita hacer que el verde se desvanezca analogWrite (ledGreen, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledGreen para (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); retraso (desvanecimiento); }}  

Si su proyecto funciona como el del video, lo ha hecho correctamente. Si la secuencia no es correcta, verifique:

  • si su código se ha escrito correctamente
  • si ha conectado los LED en los pines correctos

Y si sus luces no se encienden, verifique

  • si ha conectado los LED en los pines correctos
  • si ha conectado los cables correctamente
  • si ha escrito la fórmula correctamente

Atenuar luces con botón (mejora del retraso):

Como habrás notado, cuando suelto el botón, las luces siguen apagándose. Después de esta sección, podrá editar su código para que los LED solo se desvanezcan cuando se presiona el botón.

Como puede ver aquí, cuando suelto el botón, los LED vuelven al orden predeterminado de:

Rojo - APAGADO

Amarillo - APAGADO

Verde:ENCENDIDO

El esquema:

El esquema se mantiene igual, ya que no estamos agregando más componentes ni queremos que haga nada diferente, todavía queremos que los LED se apaguen.

El código:

No estamos agregando más cosas, por lo que no es necesario agregar nada al principio. Sin embargo, dado que estamos cambiando el retraso, debemos eliminarlo.

  const int fade =10; // ya no es necesario  

No hay nada que cambiar para la configuración () función. En el bucle vacío () , necesitamos agregar un más declaración.

  void loop () {if (digitalRead (botón) ==HIGH) {delay (15); if (digitalRead (botón) ==HIGH) {fadeLights (); }} else {// agréguelo aquí digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }}  

Esto significa que cuando no se presiona el botón, el programa sale de fadeLights () y va al más declaración que tiene el orden de LED predeterminado. A diferencia de antes, antes, el botón no se marcó una vez fadeLights () ha sido llamado.

Ahora, cambie todos los retrasos () funciones a esto:

  for (int y =0; y <1000; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }  

En cada bucle, el microprocesador comprobará el botón. Si se libera, la devolución Se llamará al comando para detener fadeLights () . Según mi estimación, cuando se ejecuta cada bucle for, probablemente demore unos 10 microsegundos, lo que significa que debemos hacerlo muchas veces para que tenga la velocidad que queremos.

Espero que hayas disfrutado de este tutorial y buena suerte con tu proyecto.

Código

  • Luces fundidas
  • Luces fundidas con botón pulsador
  • Atenuar las luces con botón pulsador (mejora el retraso)
Atenuar luces Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT);} bucle vacío () {// ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledGreen para (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); }} 
Atenuar luces con botón Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, SALIDA); pinMode (botón, ENTRADA); digitalWrite (ledRed, BAJO); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);} bucle vacío () {if (digitalRead (botón) ==HIGH) {retardo (15); if (digitalRead (botón) ==HIGH) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }} void fadeLights () {para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); retraso (desvanecimiento); } // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); retraso (desvanecimiento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); retraso (desvanecimiento); } // ledGreen para (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); retraso (desvanecimiento); }} 
Atenuación de luces con botón pulsador (mejora del retraso) Arduino
 int ledRed =9; int ledYellow =6; int ledGreen =3; int button =7; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, SALIDA); pinMode (botón, ENTRADA); digitalWrite (ledRed, BAJO); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);} bucle vacío () {if (digitalRead (botón) ==HIGH) {retardo (15); if (digitalRead (botón) ==HIGH) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }} void fadeLights () {para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} // ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} // ledYellow para (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}} // ledGreen para (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// si se suelta el botón if (digitalRead (button) ==LOW) {return; }}}} 

Esquemas


Proceso de manufactura

  1. Juego de giroscopio Arduino con MPU-6050
  2. Sistema de asistencia que usa Arduino y RFID con Python
  3. Sensor DHT11 con LED y altavoz piezoeléctrico
  4. Máquina de LEVITACIÓN ULTRASÓNICA usando ARDUINO
  5. Unopad - Controlador MIDI Arduino con Ableton
  6. Sistema de riego automático de plantas con Arduino
  7. Sensor de obstáculos simple con Arduino
  8. Encuéntrame
  9. Cómo medir la masa de la Tierra usando Arduino
  10. Sonda usando arduino y visualización en procesamiento IDE
  11. Control de ventilador PWM de 4 pines y 25 kHz con Arduino Uno