Luzes de dimerização com PWM usando o botão de ação
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 11 | |||
![]() |
| × | 3 | |||
![]() |
| × | 1 | |||
![]() |
| × | 4 |
Aplicativos e serviços online
![]() |
|
Sobre este projeto
Este projeto mostra como diminuir o brilho dos LEDs (diodos emissores de luz) usando o Arduino. Está dividido em 3 seções:
- Luzes desbotadas
- Luzes atenuadas com botão de pressão
- Luzes atenuadas com botão (melhoria para atraso)
Luzes desbotadas:
No final desta seção, seu projeto deve se parecer com isto.
Como você pode ver, as luzes brilham com mais intensidade e, em seguida, tornam-se gradualmente mais escuras na ordem de um semáforo. Agora, vamos começar.
O esquema:

Como você pode ver, os LEDs são conectados nos pinos 3, 6 e 9. Você pode conectar os LEDs em qualquer pino que desejar, mas você deve se lembrar de alterá-lo no código posteriormente.
O Código:
Para começar, adicione isso ao seu código. Ele indica quais componentes, neste caso, quais LEDs vão para quais pinos.
int ledRed =9; int ledYellow =6; int ledGreen =3;
Agora, na configuração vazia () função, indique se os pinos são de entrada ou saída.
void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT);}
Finalmente, adicione o seguinte ao loop void () função. Diz ao MCU o que fazer.
void loop () {// Isso está apenas apagando a luz vermelha - ledRed // ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); atraso (30); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); atraso (30); }}
O que está acontecendo aqui é que o MCU está verificando se o inteiro 'i' é inferior a 255 ou não. Se for, o valor de 'i' é aumentado em um. O processo demora 30 milissegundos e, a seguir, é reiniciado. Uma vez que o valor de 'i' for igual ou superior a 255, é subtraído por um cada vez que for verificado. Quando o valor atinge 0, o processo é feito novamente.
No entanto, se você quiser alterar o tempo que leva para desaparecer, deverá alterar todo o atraso () funções com a quantidade que você deseja. Isso não é muito eficiente. Para tornar as coisas mais fáceis e rápidas ao desejar alterar o atraso () vezes, adicione isso ao início do seu código.
const int fade =30;
O que ele faz é definir um valor padrão, neste caso, é um tempo padrão. Agora, mude a cada atraso () valor em (fade) . Você pode nomeá-lo de outra forma, se desejar. Como resultado, seu atraso () funções devem ser semelhantes a isto.
atraso (fade);
E o código deve ser semelhante a:
int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; void setup () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT);} void loop () {// ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); }}
Luzes atenuadas com botão de pressão:
Após esta seção, você poderá adicionar um botão ao seu projeto.
Como você pode ver, os LEDs só mudam depois que pressiono o botão. Agora, vamos começar.
O esquema:

Você deve ter notado que todos os LEDs são mantidos no mesmo lugar, mas há um acréscimo de um botão de pressão.
O Código:
Em primeiro lugar, precisamos dizer ao MCU em qual pino o botão foi conectado. Para fazer isso, adicione isso ao início do seu código.
botão interno =7;
Agora, na configuração vazia () , adicione para informar ao MCU se o botão é Entrada ou Saída.
pinMode (botão, INPUT);
Também adicione isso à função.
digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);
Ele define uma luz inicial. Desta vez, o LED inicial é verde, mas você pode alterá-lo para vermelho ou amarelo, se desejar.
Agora, há uma grande mudança no void loop () função. Tudo o que estava no loop () agora foi substituído por uma função chamada fadeLights () (o nome pode ser diferente se você quiser). No loop () agora deve ser:
void loop () {if (digitalRead (botão) ==HIGH) {delay (15); // software debounce if (digitalRead (button) ==HIGH) {// se o botão for pressionado, a função fadeLights (); // fadeLights é chamado}} else {digitalWrite (ledRed, LOW); // se o botão não for pressionado, o LED verde é digitalWrite (ledYellow, LOW); // vai estar ligado e os outros não. digitalWrite (ledGreen, HIGH); }}
Como mencionado antes, o void fadeLights () função terá o que estava no loop.
void fadeLights () {for (int i =255; i> =0; i--) {// começa em verde, então precisa fazer o esmaecimento verde analogWrite (ledGreen, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); atraso (desvanecimento); }}
Se o seu projeto funcionar como o do vídeo, você o fez corretamente. Se a sequência não estiver certa, verifique:
- se o seu código foi escrito corretamente
- se você conectou os LEDs nos pinos corretos
E se suas luzes não acenderem, verifique
- se você conectou os LEDs nos pinos corretos
- se você conectou os fios corretamente
- se você escreveu a fórmula corretamente
Luzes atenuadas com botão (melhoria para atraso):
Como você deve ter notado, quando eu solto o botão, as luzes continuam apagando. Após esta seção, você poderá editar seu código para que os LEDs apareçam apenas quando o botão for pressionado.
Como você pode ver aqui, quando eu solto o botão, os LEDs voltam para a ordem padrão de:
Vermelho - DESLIGADO
Amarelo - DESLIGADO
Verde - LIGADO
O esquema:
O esquema é mantido o mesmo, já que não estamos adicionando mais componentes ou desejando que ele faça algo diferente - ainda queremos que os LEDs desapareçam.

O Código:
Não estamos adicionando mais coisas, então não há necessidade de adicionar nada para começar. No entanto, como estamos alterando o atraso, precisamos excluí-lo.
const int fade =10; // não há mais necessidade disso
Não há nada a ser alterado para a configuração () função. No loop vazio () , precisamos adicionar um outro declaração.
void loop () {if (digitalRead (botão) ==HIGH) {delay (15); if (digitalRead (botão) ==HIGH) {fadeLights (); }} else {// adicione aqui digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }}
Isso significa que quando o botão não é pressionado, o programa sai do fadeLights () e vai para o outro declaração que tem a ordem padrão dos LEDs. Diferente de antes - antes, o botão não era verificado uma vez fadeLights () tem sido chamado.
Agora, mude todo o atraso () funções para este:
for (int y =0; y <1000; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }
Em cada loop, o microprocessador verificará o botão. Se for lançado, o retorno comando será chamado para parar fadeLights () . De minha estimativa, quando cada loop for é executado, provavelmente leva cerca de 10 microssegundos, o que significa que precisamos fazer isso várias vezes para torná-lo na velocidade que desejamos.
Espero que tenha gostado deste tutorial e boa sorte com seu projeto.
Código
- Luzes desbotadas
- Luzes atenuadas com botão de pressão
- Luzes atenuadas com botão de pressão (melhoria para atraso)
Luzes atenuadas Arduino
int ledRed =9; int ledYellow =6; int ledGreen =3; const int fade =10; configuração vazia () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT);} void loop () {// ledRed para (int i =0; i <=255; i ++) {analogWrite (ledRed, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledGreen, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); }}
Luzes atenuadas com botão de pressão Arduino
int ledRed =9; int ledYellow =6; int ledGreen =3; botão int =7; const int fade =10; configuração vazia () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT); pinMode (botão, INPUT); digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);} void loop () {if (digitalRead (botão) ==HIGH) {delay (15); if (digitalRead (botão) ==HIGH) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }} void fadeLights () {for (int i =255; i> =0; i--) {analogWrite (ledGreen, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledRed, i); atraso (desvanecimento); } // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); atraso (desvanecimento); } para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); atraso (desvanecimento); } // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); atraso (desvanecimento); }}
Luzes atenuadas com botão de pressão (melhoria para atraso) Arduino
int ledRed =9; int ledYellow =6; int ledGreen =3; botão int =7; const int fade =10; configuração vazia () {pinMode (ledRed, OUTPUT); pinMode (ledYellow, OUTPUT); pinMode (ledGreen, OUTPUT); pinMode (botão, INPUT); digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH);} void loop () {if (digitalRead (botão) ==HIGH) {delay (15); if (digitalRead (botão) ==HIGH) {fadeLights (); }} else {digitalWrite (ledRed, LOW); digitalWrite (ledYellow, LOW); digitalWrite (ledGreen, HIGH); }} void fadeLights () {for (int i =255; i> =0; i--) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} // ledRed for (int i =0; i <=255; i ++) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledRed, i); for (int y =0; y <1000; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} // ledYellow for (int i =0; i <=255; i ++) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} para (int i =255; i> =0; i--) {analogWrite (ledYellow, i); for (int y =0; y <400; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}} // ledGreen for (int i =0; i <=255; i ++) {analogWrite (ledGreen, i); for (int y =0; y <1000; y ++) {// se o botão for liberado if (digitalRead (botão) ==LOW) {return; }}}}
Esquemas


Processo de manufatura
- Jogo Arduino Gyroscope com MPU-6050
- Sistema de atendimento usando Arduino e RFID com Python
- Sensor DHT11 com LEDs e um alto-falante Piezo
- Máquina de LEVITAÇÃO ULTRASÔNICA Usando ARDUINO
- Unopad - Controlador Arduino MIDI com Ableton
- Sistema de rega automática de plantas com Arduino
- Sensor de obstáculo simples com Arduino
- Encontre-me
- Como medir a massa da Terra usando o Arduino
- Controle de ventilador PWM de 4 pinos de 25 kHz com Arduino Uno