Aula 03 Efeito de iluminao sequencial com LED
- Slides: 26
Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED
Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED O que vamos aprender? 1. Utilização de uma sequência de LED’s´ para realização de um Efeito de Iluminação Sequencial. 2. Utilização de uma sequência de LED’s´ para realização de um Efeito Interativo de Iluminação.
1 – Prática 5: Efeito de iluminação sequencial com LED’s Usaremos: • 10 LED’s de 2 V • 10 resistores de 100Ω
• Verifique o seu circuito e depois digite o código: // Projeto 5 – Efeito de iluminação sequencial com LED’s byte led. Pin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // cria um array para os pinos dos LED’s int led. Delay(65); // intervalo entre as alterações int direction = 1; int current. LED = 0; unsigned long change. Time;
void setup() { for (int x=0; x<10; x++) { // define todos os pinos como saída pin. Mode(led. Pin[x], OUTPUT); } change. Time = millis(); } void loop() { if ((millis() - change. Time) > led. Delay) { // verifica se já transcorreram “led. Delay” ms desde // a última alteração
change. LED(); change. Time = millis(); } } void change. LED() { for (int x=0; x<10; x++) { // apaga todos os LED’s digital. Write(led. Pin[x], LOW); } digital. Write(led. Pin[current. LED], HIGH); // acende o LED atual current. LED += direction; // incrementa de acordo com o valor de “direction” // altera a direção se tivermos atingido o fim
if (current. LED == 9) {direction = -1; } if (current. LED == 0) {direction = 1; } } • Analisando o código: A primeira linha nesse sketch: byte led. Pin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; É uma declaração de variável do tipo array. Um array é um conjunto de variáveis, acessadas utilizando um número de índice. Em seu sketch, você declara um array com o tipo de dado byte, dando ao array o nome led. Pin. Então, você inicializa-o com dez valores (os pinos digitais 4 a 13).
Para acessar um elemento do array, você simplesmente se refere ao número de índice desse elemento. Arrays são indexados a partir de zero, o que significa que o primeiro índice é 0, e não 1. Assim, em seu array de dez elementos, os números de índice vão de 0 a 9. Nesse caso, o elemento 3, (led. Pin[2]), tem o valor 6, é o elemento 7, (led. Pin[6]), tem o valor 10. Você deve declarar o tamanho do array, se não for inicializá-lo com dados. Em seu sketch, você não escolheu explicitamente um tamanho, pois o compilador é capaz de contar os valores que você atribuiu ao array e descobrir que seu tamanho é de dez elementos.
Caso você tivesse declarado o array, mas não inicializado os valores ao mesmo tempo, teria de declarar um tamanho. Por exemplo, você poderia ter feito o seguinte: byte led. Pin[10]; e, então, carregado dados nos elementos posteriormente. Para recuperar um valor do array, você faria algo como: x = ledpin[5]; Nesse exemplo, x agora armazenaria um valor de 9. Retornando ao programa, você começou declarando e inicializando um array que armazena dez valores: os pinos digitais utilizados para as saídas de seus dez LED’s.
Em seu loop principal, você verifica se transcorreram ao menos led. Delay milissegundos desde a última alteração nos LED’s; em caso afirmativo, o código passa o controle para sua função. O motivo de você passar o controle para a função change. LED() dessa maneira, em vez de utilizar comandos delay(), é para permitir que, se necessário, outro código seja executado no loop principal do programa (desde que esse código demore menos que “led. Delay” milisegundos para ser executado). A função que você cria é: void change. LED() { // apaga todos os LED’s for (int x=0; x<10; x++) { digital. Write(led. Pin[x], LOW); }
// acende o LED atual digital. Write(led. Pin[current. LED], HIGH); // incrementa de acordo com o valor de direction current. LED += direction; // altera a direção se tivermos atingido o fim if (current. LED == 9) {direction = -1; } if (current. LED == 0) {direction = 1; } } O trabalho dessa função é apagar todos os LED’s e, então, acender o LED atual (isso é feito tão rápido que você não verá acontecer), que está armazenado na variável current. LED. Depois, adicionamos direction à essa variável. Como direction pode ser apenas 1 ou -1, o número incrementará (current. LED +1) ou decrementará em um (current. LED+(-1)).
Em seguida, temos uma instrução if para verificar se atingimos o fim da linha de LED’s; se afirmativo, você reverte a variável direction. Alterando o valor de led. Delay você pode fazer com que os LED’s acendam e apaguem sequencialmente em velocidades diferentes. Experimente outros valores para ver os resultados.
2 – Prática 6: Efeito interativo de iluminação sequencial com LEDs Usaremos: • 10 LED’s de 2 V • 10 resistores de 100Ω • 1 potenciômetro giratório de 4, 7Ω
Ø Potenciômetro O único componente adicional de hardware utilizado neste projeto é o potenciômetro de 4 K 7 (4700 Ω). Você sabe como resistores funcionam. O potenciômetro é apenas um resistor ajustável, com um alcance de zero a um valor definido (escrito em sua lateral). Neste projeto, você está utilizando um potenciômetro de 4 K 7 (4700 Ω), o que significa que seu alcance é de 0 Ω a 4700 Ω. O potenciômetro tem três terminais. Conectando apenas dois, ele se torna um resistor variável. Conectando os três e aplicando uma voltagem, o potenciômetro se torna um divisor de tensão. É dessa forma que ele será utilizado em seu circuito. Um lado é conectado ao terra, outro aos 5 V, e o terminal central ao seu pino analógico.
Ajustando o botão, uma voltagem entre 0 V e 5 V será aplicada ao pino central; você pode ler o valor dessa voltagem no pino analógico 2 e utilizá-lo para alterar a taxa de intervalo empregada no efeito das luzes. O potenciômetro pode ser muito útil, pois fornece uma forma de ajustar um valor entre zero e um limite definido, por exemplo, para regular o volume de um rádio ou o brilho de uma lâmpada. De fato, reostatos que regulam a luminosidade das lâmpadas de sua casa são um tipo de potenciômetro.
Figura 1: Esquema de um potenciômetro
Figura 2: Potenciômetro
Verifique seu circuito e digite o código: // Projeto 6 – Efeito interativo de iluminação sequencial com LEDs byte led. Pin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Cria um array para os pinos dos LED’s int led. Delay; // intervalo entre as alterações int direction = 1; int current. LED = 0; unsigned long change. Time; int pot. Pin = 2; // seleciona o pino de entrada para o potenciômetro void setup() { for (int x=0; x<10; x++) { // define todos os pinos como saída pin. Mode(led. Pin[x], OUTPUT); } change. Time = millis(); }
void loop() { led. Delay = analog. Read(pot. Pin); // lê o valor do potenciômetro if ((millis() - change. Time) > led. Delay) { // verifica se transcorreram led. Delay ms desde a última alteração change. LED(); change. Time = millis(); } } void change. LED() { for (int x=0; x<10; x++) { // apaga todos os LED’s digital. Write(led. Pin[x], LOW); } digital. Write(led. Pin[current. LED], HIGH); // acende o LED atual
current. LED += direction; // incrementa de acordo com o valor de direction // altera a direção se tivermos atingido o fim if (current. LED == 9) {direction = -1; } if (current. LED == 0) {direction = 1; } }
Depois de verificar e fazer o upload de seu código, você deverá ver os LED’s acenderem, indo e voltando de uma ponta a outra da sequência de luzes, como antes. Entretanto, virando o botão do potenciômetro, você pode alterar o valor de led. Delay, acelerando ou desacelerando o efeito. Explicação do código: O código deste projeto é praticamente idêntico ao do projeto anterior. Você simplesmente adicionou um potenciômetro ao seu hardware, e acrescentou o código necessário para permitir a leitura de valores do potenciômetro, e o uso desses valores, para ajustar a velocidade do efeito de iluminação sequencial dos LED’s. Primeiramente, você declara uma variável para o pino do potenciômetro, int pot. Pin = 2;
Isso é feito dessa forma, pois seu potenciômetro está conectado ao pino analógico 2. Para ler o valor de um pino analógico, você utiliza o comando analog. Read. O Arduino tem seis entradas/saídas analógicas com um conversor analógico-para-digital de 10. Isso significa que o pino analógico pode ler voltagens, entre 0 e 5 volts, usando valores inteiros entre 0 (0 V) e 1. 023 (5 V). Isso representa uma resolução de 5 V / 1024 unidades, ou 0, 0049 V (4, 9 m. V) por unidade. Defina seu intervalo de espera utilizando o potenciômetro, para que você possa usar os valores lidos diretamente do pino, ajustando o intervalo entre 0 e 1. 023 milissegundos (ou pouco mais de um segundo). Isso é feito armazenando diretamente o valor do pino do potenciômetro em led. Delay. Note que você não tem de definir um pino analógico como entrada ou saída (diferentemente de um pino digital): led. Delay = analog. Read(pot. Pin);
Isso ocorre durante seu loop principal e, portanto, é um valor que está constantemente sendo lido e ajustado. Virando o botão, você pode ajustar o valor do intervalo entre 0 e 1. 023 milissegundos (ou pouco mais de um segundo), com controle total sobre a velocidade do efeito.
Ø Fontes bibliográficas: Mc. Roberts, Michael Arduino básico / Michael Mc. Roberts ; [tradução Rafael Zanolli]. -- São Paulo : Novatec Editora, 2011.
- Bens de giffen
- Dậy thổi cơm mua thịt cá
- Cơm
- Estrutura de controle sequencial
- Busca sequencial
- J f m a m j j a s o n
- Run off sequencial
- Hermafroditismo sequencial
- Busca sequencial
- Sequencial
- Teste de mesa
- Modelos de processos prescritivos.
- Hemoglobina
- Coriolis
- Karine dutra
- Efeito de borda
- Dieno heteroanular
- Efeito de stroop
- Emendatio libelli
- Fóton
- Transstores
- Efeito
- Efeito troxler
- Efeito doppler
- Entropy change for incompressible substance
- Efeito halo
- O que é um efeito de sentido