A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED

Apresentações semelhantes


Apresentação em tema: "Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED"— Transcrição da apresentação:

1 Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED

2 Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED
O que vamos aprender? Utilização de uma sequência de LED’s´ para realização de um Efeito de Iluminação Sequencial. Utilização de uma sequência de LED’s´ para realização de um Efeito Interativo de Iluminação.

3 1 – Prática 5: Efeito de iluminação sequencial com LED’s
Usaremos: 10 LED’s de 2 V 10 resistores de 100Ω

4

5 Verifique o seu circuito e depois digite o código:
// Projeto 5 – Efeito de iluminação sequencial com LED’s byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // cria um array para os pinos dos LED’s int ledDelay(65); // intervalo entre as alterações int direction = 1; int currentLED = 0; unsigned long changeTime;

6 void setup() { for (int x=0; x<10; x++) { // define todos os pinos como saída pinMode(ledPin[x], OUTPUT); } changeTime = millis(); void loop() { if ((millis() - changeTime) > ledDelay) { // verifica se já transcorreram “ledDelay” ms desde // a última alteração

7 changeLED(); changeTime = millis(); } void changeLED() { for (int x=0; x<10; x++) { // apaga todos os LED’s digitalWrite(ledPin[x], LOW); digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual currentLED += direction; // incrementa de acordo com o valor de “direction” // altera a direção se tivermos atingido o fim

8 if (currentLED == 9) {direction = -1;}
Analisando o código: A primeira linha nesse sketch: byte ledPin[] = {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 ledPin. Então, você inicializa-o com dez valores (os pinos digitais 4 a 13).

9 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, (ledPin[2]), tem o valor 6, é o elemento 7, (ledPin[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.

10 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 ledPin[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.

11 Em seu loop principal, você verifica se transcorreram ao menos ledDelay 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 changeLED() 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 “ledDelay” milisegundos para ser executado). A função que você cria é: void changeLED() { // apaga todos os LED’s for (int x=0; x<10; x++) { digitalWrite(ledPin[x], LOW); }

12 // acende o LED atual digitalWrite(ledPin[currentLED], HIGH); // incrementa de acordo com o valor de direction currentLED += direction; // altera a direção se tivermos atingido o fim if (currentLED == 9) {direction = -1;} if (currentLED == 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 currentLED. Depois, adicionamos direction à essa variável. Como direction pode ser apenas 1 ou -1, o número incrementará (currentLED +1) ou decrementará em um (currentLED+(-1)).

13 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 ledDelay você pode fazer com que os LED’s acendam e apaguem sequencialmente em velocidades diferentes. Experimente outros valores para ver os resultados.

14 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Ω

15 Potenciômetro O único componente adicional de hardware utilizado neste projeto é o potenciômetro de 4K7 (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 4K7 (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.

16 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.

17 Figura 1: Esquema de um potenciômetro

18 Figura 2: Potenciômetro

19

20 Verifique seu circuito e digite o código:
// Projeto 6 – Efeito interativo de iluminação sequencial com LEDs byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Cria um array para os pinos dos LED’s int ledDelay; // intervalo entre as alterações int direction = 1; int currentLED = 0; unsigned long changeTime; int potPin = 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 pinMode(ledPin[x], OUTPUT); } changeTime = millis(); }

21 void loop() { ledDelay = analogRead(potPin); // lê o valor do potenciômetro if ((millis() - changeTime) > ledDelay) { // verifica se transcorreram ledDelay ms desde a última alteração changeLED(); changeTime = millis(); } void changeLED() { for (int x=0; x<10; x++) { // apaga todos os LED’s digitalWrite(ledPin[x], LOW);   } digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual

22 currentLED += direction; // incrementa de acordo com o valor de direction
// altera a direção se tivermos atingido o fim if (currentLED == 9) {direction = -1;} if (currentLED == 0) {direction = 1;} }

23 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 ledDelay, 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 potPin = 2;

24 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 analogRead. 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 (5 V). Isso representa uma resolução de 5 V / 1024 unidades, ou 0,0049 V (4,9 mV) 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 milissegundos (ou pouco mais de um segundo). Isso é feito armazenando diretamente o valor do pino do potenciômetro em ledDelay. Note que você não tem de definir um pino analógico como entrada ou saída (diferentemente de um pino digital): ledDelay = analogRead(potPin);

25 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 milissegundos (ou pouco mais de um segundo), com controle total sobre a velocidade do efeito.

26 Fontes bibliográficas:
McRoberts, Michael Arduino básico / Michael McRoberts ; [tradução Rafael Zanolli]. -- São Paulo : Novatec Editora, 2011. 


Carregar ppt "Aula 03: Efeito de iluminação sequencial com LED e Efeito interativo de iluminação com LED"

Apresentações semelhantes


Anúncios Google