Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Luzes de dimerização com PWM usando o botão de ação

Componentes e suprimentos

Arduino Mega 2560
× 1
Breadboard (genérico)
× 1
Fios de jumpers (genérico)
A quantidade que você usa pode ser diferente, depende do método que é usado.
× 11
LED (genérico)
Qualquer cor serve, mas recomendo três cores diferentes.
× 3
SparkFun Botão de pressão 12 mm
× 1
Resistor 330 ohm
× 4

Aplicativos e serviços online

Arduino IDE

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

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