Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO PARÁ FACULDADE DE ENGENHARIA ELÉTRICA E BIOMÉDICA LABORATÓRIO DE SISTEMAS ELETRÔNICOS ALEX HENRIQUE SOUSA SANTOS ARTHUR DA SILVA MOTA BÁRBARA ALMEIDA NEVES JHONYS WILLIAM MARQUES MOURA MARCILÉIA BATISTA RODRIGUES RÔMULO DA SILVA LIMA VALE ROSEANA MARA MONTEIRO MINICURSO DE PROGRAMAÇÃO DE MICROCONTROLADORES 1 BELÉM – PARÁ SUMÁRIO 1. MICROCONTROLADORES ……………………………………………….………………... 4 2. ARDUINO ………………………………………………………………………..……………... 4 3. TINKERCAD ...………………………………………………………………..……………...... 4 3.1 Cadastro...………………………………………………………….…………..…………….… 5 3.2 Ferramentas ...…………………………………………….………..…………….….… 8 3.2.1 CIRCUITOS...………………………….………….……………………..….... 8 3.2.2 CLASSROOM..………………………………………………….………………………........ 8 3.2.2.1 Entrar ...………………………………………………………….……..…… 9 3.2.2.2 INSCREVA-SE AGORA .……………………..………...………………..… 9 3.2.2.3 Não cadastrados …………………………………………………………….. 9 3.3 Circuito..………………………………………………………………………………. 10 3.4 Criação do circuito………………………………………………………………….….10 3.5 Componentes.……………………………………………………………………….… 11 4. ROTEIROS...……………………………………………….………………………………...…16 4.1 Roteiro 1...……………………………………………………………………………... 16 4.1.1 OBJETIVOS……………………………………………………………...….. 16 4.1.2 MATERIAIS…………………………………………………………………. 16 4.1.3 VARIÁVEIS E CONSTANTES……………………………………………... 16 4.1.3.1 Declarações constantes..…………………………………………… 16 4.1.3.2 Declarações de variáveis...………………………………………… 16 4.1.4 PINOS DIGITAIS...………………………………………………………..... 17 4.1.5 BOTÃO COM RESISTOR PULL-DOWN…………………………………. 17 4.1.6 TINKERCAD...…………………………………………………………….. 18 4.1.7 EXERCÍCIOS...……………………………………………………………. 19 4.2 Roteiro 2 ...……………………………………………………………………….…. 20 4.2.1 OBJETIVOS...……………………………………………………………… 20 4.2.2 MATERIAIS...………………………………………………………………. 20 4.2.3 PINOS ANALÓGICOS……………………………………………………... 20 4.4.4 FUNÇÃO MAP …………………………………………………………….. 20 2 4.4.5 COMUNICAÇÃO SERIAL ...……………………………………………… 21 4.4.6 LDR ...………………………………………………………………………. 21 4.4.7 POTENCIÔMETRO ...……………………………………………………... 22 4.4.8 EXERCÍCIOS ...…………………………………………………………… 22 4.3 Roteiro 3 ...…………………………………………………………………………... 24 4.3.1 OBJETIVOS...…………………………………………………………….… 24 4.3.2 MATERIAIS...………………………………………………………………. 24 4.3.3 COMANDO DE SELEÇÃO SIMPLES ...…………………………………... 24 4.3.4 COMANDOS DE SELEÇÃO COMPOSTO……………………………..….. 24 4.3.5 OPERAÇÕES DE COMPARAÇÃO...……………………………………..... 25 4.3.6 OPERAÇÕES LÓGICAS…………………………………………….……… 25 4.3.7 COMANDO DE REPETIÇÃO………………………………………..…….. 25 4.3.7.1 Laço for ………………………………………………………….... 26 4.3.8 LEITURA DO MONITOR SERIAL ………….…………………………….. 27 4.4.9 LED RGB ……………………………………………………..…………….. 27 4.4.10EXERCÍCIOS …………………………………………………………..….. 28 4.4 Roteiro 4 …………………………………………………………………………….... 30 4.4.2 OBJETIVOS……………………………………………………...………….. 30 4.4.1 MATERIAIS ……………………………………………………………..….. 30 4. BIBLIOTECAS ………………………………………………………….…….. 30 4.4.3.1 Bibliotecas padrões ……………………………………………... 30 4.4.3.2 Bibliotecas instaladas pelo usuário …………………………..….... 32 4.4.3 SERVO MOTOR ………………………………..……...……….……….….. 32 4. 4.3.1 Biblioteca servo.…………………………….……………….….... 32 4.4.5 DISPLAY LCD …………………………………………………….………... 32 4.4.5.1 Biblioteca LiquidCrystal ……………………………………...…... 33 4.4.6 EXERCÍCIOS ……..…………………………….……………………...….. 34 4.5 Roteiro 5 ……………………………………………………………………………... 37 4.5.1 OBJETIVOS……………………………………………………………….... 37 4.5.2 MATERIAIS……………………………………………………………..….. 37 4.5.3 FUNÇÕES ………………………….……………………………………….. 37 4.5.4 CRIANDO UMA FUNÇÃO…………………..…………………………….. 38 4..5.6EXERCÍCIOS ……………………………………………………………… 39 3 1. MICROCONTROLADORES Os microcontroladores são microprocessadores que podem ser programados para funções específicas. Geralmente, usa-se para controlar circuitos, por isso, são comumente encontrados dentro de outros dispositivos, sendo conhecidos como "controladores embutidos". A estrutura interna de um microcontrolador apresenta um processador, bem como circuitos de memória e periféricos de entrada e saída. Resumindo, os microcontroladores são apontados como uma junção de hardware com software. Diferente de um circuito integrado, ele pode ser utilizado para diversas funções, desde que programado previamente. 2. ARDUINO Arduino é uma plataforma open source ou hardware para prototipagem eletrônica, projetada com um microcontrolador Atmel AVR com suporte para entrada/saída dados já embutido, utiliza linguagem de programação padrão baseado no em C/C++. Utiliza-se o Arduino pela praticidade fornecida na criação de projetos. A placa de Arduino está pronta com todos os componentes, conectores e soquetes soldados, anteriormente ao Arduino, projetos eram realizados soldando componente a componente, depois criava-se módulo por módulo, cabo por cabo; consequentemente, exigia-se muito tempo na montagem do hardware básico, prejudicando o real projeto. A figura abaixo exibe um Arduino Leonardo. 3. TINKERCAD O TinkerCad é uma ferramenta online, programa baseado em navegador, de design de modelos 3D em CAD (Desenho Assistido por Computador) e também de simulação de circuitos elétricos analógicos e digitais. Ele foi fundado em 2011 pela TinkerCad Company, e desde de 2013, pertence a Autodesk; os projetos publicados na 4 plataforma estão sob licença da Creative Commons. Entre os vários diferenciais do TinkerCad, tem-se a disponibilização do TinkerCad Classroom, uma sala de aula virtual, na qual os usuários cadastrados na plataforma podem ministrar aulas; o detalhe é que os alunos das classes não necessitam inscrever-se no site. Portanto, o TinkerCad configura- se uma poderosa ferramenta de aprendizagem. 3.1 Cadastro ➔ Inicialmente, deve-se acessar o site do TinkerCad: https://www.tinkercad.com/; nele aparecerá a seguinte tela: ➔ Click no item “INSCREVA-SE AGORA”, localizado no canto superior da tela: ➔ Haverá o redirecionamento para tela de cadastro/login/acesso de visitante; como se esá tratando do cadastro, então pressione “Criar uma conta pessoal”: 5 https://www.tinkercad.com/ ➔ Depois a página de criação de conta aparecerá, nela você deve escolher a sua forma de acesso a plataforma: ➔ Dependendo da opção selecionada (“Entrar com e-mail”/ “Entrar com o Google”/ ”Fazer login com a Apple”/ “Mais opções de login…”) haverá um redirecionamento. Partindo do caso de você ter optado por “Entrar com e-mail”, uma paginá de preenchimento de informações surgirá, você deve preencher os dados e clicar em “AVANÇAR”. ➔ Aparecerá outra tela para inserção de informações, nessa em questão, solicitar-se-á o e-mail e senha que serão utilizados. Você insere as informações e clica em “CRIAR CONTA”: 6 ➔ E chega na parte final do cadastro; você poder clicar em “CONCLUÍDO”, e finalizar o cadastro; caso queira receber o correio eletrônico cadastrado as mensagens da Autodesk, basta marcar a caixa. Ainda nessa página, você é informado que sua conta cadastrada serve para todas as plataformas da Autodesk. ➔ Após a finalização do cadastro, você será redirecionado a página de usuário: OBSERVAÇÃO: No e-mail inscrito, chegará uma mensagem de confirmação de cadastro da Autodesk, você deve confirmar, e pronto! Agora você faz parte das plataformas da Autodesk. 7 3.2 Ferramentas O TinkerCad possibilita a criação de circuitos analógicos e digitais, soma-se a isso a criação de projetos dimensionais (2D e 3D), códigos em bloco, e uma plataforma de ensino/aprendizagem online (TinkerCad Classroom). Detetemo-nos a duas ferramentas: criação de circuitos e classroom; haja vista que objetivamos o conhecimento de microcontroladores em um ambiente virtual. 3.2.1 CIRCUITOS Na página de usuário, é exibido as ferramentas do TinkerCad. No canto esquerdo da tela, tem-se: “Circuitos”, clique com o botão direito do mouse, aparecer-lhe-á “Criar novo circuito” e “Experimente os circuitos”; nessas sessões poderemos criar nosso projetos de circuitos. 3.2.2 CLASSROOM ➔ No canto superior direito, escolha uma das opções, “Entrar”ou “INSCREVA-SE AGORA”: 8 3.2.2.1 Entrar: caso você tenha uma conta do Tinkercad ou da Autodesk, basta fazer seu login e acessar a aula na opção “Participar da aula” na sua página inicial da conta, depois insira o código _______ e o apelido que lhe foi enviado, em seguida click em “Ir pra minha aula”. 3.2.2.2 INSCREVA-SE AGORA: caso você deseje criar uma conta pessoal, selecione essa opção e siga as instruções de inscrição atentamente (item 3.1 da apostila). Depois de inscrito, acesse a aula na opção “Participar da aula” na sua página inicial da conta, depois insira o código _______ e o apelido que lhe foi enviado; em seguida click em “Ir pra minha aula” (item 3.2.2.1 da apostila). 3.2.2.3 Sem cadastrado: para acessar a sala de aula sem se cadastrar, basta ir em qualquer uma das duas opções citadas acima, selecionar “Alunos, entrem em uma turma” e inserir o Código _______ e o apelido que lhe foi enviado, em seguida lick em “Ir pra minha aula”. 9 3.3 Circuito Um circuito elétrico é a ligação de elementos elétricos, tais como resistores, indutores, capacitores, diodos, linhas de transmissão, fontes de tensão, fontes de corrente e interruptores, de modo que formem pelo menos um caminho fechado para a corrente elétrica. O TinkerCad possibilita que os usuários desenvolvam circuitos digitais e/ou analógicos, com ou sem a códigos, os quais podem ser por linha de comando ou por bloco. As informações a seguir visam o repasse de orientações quanto ao uso da ferramenta Circuitos dessa plataforma da Autodesk. 3.4 Criação de circuito ➔ Assumido-se que o login tenha sido realizado, na página do usuário, no canto esquerdo está a opção: “Circuitos” , clique nela. ➔ Surgirá “Circuitos Lições”; aperte em “Criar novo circuito”, e você será redirecionado a página do ambiente de montagem do circuito, “Vista do circuito”. A área de montagem está destacada (limitada em vermelho), nela os componentes serão inseridos. 10 3.4 Componentes: O TinkerCad possui vários dispositivos para confecção do circuito: resistores, leds, diodos, capacitores, microcontroladores, placas, osciladores, baterias, entre outros inúmeros componentes. ➔ Componentes: no canto superior direito da tela, tem a opção “Lista de componentes”, cujo ícone clique nele e você verá a lista de componentes do seu circuito. ➔ Visualização dos dispositivos: a plataforma possibilita duas formas de visualizar a lista de componentes disponíveis. No canto superior direito da tela, tem-se “Componentes”, clique nela, e aparecerá duas alternativas “Básico” (visualiza-se os dispositivos básicos de um circuito) e “Todos” (todos os dispositivos fornecidos para criação de circuito).Clicando no ícone é possível conhecer todos os dispositivos disponíveis, e uma descrição detalhada deles. 11 ➔ P esquisa de componentes : no canto superior direito da tela, de posse do nome do dispositivo, pode-se pesquisar por ele na sessão “Pesquisar”, digite o nome e clique na figurinha da lupa. ➔ Adição de componentes: para adicionar componentes no circuito, você deve clicar em um deles com o botão direito do mouse, agora ele está ‘preso’ (não há necessidade de ficar pressionando o componente, pois uma vez clicado, ele só soltará quando se clicar novamente), clique com o botão direito do mouse na área de montagem do circuito que o deixará. ➔ Propriedades dos componentes: alguns componentes podem ter suas propriedades modificadas, por exemplo o resistor, você deve informar a resistência adequada para o que você fará. Para alterar a configuração do componente, clique com o botão direito do mouse em cima do dispositivo que você quer alterar algo; sem seguida aparecerá uma pequena janela, dependendo do dispositivo, haverá n-opções de modificações. 12 ➔ P rogramação: no canto superior direito, você clica em “Código”, você pode programar seu circuito em blocos/blocos + texto/texto. Você pode baixar o código, clicando no ícone . No canto inferior do lado direito, tem “Monitor serial”, clicando nela se pode ver a saída/entrada serial tanto por dados, quanto por gráfico. Detalhe importantes: só se pode programar os componentes inseridos na área de montagem de circuitos, ou seja, caso não haja dispositivos, não programação. ➔ Simulação: no canto superior direito, há “Iniciar simulação”, clique, e o circuito será simulado. Detalhe: quando está em simulação, fica-se impossibilitado de alterar a configuração do circuito, componentes e códigos ficam inalterados; sendo preciso parar a simulação para se realizar alguma modificação. 13 ➔ Exportar: no canto superior direito, clicando em “Exportar”, você pode exportar o circuito para o Eagle, programa de criação de circuitos da Autodesk. ➔ Compartilhar: no canto superior direito, você clica em “Compartilhar/Colaborar no circuito”, agora aperte em “Convidar pessoas”, será gerado um link que você pode compartilhar a pessoas que você deseja que tenham acesso ao seu projeto, ou seja, você pode fornecer um diretório para alteração do circuito. Alguns detalhes a serem ressaltados: primeiro, para quaisquer modificações, deve-se ser inscrito no TinkerCad; e segundo as alterações não são síncronas, significa que ainda é impossível n-usuários modificarem um circuito ao mesmo tempo. ➔ Funções elementares: no canto superior direito da tela, tem-se as seguintes funções disponíveis Girar Excluir Desfazer Refazer Anotações Exibir Ocultar ➔ Nome do circuito: no canto superior direito, ao clicar em “Swanky Wolt”, você pode digitar o nome desejado para o circuito. 14 15 4. ROTEIROS 4.1 Roteiro 1 - Introdução da Linguagem de um microcontrolador (ARDUINO) - Entrada e saída digital - Plataforma Tinkercad 4.1.1 OBJETIVOS • Aprender a acionar pinos digitas como saída e entrada • Conhecer os tipos de variáveis existentes • Aprender a ler nível alto (HIGH) ou baixo (LOW) de um botão • Aprender comandos básicos do IDE (declaração de variáveis, de pinos, etc.) 4.1.2 MATERIAIS • Arduino Jumpers • Protoboard • Led Resistores de 10 k e 220 ohms • Botão 4.1.3 VARIÁVEIS E CONSTANTES Variáveis ou Constantes são espaços reservados na memória ao qual serão atribuídos um nome e um dado de determinado tipo para ser armazenado. No caso das variáveis, como o nome sugere, o valor armazenado pode ser alterado, enquanto nas constantes o valor é fixo. 4.1.3.1 Declarações de constantes const int x = 10; #define x 10 4.1.3.2 Declarações de variáveis boolean x =__; (true / 1 ou false / 0). char x =__; (um caractér qualquer). byte x =__; (guarda 8 bits, por exemplo números de 0 a 255). int x =__; (números inteiros de -32768 a 32767). long x=__; (números inteiros de -2147483648 a 2147483647). float/double x =__; (“ponto flutuante” – valores com parte decimal). 16 unsigned char/int/long x =__; (desconsidera os valores negativos, então o int por exemplo vai de 0 a 65535 nesse caso). char x[3]; (um vetor de 3 “casas” do tipo caractere – uma cadeia de caracteres forma uma string). int x[3][4]; (matriz de 3 linhas e 4 colunas do tipo inteiro). 4.1.4 PINOS DIGITAIS Cada pino do Arduino possui determinados usos possíveis, por isso quando se utiliza esses pinos é preciso declarar qual o pino e como ele será manipulado, só depois esse pino poderá ser usado para as atividades desejadas. Além disso, existem três tipos principais de pinos usados no Arduino: digitais, analógicas e PWM. Como o nome sugere, as portas analógicas trabalham com dados analógicos, as portas digitais trabalham com dados digitais, e as portas PWM são portas digitais capazes de escrever valores analógicos. ➔ Configuração do pino pinMode(pino, OUTPUT); //pino digital de saída ; pinMode(pino, INPUT); //pino digital de entrada; ➔ Escrita digitalWrite(pino, HIGH); // Nível alto; digitalWrite(pino, LOW); // Nível baixo; ➔ Leitura:digitalRead(pino); Uma vez feito a configuração de um pino digital como entrada, a informação contida nesse pino pode ser lida com a função digitalRead e podendo ser armazenada em um variável. Exemplo: int botao = digitalRead(2); Neste exemplo à variável inteira “botão” irá guardar o estado lógico (verdadeiro ou falso), contido no pino digital (2). 4.1.5 BOTÃO COM RESISTOR DE PULL-DOWN: Este circuito funciona da seguinte maneira: Caso o botão esteja pressionado, o pino de saída (out) terá nível lógico alto, caso contrário, o pino de saída terá nível lógico baixo. Repare 17 que com o botão não pressionado a porta está ligada ao GND (LOW), e com o botão pressionado, o caminho com menor resistência será os 5V (HIGH). Figura 1: Conexão de botão com resistor de pull-down. - Observação : digitalRead(pino): faz a leitura do estado do pino digital. 4.1.6 TINKERCAD Aqui está um breve lembrete para acessar a sala de aula no tinkercak, caso ainda não tenham acessado. Para utilizar a plataforma, primeiro entre no site: www.tinkercad.com; No canto superior direito escolha uma das opções: ➔ Entrar: caso você tenha uma conta do Tinkercad ou da Autodesk, basta fazer seu login e acessar a aula na opção “Participar da aula” na sua página inicial da conta, depois insira o código _______ e o apelido que lhe foi enviado; em seguida click em “Ir pra minha aula”. ➔ Inscreva-se: caso você deseje criar uma conta pessoal, selecione essa opção e siga as instruções de inscrição atentamente. Depois de inscrito, acesse a aula na opção “Participar da aula” na sua página inicial da conta, depois insira o código _______ e o apelido que lhe foi enviado; em seguida click em “Ir pra minha aula”. ➔ Para acessar a sala de aula sem se cadastrar, basta ir em qualquer uma das duas opções citadas acima, selecionar “Alunos, entrem em uma turma” e inserir o Código _______ e o apelido que lhe foi enviado.em seguida click em “Ir pra minha aula”. Quando estiver na sala de aula do Tinkercad, você terá acesso a todas as ferramentas utilizadas nos vídeos, além de muitas outras, sinta-se livre para explorar! Mas não esqueça de concluir as atividades propostas para que seja vista sua participação. 18 http://www.tinkercad.com/ 4.1.7 EXRCÍCIOS 1 Faça um programa para piscar um led que está conectado a um pino digital. Lembre-se que esse pino vai se comportar como um pino de saída. 2 Faça um programa que deve funcionar da seguinte maneira, quando o botão for pressionado o led deve piscar, quando não pressionado o led deve permanecer apagado. Figura 2: Esquemático para o exercício 1. Figura 3: Esquemático para o exercício 2. 19 4.2 Roteiro 2 • Entrada e saída analógica • Comunicação Serial 4.2.1 OBJETIVOS • Entender o funcionamento da comunicação seria • lAprender a trabalhar com dados analógicos. • Saber utilizar a função map 4.2.2 MATERIAIS • Arduino • Jumpers • Protoboard • LDR • Potenciômetro • Resistores de 10k e 220 ohms 4.2.3 PINOS ANALÓGICOS Como já foi visto, os três principais pinos utilizados no Arduino são digitais, analógicas e PWM. De forma análoga ao que vimos com as portas digitais, as portas analógicas trabalham com dados analógicos, já as portas PWM são portas digitais capazes de escrever valores analógicos. A placa Arduino possui um conversor analógico-digital de 10 bits, ou seja, mapeia um total de 1024 (210) tensões, isso sinifica que há uma variação de 0 à 1023. O Arduino Uno possui um total de 6 portas analógicas enumeradas de A0 à A5 (a quantidade varia dependendo do tipo de Arduino), essas portas são utilizadas para realizar leituras de componentes que tem seus valores variados. Se o seu objetivo é usar um valor analógico para escrever em um componente digital, basta usar uma porta PWM. Os valores nessas portas devem variar de 0 à 255 (8 bits). • Comandos analógicos: analogRead(Apino); //Faz a leitura de um pino analógico analogWrite(Apino, valor); //Escreve um valor analógico em uma porta PWM 4.2.4 FUNÇÃO MAP [ map(valor, min1, max1, miin2, max2)] A função map () remapeia um número de um intervalo para o outro. O parâmetro “valor” é o número a ser mapeado, enquanto os parâmetros min1 e max1 são os limites do intervalo atual e os parâmetros min2 e max2 serão os limites do novo intervalo. Exemplo: int v = map (analogRead(A0), 0, 1023, 0, 255); 20 A variável ‘v’ irá guardar a leitura do nível analógico do pino A0 e será convertida do intervalo [ 0, 1023] para o intervalo [ 0, 255]. 4.2.5 COMUNICAÇÃO SERIAL A placa Arduino tem a poderosa possibilidade da comunicação serial, que permite a comunicação direta da placa com um computador ou outra placa que possua a mesma comunicação, pelos pinos RX e TX ou pela porta serial. ➔ Inicialização da comunicação serial Serial.begin(velocidade): A velocidade padrão da IDE é 9600, por isso é a mais usada em projetos simples, e diz respeito à velocidade de transmissão e recepção de dados. Contudo, dependendo do projeto pode ser necessária uma velocidade maior. ➔ Comandos de comunicação serial Serial.print( ); // Imprime dados na porta serial como texto ASCII. Serial.println( ); // Imprime dados na porta serial como texto ASCII com quebra de linha ao final. Serial.print(valor, formato[opcional]): Um segundo parâmetro opcional especifíca a base (formato) a ser usada; valores permitidos são BIN(binário, ou base 2), OCT(octal, ou base 8), DEC(decimal, ou base 10), HEX(hexadecimal, ou base 16). Para números de ponto flutuante, esse parâmetro especifica o número de casas decimais a serem impressas. Serial.println(valor, formato[opcional]); Serial.read( ); // Lê um texto escrito na porta serial. Serial.availabe( ); // Retorna a quantidade de dados disponíveis para leitura em bytes na porta serial. 4.2.6 LDR: Figura 1: LDR. 21 O LDR é um resistor dependente de luz, ou seja, quanto maior a luz incidente nesse componente menor será sua resistência. O LDR é constituído de um semicondutor de alta resistência, que ao receber uma grande quantidade de fótons oriundos da luz incidente, ele absorve elétrons que melhoram sua condutibilidade, reduzindo assim sua resistência. Dessa forma, esse semicondutor pode assumir resistências na ordem de mega Ohm no escuro e resistência na ordem de poucas centenas quando exposto a luz. Para conectar o LDR em um circuito apenas ligamos uma perna ao GND e a outra, conectado à um resistor de 10k Ohms, em uma entrada analógica do Arduino. 4.2.7 POTENCIÔMETRO Figura 2: Potenciômetro. Potenciômetro é um componente eletrônico que cria uma limitação para o fluxo de corrente elétrica que passa por ele, e essa limitação pode ser ajustada manualmente, podendo ser aumentada ou diminuída. Os potenciômetros tem a mesma funcionalidade que os resistores, nos quais limitam o fluxo de corrente elétrica em um circuito, a diferença é que o potenciômetro pode ter sua resistência ajustada e o resistor comum não pode, pois ele possui um valor de resistência fixo. O potenciômetro possui 3 terminais, onde os terminais das extremidades devem estar ligados um no GND e o outro no VCC. O terminal central será ligado em uma porta analógica do Arduino. 4.2.7 EXERCÍCIOS 1 Elabore um programa onde o brilho do led é controlado com o potenciômetro. 2. Elabore um programa onde o brilho do led é controlado com o LDR. Observação: O led deve ter o brilho forte quando o LDR captar o mínimo de luz e ter brilho fraco se a intensidade de luz for máxima. 22 Figura 3: Esquemático para a questão 1. 23 4.3 Roteiro 3 • Comandos de seleção • Comando de repetição • Led RGB 4.3.1 OBJETIVOS • Conhecer e aprender como usar a comando de seleção simples ( IF) e o comando de seleção composto (IF/ELSE) . • Entender o funcionamento de um comando de repetição. 4.3.2 MATERIAIS • Arduino.• Jumpers. • Protoboard. • Led RGB. • Leds. • Resistores de 220 ohms. 4.3.3 COMANDO DE SELEÇÃO SIMPLES Um comando de seleção simples avalia uma condição, ou expressão, para executar uma ação ou conjunto de ações. No Arduino o comando de seleção simples é dado pela condição IF, que pode ser executada da seguinte maneira: if (condição) { //comando(s) } O bloco de comandos delimitado por chaves é executado, se a condição é verdadeira. 4.3.4 COMANDO DE SELEÇÃO COMPOSTO Um comando de seleção composto é complementar ao comando de seleção simples. No Arduino o comando de seleção composto é dado pela condição ELSE (além do ja visto IF), que pode ser executado da seguinte maneira: if { (condição) { comandos A)} eles {comandos b} } 24 O bloco de comando(s) A é executado somente se a condição do IF for verdadeira. Por outro lado, o bloco de comando(s) B é executado somente se a condição do IF for falsa. 4.3.5 OPERAÇÕES DE COMPARAÇÃO OPERAÇÕES RESULTADO X == Y X é igual a Y X != Y X é diferente de Y X > Y X é maior que Y X < Y X é menor que Y X<=Y X é menor igual que Y X > = X X é maio igual a C 4.3.6 OPERAÇÕES LÓGICAS Operador AND ( && ): A expressão resultante só é verdadeira se todas as expressões unidas por esse operador também forem. Por exemplo, a expressão (x > =0 && x <=9) será verdadeira somente se as expressões (x >=0) e (x <=9) forem verdadeira. Operador OR ( || ): A expressão resultante é verdadeira se alguma das expressões unidas por esse operador também for. Por exemplo, a expressão (a == 'F' || b !=32) será verdadeira se uma de suas duas expressões, (a == 'F') ou (b !=32) for verdadeira. Operador NOT ( ! ): Inverte o valor lógico da expressão a qual se aplica. Por exemplo, a expressão !(x == 10) se transforma em (x > 10 || x < 10). 4.3.7 COMANDO DE REPETIÇÃO Existe casos em que é preciso que um bloco de comandos seja executado mais de uma vez se uma determinada condição for verdadeira. Para isso, precisamos de uma estrutura de repetição que permita executar um conjunto de comandos quantas vezes forem necessárias. Isto é muito similar ao que ocorre no fluxograma abaixo, onde o símbolo do losango permite escolher entre diferentes caminhos com base em uma condição do tipo verdadeiro/falso, com a diferença de que agora o fluxo do programa é desviado novamente para a condição final da sequência de comandos 25 Figura 1: Fluxograma de um comando de repetição. De acordo com a condição, os comandos serão repetido zero (se falsa) ou mais vezes (enquanto a condição for verdadeira). Essa estrutura normalmente é denominada laço ou loop. 4.3.7.1 Laço for Basicamente, o comando for é usado para repetir um comando, ou uma sequência de comandos, diversas vezes. A forma geral de um comando for é: for ( inicialização; condição; incremento){ // Sequência de comandos } Na execução do comando for, a seguinte sequência de passos é realizada: ➔Inicialização é executada: Nela as variáveis recebem um valor incial para usar dentro do for. ➔Condição é testada: - Se a condição for considerada verdadeira, a sequência de comandos será executada. Ao final da sequência de comandos, o fluxo do programa é desviado para o incremento. - Se a condição for considerada falsa, a sequência de comandos não será executada (fim do laço for). • Incremento: Terminada a execução da sequência de comandos, ocorre a etapa incremento das variáveis usadas no for. Ao final dessa etapa, o fluxo do programa é novamente desviado para a condição. 26 ➔ 4.3.8 LEITURA DO MONITOR SERIAL Em muitos programas precisamos ler dados recebidos do monitor serial e para isso utilizamos algumas funções de Comunicação Serial do Arduino. A figura 3 é um exemplo de código que realiza essa função. Figura 2: Exemplo de código. 4.3.9 LED RGB (Red Green Blue) Figura 3: Led RGB catodo comum. Assim como os Led’s tradicionais, o Led RGB emite luz por meio da passagem de corrente elétrica, mas ele apresenta a peculiaridade de ser composto por três Led’s de cores diferentes, sendo elas: vermelho (Red), verde (Green) e azul (Blue), surgindo daí o nome “RGB”. 27 Cada Led pode ser controlado de maneira individual, conectando apenas os seus terminais em alguma fonte de energia e deixando os outros desconectados, mas o seu grande diferencial está em justamente utilizar os três ao mesmo tempo, no qual utilizando pulsos PWM para realizar o controle de intensidade de cada cor individualmente obtemos uma grande variedade de cores. Podemos também utilizar pulsos digitais para adquirir outras cores, porém existe apenas 7 possibilidades como mostra a tabela abaixo. Figura 4: Tabela de cores para pulsos digitais. 4.3.10 EXERCÍCIOS: 1. Faça um programa, onde uma sequência de 7 cores de um Led RGB é definida por um caracter digitado no monitor serial. (b = Branco, A = Azul, V = Vermelho, v = Verde, a = Amarelo, m = Magenta, c = Ciano). Se não for pressionado nem uma das teclas mencionadas anteriormente, o Led deve ser apagado. Utilize a tabela da figura 4 como referência de quais Leds devem ser acesos para cada cor. 2. Utilizando o comando de repetição for, crie um programa que aumente gradativamente o brilho de um Led, e após atingir seu brilho máximo, diminua gradativamente. Mostre no monitor serial o valor da variável de controle do brilho. 3. Controle um arranjo com 4 Leds utilizando o comando for de modo que os Leds acendam e apaguem de forma sequencial. 28 Figura 5: Esquemático para a questão 1. Figura 6: Esquemático para a questão 2. Figura 7: Esquemático para a questão 3. 29 4.4 Roteiro 4 • Bibliotecas • Servo Motor • Display LCD 4.4.1 OBJETIVOS • Aprender o funcionamento do display lcd 16x2 • Conhecer e aprender sobre o funcionamento de um Servo Motor. 4.4.2 MATERIAIS • Arduino Jumpers • Resistor. • Protoboard • Servo motor • Potenciômetro • Display LCD 4.4.3 BIBLIOTECA Uma biblioteca é um arquivo contendo um conjunto de funções (pedaços de código) já implementados e que podem ser utilizados pelo programador em seu programa. O comando #include é utilizado para declarar as bibliotecas que serão utilizadas pelo programa. De modo geral, os arquivos de bibliotecas na linguagem do Arduino são terminados com a extensão .h. Abaixo temos um exemplo do uso do comando #include: #include <Nome_da_Biblioteca.h>: O pré-processador procurará pela biblioteca nos caminhos de procura pré-especificados do compilador. 4.4.3.1 Bibliotecas padrões: As bibliotecas padrão são incluídas na instalação do IDE do Arduino e estas bibliotecas podem ser acessadas através do caminho: Sketch > Incluir biblioteca > Arduino bibliotecas. 30 Figura 1: Incluindo uma biblioteca. Podemos também acessar códigos de exemplo que o Arduno dispõe, basta acessar o caminho: Arquivo > Exemplos. Figura 2: Acessando os códigos de exemplo. 4.4.3.2 Bibliotecas instaladas pelo usuário: Podemos baixar bibliotecas da internet e utiliza-las em nossos códigos. Para isso, basta seguir os seguintes passos: Sketch > Incluir biblioteca > Adicionar biblioteca .ZIP. Figura 3: Biblioteca instalada pelo usuário. 31 4.4.4 SERVO MOTOR Figura 4: Servo motor. Um Servo Motor, também chamado de servo, é um motor que nos possibilita o controle de sua posição angular através de pulsos PWM. Este módulo é excelente para atender as suas necessidades seja elas em aeromodelismo ou em projetos mecatrônicos. Servo Motores consomem uma corrente significativa ao se movimentarem. A utilização de uma fonte externa pode ser necessária e é recomendada. Lembre-se de conectar o pino GND da fonte externa ao GND do Arduino para que a referência seja a mesma. Geralmente os Servos possuem 3 pinos: i.1 Alimentaçãopositiva (Vermelho): 5V. i.2 Terra (Preto ou marrom): GND. i.3 Controle (Amarelo, laranja ou branco): Ligado à um pino digital. 4.4.4.1 Biblioteca Servo.h Para programa-lo, utilizaremos a biblioteca padrão da IDE do Arduino Servo.h, também presente no Tinkercad. Abaixo temos algumas funções dessa biblioteca. Servo NomedoServo; // Declara o servo com o nome "NomedoServo" NomedoServo.attach(pino); //Declara o pino em que o Servo está conectado (void setup). A biblioteca Servo suporta apenas servos nos pinos 9 e 10. NomedoServo.write(ângulo); //Gira o Servo no ângulo especificado (Dependendo do módulo, o ângulo varia entre 0° e 180° ou entre 0° e 360°). 4.4.5 DISPLAY LCD Figura 5: Sensor ultrassônico. 32 O display lcd permite que tenha uma interface visual no circuito funcionando externo a um computador, permitindo por exemplo que, se uma informação importante é mostrada no monitor serial, essa informação seja mostrada no display quando o circuito for testado longe do computador. Além disse, abre possibilidades de customização e criação maiores, podendo ser usado para funções meramente estéticas quando não estiver mostrando as informações importantes do circuito. As conexões do Display estão representadas na tabela a seguir: Figura 6: Pinagem do Display LCD 16x2. 4.4.5.1 Biblioteca LiquidCrystal.h Para programá-lo, utilizaremos a biblioteca LiquidCrystal.h que está disponível na internet para download e uso na IDE Arduino, mas já tem no Tinkercad. Abaixo temos algumas funções dessa biblioteca. • LiquidCrystal NomeLCD (pinoRS, pinoE, Pinosbit); //Declara o display com o nome “NomeLCD” e nos parâmetros deve ser informado os pinos RS, E e todos os pinos de bit usados. • NomeLCD.begin(NúmeroDeColunas, NúmeroDeLinhas); //Inicia a comunicação com o display, de acordo com o tipo de display por colunaXlinha (no nosso caso é o display 16x2). • NomeLCD.clear(); //O comando .clear() vai limpar a tela do display, vai apagar todos os caracteres presentes no momento de execução. 33 • NomeLCD.setCursor(coluna, linha); //O cursor de escrita será posicionado em uma posição específica definido em número de linha e coluna (Obs.: o display 16x2 tem 2 linhas e 16 colunas, mas a contagem começa sempre em 0, então a primeira coluna é a coluna 0 e a última é a coluna 15). • NomeLCD.print(); //O commando .print() vai mostrar na tela do display o que for inserido dentro do parênteses. Lembrando que caracteres ou frases devem ser identificados por ‘’. • NomeLCD.scrollDisplayLeft() ou NomeLCD.scrollDisplayRight(); //Esse commando irá mover todos os caracteres da tela uma casa para a esquerda (Left) ou direita (Right), dando a impressão de o texto estar “deslizando” na tela. • NomeLCD.noDisplay(); ou NomeLCD.display(); //Fará com que o display se desligue ou se ligue, respectivamente (isso não apaga o que estava no display). • NomeLCD.noBlink(); ou NomeLCD.blink(); // Fará com que o cursor de escrita apareça piscando ou fique apagado, respectivamente. • NomeLCD.noAutoscroll(); ou NomeLCD.autoscroll(); //Esse commando destaiva ou ativa o scroll automático, respectivamente, e assim como o .scrollDisplay, o Autoscroll irá mover todos os caracteres, porém agora de forma automática. Ou seja, pode ser inserido vários caracteres em um mesmo ponto do display, e essa função automaticamente irá mudar a posição do character antigo (se houver) uma casa para a esquerda, dando a mesma impressão de “deslize”, porém agora mais suave. • NomeLCD.rightToLeft(); ou NomeLCD.leftToRight(); //Determina a escrita automática da direita para a esquerda ou da esquerda para a direita, respectivamente. De forma parecida ao commando anterior, essa função fará uma escrita automática para o usuário, a diferença é que está passará os novos caracteres para a esquerda (rightToLeft) ou para a direita (leftToRight) do character anterior (se houver). • NomeLCD.createChar(número, nome); //Essa função permite adicionar um caracter especial criado por você na memória do display e usa-lo no código, para fazer isso deve ser passado um número de identificação do caracter e a variável onde ele está salvo. Para usar esse caracter deve-se usar o commando NomeLCD.write((byte)número); onde “número” é a identificação que você determinou anteriormente. 4.4.6 EXERCÍCIOS 1. Crie um programa que movimente o Servo Motor de um lado para o outro quando digitado algum caracter no Monitor Serial. Quando digitado o caracter 'a' o servo deve girar para a posição 0°, se for digitado ‘b’ o servo deve girar para a posição 90° e se o caracter digitado for 'c' o servo deve girar para a posição 180°. 34 2. Faça um programa em que um potenciômetro controle a angulação do Servo Motor. 3. Faça um programa que escreva uma mensagem pré-digitada no display, letra por letra, de forma automática e em loop. 4. Faça uma interface interativa do display LCD com o usuário. Seja criativo! 5. Utilize os caracteres especiais para fazer uma animação ou para dar uma aparência diferente para o display LCD. 6. Utilizando o comando de repetição for, crie um programa que aumente gradativamente a posição do Servo Motor até atingir seu máximo, e após isso diminua a posição gradativamente. Enquanto isso, a angulação deve ser mostrada no display. Porém, caso um valor de 0 até 180 seja digitado no terminal, o servo deve ir para essa posição, e depois encerrar o programa. Figura 7: Esquemático para a questão 1. Figura 8: Esquemático para a questão 2. 35 Figura 9: Esquemático para questão 3, 4 e 5. Figura 10: Esquemático para questão 6. 36 4.5 Roteiro 5 • Criação de funções. • Uso de funções criadas. 4.5.1 OBJETIVOS • Aprender e entender como criar uma função qualquer. • Aprender como usar a função criada, com ou sem parâmetros. 4.5.2 MATERIAIS • Arduino. • Jumpers • Resistor • Protoboard. • Led RGB 4.5.3 FUNÇÕES Uma função é um commando único que tem como objetivo tornar a programação mais simples, rápida, organizada e intuitiva. Por trás da função, estão escondidas várias linhas de códigos, mais complexas que o comando usado para executar a função, deixando o código muito mais fluido para o caso de blocos de códigos muito complexos, repetitivos, ou até programas muito bagunçados. Apesar de ainda não termos definido o que é função antes desta aula, já usamos e apresentamos várias funções e já falamos de funções de forma indireta anteriormente. A seguir estão alguns exemplos das muitas funções já vistas: pinMode(3, OUTPUT); digitalWrite(4, HIGH); map (ldr, 0, 1023, 0, 255); Servo.write(100); Assim, fica mais claro entender o motivo de dizer que uma biblioteca acrescenta funções no programa, pois os commandos da biblioteca são nada mais que funções que escondem uma condificação mais complexa por trás de uma única linha mais fácil de ser entendida pelo usuário. Obs.: uma função não salva nada, se a função retorna algo, isso deve ser salvo em uma variável para não ser perdido. 4.5.3 CRIANDO UMA FUNÇÃO As funções são criadas seguindo as mesmas ideias já vistas, deve ser declarado que tipo de função é, seu nome e seus parâmetros, no caso de uma função é opcional receber parâmetros. O tipo de função diz respeito a que tipo de valor ela vai retornar, contudo existe a função do tipo void, que é uma função que por padrão não retorna nada. void NomeDaFunção(parâmetro){} // Cria a função; O parâmetro deve ser declarado dentro dos parênteses como que tipo de variável será recebida e qual seu nome (ex.: double resistor); Dentro de “{}” é onde ficará o bloco de códigos a ser executado. 37 NomeDaFunção(); //Chama a função para ser executada; Caso a função receba algum parâmetro, este dever colocado dentro de “()”. return valor; //Devolve um valor da função. Assim como a função pode receber um parâmetro, também pode devolver algo (com exceção da função de tipo void). A estruturalembra a das funções padrão de execução do Arduino, Setup e Loop, a diferença é que essa função criada só será executada quando chamada no programa. Figura 1: Exemplo de criação e uso de funções. No exemplo acima, foram criadas duas funções, uma do tipo void e outra do tipo int, isto pois a primeira não retorna nenhum valor e a segunda retorna um valor inteiro. A primeira função é chamada no setup e faz apenas o papel de pinMode, que é justamente o único commando dentro da função. Já a segunda função, é usada para fazer um led piscar, recebendo o pino em que o led está e o estado que será escrito no mesmo, e devolvendo este mesmo estado também, o valor retornado passa então por um NOT e é salvo na variável “binario”. Perceba que as variáveis “led” e “pino” não são as mesmas, e mesmo assim podem ser usadas “juntas”, acontece que quando led é passsado como parâmetro para uma das funções, na verdade a variável pino salva o valor que está em led, e a variável pino é que está sendo usada nas funções (Obs.: pino e estado são variáveis locais das suas respectivas funções), e é importante que ambas as variáveis sejam do mesmo tipo para isso ser possível. Note também que a ordem de valores inseridos faz diferença quando existe mais de um parâmetro na função. No fim, olhando apenas para a parte de execução do Código, vemos que o Código de piscar o led foi reduzido a uma linha no setup e uma linha no loop, podendo comparar com o código feito no início do minicurso que tinha mesma finalidade. 38 4.5.4 EXERCÍCIOS: 1. Faça um programa utilizando uma função, onde se um botão for pressionado o led irá trocar de estado e permanecer assim, a não ser que o botão seja pressionado novamente. 2. Faça um programa em que um fotorresistor controle o brilho de um led através de uma função. 3. Faça um programa em que um fotorresistor controle o brilho de um led através de uma função. 4. Crie uma função para controlar um servo motor recebendo o valor do angulo desejado diretamente da porta serial, escolhido pelo usuário. 5. Utilize uma função para um código onde o usuário insere uma palavra na entrada serial e ela é escrita no display lcd. Figura 2: Esquemático para a questão 1. 39 Figura 5: Esquemático para questão 4. Figura 6: Esquemático para questão 5. 40 4.2.3 PINOS ANALÓGICOS 4.2.6 LDR: 4.2.7 POTENCIÔMETRO 4.2.7 EXERCÍCIOS 4.3.3 COMANDO DE SELEÇÃO SIMPLES 4.3.4 COMANDO DE SELEÇÃO COMPOSTO 4.3.5 OPERAÇÕES DE COMPARAÇÃO 4.3.6 OPERAÇÕES LÓGICAS 4.3.7 COMANDO DE REPETIÇÃO 4.3.7.1 Laço for 4.3.8 LEITURA DO MONITOR SERIAL 4.3.9 LED RGB (Red Green Blue) 4.3.10 EXERCÍCIOS:
Compartilhar