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

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Sensor de Carga de Bateria de Automóvel utilizando o CI “LM3914”
Estruturas de Repetição
Lógica e Estrutura de Dados Fundamentais Professor: Eduardo O. Teles
Linguagem C Marco Reis.
Meu primeiro programa em ARDUINO
professor Victory Fernandes
Algoritmos e Estrutura de Dados I
Introdução a Programação Renata Freire
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Linguagem C Funções.
Revisão da Linguagem C.
CPU – IHM PARAMETRIZAÇÃO
Unidade I: “Dê um mergulho rápido”
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 6 Vetores e Matrizes
Ameliara Freire O comando de entrada de dados é utilizado quando desejamos fornecer um valor para um nosso programa. Os dispositivos.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
CADEIA DE CARACTERES (Strings)
Interpretador Python.
Aula prática 6 Vetores e Matrizes
7 Arrays.
Professor Mário Dantas
Prof. Ricardo Santos PONTEIROS
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
Iniciação ao Arduino uno
Aula 13 - Armazenamento de Dados em Arquivos
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Arquivo.
Capítulo 5 Structures. A - Sequence E - Formula Node B - Case F - Variável Global C - For Loop G - Variável Local D - While Loop ABCD FG E.
Linguagem de Programação JAVA
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Como criar uma Classe e.
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
Implementação de um Ohmímetro Utilizando PIC16F877A
Programação de PIC em C Exposição das funções básicas para
e suas funcionalidades
Aula Prática 4 Monitoria IP/CC (~if669).
Escolha da Placa. Porta Serial / COM Port Partes do Código.
Linguagem de Programação JAVA
Workshop de automação de mini helicópteros
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
JAVA Sintaxe.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Professor Esp. Diego André Sant’Ana Disciplina: Sistemas Operacionais II Sistemas de Arquivos- Tipo de arquivos – Cap
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Prof. Marcos LABORATÓRIO DE PRÁTICA DE PROGRAMAÇÃO 06.
Introdução a Programação
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Engenharia de Controle e Automação Computação Para Engenharia Semana /02/2013 Professor Leomir J. Borba- –
Profa. Maria Augusta Constante Puget
PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget.
Shell Script Parte 2.
Estruturas Homogêneas – Vetores e Matrizes
Linguagem de Programação
Estrutura do Software no Sketch Window
Programação para Web I AULA 2 BANCO DE DADOS.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Aula 04: Aprendendo sobre o PWM do arduíno e Ponte H
Aula 05: Sensores do robô e Bibliotecas. Aula 05: Sensores do robô  O que vamos aprender? 1.Funcionamento e aplicações dos sensores 2.Utilidade das Bibliotecas.
Projeto Física Experimental II Por: Diego M. Pinho, Eduardo Damasceno, Hugo Hennies, Rafael M. Lopes.
Clique para editar o título Arduino seu primeiro microcontrolador PMR
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
UNIVERSIDADE ESTADUAL DO RIO GRANDE DO SUL UNIDADE UNIVERSITÁRIA EM PORTO ALEGRE CURSO DE GRADUAÇÃO EM ENGENHARIA DE ENERGIA Autor: Thiago da Silva Girardi.
Sistemas de entrada e saída. Aplicações
Aula 02: S.O.S e Semáforo Interativo
Transcrição da apresentação:

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

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 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;

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

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

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

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.  

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.

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); }

// 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)).

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.  

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

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 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(); }  

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  

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;} }  

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;  

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 1.023 (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 1.023 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);  

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: McRoberts, Michael Arduino básico / Michael McRoberts ; [tradução Rafael Zanolli]. -- São Paulo : Novatec Editora, 2011.