Baixe o app para aproveitar ainda mais
Prévia do material em texto
DISPL PAULISTA - 2020 ROBÓTICA LIVRE A DIFERENÇA, PRA QUEM QUER FAZER A DIFERENÇA! Equipe do Núcleo de Tecnológica Educacional de Paulista Página 2 de 278 INDICE APRESENTAÇÃO 03 APLICAÇÕES DA ROBÓTICA 03 CONCEITO DE TENSÃO, RESISTÊNCIA, CORRENTE E A 1ª LEI DE OHM 03 RESISTÊNCIA ELÉTRICA, CORRENTE E A 1ª LEI DE OHM 03 CONHECENDO O MULTÍMETRO 04 MEDIDA DE RESISTÊNCIA ELÉTRICA DE RESISTORES 04 CÓDIGO DE CORES DE RESISTORES 04 PROTOBOARD 05 PLATAFORMA ARDUINO 05 IDE ARDUINO 06 PROGRAMAÇÃO EM ARDUINO 06 SIMULADOR 08 FÓRMULA PARA CALCULAR O RESISTOR ADEQUADO PARA UM LED 06 SIMULADOR – TINKERCARD.COM E FRITZING 07 EXEMPLO DE COMPONENTES ELETRÔNICOS DE ENTRADA E SAÍDA 09 ENTENDENDO PROGRAMAÇÃO NO ARDUINO 10 COMPOSIÇÃO DO KIT ROBÓTICA 14 ATIVIDADES E DESAFIOS 18 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 3 de 278 APRESENTAÇÃO Este projeto visa desenvolver junto aos alunos o uso da robótica numa plataforma cujo software e hardwares são de uso livre e acessível, aumentando em muito as possibilidades de projetos. A plataforma utilizada é a do Arduino, desenvolvida no ano de 2005 na Itália com a finalidade de ajudar estudantes de design a desenvolverem projetos. Sua grande vantagem é possuir projeto open source (código aberto), permitindo a criação de diferentes soluções para uma ampla gama de aplicações disponibilizadas em comunidades na internet. No desenvolvimento de aplicações práticas, nossos estudantes irão utilizar conceitos teóricos de diversas áreas de estudo. Robótica é um ramo educacional e tecnológico que trata de sistemas compostos por partes mecânicas automáticas e controladas por circuitos integrados, tornando sistemas mecânicos motorizados controlados automaticamente por circuitos elétricos, com ou sem intervenção humana. Robótica Livre é uma metodologia educacional/pedagógica de uso de "sucata eletrônica" e artefatos eletrônicos para ensino de Robótica. A principal característica da Robótica Livre é o uso de elementos não patenteados na construção de kits com elementos Eletrônicos, Mecânicos e de Programação podendo ser usado por qualquer pessoa e replicado para qualquer outro ambiente comercial ou educacional. É muito comum projetos de Robótica Livre junto com projetos de Metareciclagem (reciclagem das tecnologias). Para que o projeto de Robótica Livre seja considerado Livre ela deve conter Software Livre e Hardware Livre. APLICAÇÕES DA ROBÓTICA No nosso dia a dia os processos automatizados são frequentes, atividades que antes eram executadas de forma manual, trabalhosa e demorada, hoje são realizadas com cliques, sons e os mais variados tipos de comando. Hoje muitas tarefas ficam um pouco mais fáceis com o uso da Placa Arduíno (projetos iniciais). Alguns exemplos que podemos citar são os semáforos que acendem e apagam as luzes durante determinado tempo, sensores de luz que fazem os postes de luzes acederem sozinhos, sensores de presença muito utilizados em corredores e escadarias escuras, painéis, letreiros de ônibus e estacionamentos que mudam as palavras (na verdades os leds acendem), sensores de som que acendem ou apagam as lâmpadas com um simples bater de palmas, sensores de temperatura, pequenas engrenagens movidas através de controles remotos ou físicos com alavancas, potenciômetros e botões, é o caso de projetos de carrinhos, braços robóticos e até drones entre outros. CONCEITO DE TENSÃO, RESISTÊNCIA, CORRENTE E A 1ª LEI DE OHM É a diferença de potencial entre dois pontos ou melhor, a quantidade de energia gerada para movimentar uma carga elétrica (elétrons) em um único sentido. Fórmula para calcular a tensão elétrica de um circuito tendo as grandezas de corrente e resistência: 𝑽 = 𝑰. 𝑹 Onde: V= tensão elétrica; I= corrente elétrica e R= resistência elétrica. RESISTÊNCIA ELÉTRICA, CORRENTE E A 1ª LEI DE OHM A RESISTÊNCIA ELÉTRICA pode ser definida como a capacidade que um corpo tem de opor-se à passagem de corrente elétrica quando submetido a uma diferença de potencial (V). Sua intensidade pode ser calculada através das Leis de Ohm. Quando um condutor é conectado a uma fonte de tensão (V), ele passa a ser percorrido por uma CORRENTE ELÉTRICA de intensidade (i), que consiste no movimento dos elétrons livres no condutor. Essa constante é a resistência elétrica do condutor e é representada pela letra R. Essa equação é 𝐕 = 𝐈. 𝐑 conhecida como a Primeira Lei de Ohm e pode ser aplicada a todos os resistores. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 4 de 278 CONHECENDO O MULTÍMETRO É um aparelho utilizado para realizar medidas de tensão, corrente e resistência elétrica. Ele incorpora diversos instrumentos de medição, como o voltímetro, o amperímetro, o ohmímetro e pode conter também um capacímetro , frequencímetro, termômetro entre outros. 1. Tensão contínua (pilhas, baterias, fontes), 2. Tensão alternada (tomadas), 3. Correntes, 4. Continuidade (diodos, cabos, fios), 5. Resistência (resistores), 6. VΩmA (ponteira vermelha) - tensões continua e alternada, 7. COM (ponteira preta) – sempre. MEDIDA DE RESISTÊNCIA ELÉTRICA DE RESISTORES A ponteira vermelha do multímetro deve ser plugada em VΩmA, a ponteira preta em COM e o cursor em Ω resistência elétrica num valor acima do valor do resistor. Por exemplo: se o resistor for de 1kΩ (1000Ω), a primeira e melhor opção é colocar a chave do multímetro em 2000Ω. Com o resistor desconectado de qualquer circuito, deve-se colocar a ponteira vermelha em um terminal do resistor e a ponteira preta no outro terminal. CÓDIGO DE CORES DE RESISTORES EXEMPLO: No código de cores de resistores temos fundamentalmente 4 cores: • As três primeiras cores indicam o valor do resistor. • A 4ª cor a possível variação em porcentagem deste valor. 1 2 3 4 5 6 7 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 5 de 278 PROTOBOARD É uma placa para montar circuitos de protótipos. Com ela é possível desenvolver e testar diversos circuitos eletrônicos, tudo sem ter que soldar os componentes. As linhas azuis da placa representam as ligações internas, ou seja, internamente elas já estão interligadas. PLATAFORMA ARDUINO O Arduino é um sistema formado de software e hardware livre criado em 2005 por pesquisadores italianos. O objetivo era elaborar um dispositivo que fosse ao mesmo tempo barato, funcional e fácil de programar, sendo dessa forma acessível a pessoas leigas em eletrônica. O objetivo foi atingido, pois o Arduino, hoje, é amplamente utilizado por leigos e também por especialistas. Além disso, foi adotado o conceito de hardware livre, o que significa que qualquer um pode montar, modificar, melhorar e personalizar o Arduino, partindo do mesmo hardware básico. Uma das principais vantagens desse sistema, além do preço acessível dos seus componentes, é a grande quantidade de projetos prontos e a disposição na internet para serem acessados. Gerou- se em torno dessa plataforma um grande movimento de criação, criatividade, interatividade. Em poucas palavras, Arduino é uma plataforma de desenvolvimento de projetos eletrônicos (ou prototipagem eletrônica), constituída tanto de hardware e software, e que está disponível por VISÃO DE CIMA DE BAIXO Placa programável usada para gerar circuitos interativos. Área de Alimentação Área de Prototipação Área de Prototipação Colunas Contínuas Linhas Contínuas Equipe do Núcleo de Tecnológica Educacional de Paulista Página 6 de 278 meio da licença Creative Commons Attribution Share-Alike license. Isso quer dizer que todos os arquivos de design do projeto Arduino estão disponíveis gratuitamente na internet e que seu software é open-source. Além disso, a plataforma pode ser utilizadatanto para trabalhos pessoais como para fins comerciais, desde que os créditos sejam atribuídos à marca Arduino e os arquivos de projeto também sejam disponibilizados sob a mesma licença. PRINCIPAIS RAZÕES PARA SE UTILIZAR A PLATAFORMA ARDUINO: • Baixo custo de prototipagem; • Softwares de simulação gratuitos disponíveis; • Fácil de programar; • Grande número de tutoriais, artigos e projetos prontos na internet; • Extensa comunidade de desenvolvedores e hobbystas; • Não requer experiência ou grandes conhecimentos prévios de eletrônica/programação (no entanto, é recomendável saber os conceitos básicos pelo menos) PORTAS DIGITAIS O Arduino Uno tem 14 portas digitais nomeadas de 0 a 13, que podem ser de entrada ou saída. As portas RX←0 e TX→1 são utilizadas para comunicação serial e DEVEM SER EVITADAS nas programações. Uma porta digital deve assumir somente dois níveis 0 (zero) ou 1 (um) que no Arduino que trabalha com tensões entre 0 e 5V assumem em termos de tensões 0V (nível baixo) ou 5V (nível alto) PORTAS ANALÓGICAS O Arduino Uno tem 06 portas digitais nomeadas de A0 a A5 e são apenas de entrada de dados. As portas analógicas (digitais que se transformam) podem receber sinais com tensões entre 0 (zero) e 5 (cinco) Volts e através de um conversor analógico digital (ADC) converter em byte com 10 bits PORTAS PWM O Arduino Uno tem 06 portas digitais do tipo PWM. São elas: 3, 5, 6, 9, 10 e 11. estas portas podem modular a largura do pulso digital e com isso conseguem simular uma saída analógica entre 0 e 5V. Elas controlam a potência de motores, brilho etc. IDE ARDUINO O ambiente de programação no Arduino (IDE) é muito semelhante a linguagem C. A medida que as montagens e projetos forem sendo realizados vamos aprendendo como usar esse ambiente de programação. Os arquivos de programação no Arduino são denominados de sketch. PROGRAMAÇÃO EM ARDUINO INICIAL → declarar variáveis globais e Bibliotecas VOID SETUP → organizar e configurar VOID LOOP → executar indefinidamente Equipe do Núcleo de Tecnológica Educacional de Paulista Página 7 de 278 DIODO EMISSOR DE LUZ - LED FÓRMULA PARA CALCULAR O RESISTOR ADEQUADO PARA UM LED 𝑹 = 𝑽𝒂𝒍𝒊𝒎𝒆𝒏𝒕𝒂çã𝒐 − 𝑽𝒍𝒆𝒅/𝑰 R é a resistência em ohms do resistor adequado para o LED, isso é o que vamos descobrir. Valimentação é a tensão em volts da fonte de alimentação que iremos usar no LED. Vled é a tensão em volts do LED. I é a corrente do LED em amperes CALCULO DO RESISTOR ADEQUADO PARA UM LED Temos um LED difuso de 5mm de cor vermelha, com corrente igual a 20mA, a tensão igual a 2 volts e o circuito será alimentado com 5 volts. A primeira coisa que devemos fazer é converter os 20mA (miliamperes) do LED para amperes que dariam 0,02 A (amperes). Agora substituir os valores na fórmula: R = (5 - 2) / 0,02 R = 3 / 0,02 R = 150 ohm Segundo a fórmula o resistor adequado é de 150 ohms. Mas é comum que não encontremos um resistor exatamente com a resistência apontada pela fórmula. Neste caso devemos usar um resistor com a resistência maior mais próxima do resultado encontrado. Por exemplo nesse caso podemos usar um resistor de 220 ohms. SIMULADOR ONLINE – TINKERCARD.COM Podemos simular um Projeto mesmo antes de utilizar o kit de robótica Arduino. A Autodesk criou um simulador Arduino gratuito que dispensa instalação, chamado AUTODESK®TINKERCAD ™ que roda direto no navegador. Acesse o Endereço - https://www.tinkercad.com/circuits , faça o REGISTRO. https://www.tinkercad.com/ https://www.tinkercad.com/ https://www.tinkercad.com/ https://www.tinkercad.com/circuits https://www.tinkercad.com/circuits Equipe do Núcleo de Tecnológica Educacional de Paulista Página 8 de 278 TELA INICIAL Na página inicial Design Learning, encontraremos a Galeria onde podemos acessar a projetos prontos, Aprenda com aulas explicativas, Entrar e INSCREVER-SE. Primeiramente Crie uma conta clicando no botão INSCREVER-SE. O Autodesk Tinkercad 3D Circuits é um simulador de circuitos eletrônicos, que simula diversos componentes que podem ser montados e simulados em uma protoboard de laboratório. Depois de Inscrever-se e clicar em Entrar, clique na opção Circuits, localizada do lado esquerdo da janela. Caso não seja a primeira vez, você terá acesso a todas as suas simulações, podendo editá-las. Para iniciar um novo projeto clique em CRIAR NOVO CIRCUITO. Aparecerá uma página em branco e no lado direito da janela alguns Componentes que usaremos nos nossos projetos. O Tinkercad é extremamente simples e possui uma interface gráfica simples. A partir da tela inicial, podemos acessar a Galeria com projetos prontos, Rotacionar nosso projeto, Excluir algum elemento que não estejamos usando, Centralizar a tela e também possui os botões “Refazer” e “Desfazer” bem comum no Pacote Office. Botão Rotacional - gira o elemento selecionado em 25 graus. Botão Excluir ou Deletar - como o próprio nome já diz, elimina da tela o item selecionado. Botão Zoom to Fit - funciona como um centralizador, caso se perca no seu design ou apenas deseje retornar para o centro do projeto rapidamente, clique neste botão. Botões Desfazer e Refazer - com o famoso atalho CTRL+Z do Pacote Office da Microsoft, no circuits.io não é diferente possuem a mesma função, desfazem a última ação e a refazem se necessário. Botão CODIGO (Editor) - esse botão é aonde será digitado o código em C que será usado no Arduino para que ele mostre a tela de edição. Obrigatoriamente temos que ter um Arduino no projeto (área de trabalho) caso contrário ele irá mostrar uma mensagem de erro. Nesta opção temos: BAIXAR CÓDIGO (SCHETCH) - salvar a compilação no micro para ser usado na IDE Arduino; BIBLIOTECAS – utilizar algumas bibliotecas existentes; DEPURADOR – soluções de erros. Botão INICIAR SIMULAÇÃO – onde iniciamos e paramos a simulação. Também funciona como um compilador caso esteja usando um Arduino, E é possível adicionar componentes eletrônicos e iniciar simulações. Para montar um novo projeto, clique e selecione o Componente e depois clique posicionando na Área em branco. O desenho dos Jumpers e automático, basta ligar os pinos na Protoboard e Arduino. Podemos modificar o valor do Resistor e Cor do LED. Ao finalizar um projeto, clique no quadradinho colorido (TINKERCAD) localizado na parte superior esquerda da janela. E para voltar a editá-lo, clique nele e depois no botão EDITAR ISTO. Temos também o FRITZING que precisa ser instalado no PC. Podemos encontrá-lo no endereço: http://fritzing.org/ https://www.tinkercad.com/learn/designs http://fritzing.org/ Equipe do Núcleo de Tecnológica Educacional de Paulista Página 9 de 278 EXEMPLO DE COMPONENTES ELETRÔNICOS DE ENTRADA E SAÍDA ENTRADA – funciona através da inserção de dados por meio de ação externa (manuseio, luz, movimento, código ou programa). SAÍDA – visualização, obtenção de dados ou retorno de dados, como resultado de alguma operação de alguma entrada. Saída Modulo laser KY-008 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 10 de 278 ENTENDENDO PROGRAMAÇÃO NO ARDUINO Arduino se programa em uma linguagem de alto nível semelhante a C/C++ e geralmente tem os seguintes componentes para elaborar o algoritmo: - Estruturas, – Variáveis, - Operadores booleanos, de comparação e aritméticos, - Estrutura de controle, - Funções digitais e analógicas. ESTRUTURAS São duas funções principais que deve ter todo programa em Arduino. A função setup() é chamada quando um programa começa a rodar. Usamos esta função para inicializar as nossas variáveis, os modos dos pinos, declarar o uso de livrarias, etc. Esta função será executada apenas uma vez após a placa Arduino ser ligada ou ressetada. setup(){ } Após criar uma função setup() que declara os valores iniciais, a função loop() faz exatamente o que seu nome sugere, entra em looping (executa sempre o mesmo bloco de código), permitindo ao seu programa fazermudanças e responder. Usamos esta função para controlar ativamente a placa Arduino. loop(){ } VARIÁVEIS Variáveis são expressões que você pode usar em programas para armazenar valores como a leitura de um sensor em um pino analógico. Aqui destacamos algumas: - Variáveis Booleanas Variáveis boolenas, assim chamadas em homenagem a George Boole, podem ter apenas dois valores: verdadeiro ( true ) e falso ( false ). boolean running = false; - Int Inteiro é o principal tipo de dado para armazenamento numérico capaz de guardar números de 2 bytes. Isto abrange a faixa de -32.768 a 32.767 (valor mínimo de -2^15 e valor máximo de (2^15) -1). int ledPin = 13; - Char Um tipo de dado que ocupa 1 byte de memória e armazena o valor de um caractere ASCII. Caracteres literais são escritos entre aspas. char myChar = ‘A’; OPERADORES BOOLEANOS Estes operadores podem ser usados dentro da condição em uma sentença if. - && (“e” lógico) Verdadeiro apenas se os dois operandos forem verdadeiros, ou seja, a primeira condição e a segunda forem verdadeiras. Exemplo: if (digitalRead(2) == 1 && digitalRead(3) == 1) { //ler dois interruptores } é verdadeiro apenas se os dois interruptores estiverem fechados. - || (“ou” lógico) Verdadeiro se algum dos operandos for verdadeiro, ou seja, se a primeira ou a segunda condição for verdadeira. Exemplo: Equipe do Núcleo de Tecnológica Educacional de Paulista Página 11 de 278 if (x > 0 || y > 0) { // ... } é verdadeiro apenas se x ou y forem maiores que 0. - ! (negação) Verdadeiro apenas se o operando for falso. Exemplo: if (!x) { // ... } é verdadeiro apenas se x for falso (ou seja, se x for igual a 0). OPERADORES DE COMPARAÇÃO if, que é usado juntamente com um operador de comparação, verifica quando uma condição é satisfeita, como por exemplo um input acima de um determinado valor. O formato para uma verificação if é: if (algumaVariavel > 50) { //faça alguma coisa } O programa checa se alguma Variavel (colocar acentos em nomes de variáveis não é uma boa idéia) é maior que 50. Se for, o programa realiza uma ação específica. Colocado de outra maneira, se a sentença que está dentro dos parêntesis é verdadeira o código que está dentro das chaves roda; caso contrário o programa salta este bloco de código. As chaves podem ser omitidas após uma sentença if se só houver uma única linha de código (definida pelo ponto e vírgula) que será executado de modo condicional: if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) {digitalWrite(LEDpin, HIGH);} //todos são corretos A sentença que está sendo verificada necessita o uso de pelo menos um dos operadores de comparação: x == y (x é igual a y) x != y (x é não igual a y) x < y (x é menor que y) x > y (x é maior que y) x <= y (x é menor ou igual a y) x >= y (x é maior ou igual a y) OPERADORES ARITMÉTICOS Se aplicam no uso de variáveis. = (igualdade) + (adição) - (subtração) * (multiplicação) / (divisão) % (resto da divisão) ESTRUTURAS DE CONTROLE São instruções que permitem decidir e realizar diversas repetições de acordo com alguns parâmetros. Entre os mais importantes podemos destacar: - Switch/case Equipe do Núcleo de Tecnológica Educacional de Paulista Página 12 de 278 Do mesmo modo que as sentenças if, as switch/case controlam o fluxo dos programas. Switch/case permite ao programador construir uma lista de “casos” dentro de um bloco delimitado por chaves. O programa checa cada caso com a variável de teste e executa o código se encontrar um valor idêntico. switch (var) { case 1: //faça alguma coisa quando var == 1 case 2: //faça alguma coisa quando var == 2 default: //se nenhum valor for idêntico, faça o default, é opcional } - While While fará com que o bloco de código entre chaves se repita contínua e indefinidamente até que a expressão entre parentesis () se torne falsa. Algo tem que provocar uma mudança no valor da variável que está sendo verificada ou o código vai sempre ficar dando voltas dentro do while. Isto poderia ser o incremento de uma variável ou uma condição externa, como o teste de um sensor. var = 0; while(var < 200){ //algum código que se repete 200 vezes var++; } - for A sentença for é utilizada para repetir um bloco de código delimitado por chaves. Um contador com incremento normalmente é usado para controlar e finalizar o loop. A sentença for é útil para qualquer operação repetitiva, e é frequentemente usada com arrays para operar em conjuntos de dados ou de pinos. //aumentar o brilho de um LED usando um pino PWM int PWMpin = 13; //um LED no pino 13 void setup() { //nenhum setup é necessário (quando em branco) } void loop() { for (int i=0; i <= 255; i++){ analogWrite(PWMpin, i); delay(10); } } FUNÇÕES DIGITAIS Orientadas a revisar o estado e a configuração das entradas e saídas digitais. - pinMode() Configura o pino especificado para que se comporte ou como uma entrada ( input ) ou uma saída (output). Sintaxe: pinMode(pin, mode) pinMode(9, OUTPUT); //determina o pino digital 9 como uma saída - digitalRead() Lê o valor de um pino digital especificado, HIGH ou LOW. Sintaxe: digitalRead(pin) buttonState = digitalRead(9); //leitura do estado de um botão no pino 9 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 13 de 278 - digitalWrite() Escreve um valor HIGH ou um LOW em um pino digital. Sintaxe: digitalWrite(pin, valor) digitalWrite(9, HIGH); //coloca o pino 9 em estado HIGH FUNÇÕES ANALÓGICAS Ideais para a leitura ou escrita de valores analógicos. - analogRead() Lê o valor de um pino analógico especificado. A placa Arduino contém um conversor analógico- digital de 10 bits com 6 canais. Com isto ele pode mapear voltagens de entrada entre 0 e 5 volts para valores inteiros entre 0 e 1023. Isto permite uma resolução entre leituras de 5 volts / 1024 unidades ou 0,0049 volts (4.9 mV) por unidade. Sintaxe: analogRead(pin) int a = analogRead (A0); //lê o valor do pino analógico A0 e armazena este na variável "a" - analogWrite() Escreve um valor analógico (onda PWM) em um pino. Pode ser usado para acender um LED variando o brilho ou girar um motor a velocidade variável. Sintaxe: analogWrite(pin, valor) analogWrite (9, 134); //envia o valor analógico 134 para o pino 9 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 14 de 278 COMPOSIÇÃO BÁSICA DO KIT ROBÓTICA LIVRE COM ARDUINO MATERIAL IMAGEM QUANTIDADE Arduino UNO com Cabo USB AB 02 Case em agrílico para Arduino 02 Protoboard 840 pontos 02 Protoboard 400 pontos 04 Multímetro Digital 01 LED 5mm verde 10 LED 5mm amarelo 10 LED 5mm azul 10 LED 5mm vermelho 10 LED 5mm branco 10 LED RGB Alto Brilho 5mm 05 Resistor 100Ω 1/4W 10 Resistor 150Ω 1/4W 10 Resistor 220Ω 1/4W 30 Resistor 330Ω 1/4W 10 Resistor 470Ω 1/4W 20 Resistor 1kΩ 1/4W 10 Resistor 4k7Ω 1/4W 10 Resistor 10kΩ 1/4W 10 Resistor 15kΩ 1/4W 10 Resistor 47kΩ 1/4W 10 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 15 de 278 MATERIAL IMAGEM QUANTIDADE Display LCD Keypad Shield 16x02 com Teclado 01 Display LCD 2x16 com conector soldado (com Backlight) 01 Display 7 segmentos 1 Dígito 02 Trena de Aço 5m 01 Módulo Sensor Fotossensível Detecção de Luz LDR 01 Potênciometro 10k ou 1MΩ com knob 10 Chave Táctil Push Button 12x12x7.5 mm 10 Sensor Sonda de Temperatura A Prova D’Água DS18B20 01 Sensor de Temperatura e Umidade 01 Micro Motor Servo 9g 02 Módulo Sensor Detector de Som 01 Sensor Hall 49E 01 Sensor Ultrassônico HCSR04 02 Equipe do Núcleo de TecnológicaEducacional de Paulista Página 16 de 278 MATERIAL IMAGEM QUANTIDADE Buzzer 5V ativo (atuador piezoelétrico) 03 LDR 01 Sensor de Movimento PIR 02 Fita isolante 01 Módulo Sensor Reflexivo (infravermelho) 02 Kit Braço robótico MDF c/04 Servos motor 9g 01 Capacitor 1000µF - 16V 01 Chave Gangorra Liga/Desliga 01 Kit Chassi 2WD Carro Robô 01 Bateria de 3.7V ou 4.2V (recarregável) 04 Suporte para bateria de 3.7 ou 4.2V 02 Carregador de Baterias de Lítio 18650 3.7V ou 4.2V 01 Kit Controle Remoto IR 01 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 17 de 278 MATERIAL IMAGEM QUANTIDADE Bluetooth HC-06 02 Motor Drive Ponte H-L298 01 Motor DC 6V com jumpers soldados 01 Jumpers Macho x Macho 40 Jumpers Macho x Femea 20 Computador para programação do Arduino 01 Caixa organizadora 01 Apostila Robótica Livre com Arduino 01 OPCIONAL MATERIAL IMAGEM QUANTIDADE Kit Arduino Robótica (Kit Chassis 2WD e Braço Robótico) 01 Equipe do Núcleo de Tecnológica Educacional de Paulista Página 18 de 278 ATIVIDADES E DESAFIOS Desenvolvemos uma sequência de PROJETOS e DESAFIOS que abordarão os conceitos de entradas e saídas digitais e analógicas e o uso de dispositivos sensores e atuadores. ATIVIDADE 1 – ACENDER O LED DO PINO 13 Essa é a experiência mais básica que se pode fazer com o Arduino, por isso considera-se que seja o “Hello World” (“Olá Mundo!”). A ideia aqui é conhecer o Arduino, seu Ambiente de Programação e sua linguagem de programação na prática. O Arduino possui integrado ao seu pino digital 13 um LED que pode ser controlado bastando enviar o sinal alto (HIGH) para acendê-lo, ou sinal baixo (LOW) para apagá-lo, e é exatamente o que faremos. Material necessário 01 Arduino UNO Opções de Montagem do Projeto Programação (Sketch) void setup() { pinMode(13, OUTPUT); } //Definir pino como saída void loop() { digitalWrite(13, HIGH); //Colocar nível 1 (nível lógico alto) no pino (liga o LED) } Entendendo o Código Configuracao(){ Pino.definirModo(pinoLed, Saida); } Principal() { Pino.ligar(Digital.pinoLed); } O que foi feito Na função setup(), ajustamos o modo de operação do pino digital 13 do Arduino para saída usando o comando pinMode(13,OUTPUT). Dessa forma, poderemos colocar ou não tensão nele usando as constantes HIGH e LOW. Na função loop(), que é executada infinitamente enquanto o Arduino estiver ligado, como já vimos anteriormente, usamos o comando digitalWrite(13,HIGH) para indicar que haverá saída de tensão positiva de 5V (HIGH) pelo pino digital 13 do Arduino. Resultado esperado Após fazer upload para o Arduino, o programa fará com que o LED do pino digital 13 permaneça aceso o tempo todo. Muito bom, nós acabamos de verificar como um programa para Arduino deve funcionar. Primeiro, a função setup() entra em ação, é executada apenas uma vez logo que o Arduino é ligado. Em seguida, é a vez da função loop(), que ficará rodando em quanto o Arduino estiver ligado. Antes de tentarmos uma segunda experiência, dessa vez fazendo com que o LED do pino digital 13 mude de estado, vamos aprender a utilizar a protoboard. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 19 de 278 ATIVIDADE 2 – MONTANDO UM CIRCUITO NA PROTOBOARD Para entender como usar a protoboard, precisamos de um exemplo prático. Para isso montaremos um circuito simples para acender um LED. Material necessário: 01 Fonte de Alimentação (Arduino UNO ou Bateria de 5V), 01 LED Difuso, 01 Resistor de 220 ohms, 01 Chave momentânea (push button), Jumpers, Protoboard. Montando o Circuito O circuito que vamos montar é bem simples, ele tem como função deixar um LED ligado. Não é necessário programação, utilizaremos o Arduino ou uma fonte externa para alimentação. Na protoboard esse circuito ficará da seguinte forma. Entendendo a fundo Vamos seguir esse circuito passo a passo a montagem do circuito na protoboard: – Definindo os barramentos de Alimentação Primeiro vamos definir os barramentos que irão receber os pinos de alimentação. Em geral usamos um barramento de baixo(vermelho) para alimentação positiva e um barramento de cima (azul ou preto) para o GND (referência). É importante que só se ligue a energia nesses barramentos depois que o circuito estiver pronto. Ou seja, definimos o barramento que será usado, mas ainda não conectaremos nele os fios da fonte externa de tensão. Por isso iremos desconsiderar a fonte de alimentação. – Conectando o resistor O próximo passo é conectar o resistor. Para montagem do circuito é usual usar os barramentos verticais. Dessa forma, conectamos uma das pernas em um barramento (B) e a outra perna em outro (C). Como uma das pernas do resistor estará conectada a fonte de alimentação positiva, precisamos colocar um jumper entre o barramento do resistor (B) e da fonte (A). – Conectando o LED Agora vamos conectar o LED. Como ele tem uma de suas pernas conectadas à uma das pernas do resistor (maior “+”), vamos colocar essa primeira perna no barramento (C) e a outra perna (menor “-“)no barramento (D). OBS.: Ao usar um LED você deve se atentar para o posicionamento correto dele. A corrente deve fluir da maior perna para a menor. Para nosso experimento a maior perna do LED fica conectada ao resistor, a menor irá se conectar à chave momentânea. – Conectando a chave momentânea Agora precisamos conectar a chave momentânea. Para isso iremos colocá-la entre os barramentos verticais superiores e inferiores. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 20 de 278 Como uma das pernas da chave está conectada ao LED, vamos colocar essa perna no barramento (D). Aqui, também precisamos colocar um fio jumper indo da chave momentânea (E) para o barramento de referência (F). – Ligando a fonte externa Agora que nosso circuito está montado, basta ligar a fonte de alimentação externa com 5V. Essa fonte de energia pode ser oriunda dos pinos de alimentação 5V e GND de um Arduino UNO por exemplo. Você também poderá usar um conjunto em série de 6 Pilhas AA 1,5V, que totalizará 6V. Por fim teremos o seguinte circuito. Em preto, destacamos por onde a corrente está sendo conduzida através dos barramentos metálicos da matriz de contato. DICA Ao usar o protoboard, nós costumamos dividir o circuito em nós, denominando cada um com uma letra e depois considerando que cada nó é um barramento do protoboard. Nó, em circuitos elétricos, nada mais é que um ponto comum de interligação de dois ou mais componentes. Veja que no exemplo anterior dividimos o circuito em vários nós e o denominamos com letras. Ao transferir para protoboard, cada nó assumiu seu próprio barramento. Considerações finais Nesse projeto vimos como é organizada uma protoboard e como montar um circuito simples nela. Agora que você entende como usá-la, você poderá trabalhar em seus projetos com mais autonomia. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 21 de 278 ATIVIDADE 03 - HELLO WORLD – PISCAR (CONTROLE DE UM LED) O objetivo deste projeto é utilizar uma porta digital do Arduino para controlar o funcionamento de um Diodo Emissor de Luz (LED). Um nível 1 (HIGH) colocado no pino irá acender o LED, enquanto um nível 0 (LOW) vai apagar o LED. Consiste em uma continuação do projeto anterior, onde conseguimos ligar o LED do pino digital 13. Agora, vamos desligá-lo também a cada período de tempo que definiremos na programação. Com isso, o LED piscará. Quando estamos aprendendo a programar, na maioria das linguagens de programação, o primeiro código que aprendemos é escreve “Hello World” na tela do computador. Como a placa Arduino não tem uma tela substituiremos esta função fazendo piscar um LED. O que Vamos Aprender? - Cabear um circuito - Ativar uma saída digital - Acenderum LED em ON/OFF - Temporizar um sinal de saída - Sintaxe de um programa Arduino Conhecimentos Prévios - Sinal digital - Função digitalWrite() - Polaridade de um LED - Conexão da placa Arduino com o computador. Materiais necessários Não há necessidade de qualquer componente exceto o próprio Arduino, mas para fixar bem, iremos utilizar alguns componentes externos, como: 01 Arduino UNO, 01 Resistor de 220 ohms (vermelho, vermelho, marrom) ou 330 ohms (laranja, laranja, marrom), 01 LED (qualquer cor), Jumpers, Protoboard. Passo 1: Opções de Montagem do Projeto Este código já vem junto com a IDE do Arduino. Você pode acessar em: Arquivo >> Exemplos >> 01.Basics >> Blink. Estamos apenas reproduzido aqui com explicações e comentários. Observe os diagramas acima e de acordo com o modelo de protoboard que estiver usando: a) Conecte o pino GND do Arduino à linha de alimentação negativa (preta ou azul) da protoboard. b) Coloque o resistor de 220 ohms (ou 330 ohms) entre a linha de alimentação negativa e qualquer outra linha da protoboard. c) Coloque o LED com o Cátodo (lado chanfrado “negativo”) conectado ao resistor. d) Conecte o Ânodo (pino maior “positivo”) do LED ao pino 13 do Arduino. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 22 de 278 Passo 2: Programa (Sketch) Inicie o ambiente de desenvolvimento do Arduino e digite o sketch (programa) a seguir: int ledPin = 13; //Porta onde o LED foi conectado (declarar variável do tipo inteiro “global”) void setup() { //Declara a função setup pinMode(ledPin, OUTPUT); } //Configura pino como saída void loop() { //Declara a função loop digitalWrite(ledPin, HIGH); //Escreve o nível 1 no pino – valor lógico Alto (liga o LED) delay(2000); //Aguarda por 2 segundos digitalWrite(ledPin, LOW); //Escreve o nível 0 no pino – valor lógico Baixo (apaga o LED) delay(2000); //Pausa de 2s } //Fecha a função loop Passo 3: Entendimento do Código Primeiramente devemos observar o que são e como são feitos os comentários em um código de linguagem C. Para fazer um comentário que irá se desenvolver por mais de 1 linha, devemos usar os caracteres: /* para começar um comentário de mais de 1 linha */ para finalizar os comentários que foram feitos anteriormente Para fazer um comentário em 1 linha apenas, podemos utilizar: // para fazer um comentário de apenas 1 linha Vamos agora entender a estrutura dos programas. No início de todos os programas uma ordem deve ser respeitada: 1. Estrutura de Inclusão de Bibliotecas 2. Estrutura de Declaração de Variáveis 3. Estrutura Setup 4. Estrutura Loop 5. Demais estruturas de funções O que são estas 5 estruturas citadas acima? 1. Se pensarmos em fazer algum projeto mirabolante, podemos ter certeza que há 90% de chances de alguém já o ter feito. Desta forma, quando alguém já o fez, é bem provável que este alguém, em qualquer parte do mundo, já tenha escrito toda uma biblioteca para fazer o tal projeto. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 23 de 278 2. Declaração das Variáveis: int ledPin = 13; //LED conectado na porta digital 13 int: variável do tipo inteira. ledPin = 13; : nome da variável. Neste caso, como o próprio nome diz, temos que a variável PINO DO LED vale 13. //LED conectado na porta digital 13: comentário dizendo que existe um LED conectado ao pino digital de número 13. 3. Vamos olhar a estrutura Setup: void setup() { //função configuração pinMode(ledPin, OUTPUT); //inicialize a porta digital como SAÍDA } A palavra reservada void é usada em declarações de funções. Este tipo indica que a função não retorna nenhum valor quando é executada. void setup() { : Declaração que irá começar o Setup do programa. Sempre aberto com uma “{“ e fechada, no fim da declaração, por uma “}”. //inicialize a porta digital como SAÍDA: Comentário dizendo que o pino digital será inicializado como uma saída pinMode(ledPin, OUTPUT); : Escolha do modo do pino, se é entrada (INPUT) ou saída (OUTPUT). Como neste caso queremos acender um LED, a corrente elétrica irá sair do pino e não entrar. Logo, setamos o ledPin (que tinha o valor 13, por causa do pino digital 13) como saída. 4. Por fim, iremos analisar a estrutura Loop: void loop() { digitalWrite(ledPin, HIGH); //liga o LED delay(2000); //aguarda por 2 segundos digitalWrite(ledPin, LOW); //apaga o LED delay(2000); //aguarda por 2s } void loop() : De modo análogo ao setup, com o comando ao lado dizemos que irá começar o loop do programa, ou seja, o programa principal que ficará rodando por tempo indeterminado. Também é aberto com uma “{“ e fechado com uma “}”. digitalWrite(ledPin, HIGH); //liga o LED: Escrita digital. Por tratar-se de um pino digital, teremos nível lógico 1 ou nível lógico 0, no caso de um LED, ou teremos LED acesso (1) ou teremos LED apagado (0). O comando então liga o LED, ou seja, envia 1 para o pino 13. delay(2000); //aguardar por 2s: Delay é mais uma função pronta do Arduino. O número que for inserido entre os parêntesis será o valor, em milissegundos, que o Arduino irá esperar para seguir para a próxima instrução. No caso, temos um delay de 2000 milissegundos, ou seja, uma espera de 2 segundos para executar a próxima instrução. digitalWrite(ledPin, LOW); //apagar o LED delay(2000); //aguardar por 2s: Estes dois comandos são análogos aos dois vistos anteriormente, com a única diferença que a escrita digital escreverá um 0 no pino do LED, ou seja, um nível lógico baixo: o LED apagará e o Arduino espera 2 segundos para fazer a próxima instrução que, no caso, volta a ser o digitalWrite(ledPin, HIGH); Analisando melhor o código //Piscar – comentário com o nome do projeto //Primeiramente iremos estabelecer um nome para a variável do tipo (Número) com o nome (ledPin) para armazenar o número do pino em que conectamos o LED Numero pinoLed = 13; Equipe do Núcleo de Tecnológica Educacional de Paulista Página 24 de 278 //A função de configuração é obrigatória a todo projeto e é responsável por preparar o necessário para a execução da função Principal(). Neste caso, ela possui apenas uma instrução em seu bloco de código Configuracao(){ //Essa linha define o modo do pinoLed, que possui o valor 13, como (Saída), ou seja, o Arduino irá emitir uma corrente elétrica de 0 ou 5V. O método definirModo do conjunto Pino tem como argumentos o número do pino e o modo, que pode ser ENTRADA ou, como neste caso, SAÍDA. Depois de executar a configuração o Arduino inicia o método Principal(). Pino.definirModo(pinoLed, Saida); } //A função (Principal) é o segundo método obrigatório a todo projeto e será repetido enquanto o Arduino estiver ligado. Principal(){ //O método ligar do conjunto Pino liga o pino fornecido como argumento, no caso Digital.pinoLed. A indicação “Digital.” antes de nossa variável avisa para o Arduino que estamos utilizando um pino digital. Quando ligamos uma porta enviamos 5V para ela e quando desligamos enviamos 0V. Pino.ligar(Digital.pinoLed); //A função esperar é um método Arduino que faz uma “pausa” na execução do código durante o número de milissegundos indicados entre os parênteses, no caso 2000, que equivale a 2 segundos. Depois de esperar o tempo definido o Arduino executa a próxima linha: esperar(2000); //Se a função ligar fazia com que o pino ligasse, o método desligar faz o contrário, desliga o pino. Ou seja, essa linha irá enviar 0V pelo pino digital pinoLed, fazendo o LED apagar. Depois disso o código apresenta outra espera de dois segundos e reinicia o método Principal(), repetindo-o enquanto o Arduino permanecer ligado. Pino.desligar(Digital.pinoLed); esperar(2000); } Passo 4: Compilação e transferência do programa para o ArduinoDepois de entender o programa, podemos salvar o sketch (programa), e fazer a Compilação. Em seguida, conectar o Arduino à porta USB do computador. Para finalizar, pressionamos o botão Carregar (Transferir) para fazer a transferência (Upload) do sketch para o Arduino. Resultado esperado Após fazer upload para o Arduino, o programa fará com que o LED do pino digital 13 permaneça acesso por dois segundos e apagados também por dois segundos. A seguir, veremos as constantes que utilizamos no código-fonte dessas desses dois primeiros projetos: HIGH – indica que no pino no modo saída apresentará uma tensão acima de 3 volts para referência de 5 volts e acima de 2 volts para referência de 3,3 volts. Caso o pino esteja no modo entrada, ele poderá receber como leitura as mesmas tensões de saída. LOW – indica que no pino no modo saída apresentará uma tensão abaixo de 3 volts para referência de 5 volts e abaixo de 2 volts para referência de 3,3 volts. Caso o pino esteja no modo entrada, ele poderá receber como leitura as mesmas tensões de saída. INPUT – indica que o pino será utilizado como entrada. Ou seja, poderá realizar uma leitura de tensão. OUTPUT – indica que o pino será utilizado como saída. Ou seja, apresentará uma tensão de saída. LEDPIN – substitui o valor do pino onde o LED integrado está presente. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 25 de 278 Entre desligar e ligar precisamos de tempo suficiente para que uma pessoa veja a diferença, então o comando delay() informa o Arduino não fazer nada durante 1000 milissegundos, ou um segundo. Quando usarmos o comando delay(), nada mais acontece neste período de tempo. Uma vez entendido os exemplos básicos, verifique também o exemplo Piscar sem delay para aprender como criar um delay enquanto faz outras funções. Código Fonte (sketch) /* Piscar Acende um LED por um segundo, e depois apaga pelo mesmo tempo, repetidamente. */ int ledPin = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(ledPin, OUTPUT); //inicializa o pino digital como saída } //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(ledPin, HIGH); //liga o LED delay(2000); //aguarda um segundo (2s = 2000ms) digitalWrite(ledPin, LOW); //desliga o LED delay(2000); //aguarda um segundo (2s = 2000ms) } DICA 1 - Na linguagem Arduino // se utiliza para acrescentar comentários na linha de código, sendo muito útil para explicar uma sintaxe ou deixar um lembrete. Um exemplo utilizado por nós: digitalWrite(ledPin,LOW); //apaga o LED 2 - Os sinais digitais (Aceso e Apagado) estão presentes em muitos sensores. Conheça alguns deles: FONTE: https://edisciplinas.usp.br/pluginfile.php/3252633/mod_resource/content/1/Guia_Arduino_Iniciante_Mu ltilogica_Shop.pdf https://edisciplinas.usp.br/pluginfile.php/3252633/mod_resource/content/1/Guia_Arduino_Iniciante_Multilogica_Shop.pdf https://edisciplinas.usp.br/pluginfile.php/3252633/mod_resource/content/1/Guia_Arduino_Iniciante_Multilogica_Shop.pdf Equipe do Núcleo de Tecnológica Educacional de Paulista Página 26 de 278 EXERCÍCIO 01 (ATIVIDADE 03) A partir do código fonte apresentado nesta atividade, faça as modificações necessárias para que o LED fique: - 3 segundos aceso e 3 segundos apagado - 200 milissegundos aceso e 500 milissegundos apagado EXERCÍCIO 02 (ATIVIDADE 03) A partir do mesmo código fonte faça uma nova montagem deste exercício e faça as modificações necessárias no código fonte para que o LED seja colocado no Pino 5, e fique 2 segundos aceso e 1 segundo apagado. Note que para qualquer pino que não seja o 13 é necessário colocar um resistor em série com o LED. Neste caso um resistor de 220Ω ou 330Ω é suficiente. DESAFIO 1 - - HELLO WORLD – PISCAR (1) Altere o código fonte para que o LED pisque a cada 03 segundos e fique 01 segundo desligado. (2) Acrescente um LED (LED2) e um resistor a porta 12 do circuito. a. Faça que o LED2 pisque junto com o LED1; b. Alterne o acendimento dos LEDs 1 e 2 (enquanto o 1º estiver acesso o 2º deve ficar apagado); (3) Faça 03 LEDs ligarem em sequência; (4) Faça uma simulação de um cruzamento de trânsito, utilizando os LEDs de cor vermelha, verde e amarelo. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 27 de 278 RESPOSTA DO EXERCÍCIO 01 - HELLO WORLD – PISCAR (ATIVIDADE 03) A partir do código fonte apresentado nesta atividade, faça as modificações necessárias para que o LED fique: - 3 segundos aceso e 3 segundos apagado - 200 milissegundos aceso e 500 milissegundos apagado Diagrama Códico Fonte (sketch) int LED = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED, OUTPUT); //inicializa o pino digital como saída } //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED, HIGH); //acende o LED – (pino e estado) delay(3000); //aguarda um segundo (3s = 3000ms) digitalWrite(LED, LOW); //apaga o LED – (pino e estado) delay(3000); //aguarda um segundo (3s = 3000ms) } RESPOSTA DO EXERCÍCIO 02 - HELLO WORLD – PISCAR (ATIVIDADE 03) A partir do mesmo código fonte faça uma nova montagem deste exercício e faça as modificações necessárias no código fonte para que o LED seja colocado no Pino 5, e fique 2 segundos aceso e 1 segundo apagado. Diagrama Equipe do Núcleo de Tecnológica Educacional de Paulista Página 28 de 278 Códico Fonte (sketch) int LED = 5; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED, OUTPUT); //inicializa o pino digital como saída } //A funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED, HIGH); //acende o LED – (pino e estado) delay(2000); //aguarda um segundo (2s = 2000ms) digitalWrite(LED, LOW); //apaga o LED delay(1000); //aguarda um segundo (1s = 1000ms) } Equipe do Núcleo de Tecnológica Educacional de Paulista Página 29 de 278 RESPOSTA DO DESAFIO 1 - HELLO WORLD – PISCAR (ATIVIDADE 03) (1) Altere o código fonte para que o LED pisque a cada 03 segundos e fique 01 segundo desligado. (2) Acrescente um LED (LED2) e um resistor a porta 12 do circuito. a. Faça que o LED2 pisque junto com o LED1; b. Alterne o acendimento dos LEDs 1 e 2 (enquanto o 1º estiver acesso o 2º deve ficar apagado). (3) Faça 03 LEDs ligarem em sequência; (4) Faça uma simulação de um cruzamento de trânsito, utilizando os LEDs de cor vermelha, verde e amarelo. RESPOSTAS (1) Altere o código fonte para que o LED pisque a cada 03 segundos e fique 01 segundo desligado. Código Fonte (sketch) Acende um LED por três segundos, e depois apaga por um segundo, repetidamente. int LED = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED, OUTPUT); } //inicializa o pino digital como saída //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED, HIGH); //acende o LED delay(3000); //aguarda um segundo (3s = 3000ms) digitalWrite(LED, LOW); //apaga o LED delay(1000);//aguarda um segundo (1s = 1000ms) } (2) Acrescente um LED (LED2) e um resistor a porta 12 do circuito. (a) Faça que o LED2 pisque junto com o LED1; Diagrama Código Fonte (sketch) //Acende dois LEDs por um segundo, e depois apaga pelo mesmo tempo, repetidamente. int LED1 = 13; //estabelece um nome para o pino 13 int LED2 = 12; //estabelece um nome para o pino 12 void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa o pino digital como saída pinMode(LED2, OUTPUT);} //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botao reset seja acionado. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 30 de 278 void loop() { digitalWrite(LED1, HIGH); //acende o LED1 digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, LOW); //apaga o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) } (b) Alterne o acendimento dos LEDs 1 e 2 (enquanto o 1º estiver acesso o 2º deve ficar apagado). Código Fonte (sketch) //Acende e apaga dois LEDs por um segundo, alternadamente, repetidamente. int LED1 = 13; //estabelece um nome para o pino 13 int LED2 = 12; //estabelece um nome para o pino 12 void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa o pino digital como saída pinMode(LED2, OUTPUT);} //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED1, HIGH); //acende o LED1 digitalWrite(LED2, LOW); //apaga o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) } (3) Faça 03 LEDs ligarem em sequência; Diagrama PRIMEIRA OPÇÃO– LEDs acedem e apagam em sequencia, ficando só um aceso. Código Fonte (sketch) //Acende e apaga três LEDs por um segundo, alternadamente, repetidamente. int LED1 = 8; //estabelece um nome para o pino 8 int LED2 = 12 //estabelece um nome para o pino 12 int LED3 = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa os pinos digitais como saída pinMode(LED2, OUTPUT); Equipe do Núcleo de Tecnológica Educacional de Paulista Página 31 de 278 pinMode(LED3, OUTPUT);} //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED1, HIGH); //acende o LED1 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED2, LOW); //apaga o LED2 digitalWrite(LED3, HIGH); //acende o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED3, LOW); //apaga o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) } SEGUNDA OPÇÃO – LEDs acedem sucessivamente, em sequencia e ficam todos acesos. Código Fonte (sketch) //Acende e apaga três LEDs por um segundo, alternadamente, repetidamente. int LED1 = 8; //estabelece um nome para o pino 8 int LED2 = 12; //estabelece um nome para o pino 12 int LED3 = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa o pino digital como saída pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT);} //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED1, HIGH); //acende o LED1 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED3, HIGH); //acende o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, LOW); //apaga o LED2 digitalWrite(LED3, LOW); //apaga o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) } TERCEIRA OPÇÃO – LEDs acedem sucessivamente indo e voltando. Código Fonte (sketch) //Acende e apaga três LEDs por um segundo, alternadamente, repetidamente. int LED1 = 8; //estabelece um nome para o pino 8 int LED2 = 12; //estabelece um nome para o pino 12 int LED3 = 13; //estabelece um nome para o pino 13 void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa o pino digital como saída pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT);} Equipe do Núcleo de Tecnológica Educacional de Paulista Página 32 de 278 //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //ou até que o botão reset seja acionado. void loop() { digitalWrite(LED1, HIGH); //acende o LED1 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED3, HIGH); //acende o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, LOW); //apaga o LED2 digitalWrite(LED3, LOW); //apaga o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED3, HIGH); //acende o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED2, HIGH); //acende o LED2 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, HIGH); //acende o LED1 delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 digitalWrite(LED2, LOW); //apaga o LED2 digitalWrite(LED3, LOW); //apaga o LED3 delay(1000); //aguarda um segundo (1s = 1000ms) } (4) Faça uma simulação de um cruzamento de trânsito, utilizando os LEDs de cor vermelha, verde e amarelo. Código Fonte (sketch) //Simulação de um Cruzamento de Trânsito. int LED1 = 8; //estabelece um nome para o pino 8 (LED Verde) int LED2 = 12; //estabelece um nome para o pino 12 (LED Amarelo) int LED3 = 13; //estabelece um nome para o pino 13 (LED Vermelho) void setup() { //executa cada vez que o Arduino inicia pinMode(LED1, OUTPUT); //inicializa o pino digital como saída pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT);} //a funcao loop() continua executando enquanto o Arduino estiver alimentado, //// ou até que o botão reset seja acionado. void loop() { digitalWrite(LED1, HIGH); //acende o LED1 Verde delay(2000); //aguarda dois segundo (2s = 2000ms) digitalWrite(LED2, HIGH); //acende o LED2 Amarelo delay(1000); //aguarda um segundo (1s = 1000ms) digitalWrite(LED1, LOW); //apaga o LED1 Verde digitalWrite(LED2, LOW); //apaga o LED2 Amarelo digitalWrite(LED3, HIGH); //acende o LED2 Vermelho delay(2000); //aguarda dois segundo (2s = 2000ms) digitalWrite(LED2, HIGH); //apaga o LED2 Amarelo delay(1000); //aguarda um segundo (1s = 2000ms) digitalWrite(LED2, LOW); //apaga o LED2 Amarelo digitalWrite(LED3, LOW); //apaga o LED3 Vermelho } Equipe do Núcleo de TecnológicaEducacional de Paulista Página 33 de 278 DESAFIO 2 – SEQUENCIAL COM LEDs Seguindo o aumento de complexidade, vamos controlar 03 LEDs em nosso projeto. A lógica é a mesma para apenas um LED, mas as possibilidades são quase infinitas do que se pode fazer em relação à sequência de acender e apagar os LEDs. Sugestões de projetos não faltam, tais como um semáforo simples, com três luzes. Saltar de três para seis LEDs não deve ser muito difícil, basta um pouco de paciência e tempo para entender melhor a programação, e construir um cruzamento com dois semáforos também pode ser um exercício interessante. Vale a pena parar um pouco neste projeto e soltar a imaginação para exercitar o controle de LEDs externos ao Arduino. A) SEMÁFORO DE VEÍCULOS Objetivo - Aplicar o conceito de Saídas Digitais, abordado no Projeto 2 e reproduzir o funcionamento de um sinal de trânsito. Material necessário: 0 Arduino, 03 Resistores de 220 ohms (vermelho, vermelho, marrom) ou de 330 ohms (laranja, laranja, marrom), 03 LEDs (01 vermelho, 01 verde e 01 amarelo), Jumper, Protoboard. Montagem do circuito Realize a montagem do circuito, conforme ilustra a Figura acima: a) Conecte o pino GND do Arduino à linha de alimentação negativa (azul) da protoboard. b) Coloque 03 resistores de 220 ohms (ou 330 ohms) entre uma ligação na linha de alimentação negativa e qualquer outra linha do protoboard. c) Coloque os 03 LEDs com o Cátodo (lado chanfrado – pino negativo) conectado em cada um dos resistores. d) Conecte, usando um cabinho, o Ânodo dos LEDs (pino positivo) na seguinte ordem: pino 13 do Arduino em um LED vermelho, pino 12 do Arduino em um LED amarelo e pino 11 do Arduino em um LED verde. B) SEMÁFORO DE VEÍCULOS E PEDESTRES Objetivo - Reproduzir um cenário similar ao de um semáforo de veículos e pedestres. Supondo o estado inicial do cenário com semáforo de veículos (VEÍCULO) sendo vermelho (PARE) e o semáforo de pedestres (PEDESTRE) sendo verde (SIGA), deve-se programar a sequência de luzes indicando os estados do semáforo de veículos sincronizado com os estados do semáforo de pedestres. Algumas especificações a serem seguidas: • O sinal vermelho e sinal verde de VEÍCULO tem duração de 5 segundos cada. • O sinal amarelo de VEÍCULO tem duração de 2 segundos. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 34 de 278 • O sinal vermelho de PEDESTRE ficará acesso durante todo o tempo que o sinal vermelho e sinal amarelo de VEÍCULO estiverem acessos, impedindo a passagem de pedestres enquanto os carros transitam. • O sinal verde de PEDESTRE ficará acesso durante todo o tempo que o sinal vermelho de VEÍCULO ficar acesso, indicando que os pedestres estão livres para atravessar. • Antes transição do sinal verde para o vermelho de PEDESTRE, faltando 3 segundos para a transição, o sinal verde pisca rapidamente 3 vezes indicando aos pedestres que se tornará vermelho. Material necessário: 01 Arduino, 05 Resistores de 220 ohms (vermelho, vermelho, marrom) ou de 330 ohms (laranja, laranja, marrom), 05 LEDs (2 vermelhos, 2 verdes e 1 amarelo), Jumpers, Protoboard. Montagem do circuito Conforme ilustra a Figura acima realize os seguintes passos: a) Conecte o pino GND do Arduino à linha de alimentação negativa (azul) do protoboard. b) Coloque 05 resistores de 220 ohms (ou 330 ohms) entre com uma ligação na linha de alimentação negativa e qualquer outra linha do protoboard. c) Coloque 05 LEDs com o Cátodo (lado chanfrado) conectado em cada um dos resistores. d) Conecte o Ânodo dos LEDs na seguinte ordem: pino 13 do Arduino no LED vermelho (vermelho de VEÍCULO), pino 12 do Arduino no LED amarelo (amarelo de VEÍCULO), pino 11 do Arduino no LED verde (verde de VEÍCULO), pino 10 do Arduino no LED vermelho (vermelho de PEDESTRE) e pino 9 do Arduino no LED verde (verde de PEDESTRE). Equipe do Núcleo de Tecnológica Educacional de Paulista Página 35 de 278 RESPOSTA DESAFIO 2 – SEQUENCIAL COM LEDs (ATIVIDADE 03) A) SEMÁFORO DE VEÍCULOS (EXEMPLO) Programação (Sketch) int LEDVerde = 11; //declaração das variáveis int LEDAmarelo = 12; int LEDVermelho = 13; void setup(){ pinMode(LEDVerde, OUTPUT); //configuração pinMode(LEDAmarelo, OUTPUT); pinMode(LEDVermelho, OUTPUT); } void loop(){ digitalWrite(LEDVerde, HIGH); //liga o LED Verde delay(2000); //por 2 segundos digitalWrite(LEDVerde, LOW); //desliga o LED Verde digitalWrite(LEDAmarelo, HIGH); //liga o LED Amarelo delay(2000); //por 2 segundos digitalWrite(LEDAmarelo, LOW); //desliga o LED Amarelo digitalWrite(LEDVermelho, HIGH); //liga o LED Vermelho delay(2000); //por 2 segundos digitalWrite(LEDVermelho, LOW); //desliga o LED Vermelho } //reinicia o loop B) SEMÁFORO DE VEÍCULOS E PEDESTRES (EXEMPLO) Programação (Sketch) int LEDCarVed = 11; //Carro int LEDCarAma = 12; int LEDCarVem = 13; int LEDPedVed = 9; //Pedestre int LEDPedVem = 10; void setup(){ pinMode(LEDCarVed, OUTPUT); //definição das Portas pinMode(LEDCarAma, OUTPUT); pinMode(LEDCarVem, OUTPUT); pinMode(LEDPedVed, OUTPUT); pinMode(LEDPedVem, OUTPUT); } void loop(){ digitalWrite(LEDCarVed, HIGH); //liga LED Verde Carro digitalWrite(LEDPedVem, HIGH); //liga LED Vermelho Pedestre delay(5000); //por 5 segundos digitalWrite(LEDCarVed, LOW); //desliga o LED Verde Carro digitalWrite(LEDCarAma, HIGH); //liga o LED Amarelo Carro delay(2000); //por 2 segundos digitalWrite(LEDCarAma, LOW); //desliga o LED Amarelo Carro digitalWrite(LEDPedVem, LOW); //desliga o LED Vermelho Pedestre digitalWrite(LEDCarVem, HIGH); //liga o LED Vermelho Carro digitalWrite(LEDPedVed, HIGH); //liga o LED Verde Pedestre delay(5000); //por 5 segundos Equipe do Núcleo de Tecnológica Educacional de Paulista Página 36 de 278 digitalWrite(LEDPedVed, LOW); //desliga/liga LED Verde Pedestre delay(500); digitalWrite(LEDPedVed, HIGH); delay(500); digitalWrite(LEDPedVed, LOW); delay(500); digitalWrite(LEDPedVed, HIGH); delay(500); digitalWrite(LEDPedVed, LOW); delay(500); digitalWrite(LEDPedVed, HIGH); delay(500); digitalWrite(LEDPedVed, LOW); //desliga o LED Verde Pedestre digitalWrite(LEDCarVem, LOW); //desliga o LED Vermelho Carro } //reinicia o loop Equipe do Núcleo de Tecnológica Educacional de Paulista Página 37 de 278 ATIVIDADE 04 - CONTROLANDO LED COM SINAL PWM (REVISÃO) Para controlar o brilho de um LED ou até diminuir a velocidade de um motor CC, a ferramenta ideal é o PWM. Na placa do Arduino UNO existe o desenho de um til (~) ao lado de alguns pinos, que significam que aquele pino é capaz de realizar PWM. Observamos que a placa Arduino UNO possui 6 pinos para saída PWM (3, 5, 6, 9, 10, 11). O que é PWM? PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. Para auxiliar na manipulação desses pinos a plataforma possui uma função que auxilia na escrita de valores de duty cycle para esses pinos, assim podemos facilmente usar o PWM do Arduino UNO e outras placas. Função analogWrite() Esta função escreve um valor de PWM em um pino digital que possui a função PWM. Após a chamada dessa função, o pino passa a operar com uma onda quadrada de frequência fixa e com dutycycle conforme valor passado pela função. A frequência dessa onda, na maioria dos pinos é em tordo de 490 Hz, porém, os pinos 5 e 6 da Arduino UNO operam em 980 Hz. Para utilizar a função analogWrite() , deve-se configurar o pino correspondente como saída digital. É interessante notar que essas saídas não são conversores digital-analógico como o nome sugere, e estes pinos não estão relacionados às entradas analógicas. A função analogWrite deve ser utilizada da seguinte forma: Sintaxe: analogWrite(pino, valor); Onde: -- Pino corresponde ao pino que será gerado o sinal PWM; - Valor corresponde ao duty cycle, ou seja, o valor que permanecerá em nível alto o sinal. O valor deve ser de 0 a 255 onde com 0 a saída permanece sempre em nível baixo e 255 a saída permanece sempre em nível alto. Materiais necessários 01 Arduino, 01 LED, 01 Resistor de 220Ω, Jumpers, Protoboard Código Fonte (sketch) int LED=10; int brilho=0; int pulo=5; Equipe do Núcleo de Tecnológica Educacional de Paulista Página 38 de 278 void setup () { pinMode (LED, OUTPUT); } void loop () { analogWrite (LED, brilho); brilho = brilho + pulo; if (brilho==0 || brilho==255) { // || = ou pulo= - pulo; } delay(30); } DESAFIO (1) Troque o pino para analógio e também digital. Observe a variação de lunizidade do LED; (2) Modifique os valores delay para mais e para menos observe os resultados. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 39 de 278 ATIVIDADE 05 - LEDs EM PARALELO Vamos ligar 03 LEDs em paralelo utilizando sketch (programação) para piscar. CALCULANDO O RESISTOR ADEQUADO PARA UM LED Para o LED VERMELHO e para o LED Convertendo os 20mA (miliamperes) do LED para amperes dariam 0,02 A (amperes). R = (5 - 2) / 0,02 R = 3 / 0,02 R = 150 ohms Para o LED VERDE R = (5 - 2,5) / 0,02 R = 6,5 / 0,02 R = 325 ohms Como vai ser muito difícil encontrar um resistor de 325 ohms você pode usar um de 330 ohms. Materiais necessários 01 Arduino, 03 LED (vermelho, verde, amarelo), 03 Resistores de 330Ω, Jumpers, Protoboard. Códico Fonte (sketch) int LED = 13; //declaração de uma variável chamada LED void setup() { //função de ajuste executada uma única vez pinMode (LED, OUTPUT); } //rotulando a variável com saída de dados void loop() { digitalWrite(LED, HIGH); //torna a variável LED ligada (HIGH coloca a tensão no máximo 5V) delay(1000); //espera um segundo (1000 milissegundos) digitalWrite(LED, LOW); //torna a variável LED desligada (LOW coloca a tensão no mínimo 5 V) delay(1000); } Em paralelo todos os LEDs juntos vão consumir a mesma tensão que um, e as correntes se somam. Em série as tensões se somam e a corrente consumida é a mesma. Não há vantagem em ligar LEDs em paralelo. Nunca devemos ligá-los em paralelo, pois como eles têm características sempre um pouco diferentes, as correntes não se dividiriam por igual e eles acenderiam com brilhos diferentes. DESAFIO (1) Modifique os valores delay para mais (+) e para menos (-); (2) Observe o resultado e comente. Equipe do Núcleo de Tecnológica Educacional de Paulista Página 40 de 278 ATIVIDADE 06 – LEDs EM SÉRIE, PARALELO E MISTO, COM BATERIA 9V Vamos verificar o circuito de LEDs ligados em Série, LEDs ligados em Paralelo e de LEDs ligados em série e paralelo ao mesmo tempo (Misto). TABELA GENÉRICA DE TENSÃO E CORRENTE PARA LEDS DIFUSO 3MM E 5MM: Se você não sabe a tensão e corrente exata do seu LED, utilize a tabela genérica abaixo para LEDs de 3mm e 5mm. OBS.: Para evitar possíveis danos aos componentes, os valores apresentados nesta tabela são propositalmente mais baixos que os valores reais da maioria dos LEDs. 1. LEDs EM SERIE Vamos ligar 04 LEDs difusos 5mm, cor vermelha, com tensão aproximada de 2,0V e corrente de 20mA. Primeiro precisamos calcular o resistor R1. Para isto, utilizaremos a fórmula da Lei de Ohm: U = R1 x I => R1 = U / I Onde: U = (Valimentação - Vled) e I = corrente suportada pelo LED (20mA = 0,02A) Como utilizamos 04 LEDs em série, a tensão dos LED será: Vled = 4 x 2,0 => Vled = 8,0V (tensão suportada pelos LEDs) Vamos utilizar uma bateria de 9V, logo a tensão de alimentação será: Valimentação = 9,0V (tensão da bateria) Portanto: R1 = (9,0V - 8,0V) / 0,02A => R1 = 50Ω (ohms). Segundo a fórmula o resistor adequado possui 50 ohms, entretanto podemos utilizar um resistor com a resistência maior encontrado. Desta forma, vamos utilizar um resistor de 100 Ω (ohms). Materiais necessários 01 Pilha 9V, 01 Suporte para Pilha 9V, 03 LEDs (mesma cor), 01 Resistor de 150Ω, Jumpers, Protoboard. Veja abaixo como fica o esquema de montagem do nosso circuito no Protoboard: Equipe do Núcleo de Tecnológica Educacional de Paulista Página 41 de 278 2. LEDs EM PARALEDO Vamos utilizar 04 LEDs de 5mm, nas cores: Vermelho, Laranja, Verde e Azul. Utilizando a Lei de Ohm vamos calcular os resistores para cada LED de acordo com a tabela genérica. PARA O LED VERMELHO E AMARELO Convertendo os 20mA (miliampèeres) do LED para amperes dariam 0,02 A (amperes). R = (9 - 2) / 0,02 R = 7 / 0,02 R1 = 350 ohms Como vai ser muito difícil encontrar um resistor de 350 ohms, vamos utilizar um de 470 ohms. PARA O LED VERDE Convertendo os 20mA (miliamperes) do LED para amperes dariam 0,02 A (amperes). R = (9 - 2,5) / 0,02 R = 6,5 / 0,02 R3 = 325 ohms Como vai ser muito difícil encontrar um resistor de 325 ohms, vamos utilizar um de 330 ohms. PARA O LED AZUL Convertendo os 20mA (miliamperes) do LED para amperes dariam 0,02 A (amperes). R = (9 - 3) / 0,02 R = 6 / 0,02 R4 = 300 ohms Podemos utilizar um resistor de 300 ohms. Materiais necessários 01 Pilha 9V, 01 Suporte para pilha 9V, 04 LEDs (cores diferentes), 02 Resistores de 470Ω e 02 de 350Ω, Jumpers, Protoboard. Veja abaixo como fica a simulação do nosso circuito montado no Protoboard: Equipe do Núcleo de Tecnológica Educacional de Paulista Página 42 de 278 3. LEDS LIGADOS EM PARALELO E EM SÉRIE AO MESMO TEMPO (LIGAÇÃO MISTA) Agora vamos verificar a ligação de LEDs em paralelo e em Série ao mesmo tempo. Imagine que você queira ligar 03 LEDs azuis sem Série em uma fonte de alimentação de 9V e um outro LED em paralelo com estes. A tensão dos LEDs em paralelo ultrapassa a tensão de alimentação que é de 9V, ou seja, a tensão dos 04 LEDs = 4 X 2,5V = 10V. Para resolver isto, vamos utilizar uma ligação mista de LEDs de acordo com o circuito abaixo: Vamos então calcular os valores dos resistores R1 (Paralelo) e R2 (Série) através da Lei de Ohm: CÁLCULO DE R1 Tensão de alimentação = 9V Tensão do LED = 3V Corrente máxima suportada do LED >> I = 20mA = 0,02A U = R1. I >> R1 = U / I >> R1 = (9V - 3,0V) / 0,02A R1 = 6V / 0,02A >> R1 = 300Ω Entretanto, nós vamos utilizar o valor do resistor da tabela prática - LED Azul para tensão de alimentação de 9V >> R1 = 350Ω DICA: Faça o teste com os 02 resistores para verificar se há diferença de luminosidade. Observação: Se você tem o "datasheet" do fabricante com o valor especificado, prefira sempre utilizar o valor do resistor calculado. CÁLCULO DE R2 Tensão de alimentação = 9V Tensão dos LEDs (03 LEDs) = 3 x 2,5V = 7,5V Corrente máxima suportada do LED >> I = 20mA = 0,02A U = R2. I >> R2 = U / I >> R2 = (9V - 7,5V) / 0,02A R2 = 1,5V / 0,02A >> R2 = 75Ω Como vai ser muito difícil encontrar um resistor de 75Ω, utilizaremos um resistor >> R2 = 150Ω. Veja abaixo o diagrama com LEDs ligados em paralelo e em série ao mesmo tempo: FONTE http://www.squids.com.br/arduino/index.php/projetos-eletronica/projetos-basicos/79-teste-01-leds- ligados-em-serie-e-em-paralelo http://www.squids.com.br/arduino/index.php/projetos-eletronica/projetos-basicos/79-teste-01-leds-ligados-em-serie-e-em-paralelo http://www.squids.com.br/arduino/index.php/projetos-eletronica/projetos-basicos/79-teste-01-leds-ligados-em-serie-e-em-paralelo Equipe do Núcleo deTecnológica Educacional de Paulista Página 43 de 278 ATIVIDADE 07 - SINAL DE TRÂNSITO (REVISÃO) Vamos fazer um projeto de um sinal de trânsito no microcontrolador Arduino. Este projeto apresenta diversos conceitos introdutórios. Materiais necessários 01 Arduino, 03 LED (vermelho, amarelo, verde), 03 Resistores de 100Ω ou 220Ω, Jumper, Protoboard. Montagem do Circuito Primeiramente conecte os LEDs na protoboard. Depois conecte a perna de cada um dos resistores de 100 ou 220Ω (ohms) na linha das pernas menores dos LEDs, e a outra perna dos resistores, na linha do GND (negativo) da protoboard. Usando os fios jumper, conecte o fio jumper preto no pino digital GND do Arduino. Conecte o fio verde no pino digital 8 do Arduino, o amarelo no pino digital 9 do Arduino e o vermelho no pino digital 10 do Arduino, conforme diagrama abaixo. Diagrama O projeto físico do sinal de trânsito está pronto. Agora é a parte de programação do Arduino para fazer com que o diagrama acima se comporte como um sinal de trânsito. Abra a IDE do Arduino. Copie e cole na IDE o código fonte do programa, ou escreva. Códico Fonte (sketch) int LEDvd = 8; int LEDam = 9; int LEDvm = 10; void setup() { //é executado uma vez apenas pinMode(LEDvd,OUTPUT); //define o pino 8 como saída pinMode(LEDam,OUTPUT); //define o pino 9 como saída pinMode(LEDvm,OUTPUT); } //define o pino 10 como saída void loop() { //é executado enquanto o arduino estiver ligado digitalWrite(LEDvd ,HIGH); //controle do LED verde – acende o LED delay(4000); //espera 4 segundos digitalWrite(LEDvd ,LOW); //apaga o LED digitalWrite(LEDam,HIGH); //controle do LED amarelo - acende o LED delay(2000); //espera 2 segundos digitalWrite(LEDam,LOW); //apaga o LED digitalWrite(LEDvm,HIGH); //controle do LED vermelho - acende o LED Equipe do Núcleo de Tecnológica Educacional de Paulista Página 44 de 278 delay(4000); //espera 4 segundos digitalWrite(LEDvm,LOW); //apaga o LED } //fim do loop Conecte o seu Arduino ao computador usando o cabo USB AB. Agora compile o programa, pressionando o botão Verificar (botão com um V) e posteriormente faça o upload do programa para o Arduino pressionando o botão Carregar (botão com uma Seta apontando para a direita). Pronto, projeto finalizado. Após o upload do programa para o Arduino, o mesmo já começa a se comportar como um sinal de trânsito, acendendo e apagando os LEDs de acordo com a ordem e o tempo definido no programa. EXERCÍCIO Estude o Códico Fonte (sketch) com suas: - Estruturas, – Variáveis, - Operadores booleanos, de comparação e aritméticos, - Estrutura de controle, - Funções digitais e analógicas. DESAFIO (1) Faça uma medição dos tempos equivalente em segundos para deles verificar se o valor de delay(4000) corresponde de fato a 4,0 segundos; (2) Inclua agora mais 01 LED vermelho. Faça com que o sinal vermelho seja escalonado, ou seja, ao ser acionado o vermelho, os 02 LEDs se acendem simultaneamente, mas, antes de passar para o amarelo, apague um dos LEDs vermelhos e temporize 02 segundos antes de passar para o verde. (3) Faça um projeto agora com 02 semáforos de 03 LEDs (vermelho, amarelo e verde) cada um. Simule a operação de um cruzamento com esses 02 semáforos, abrindo para uma rua e interrompendo a outra e vice-versa. (4) Escreva suas conclusões sobre como temporizar o acionamento de LEDs para fazer um semáforo. FONTE http://www.comofazerascoisas.com.br/projeto-arduino-sinal-de-transito.html http://www.comofazerascoisas.com.br/projeto-arduino-sinal-de-transito.html Equipe do Núcleo de Tecnológica Educacional de Paulista Página 45 de 278 RESPOSTA DO DESAFIO - SINAL DE TRÂNSITO (ATIVIDADE 07) (2) Inclua agora mais 01 LED vermelho. Faça com que o sinal vermelho seja escalonado, ou seja, ao ser acionado o vermelho, os 02 LEDs se acendem simultaneamente, mas, antes de passar para o amarelo, apague um dos LEDs vermelhos e temporize 02 segundos antes de passar para o verde. Diagrama Códico Fonte (sketch) int LEDvd = 8; int LEDam = 9; int LEDvm = 10; int LEDvm1 = 11; void setup() { //é executado uma vez apenas pinMode(LEDvd,OUTPUT); //define o pino 8 como saída pinMode(LEDam,OUTPUT); //define o pino 9 como saída pinMode(LEDvm,OUTPUT); //define o pino 10 como saída pinMode(LEDvm1,OUTPUT);} //define o pino 13 como saída void loop() { //é executado enquanto o arduino estiver ligado digitalWrite(LEDvm ,HIGH); //controle do LED vermelho – acende o LED digitalWrite(LEDvm1 ,HIGH); //controle do seguno LED vermelho – acende o LED delay(4000); //espera 4 segundos digitalWrite(LEDvm ,LOW); //controle do LED vermelho – acende o LED digitalWrite(LEDvm1 ,HIGH); //controle do seguno LED vermelho – acende o LED delay(2000); //espera 2 segundos digitalWrite(LEDvm1 ,LOW); //apaga o LED digitalWrite(LEDam,HIGH); //controle do LED amarelo - acende o LED delay(2000); //espera 2 segundos digitalWrite(LEDam,LOW); //apaga o LED digitalWrite(LEDvd,HIGH); //controle do LED verde - acende o led delay(4000); //espera 4 segundos digitalWrite(LEDvd,LOW); //apaga o LED } (3) Faça um projeto agora com 02 semáforos de 03 LEDs (vermelho, amarelo e verde) cada um. Simule a operação de um cruzamento com esses 02 semáforos, abrindo para uma rua e interrompendo a outra e vice-versa. Diagrama Equipe do Núcleo de Tecnológica Educacional de Paulista Página 46 de 278 Códico Fonte (sketch) int LEDvd = 7; int LEDam = 8; int LEDvm = 9; int LEDvd1 = 10; int LEDam1 = 11; int LEDvm1 = 12; void setup() { //é executado uma vez apenas pinMode(LEDvd,OUTPUT); //define o pino 8 como saída pinMode(LEDam,OUTPUT); //define o pino 9 como saída pinMode(LEDvm,OUTPUT); //define o pino 10 como saída pinMode(LEDvd1,OUTPUT); //define o pino 11 como saída pinMode(LEDam1,OUTPUT); //define o pino 12 como saída pinMode(LEDvm1,OUTPUT);} //define o pino 13 como saída void loop() { //é executado enquanto o arduino estiver ligado digitalWrite(LEDvd,HIGH); //acende o LED verde digitalWrite(LEDvm1,HIGH); //acende o LED vermelho1 delay(4000); //espera 4 segundos digitalWrite(LEDvd,LOW); //apaga o LED digitalWrite(LEDvm1,LOW); //apaga o LED vermelho1 digitalWrite(LEDam,HIGH); //acende o LED amarelo digitalWrite(LEDam1,HIGH); //acende o LED amarelo1 delay(2000); //espera 2 segundos digitalWrite(LEDam,LOW); //apaga o LED amarelo digitalWrite(LEDam1,LOW); //apaga o LED amarelo1 digitalWrite(LEDvm,HIGH); //acende o LED vermelho digitalWrite(LEDvd1,HIGH); //acende o LED verde1 delay(4000); //espera 4 segundos digitalWrite(LEDvm,LOW); //apaga o LED vermelho digitalWrite(LEDvd1,LOW); //apaga o LED verde1 digitalWrite(LEDam,HIGH); //acende o LED amarelo digitalWrite(LEDam1,HIGH); //acende o LED amarelo1 delay(2000); //espera 2 segundos digitalWrite(LEDam,LOW); //apaga o LED amarelo digitalWrite(LEDam1,LOW); //apaga o LED amarelo1 delay(500); //espera 0,5 segundos } Equipe do Núcleo de Tecnológica Educacional de Paulista Página 47 de 278 ATIVIDADE 08 – FADE (REVISÃO) Vamos demonstrar o uso da função analogWrite() para apagar um LED em fade (variação gradual). AnalogWrite usa um pulso PWM, alternando o pino digital on e off rapidamente,
Compartilhar