v. 4-2013 VIII Jornada de Iniciação Científica, Desenvolvimento Tecnológico e Inovação do Ifes Introdução àeletrônica com Arduino
O trabalho Introdução à Eletrônica com Arduino de foi licenciado com uma Licença Creative Commons - Atribuição- CompartilhaIgual 3.0 Não Adaptada.
http://nera.sr.ifes.edu.br
Contato: Twitter:@f_n_martins http://www.facebook.com/felipenm felipe.n.martins@gmail.com
Conteúdo Arduino; Microcontrolador; Primeiro programa; Um pouco de eletrônica (pouco mesmo!); Programas mais legais; Práticas (montagem e programação); Avançando com o Arduino: shields, comunicação sem fio, aplicações em robótica...
O que é Arduino? Arduino é uma plataforma de prototipagem eletrônica open-source, baseada nos princípios de flexibilidade e facilidade de uso para hardware e software. Consiste de uma placa com microcontrolador programável preparada para receber sinais de sensores e acionar atuadores. Sua linguagem de programação é baseada em Wiring (baseado em C/C++). A placa pode funcionar em conjunto ou de forma independente do computador.
Arduino hardware
Arduino hardware
Arduino software
Arduino é Open Source Desenvolvido por: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David Mellis, na Itália, em 2005; Todo o projeto é aberto: open source hardware and software; 200 placas vendidas em 2005, 5.000 em 2006, 30.000 em 2007 e mais de 300.000 em 2011 e cerca de 1 milhão até setembro de 2013! Site oficial: www.arduino.cc
Arduino é Open Source!
Arduino é Open Source!
Arduino é Open Source! Todo o hardware é aberto e os projetos estão disponíveis. Quem quiser, pode comprar os componentes e montar a sua placa! O software de programação também é livre e está disponível para download gratuitamente.
Arduino é Open Source! Todo o hardware é aberto e os projetos estão disponíveis. Quem quiser, pode comprar os componentes e montar a sua placa! O software de programação também é livre e está disponível para download gratuitamente. Mas...
Arduino é Open Source! Todo o hardware é aberto e os projetos estão disponíveis. Quem quiser, pode comprar os componentes e montar a sua placa! O software de programação também é livre e está disponível para download gratuitamente. Mas... O nome Arduino é marca registrada!
Clones do Arduino Freeduino
Clones do Arduino Seeduino
Clones do Arduino Brasuíno
Clones do Arduino Severino
Similares ao Arduino chipkit Uno32 - PIC32MX320F128 (32 bits, 80MHz, 128kB Flash, 16kB SRAM)
Similares ao Arduino Olimexino STM32F103RBT6 (núcleo ARM Cortex M3, 32 bits, 128kB, 72MHz)
Similares ao Arduino Adafruit Trinket ATtiny85
Similares ao Arduino LaunchPad - MSP430
Similares ao Arduino LaunchPad - MSP430 US$4,30 com frete grátis!! http://www.ti.com/tool/msp-exp430g2
Arduino Uno Microcontrolador: ATmega328; Tensão de operação: 5V; Tensão de entrada (recomendada): 7-12V; Pinos digitais de E/S:14 (6 podem ter sinal PWM); Pinos com entrada analógica: 6; Corrente máxima por pino de E/S: 40 ma; Hardware para comunicação serial: 1 porta; Memória Flash (de programa): 32 kb, dos quais 0,5 kb são usados pelo bootloader; Memória SRAM: 2 kb; EEPROM: 1 kb; Frequência de clock: 16 MHz.
Arduino Mega 2560 Microcontrolador: ATmega2560; Tensão de operação: 5V; Tensão de entrada (recomendada): 7-12V; Pinos digitais de E/S: 54 (15 podem ter sinal PWM); Pinos com entrada analógica: 16; Corrente máxima por pino de E/S: 40 ma; Hardware para comunicação serial: 4 portas; Memória Flash (de programa): 256 kb, dos quais 8 kb são usados pelo bootloader; Memória SRAM: 8 kb; EEPROM: 4 kb; Frequência de clock: 16 MHz.
Arduino Mega 2560
O que é um Microcontrolador? Chip; CPU de pequeno porte, capaz de executar um conjunto de instruções; Ou seja, possui um microprocessador! Instruções simples e rápidas; Possui memória(s); Possui periféricos; Pode se comunicar com outros periféricos; etc.
Componentes de um Microcontrolador Microcontrolador Conversor D/A EEPROM Porta Serial Conversor A/D CPU Porta Paralela PWM RAM Temporizadores
Exemplos de Microcontroladores Família 8051 (Intel ou ATMEL) 80C196KB (Intel) 68HC11 (Motorola / Freescale) MSP430 (Texas Instruments) ATmega328 (ATMEL) PIC16F628A (Microchip) dspic30f6014 (Microchip) Cortex M3 (ARM)
Exemplos de Microcontroladores Família 8051 (Intel ou ATMEL) 80C196KB (Intel) 68HC11 (Motorola / Freescale) MSP430 (Texas Instruments) ATmega328 (ATMEL) PIC16F628A (Microchip) dspic30f6014 (Microchip) Cortex M3 (ARM) Cadê o Arduino??
Exemplos de Microcontroladores Família 8051 (Intel ou ATMEL) 80C196KB (Intel) 68HC11 (Motorola / Freescale) MSP430 (Texas Instruments) ATmega328 (ATMEL) PIC16F628A (Microchip) dspic30f6014 (Microchip) Cortex M3 (ARM)
Microcontroladores do Arduino ATMEL ATmega168: Diecimila, Duemilanove, Nano, LilyPad; ATmega328P: Duemilanove, Nano, Fio, LilyPad, Uno; ATmega1280: Mega; ATmega2560: Mega2560; ATmega32u4: Leonardo, Esplora, LilyPad USB, Yún, Robot; AT91SAM3X8E: Due.
7 16 12 20 2,5 1 32 ATmega32u4 Esplora 6 16 8 14 0,5 0,5/1 16/32 ATmega168 ou ATmega328 Nano 6 16 6 14 1 0,5 16/32 ATmega168V ou ATmega328V LilyPad 7 16 12 20 2,5 1 32 ATmega32u4 Leonardo 12 84 12 54 96 -- 512 AT91SAM3X8E Due 15 16 16 54 8 4 256 ATmega2560 Mega2560 15 16 16 54 8 4 128 ATmega1280 Mega 6 16 6 14 2 1 32 ATmega328P Uno 6 16 6 14 0,5 0,5/1 16/32 ATmega168/328P Duemilanove Pinos PWM Clock (MHz) Pinos A/D Dig. I/O SRAM kb EEPROM kb Flash kb Processador Arduino Arduino
Arduino - Microcontrolador
Arduino - Microcontrolador ATmega328: Núcleo AVR RISC de 8 bits; 32kB Flash, 2kB RAM, 1kB EEPROM; 23 pinos de E/S; 3 temporizadores/contadores; USART; interface a 2 fios SPI; 6 canais de conversor A/D de 10 bits; WDT com oscilador interno; Clock máximo de 20MHz; Opera de 1,8V a 5,5V.
Arduino Programa básico
Arduino Programa básico
Arduino Programa básico
Arduino Programa básico
Arduino Programa básico
Arduino Programa básico
Arduino Programa básico No Arduino Uno: pinos digitais 0 a 13 (0 a 13); pinos analógicos 0 a 5 (14 a 19).
Prática 1: Pisca-LED Montagem:
Um pouco de eletrônica Ok. Entendi o programa. Mas o que acontece nos pinos do Arduino?
Um pouco de eletrônica Ok. Entendi o programa. Mas o que acontece nos pinos do Arduino? A função digitalwrite(12,high); faz com que o pino 12 vá para nível alto, ou seja, ele fica com 5V.
Um pouco de eletrônica Ok. Entendi o programa. Mas o que acontece nos pinos do Arduino? A função digitalwrite(12,high); faz com que o pino 12 vá para nível alto, ou seja, ele fica com 5V. Este pino está ligado ao RESISTOR+LED, e ao pino GND (0V).
Um pouco de eletrônica Ok. Entendi o programa. Mas o que acontece nos pinos do Arduino? A função digitalwrite(12,high); faz com que o pino 12 vá para nível alto, ou seja, ele fica com 5V. Este pino está ligado ao RESISTOR+LED, e ao pino GND (0V). É um circuito série, por onde circula corrente! 0V +5V
Um pouco de eletrônica Em resumo: É a circulação de corrente elétrica (elétrons) que faz acender o LED; +5V Experimente retirar o fio que liga o LED ao GND, mantendo o pino 12 em 5V. O LED apaga pois a corrente precisa circular num circuito fechado! 0V
Um pouco de eletrônica Em resumo: É a circulação de corrente elétrica (elétrons) que faz acender o LED; A corrente só existirá se houver diferença de potencial elétrico (diferença de tensão) entre pontos do circuito: 5V 0 = 5V; Tensão: volt [V]; Corrente: ampère [A]. 0V +5V
Um pouco de eletrônica A função digitalwrite(12,low); faz com que o pino 12 vá para nível baixo, ou seja, ele fica com 0V. Logo, como não há diferença de tensão entre os pinos 12 e GND, a corrente é zero => LED apaga. 0V 0V
Um pouco de eletrônica Beleza. Mas, e o resistor? Serve para quê?
Um pouco de eletrônica Beleza. Mas, e o resistor? Serve para quê? O elemento resistor serve para dificultar a circulação de corrente elétrica; Ele é colocado no circuito para evitar que a corrente cresça muito, o que pode provocar problemas; No nosso circuito, o resistor serve para evitar que o LED queime devido a uma corrente muito alta.
Um pouco de eletrônica Quanto maior for o valor da resistência do resistor, menor será a corrente (para uma mesma diferença de tensão). O brilho do LED varia com a corrente.
Um pouco de eletrônica Cálculo da corrente: Lei de Ohm: V = R * I V = 5V, R = 220Ω. I = 5 / 220 I = 0,0227 A = 22,7 ma
Um pouco de eletrônica Cálculo da corrente: Lei de Ohm: V = R * I V = 5V, R = 220Ω + 220Ω. I = 5 / 440 I = 0,0114 A = 11,4 ma Podemos calcular a queda de tensão em cada resistor: V R = R * I, R = 220Ω, I = 11,4 ma. V R = 220 * 0,0114 = 2,5 V.
Um pouco de eletrônica Cálculo da corrente: O LED tem queda de tensão fixa = ~1,73V. Logo: V = 5 1,73 = 3,27V. V = R * I => I = V / R. I = 3,27 / 220 = 0,0149 A I = 14,9mA. +5V 0V
Um pouco de eletrônica Note que se a tensão do pino 12 pudesse ser alterada, a corrente no circuito seria diferente. Ou seja, poderíamos controlar o brilho do LED! +5V 0V
Simulador: 123d.circuits.io Detalhes: http://123d.circuits.io/circuits/34111/edit#
Diodo Dispositivo semicondutor que permite a circulação de corrente apenas em um sentido; A tensão em seus terminais deve ter polaridade correta: mais positiva no terminal A (anodo) e mais negativa no terminal K (catodo); Apresenta queda de tensão aproximadamente fixa (~0,7V) quando a corrente circula; Usado em circuitos retificadores: transforma corrente alternada para contínua.
Diodo Retificador de onda completa:
Diodo - exemplos
Matriz de contatos (Breadboard ou Protoboard)
Matriz de contatos (Breadboard ou Protoboard)
Prática 1.1: Não pisca-led LED é um diodo especial que brilha quando a corrente circula por ele. Experimente inverter a ligação dos pinos do LED em nosso circuito e verifique que ele não vai mais piscar, mesmo quando houver diferença de potencial nos pinos!
Capacitor Elemento que armazena energia na forma de campo elétrico; Existem vários tipos: alguns têm polaridade (como os eletrolíticos), outros não (como os cerâmicos); A tensão em seus terminais depende da carga acumulada, e não varia instantaneamente; Em corrente contínua, são usados como filtros ou suavizadores de tensão.
Capacitor - exemplos
Capacitor exemplo de aplicação Retificador de onda completa com capacitor:
Prática 2: Pisca-LED com Capacitor Monte o circuito ao lado. Use o mesmo programa da prática 1, mas altere o tempo de espera para 5 segundos; Rode o programa e verifique o resultado; Depois, retire o capacitor e rode o mesmo programa. O que muda?
Arduino Outras funções: digitalread(pino); Retorna 0 (V pino < 2V) ou 1 (V pino > 3V). analogread(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100µs. while(analogread(a2) < 950); Mantém-se em loop até que o valor de retorno da função analogread seja maior que 800. for(int conta = 0; conta < 6; conta++) Loop: executa o bloco de código até que conta >= 6.
Arduino Outras funções: digitalread(pino); Retorna 0 (V pino < 2V) ou 1 (V pino > 3V). analogread(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100µs. while(analogread(a2) < 950); Mantém-se em loop até que o valor de retorno da função analogread seja maior que 800. for(int conta = 0; conta < 6; conta++) Loop: executa o bloco de código até que conta >= 6.
Arduino Outras funções: digitalread(pino); Retorna 0 (V pino < 2V) ou 1 (V pino > 3V). analogread(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100µs. while(analogread(a2) < 950); Mantém-se em loop até que o valor de retorno da função analogread seja maior que 950. for(int conta = 0; conta < 6; conta++) Loop: executa o bloco de código até que conta >= 6.
Arduino Outras funções: digitalread(pino); Retorna 0 (V pino < 2V) ou 1 (V pino > 3V). analogread(pino); Obtém valor entre 0 e 1023 proporcional à tensão no pino (entre 0 e 5V). Tempo de conversão = 100µs. while(analogread(a2) < 950); Mantém-se em loop até que o valor de retorno da função analogread seja maior que 800. for(int conta = 0; conta < 6; conta++) Loop: executa o bloco de código até que conta >= 6.
LDR Resistência variável com a luz
LDR Resistência variável com a luz
LDR Resistência variável com a luz O pino 13 tem um resistor interno!
Prática 3: Usando o sensor de luz Monte o circuito com o LDR Light Dependent Resistor e execute o seguinte programa: void setup() { Serial.begin(9600); } void loop() { int sensor = analogread(a2); Serial.println(sensor, DEC); }
Arduino A.
Prática 4: Usando o sensor de luz Monte o circuito com LDR Light Dependent Resistor (sensor de luz). Escreva um programa que acenda o LED do pino 13 quando houver pouca luz e apague o mesmo LED quando houver muita luz. void setup() { }... void loop() { }...
Comunicação serial Bit: menor unidade de informação -> 0 ou 1; Informação é enviada bit a bit, em sequência; Síncrona: uma linha de dados e outra de clock:
Comunicação serial Bit: menor unidade de informação -> 0 ou 1; Informação é enviada bit a bit, em sequência; Assíncrona: apenas uma linha de dados. A velocidade deve ser definida:
Comunicação serial OK. Mas como posso transmitir outras informações além de zeros e uns?
Comunicação serial OK. Mas como posso transmitir outras informações além de zeros e uns? Existe uma tabela que relaciona caracteres a sequências de zeros e uns: ASCII (American Standard Code for Information Interchange). Esta tabela criou um padrão para troca de informações em sistemas binários.
Tabela ASCII
Arduino Microcontrolador possui hardware para comunicação serial: Pino digital 0 (RX): recepção de dados; Pino digital 1 (TX): transmissão de dados; Bit 1 = 5V; Bit 0 = 0V; A maioria das placas Arduino possui hardware que converte sinais do padrão serial assíncrono para USB;
Prática 5: Comunicação bidirecional Outro exemplo de comunicação serial: desta vez o Arduino vai receber um dado do computador, processá-lo e retornar o resultado pela porta serial. Vamos analisar o programa: int i, numero; void setup() { } Serial.begin(9600); void loop() { while (true) { Serial.print("Entre com um numero: "); while (Serial.available()==0); numero = Serial.read();
} if (numero>='0' && numero<='9') Serial.println(numero, BYTE); else { Serial.println("O valor deve ser numerico!"); } } continue; numero-='0'; for (i = 0; i <= 10; i++) { } Serial.print(numero); Serial.print(" x "); Serial.print(i); Serial.print(" = "); Serial.println(numero*i); Serial.println("");
PWM PWM = Pulse Width Modulation; Razão cíclica (duty cycle): define a tensão média aplicada: A1 A2 A3 T (PWM) T (PWM) T (PWM)
Tensão média de um sinal PWM
Sinal PWM versus sinal analógico
Controle de potência por PWM analogwrite(11, 200); cria no pino 11 um sinal PWM com razão cíclica igual a 200; f = 490Hz; apenas alguns pinos digitais possuem saída PWM.
Prática 6: Controle de brilho PWM int brilho = 0; // brilho do LED int sensor // valor do LDR void setup() { pinmode(a2, INPUT); // pino do LDR: entrada A2 pinmode(11, OUTPUT); // pino do LED: saida 11 Serial.begin(9600); } void loop() { sensor = analogread(a2); // le do LDR brilho = map(sensor, 0, 1023, 0, 255); Serial.println(brilho, DEC); // envia ao PC analogwrite(11, brilho); // aciona LED }
Prática 7: Pisca-pisca suave int brilho = 0; // brilho do LED int variacao = 5; // quanto varia o brilho void setup() { pinmode(11, OUTPUT); } void loop() { analogwrite(11, brilho); brilho = brilho + variacao; if (brilho == 0 brilho == 255) { variacao = -variacao; } delay(30); }
Motor de Corrente Contínua (CC) Alimentado em corrente contínua; Possui ímã e bobinas internamente; Velocidade é ajustada pela tensão de alimentação (pode ser por PWM!); Sentido de giro é alterado pela polaridade.
Motor de Passo Alimentado com sinais digitais; Alimentação das bobinas deve ser sequencial; Permite controle preciso de posição; Torque cai muito com o aumento da velocidade.
Servomotor
Servomotor É um motor CC que possui um sistema de interno de controle: angular controla a posição (giro) do eixo; contínuo controla a velocidade do eixo;
Servomotor Normalmente é feito com um motor de corrente contínua, um circuito eletrônico e engrenagens para aumentar o torque;
Servomotor Três fios: 2 de alimentação e um de controle; O sinal de referência (de posição ou velocidade) é do tipo PWM.
Servomotor Três fios: 2 de alimentação e um de controle; O sinal de referência (de posição ou velocidade) é do tipo PWM.
Prática 8: Controle de Servomotores
Prática 8: Controle de Servomotores
Prática 8: Controle de Servomotores #include <Servo.h> Servo myservo; // create servo object Servo myservo2; int potpin = 0; // used to connect the potentiometer int val; // value from the analog pin void setup() { myservo.attach(9); // attaches the servo on pin myservo2.attach(10); } void loop() { val = analogread(potpin); // entre 0 e 1023 val = map(val, 0, 1023, 0, 179); // escalona myservo.write(val); myservo2.write(179-val); delay(15); }
Outros motores com Arduino Cada pino do Arduino pode fornecer, no máximo, 40mA de corrente -> pode não ser suficiente para acionar um motor! Solução: usar transistores.
Transistor Um transistor pode ser entendido como uma válvula eletrônica: é capaz de acionar cargas de alta corrente a partir de um sinal de controle de baixa corrente. Quanto maior for a corrente no pino de base (B), maior será a corrente entre os pinos coletor (C) e emissor (E). Por exemplo, se a corrente na base variar de 0 a 0,01 A, a corrente de coletor pode variar de 0 a 1A!
Prática 9: Motor CC com transistor
Prática 9: Motor CC com transistor
Avançando com Arduino: Shields Pode acionar dois motores CC ou um motor de passo: até 36V, 600mA, 5kHz.
Avançando com Arduino: Shields Exemplo: controle de velocidade dos motores com o Shield Motor Control:
Avançando com Arduino: Shields Shield oficial para controle de motores:
Avançando com Arduino: Shields Ethernet Shield:
Avançando com Arduino: RS-485 e I 2 C Detalhes: http://nossosrobos.blogspot.com.br/2011/08/arduino-conversando-com-nxt-via-rs-485.html http://nossosrobos.blogspot.com.br/2013/03/comunicacao-ic-entre-lego-nxt-e-arduino.html
Avançando com Arduino Arduino Nano
Avançando com Arduino: Sem fio Detalhes: http://nossosrobos.blogspot.com.br/2011/12/arduino-wireless.html
Avançando com Arduino: Bluetooth Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Avançando com Arduino: LCDs LCD gráfico 128x128 pixels: Detalhes: http://nossosrobos.blogspot.com.br/2012/01/lcd-para-seu-robo-com-arduino.html
Avançando com Arduino: MATLAB Detalhes: http://nossosrobos.blogspot.com.br/2011/10/arduino-com-matlab.html
Avançando com Arduino: LabVIEW Detalhes: http://sine.ni.com/nips/cds/view/p/lang/pt/nid/209835
Avançando com Arduino: Robô Detalhes: http://nossosrobos.blogspot.com.br/2012/09/monte-seu-robo-com-arduino.html
Robôs baseados em Arduino DFRobotShop Rover - Arduino Compatible Tracked Robot
Robôs baseados em Arduino DFRobotShop Rover 2.0 Arduino Compatible Mecanum
Robô Arduino oficial Arduino Robot Detalhes: http://nossosrobos.blogspot.com.br/2013/07/arduino-robot-o-primeiro-robo-arduino.html
Softwares gratuitos IDE de programação do Arduino: www.arduino.cc Fritzing - para fazer esquemas elétricos, de proto-board e placas de circuito impresso: www.fritzing.org 123D Circuits.io - para simulação de circuitos com ou sem Arduino e projeto de placas de circuito impresso (roda no navegador): http://123d.circuits.io
Referências VALPEREIRO, Filipe. Workshop Arduino, 2008. JUSTEN, Álvaro. Curso de Arduino (apostila), 2011. FONSECA, Érika e BEPPU, Mathyan. Apostila Arduino. CT/UFF, 2010. ERIKSSON, Fredrik. Industrial Circuits Application Note - Stepper Motor Basics. POMÍLIO, J.A. Eletrônica de Potência. UNICAMP (apostila para o curso de graduação). Acesso em AGO/2010. Blog: www.nossosrobos.blogspot.com Site oficial do Arduino: www.arduino.cc http://www.labdegaragem.com.br/wiki
Obrigado! Felipe N. Martins @f_n_martins www.facebook.com/felipenm