Sobre esta Oficina
• Oriunda do Arduino Hack Day…
• Organizado pelos Coordenadores do ArduinoMS • Agradecimentos ao apoio do SENAC
O que veremos
• Introdução a Arduino • Código Pisca LED
• Acionamento de LED com Botão • Pisca Led com Sensor LDR
Obs: Serão ao decorrer da oficina serão tratados assuntos sobre eletrônica e eletricidade basica.
Introdução ao Arduino
• Plataforma baseada em Atmel da AVR (ATMega168);
• Oferece um IDE e bibliotecas de programação de alto nível; • Open-source hardware e software
• Ampla comunidade
• Programado em C/C++ • Transferência de firmware via USB
• MCU com bootloader
Histórico do Arduino
• Projeto criado na Itália pelo Mássimo Banzi no Interaction Design Institute Ivrea;
• Nasceu para complementar o aprendizado de programação, computação física e gráfica;
• Nasceu do Processing e Wiring;
– Processing é um ambiente e linguagem de programação para criar imagens, animação e interação;
Simplicidade no circuito:
Muitas aplicações práticas
• Robôs
• Roupas eletrônicas
• Máquinas de corte e modelagem 3D de baixo custo; • Segway open-source
• Desenvolvimento de celulares customizados • Instrumentos musicais
• Paredes interativas
• Instrumentação humana • Circuit bending
Vários tipos, vários fabricantes...
• Mega • Lilypad • Nano • Uno • Pro • Arduino BT • Freeduino • Severino • Program-MEArduino MS
Atmega168 / Atmega328: coração
• Características do ATmega 168: • RISC
• 20 MIPS (20 Milhões de instruções por segundo) • 16Kb Flash / 512 b EEPROM / 1Kb RAM Estática • 10.000 ciclos na Flash e 100.000 na EEPROM • 2 contadores / temporizadores de 8bits
• 1 contador / temporizador de 16bits
• 1 temporizador de tempo real com clock a parte • 14 portas digitais
• 6 portas analógicas
Características técnicas
• 6 canais PWM
• 6 conversores analógico/digital de 10 bits • 1 serial programável (USART)
• 1 interface SPI (Serial Peripheral Interface) • 1 interface serial a 2 fios (I2C)
• 1 watch dog timer programável • 1 comparador analógico no chip
• Interrupção ou wake-up na alteração de estado dos pinos
Resumo das conexões da placa
Conector USB
Alimentação externa: Até 12 volts
Regular 7085:
Recebe até 12 volts e regula para 5 volts
FT232RL
Conversor USB-Serial
ICSP
Para gravar bootloader ou programas/firmware
AtMega328 /168/8 Botão de reset
Portas digitais 0 a 13
0 RX 1 TX = usada durante
transferência de sketch e comunicação serial com placa 2,4,7,8,12,13 = portas digitais convêncionais 3,5,6,9,10,11 = portas PWM GND AREF Referência analógica Padrão 5 volts
Arduino MS
Portas analógicas de 0 a 5
Podem funcionar como digitais de 14 a 19
VIN
Alimentação de entrada sem regulagem GND
5 volts 3.3 volts
Portas analógicas 4 e 5
São as portas utilizadas para conexões via I2C / TWI.
Shields: arquitetura modular inteligente
• Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:
Por dentro do MCU
Porta Digital Vs. Analógica
• Digital: trabalha com 0 e 1 na lógica binária.
– Digital do Arduino segue padrão TTL onde: • 0 a 0,8 volts = 0
• 2 a 5 volts = 1
• Analógica: valor lido é análogo a tensão.
– Referência de analogia é 5 volts • 0 volts = 0
• 2.5 volts= 512 • 5 volts = 1023
– Conversor A/D de 10 bits: 0 a 1023
Porta Digital Vs. Analógica
• Portas analógicas expressam valores de 0 a 1023 mas não são utilizadas para transferência de informações precisas • As portas digitais permitem que dados sejam tranferidos
em sequencia através de uma lógica ou protocolo binário • Portas digitais não conseguem comandar potência
Porta PWM
• Uma porta híbrida: digital porém com modularização de
zeros e uns de forma que consegue
expressar uma idéia de potência;
Na prática
• Ligamos componentes em portas digitais comuns, pwm ou analógica
• Fazemos leitura e escrita nestas portas afim de obter um dado ou um determinado comportamento
• Processamos os dados no microcontrolador • Alguns exemplos de componentes...
Ping – Sensor de distância ultrasonico
LCD Touch
Shield LCD Touch screen
SIM Reader
SIM Reader
Lojas de componentes
www.parallax.com
www.sparkfun.com
• www.makershed.com
• www.liquidware.com
• www.ladyada.net
• www.adafruit.com
Arduino MS
Programando para Arduino
• IDE pode ser baixada de www.arduino.cc
• A IDE foi desenvolvida com Java, portanto precisaremos de um máquina virtual 1.5 ou 1.6 instalada
• Funciona em Windows. Mac OS X e Linux (em alguns windows e mac pode ser necessário colocar driver) • Utiliza GCC + GCC Avr para compilação
(você pode também programar diretamente com GCC!) • A transferência para a placa é feita via USB pelo IDE; (mas também pode ser feita com gravadores ICSP!)
Partes básicas do programa Arduino
• Temos que obrigatoriamente programar dois métodos:
void setup() { }
void loop() { }
• O setup é executado uma só vez assim que a placa for ligada e o loop terá o código de execução infinita
Portas digitais e analógicas
• Na prática ligamos componentes em portas digitais e
analógicas e através do código Arduino, manipulamos as portas:
– pinMode(<porta>, <modo>): configura uma porta digital para ser lida ou para enviarmos dados;
– digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital – digitalRead(<porta>): retorna um 0 ou 1 lido da porta
– analogRead(<porta>): retorna de 0 a 1023 com o valor da porta analógica
– analogWrite(<porta>, <valor>): escreve em uma porta PWM um valor de 0 a 255
Exemplo “pisca led” com Arduino
Esta conexão é bem simples somente para efeito de teste para piscar o led.
O correto é ligar um resistor usando uma protoboard.
Exemplo “pisca led”
void setup() {
pinMode(13, OUTPUT); //porta 13 em output }
void loop() {
digitalWrite(13, HIGH); //HIGH = 1 = TRUE delay(500);
digitalWrite(13, LOW); //LOW = 0 = FALSE delay(500);
}
Primeiro contato com Arduino
• Ligar sua placa no cabo USB e no PC
• Verificar o jumper de alimentação configurando para USB se necessário
• Digitar o código acima no Arduino IDE
• Clicar no botão de transferência de sketch
Protoboard ou Matriz de contato
É um dispositivo usado
para construir circuitos sem a necessidade de solda. Na parte central de todos os pinos alinhados sob um número estiver conectado, enquanto os nas bordas superior e inferior -
normalmente marcado com linhas pretas e vermelhas - são conectados na
horizontal.
Entrada Digital: A leitura de um botão
• Os pinos do Arduino são extremamente sensíveis, que podem ler o ruído elétrico do ambiente. teste o seguinte
código com apenas um fio no pino 7 para inserir HIGH/LOW para leituras. Em projetos de utilização de dados de
digitalRead a leitura do pino deve ser mantida elevada para medir a mudança para BAIXO (LOW).
• Conecte três fios à placa Arduino. O primeiro de uma perna do botão através de um resistor de pull-up (aqui 10K Ω) para o fornecimento de 5 volts. A segunda vai da perna correspondente do botão ao chão. O terceiro se conecta a um pino digital i / o (pino 7) que lê o estado do botão
Montando o Circuito
Código Aciona LED com botão
int ledPin = 13; // porta 13 em output para o LED
int inPin = 7; // porta 7 em input (para o push button) int val = 0; // variável para ler o status do pino
void setup() {
pinMode(ledPin, OUTPUT); // declare LED como output pinMode(inPin, INPUT); // declare pushbutton como input }
void loop(){
val = digitalRead(inPin); // ler a entrada de valor
if (val == HIGH) {// verificar se a entrada é alta digitalWrite(ledPin, LOW); // LED OFF
} else {
digitalWrite(ledPin, HIGH); // LED ON }
}
Tempo entre acende e apaga LED usando sensor LDR
• Use o mesmo circuito como antes, mudando o botão com o sensor de luz e trocando a ligação do pino digital 7 para o pino analógico 2.
• A função permite enviar um valor numérico para o
computador. Variando números digitais no intervalo de 0-1024 (resolução de 1 Bit).
• Nesta função usamos a comunicação serial, com isso abra o monitor serial para ler dados do sensor.
Montando o Circuito
Código
int potPin = 2; // seleciona o pino de entrada para o potenciômetro int ledPin = 13; // seleciona o pino para o LED
int val = 0; // variável para armazenar o valor vindo do sensor void setup() {
pinMode(ledPin, OUTPUT); // declara o ledPin como uma saída Serial.begin(9600); // usar a porta serial para comunicação
}
void loop() {
val = analogRead(potPin); // lê o valor do sensor
Serial.println(val); // imprime o valor para a porta serial digitalWrite(ledPin, HIGH); // ligar o LED
delay(val); // parar o programa por algum tempo digitalWrite(ledPin, LOW); // desligar o LED
delay(val); // tempo antes do proximo ciclo }
Resumindo...
• Arduino é um projeto simples, popular e acessível • Eletrônica e programação embarcada alto nível
• Na prática ligamos componentes nas portas analógicas e digitais e escrevemos programas que usam as portas
• Existem diversas bibliotecas que encapsulam a lógica de comunicação digital ou analógica: servo, motor de passo, Android, display LCD
• Ter portas digitais analógicas e pmw é um grande valor do microcontrolador utilizado
• A transfêrencia via USB e a ferramenta / IDE para programação funcionam em múltiplas plataformas • Open-source Hardware e Open-source software