Introdu¸c˜ao ao Arduino
Cassio Trindade Batista Iago Souza de Sousa
Universidade Federal do Par´a Instituto de Tecnologia
Faculdade de Engenharia da Computa¸c˜ao e Telecomunica¸c˜oes III Semana Acadˆemica da Faculdade de Ciˆencia da Computa¸c˜ao
Cronograma
Arduino Overview Vantagens Diferentes plataformas Especifica¸c˜oes µControlador × µProcessador Pinos de alimenta¸c˜ao Microcontrolador ATmega328p Programa¸c˜ao Background info ExperiˆenciasOverview
Baseado em “Introduction to Arduino”, de Alan G. Smith O que ´e Arduino?
O Hardware;
O ambiente de desenvolvimento;
A comunidade (https://www.arduino.cc)
Arduino ´e a placa de desenvolvimento constru´ıda sobre o microcontrolador ATmega, da fabricante Atmel, contendo uma IDE para programa¸c˜ao e um f´orum/comunidade para discuss˜ao.
Vantagens
Barato: U$ 50.00, em m´edia
Cross-Platform: Windows, OSX, Linux.
Ambiente de programa¸c˜ao: IDE easy-to-use para iniciantes Open-source software: Pode ser expandido atrav´es do C++
Open-source hardware: Designers de circuito podem fazer sua
Arduino: Diferentes Plataformas
Arduino UNO — Especifica¸c˜oes
Microcontrolador: ATmega328P 14 pinos digitais de I/O (6 de PWM) 6 pinos anal´ogicos
32 KB de mem´oria Flash (armazenamento de sketch)
2 KB de mem´oria SRAM (cria¸c˜ao e manipula¸c˜ao de vari´aveis) 1 KB de mem´oria EEPROM
MicroControlador × MicroProcessador
Ambos realizam opera¸c˜oes de busca, decodifica¸c˜ao e execu¸c˜ao;
Microprocessador: CI respons´avel pelo processamento de dados, como uma ULA, mas precisa receber ordens externas e ter outros componentes externos para funcionar;
Microcontrolador: Cont´em µprocessador, RAM, ROM, timers,
I/Os... tudo em um ´unico CI;
O Arduino ´e o quˆe, afinal?
Arduino ´e a PCB criada para funcionar sobre o microcontrolador ATmega, da Atmel.
Arduino x ATmega328p
Pinos de Alimenta¸c˜ao
Vin: Entrada de alimenta¸c˜ao da placa quando utilizada uma
fonte externa.
5V: Fonte de alimenta¸c˜ao para o microcontrolador e outros componentes da placa.
3V3: Alimenta¸c˜ao de 3,3 V fornecida pelo controlador USB.
Programa¸c˜ao
A linguagem utilizada no Arduino tem como referˆencia C++. setup(): fun¸c˜ao utilizada para inicializar valores assim que a placa ´e ligada.
loop(): fun¸c˜ao executada v´arias vezes at´e que haja alguma interferˆencia.
pinMode(): Inicializa um pino como entrada (INPUT) ou sa´ıda (OUTPUT).
pinMode(2, INPUT); //Setando o pino 2 como entrada pinMode(13, OUTPUT); //Setando o pino 13 como sa´ıda
Programa¸c˜ao
digitalWrite(): Escreve uma informa¸c˜ao digital, ou seja, 0 (LOW, 0V) ou 1 (HIGH, 5V) em um pino de sa´ıda.
digitalWrite(13, HIGH); //tens~ao alta no pino 13 digitalWrite(13, LOW); //tens~ao baixa no pino 13
digitalRead(): Lˆe uma informa¸c˜ao digital, ou seja, 0 (0V) ou 1 (5V) em um pino de entrada.
int valor = digitalRead(2); //L^e pino 2
analogWrite(): Escreve uma informa¸c˜ao anal´ogica, ou seja,
um valor inteiro de 8 bits de 0 `a 255 em um pino de sa´ıda
analogWrite(13, 250); //tens~ao [0V--5V] [0--255] pino 13
analogRead(): Lˆe uma informa¸c˜ao anal´ogica, geralmente de
sensores
Serial Monitor
BG Eletrˆonica: Protoboard
Liga¸c˜ao em s´erie: A e D: horizontal B e C: vertical
BG Eletrˆonica: LED
Sobre o ground (GND): Fecha o circuito e permite circula¸c˜ao de corrente el´etrica
BG Programa¸c˜ao: Tricks
Case sensitive, assim como no C++:
digitalWrite(PINO, HIGH); //correto digitalWrite(PINO, high); //errado DigitalwriTe(PINO, HIGH); //errado
Coment´arios:
/* Isto ´e um coment´ario */
Parte Pr´atica
Parte Pr´
atica:
Experiˆ
encias
Exp. 1: Sem´aforo
Objetivo: Fazer a sinaliza¸c˜ao de duas vias que se cruzam Materiais: 6 LEDs (ou 2 LEDs RGB).
Exp. 1: Sem´aforo – Funcionamento
Via 1
Via 2
1
Fechado
Aberto
2
Fechado
Aten¸
c˜
ao
3
Fechado Fechado
4
Aberto
Fechado
5
Aten¸
c˜
ao
Fechado
6
Fechado Fechado
Exp. 1: Sem´aforo – C´odigo (1/2)
#define LED_R1 7 //R vermelho #define LED_Y1 8 //Y amarelo #define LED_G1 9 //B verde
5 #define LED_R2 10 #define LED_Y2 11 #define LED_G2 12 void setup() {
10 Serial.begin(9600); //baud rate for serial monitor /* LEDs para o primeiro semaforo */
pinMode(LED_R1, OUTPUT); pinMode(LED_Y1, OUTPUT);
15 pinMode(LED_G1, OUTPUT);
/* LEDs para o segundo semaforo */ pinMode(LED_R2, OUTPUT);
pinMode(LED_Y2, OUTPUT);
20 pinMode(LED_G2, OUTPUT); }//fecha setup()
Exp. 1: Sem´aforo – C´odigo (2/2)
void loop() {
// #1 fechado na primeira via e aberto na segunda digitalWrite(LED_R1, HIGH); digitalWrite(LED_Y1, LOW); 5 digitalWrite(LED_G1, LOW); //-digitalWrite(LED_R2, LOW); digitalWrite(LED_Y2, LOW); digitalWrite(LED_G2, HIGH); delay(2000); //2 seconds 10
// #2 fechado na primeira via e atencao na segunda digitalWrite(LED_R1, HIGH); digitalWrite(LED_Y1, LOW); digitalWrite(LED_G1, LOW); //-15 digitalWrite(LED_R2, LOW); digitalWrite(LED_Y2, HIGH); digitalWrite(LED_G2, LOW); delay(2000); //2 seconds
Desafio 1: Sem´aforo e Bot˜ao
Objetivo: Acionar um sem´aforo utilizando um bot˜ao Materiais: 3 LEDs (ou 1 LED RGB) e 1 bot˜ao
Desafio 1: Sem´aforo e Bot˜ao
Objetivo: Acionar um sem´aforo utilizando um bot˜ao Materiais: 3 LEDs (ou 1 LED RGB) e 1 bot˜ao
Background: Experiˆencia 1
Sugest˜ao:
Exp. 2: Entrada e Sa´ıda Serial (Monitor)
Objetivo: Ler uma string do serial monitor e imprim´ı-la tamb´em no serial monitor
Materiais: — Biblioteca Serial
Begin() Read() Print()
Exp. 2: Entrada e Sa´ıda Serial – C´odigo
char str[30] = ""; // minha string void setup() {
Serial.begin(9600); //baud rate
5 Serial.println("Escreva uma mensagem acima"); }
void loop() {
int i = 0; //iterator
10 if(Serial.available() > 0) { while(Serial.available()) {
str[i++] = (char) Serial.read(); // le char por char }
for(i=0; i<30; i++) {
15 Serial.print(str[i]); }
Exp. 3: Sensor de Luminosidade
Objetivo: Simular o controle de luz do ambiente
Definir faixas de luminosidade baseadas no feedback do sensor Claro: Tsensor >80.0 → Dois LEDs apagados;
Escuro: Tsensor <20.0 → Dois LEDs acesos; Ideal: → Um LED aceso e outro apagado;
Exp. 3: Sensor de Luminosidade – C´odigo (1/2)
void setup() {
Serial.begin(9600); //baud rate
/* define os pinos de sa~Ada (LEDs) */
5 pinMode(12, OUTPUT); pinMode(13, OUTPUT); }
Exp. 3: Sensor de Luminosidade – C´odigo (2/2)
void loop() {
float T_sensor = 100.0*analogRead(A0)/1024.0; Serial.print("Sensor: "); Serial.println(T_sensor); 5 if(T_sensor > 80.0) { Serial.println(" TA CLARO! "); digitalWrite(12, LOW); digitalWrite(13, LOW); 10 } else if(T_sensor < 20.0) { Serial.println(" TA ESCURO! "); digitalWrite(12, HIGH); digitalWrite(13, HIGH); } else { 15 Serial.println(" TA OTIMO! "); digitalWrite(12, HIGH); digitalWrite(13, LOW); }
Exp. 4: Brincando com Potenciˆometro
Objetivo: Acender somente um LED de acordo com uma faixa espec´ıfica de tens˜ao, a qual ser´a varia de acordo com a
resistˆencia do potenciˆometro. `A medida que o giramos o
potenciˆometro, a fila de LEDs acesos “anda”. Materiais: 1 potˆenciˆometro e 5 LEDs
Exp. 4: Potenciˆometro – C´odigo (1/2)
void setup() { Serial.begin(9600); pinMode(8, OUTPUT); 5 pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); }Exp. 4: Potenciˆometro – C´odigo (2/2)
void loop() {
/* tensao: [0--5V] */
float tensao = 5.0*analogRead(A0)/1024.0; acender((int)(tensao+8.0));
5 delay(300); }
void acender(int pin) { digitalWrite(8, LOW); 10 digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(pin, HIGH); 15 }
Shields
Placas de circuito que podem ser conectadas ao Arduino, expandindo sua capacidade.
Podem conter displays de LCD, sensores, m´odulos de comunica¸c˜ao, rel´es, etc.
Arduino Ethernet Shield R3
Especificado para conectar o Arduino a uma rede local. A maneira mais simples e mais barata de ligar o Arduino `a internet.
Bluetooth Low Energy (BLE) Shield for Arduino 2.0
Adiciona ao Arduino a capacidade de conversar com outros dispositivos Bluetooth.