Arduinando

Tipo de documento:Revisão Textual

Área de estudo:Tecnologia da informação

Documento 1

ifmt. edu. br Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino IFMT Campus Cuiabá A obra Aprendendo a Programar em Arduino de Micael Gaier - PET AutoNet IFMT foi licenciada com uma Licença Creative Commons - Atribuição - Uso Não Comercial - Partilha nos Mesmos Termos 3. Não Adaptada. Micael Bronzatti Gaier 1 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Sumário Introdução 4 Conhecendo A Plataforma Arduino 5 Base Da Programação Em Arduino 11 Comentários 11 Funções - Base 12 Pinmode(Pino, Modo) 12 Entrada E Saída De Dados I 12 Portas Digitais 12 Portas Analógicas 12 Tempo 14 Bibliotecas 15 #INCLUDE e #DEFINE 15 Variáveis E Modificadores 16 Variáveis 16 Classe De Variáveis 16 Tipos De Dados E Modificadores 17 Funções I Como Programar Em Arduino Operadores Booleanos, De Comparação E Incremento E Decremento 18 20 20 Operadores De Comparação 20 Operadores Booleanos 20 Operadores De Incremento E Decremento 21 Estruturas De Controle De Fluxo 21 If 21 If.

Há placas com diversas capacidades e variados microcontroladores, assim, podemos realizar diferentes tipos de projetos usando uma mesma plataforma de desenvolvimento. Neste minicurso, estaremos usando a plataforma ARDUINO UNO. ● ● ● Texto extraído da Revista Saber Eletrônica; Ano 47; N° 454 – 2011; Editora Saber LTDA Páginas 12 a 15. Autor Filipe Pereira Apresentação do Arduino: É uma placa microcontroladora baseada no microcontrolador ATmega 328. Ela tem 14 pinos I/O digitais, 6 entradas analógicas, um oscilador de 16 MHz (a cristal), uma conexão USB, um jaque de alimentação, um header ICSP, e um botão de reset. A alimentação recomendada é de 7 a 12 volts. Os pinos de alimentação são: VIN - Entrada de alimentação para a placa Arduino quando uma fonte externa for utilizada. Poderse-á fornecer alimentação por este pino ou, se for usar o conector de alimentação, empregar a alimentação por este pino.

V - A fonte de alimentação utilizada para o microcontrolador e para outros componentes da placa pode ser proveniente do pino Vin através de um regulador on-board, ou ser fornecida pelo USB ou outra fonte de 5 volts. V3 - Alimentação de 3,3 volts fornecida pelo chip FTDI. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicação SPI, que embora compatível com o hardware, não está incluída na linguagem do Arduino. LED: 13 - Há um LED já montado e ligado de origem ao pino digital 13. Quando o pino está no valor HIGH, o LED acende; quando o valor está em LOW, ele apaga. O Arduino tem 6 entradas analógicas e cada uma delas tem uma resolução de 10 bits (i. e. Comunicação Com o Arduino, a comunicação com um computador, com outro Arduino ou com outros microcontroladores é muito simplificada.

O ATmega328 permite comunicação série no padrão UART TTL (5V), que está disponível nos pinos digitais 0 (RX) e 1 (TX), vide figura 2. Um chip FTDI FT232RL na placa encaminha esta comunicação série através do USB e os drives FTDI (incluído no software do Arduino) fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor série que permite que dados simples de texto sejam enviados à placa Arduino. Os LEDs RX e TX da placa piscam quando os dados estão para ser transferidos para o computador pelo chip FTDI. Quando é feito reset a esta linha (ativo baixo), o sinal cai por tempo suficiente para efetuar o reset ao chip. O software Arduino usa esta característica para permitir carregar o programa simplesmente pressionando-se o botão “upload” no ambiente Arduino.

Isto significa que o “bootloader” pode ter um “timeout” mais curto, já que a ativação do DTR (sinal baixo) pode ser bem coordenada com o início do “upload”. Considerando que é programado para ignorar dados espúrios (i. e. O software está disponível para Windows, Linux e Mac OS no site www. arduino. cc. IDENTIFICAÇÃO DO HARDWARE EM WINDOWS 7. Quando você for compilar algum programa e for passar para o hardware será necessário plugar o Arduino na entrada USB do seu computador, porém isso não se procede de forma automática e é necessário realizar o seguinte procedimento. O programa precisa identificar qual é o fim de uma linha de programação para poder seguir rodando o programa, para isso, é necessário ao final de cada linha onde possa ser identificado um comando, o uso de ; (ponto e vírgula).

Para demonstrar essa base, vamos pegar um simples programa, que se encontra como exemplo dentro do próprio software, sendo ele para ligar um pequeno LED que se encontra na placa do circuito, identificado como pino 13. EXEMPLO 1: /* Liga o LED por um segundo e então o apaga por um segundo, repentidamente. Este exemplo de código é livre, de domínio publico. Traduzido por Micael Bronzatti Gaier */ void setup() { // inicializa o pino digital como saída de dados. O MODO ele pode ser de entrada (INPUT) ou saída (OUTPUT) de dados. OBSERVAÇÃO: Quando se tratar de uma leitura de dados analógicos, no caso os pinos A0 ao A5, não é necessário realizar a declaração destes pinos em void setup(), porém, os pinos analógicos, também podem ser usados como pinos digitais, assim, quando estiver se referindo ao uso destes pinos como digitais, você deverá identificar no programa na função de inicialização como pino 14 (no caso do A0) até o 19 (no caso do A5).

ENTRADA E SAÍDA DE DADOS I Quando desejarmos introduzir dados ou ler dados recebidos de uma porta, devemos usar alguns comandos específicos. PORTAS DIGITAIS digitalRead(pino) Este comando é responsável pela leitura de dados nas portas digitais disponíveis. Como falamos de leitura de dados digitais, ela será feita como HIGH ou LOW. V na entrada do equipamento, a tensão de referência será: 𝑨𝑹𝑬𝑭 = 𝟒, 𝟐𝑽 𝒙 𝟑𝟐𝒌𝑶𝒎𝒔 = 𝟑, 𝟔𝟑𝑽 𝟑𝟐𝒌𝑶𝒎𝒔 + 𝟓𝒌𝑶𝒎𝒔 Se for definido o uso de uma tensão de referência externa, as portas disponíveis com valores de 5V e 3,3V serão fechadas e passarão a não funcionais mais. analogReference(TIPO) Em software, este comando é usado para definir qual é a tensão de referência que será usado em hardware. Ou seja, se o TIPO será padrão (DEFAULT), interna (INTERNAL) ou externa (EXTERNAL).

analogRead(pino) Este comando é usado para realizar a leitura de alguma entrada analógica. Uma entrada analógica não precisa ser definida na função de inicialização como de entrada ou saída. delayMicroseconds(tempo em us) Este comando possibilita uma pausa do programa em execução em uma quantidade de microssegundos específica que é nomeada no campo tempo em us. millis() Este comando possibilita o retorno da quantidade de tempo que passou, em milissegundos, desde que o programa atual começou a ser executado. Para usar este comando, é necessário o uso da variável unsigned long. Observe o EXEMPLO 2 para podermos prosseguir com os ensinamentos: /* Entrada Analógica Demonstra a leitura de um sensor analógico (A0) e a emissão de luz de um LED (13). O tempo que o LED permanecerá acesso dependerá do valor obtido do sensor.

h> Quando adicionar uma biblioteca ao seu programa, é necessário verificar as instruções corretas para realizar a programação. include e #define Quando você usa #include, você está dizendo ao programa que ele deve incluir o arquivo-cabeçalho ao programa. O uso da ferramenta #define é interessante para ser usado com o Arduino. Observando o exemplo 2, você percebe que logo após a declaração da ferramenta, é colocado um nome em geral. Após ele foi usado o local onde está o sensor no Arduino, o pino A0. A partir do momento em que o programa voltar à função principal, esta variável deixará de existir. VARIÁVEIS GLOBAIS Uma variável global é aquela variável que é conhecida por todo o programa, ou seja, independente da função que estiver sendo executada ela será reconhecida e rodará normalmente.

Uma variável global ela é declarada antes mesmo da função void setup(). VARIÁVEIS ESTÁTICAS Funcionam de forma parecida com as variáveis globais conservando o valor durante a execução de outras funções, porém, só são reconhecidas dentro da função onde é declarada. Como exemplo, podemos dizer que uma variável estática é uma variável declarada dentro da lista de parâmetros de uma função. Você pode usar uma string para memorizar dados obtidos em forma de caracteres. Numa string você denomina o nome e a quantidade máxima de caracteres que você pretende usar mais um caractere reservado para o caractere nulo. Usando uma string você pode modificar um caractere em particular no programa. Exemplo: char str1[8] = { ‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’, ‘/0’ }; char str2[15] = “arduino”; TIPO char int float double void TAMANHO (BITS) 8 16 32 64 0 INTERVALO -128 a 127 -32768 a 32767 3,4E-38 a 3,4E+38 1,7E-308 a 1,7E+308 sem valor MODIFICADORES Para cada tipo de variável, existem os modificadores de tipos, sendo eles: signed, unsigned, short, long.

Porém, em float não se pode aplicar nenhum modificador, e no double o único aceito é o long. Existem dois tipos de funções: as que retornam algum valor para a função onde está inserida e as funções que não retornam nenhum valor. Tipo int Uma função int retorna um valor para a função que a chamou. Há duas formas de retornar de uma função, uma delas é quando o finalizador de função ( } ) é encontrado, ou quando for feito o uso da declaração return. A declaração return retorna um valor especificado para a função que a chamou. Micael Bronzatti Gaier 18 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Exemplo: int checkSensor(){ if (analogRead(A0) > 400) { return 1; else{ return 0; } } // se a leitura do pino A0 for maior que 400 // retorna 1 (verdadeiro) // se não for, retorne 0 (falso) Tipo void uma função tipo void não retorna nenhum valor para a função que a chamou, ou seja, as ações executadas nesta função não resultaram em números binários, variáveis booleanas ou caracteres para a função principal.

Exemplo: if (x>0 || y>0){. Se x ou y for maior que 0, a condição será verdadeira. OPERADOR NÃO ( ! ) A condição será verdadeira se o operador for falso. Exemplo: if (!x){. Se x for falso, a condição é verdadeira. O formato desta estrutura de controle de fluxo é: Micael Bronzatti Gaier 21 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino if (certaCondicao) { // comandos. IF. ELSE Usar if/else permite um controle maior sobre a estrutura, sendo que poderá ser realizado vários testes sem sair de uma única função. Podemos pensar no else como sendo um complemento ao comando if. if (certaCondicao) { // comando A… } else { // comando B. ao pino 10 void setup() { // não é necessário setup } void loop() { for (int i= 0; i <= 255; i++){ // a variável i é incrementada até que irá valer 255, //depois o loop é terminado analogWrite(pinoPWM, i); //o valor de i é escrito no pinoPWM delay(10); } } SWITCH CASE O Switch Cace permite programar diferentes blocos de instruções para diferentes condições.

Por exemplo, dizemos que você possui um sensor analógico que emite diferentes valores e cada valor indica que você necessita tomar uma ação específica, ou seja, uma instrução diferente. Sua forma geral é: switch (valor) { case 1: //fazer algo quando valor é igual a 1 break; case 2: //fazer algo quando valor é igual a 2 break; default: // se nenhum caso se encaixa, fazer algo como padrão } Quando uma condição for verdadeira, break é responsável por interromper o código e seguir a programação adiante. Usa-se default caso nenhuma das condições especificadas forem verdadeiras, e então o bloco contido será executado. EXEMPLO 4: Micael Bronzatti Gaier 23 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino 24 /* Leve em consideração que você possui um equipamento que possui em sensor analógico que emite valores diferentes para cada situação.

Esta estrutura funciona de forma semelhante às estruturas for e while, porém, ao contrário. Observe sua forma geral: do { // instrução 1. instrução 2. while (testa a condição); Esta estrutura primeiro realiza as instruções, e após ela ser executada é verificado se a condição é valida, se ela ainda for válida, ela volta a executar o bloco novamente. EXEMPLO 6: /* Envia um sinal analógico a um equipamento, de acordo com o valor obtido de uma entrada digital. available(); Obtém o número de bytes disponíveis para a porta serial. Este comando retorna o número de bytes disponível para leitura. Serial. read(); Obtêm os dados da porta serial para leitura. Serial. resulta em "Ola Mundo. OBSERVAÇÃO! Para nos facilitar a tarefa de programar, existem várias constantes.

São caracteres que podem ser usados como qualquer outro. Observe: Caractere \n \t \a BIN OCT HEX DEC BYTE Significado Nova Linha Tabulação Horizontal (“tab”) Tabulação Vertical Binário ou Base 2 Base 8 Hexadecimal ou Base 16 Decimal, ou Base 10 Resulta em Byte Serial. println(); Envia dados para a porta serial, porém, com um caractere de retorno. println(valSerial, DEC); } OPERADORES MATEMÁTICOS E TRIGONOMETRIA No Arduino também podemos realizar operações matemáticas e podemos trabalhar com trigonometria. Veja. OPERADORES MATEMÁTICOS min(x, y) Calcula o mínimo de dois números, sendo x o primeiro número e y o segundo número. Ex: min(val, 100); max(x,y) Calcula o máximo de dois números, sendo x o primeiro número e y o segundo.

Ex: max(1, 300); (irá retornar 301) Micael Bronzatti Gaier 28 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino abs(x) Retorna o valor absoluto de uma função. base = um número qualquer (float) expoente = a potência que a base será elevada (float) RETORNO DA FUNÇÃO: double Micael Bronzatti Gaier 29 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Ex: pow(7,2) ; - O resultado obtido será um double no valor 49. sqrt(x) Permite o calculo da raiz quadrada de um determinado valor. Ex: valor = sqrt(49) ; - valor será 7, pois = 7. TRIGONOMETRIA sin(rad) Calcula o seno de um ângulo (em radianos). rad = valor do ângulo em radianos (float) RETORNO DA FUNÇÂO: a função retorna um valor entre -1 e 1 (double).

A duração desde “tempo” é chamada modulação de pulso. Em um Arduino, a frequência de um sinal PWM é cerca de 490Hz, no caso, a modulação de pulso oscilaria a cada 2 milissegundos. Se você aplicar um sinal através de analogWrite() com valores entre 0 e 255, você obteria os valores da tabela a seguir em seu ciclo de trabalho. Observe o Exemplo 8. Micael Bronzatti Gaier 30 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino 31 EXEMPLO 8 /* Controla o brilho de um LED através de um sinal PWM. Serial. print(pol); Serial. print(" polegadas "); Serial. print(cm); Serial. println(" cm"); } Micael Bronzatti Gaier 32 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Usando o Arduino com Dispositivos O USO DE ARDUINO EM PROJETOS O uso do Arduino com dispositivos eletrônicos vem se mostrando muito eficaz.

Atualmente você pode obter shields de diferentes maneiras, para diferentes usos e de fabricantes diferentes. No final desta apostila, você encontrará uma relação dos principais sites e fabricantes destes produtos. Exemplos de Shields: Arduino XBee Shield: esta placa se encaixa diretamente sobre o Arduino Duemilanove e permite comunicação sem fios sobre um protocolo modificado ZigBee da Maxstream. Micael Bronzatti Gaier 33 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Arduino Ethernet Shield: permite que o Arduino seja conectado à internet, versões mais recentes deste shield também possuem slot para cartão miro-SD, para que possa ser armazenados dados. Motor Shield: são shields onde você pode conectar diretamente no Arduino diversos tipos de motores, de diferentes capacidades.

Porém se analisarmos o circuito anterior, observaremos que o motor irá operar sem controle de velocidade e em apenas um sentido, não tornando o sistema totalmente inteligente e eficiente. Micael Bronzatti Gaier 35 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Um motor tem capacidade de movimentação tanto no sentido horário como no sentido anti-horário, e para aproveitarmos isso, devemos apenas criar um jogo de chaves onde podemos inverter o sentido da corrente do circuito. Se a corrente estiver sendo conduzida de um lado ela deverá seguir o seguinte esquema, fazendo o motor girar em um sentido. Micael Bronzatti Gaier 36 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino Se a corrente estiver sendo conduzida pelo outro lado ela deverá seguir este esquema, fazendo o motor girar no outro sentido.

Para um motor ter a habilidade de movimentação nos dois sentidos do seu eixo e também para obter um controle sobre sua velocidade, torque e outros dados técnicos, devemos montar um circuito que seja inteligente para poder realizar estes fundamentos básicos apresentados através de sinais enviados do Arduino. Quando o Arduino envia um sinal alto a este transistor, ele é ativado permitindo que a corrente vinda do motor flua até o GND da bateria usada, assim, fechando o circuito e fazendo o motor funcionar. Conectado diretamente nos pinos dos motores são encontrados relés. Os relés funcionam como uma chave. Quando o Arduino enviar um pequeno sinal, o relé irá alterar as chaves, assim, alterando o sentido da corrente e fazendo o motor girar no sentido inverso.

Micael Bronzatti Gaier 39 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino PROGRAMAÇÃO PONTE H Para programar uma Ponte H deve-se levar em consideração os conceitos apresentados sobre entrada e saída de dados. Observe o desenho e as explicações abaixo para melhor compreender.        VSS: Alimentação do display: Ground, Terra; VDD: Alimentação do display: 5 V; VEE/VO: Ajuste de contraste. Alterando a tensão aplicada neste pino, você altera o contraste do display; RS (Register Select): controla em qual parte do LCD você está enviando dados. Este pino controla o que será exibido na tela e o que são instruções de registro; RW (Read/Write): este pino seleciona se estará atuando em modo de leitura ou envio de dados; E (Enable): habilita o envio de dados aos registros; D0 a D7: controla o estado dos pinos (HIGH ou LOW) Os displays LCD compatíveis com o chipset Hitachi podem atuar nos modos de 4-bits ou 8-bits, porém, no modo de 4-bits é necessário apenas 7 pinos I/O do Arduino, enquanto no modo 8-bits é necessário 11 pinos I/O.

Se você for trabalhar apenas com textos o modo de 4-bits é suficiente. Identificar cada um dos pinos conectados ao Arduino: para realizar esta identificação usamos a seguinte função, onde devemos colocar o número do pino conectado ao Arduino com o respectivo nome. LiquidCrystal lcd(RS, RW, E, D4, D5, D6, D7); NOTA: muitas vezes o uso do pino RW pode ser desconsiderado, assim, não sendo necessário conectá-lo ao Arduino ou identificando-o na programação. Iniciar o display: iniciamos o display com a seguinte função, onde identificamos o número de linhas e de colunas, neste caso, usamos um display 16x2: lcd. begin( COLUNAS, LINHAS); Ex: lcd. begin(16,2); 4. Como foi dito, os sensores transformam um estímulo físico em tensão elétrica, assim dizemos que então o sinal é enviado ao sistema lógico, neste caso, o Arduino.

Há sensores analógicos e também digitais, quando montarmos algum sistema devemos ter atenção ao tipo de sensor que usamos e as suas características básicas como corrente, tensão, possíveis usos, etc. Devemos ter uma atenção especial na parte da programação. Para programar o sensor corretamente necessitamos realizar testes e verificar os resultados. Qualquer programador pode estudar como o sensor age e então realizar uma programação específica e própria para ele, porém, isso acaba ocupando muito tempo e o resultado pode não ser tão significativo, por isso, o uso de sensores com o Arduino pode ser facilitado. Sensores digitais funcionam apenas com sinal alto (HIGH) ou sinal baixo (LOW). Uma chave de fim de curso, por exemplo, pode ser considerado um sensor digital.

Dizemos que a chave é considerada como NF (normalmente fechada), assim, se for feita uma leitura através de digitalRead() quando a chave não estiver pressionada obteremos o valor 1 (HIGH, sinal alto), caso a chave seja pressionada, obteremos o valor 0 (LOW, sinal baixo), assim, cabe ao programador decidir qual será a utilidade do uso deste sensor. Porém, há sensores de uso mais complexo, onde você pode obter dados mais específicos ou variados tipos de dados, para isso, o fornecedor sempre oferece um manual de como realizar a programação e de como usar as bibliotecas dos sensores, mas para isso, você sempre deverá estar procurando por estas informações em fóruns específicos e no site dos fabricantes. Micael Bronzatti Gaier 46 Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá Aprendendo a Programar em Arduino ANEXOS 1.

com/ - vendedor oficial internacional de Arduino, shields e sensores; http://www. adafruit. com/ - vendedor oficial internacional de Arduino, shields e sensores. Sites de fóruns e outros sites onde fornece informações importantes sobre o Arduino. arduino. unicamp. br/pub/apoio/treinamentos/linguagens/c. pdf. Micael Bronzatti Gaier 48.

2135 R$ para obter acesso e baixar trabalho pronto

Apenas no StudyBank

Modelo original

Para download