Introdução ao Arduino Cassio Trindade Batista Iago Souza de Sousa Universidade Federal do Pará Instituto de Tecnologia Faculdade de Engenharia da Computação e Telecomunicações III Semana Acadêmica da Faculdade de Ciência da Computação Orientador: Nelson Cruz Sampaio Neto 5 à 9 de outubro de 2015
Cronograma Introdução Experiências Shields Apêndice Introdução Arduino Overview Vantagens Diferentes plataformas Especificações µcontrolador µprocessador Pinos de alimentação Microcontrolador ATmega328p Programação Background info Experiências Cassio Batista, Iago Souza Curso Básico de Arduino 2/39
Overview Introdução Experiências Shields Apêndice Introdução Baseado em Introduction to Arduino, de Alan G. Smith O que é Arduino? O Hardware; O ambiente de desenvolvimento; A comunidade (https://www.arduino.cc) Arduino é a placa de desenvolvimento construída sobre o microcontrolador ATmega, da fabricante Atmel, contendo uma IDE para programação e um fórum/comunidade para discussão. Open-source prototyping platform based on easy-to-use hardware and software Cassio Batista, Iago Souza Curso Básico de Arduino 3/39
Vantagens Introdução Experiências Shields Apêndice Introdução Barato: U$ 50.00, em média Cross-Platform: Windows, OSX, Linux. Ambiente de programação: IDE easy-to-use para iniciantes Open-source software: Pode ser expandido através do C++ Open-source hardware: Designers de circuito podem fazer sua própria versão Cassio Batista, Iago Souza Curso Básico de Arduino 4/39
Arduino: Diferentes Plataformas Introdução Uno, Mega, Nano, Duemilanove, Diecimila, Leonardo... Cassio Batista, Iago Souza Curso Básico de Arduino 5/39
Arduino UNO Introdução Cassio Batista, Iago Souza Curso Básico de Arduino 6/39
Arduino UNO Especificações Introdução Microcontrolador: ATmega328P 14 pinos digitais de I/O (6 de PWM) 6 pinos analógicos 32 KB de memória Flash (armazenamento de sketch) 2 KB de memória SRAM (criação e manipulação de variáveis) 1 KB de memória EEPROM 16 MHz de Clock Cassio Batista, Iago Souza Curso Básico de Arduino 7/39
Introdução MicroControlador MicroProcessador Ambos realizam operações de busca, decodificação e execução; Microprocessador: CI responsável pelo processamento de dados, como uma ULA, mas precisa receber ordens externas e ter outros componentes externos para funcionar; Microcontrolador: Contém µprocessador, RAM, ROM, timers, I/Os... tudo em um único CI; O Arduino é o quê, afinal? Arduino é a PCB criada para funcionar sobre o microcontrolador ATmega, da Atmel. Cassio Batista, Iago Souza Curso Básico de Arduino 8/39
Arduino x ATmega328p Introdução Pinos do Arduino são diferentes dos pinos do ATmega328p Cassio Batista, Iago Souza Curso Básico de Arduino 9/39
Pinos de Alimentação Introdução V in : Entrada de alimentação da placa quando utilizada uma fonte externa. 5V: Fonte de alimentação para o microcontrolador e outros componentes da placa. 3V3: Alimentação de 3,3 V fornecida pelo controlador USB. GND (ground): Pino terra. Cassio Batista, Iago Souza Curso Básico de Arduino 10/39
Programação Introdução Experiências Shields Apêndice Introdução A linguagem utilizada no Arduino tem como referência C++. setup(): função utilizada para inicializar valores assim que a placa é ligada. loop(): função executada várias vezes até que haja alguma interferência. 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 Cassio Batista, Iago Souza Curso Básico de Arduino 11/39
Programação Introdução Experiências Shields Apêndice Introdução digitalwrite(): Escreve uma informação 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ê uma informação 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ção analógica, ou seja, um valor inteiro de 8 bits de 0 à 255 em um pino de saída analogwrite(13, 250); //tens~ao [0V--5V] [0--255] pino 13 analogread(): Lê uma informação analógica, geralmente de sensores int valor = analogread(a0); //L^e pino analógico 0 Cassio Batista, Iago Souza Curso Básico de Arduino 12/39
IDE de Programação Introdução Cassio Batista, Iago Souza Curso Básico de Arduino 13/39
Serial Monitor Introdução GUI para comunicação serial entre o PC e o Arduino Cassio Batista, Iago Souza Curso Básico de Arduino 14/39
BG Eletrônica: Protoboard Ligação em série: A e D: horizontal B e C: vertical Cassio Batista, Iago Souza Curso Básico de Arduino 15/39
BG Eletrônica: LED Cassio Batista, Iago Souza Curso Básico de Arduino 16/39
BG Eletrônica: LED Sobre o ground (GND): Fecha o circuito e permite circulação de corrente elétrica Cassio Batista, Iago Souza Curso Básico de Arduino 17/39
BG Programação: Tricks Case sensitive, assim como no C++: digitalwrite(pino, HIGH); //correto digitalwrite(pino, high); //errado DigitalwriTe(PINO, HIGH); //errado Comentários: /* Isto é um comentário */ // Eles n~ao fazem diferença no código Cassio Batista, Iago Souza Curso Básico de Arduino 18/39
Parte Prática Introdução Experiências Shields Apêndice Parte Prática: Experiências Cassio Batista, Iago Souza Curso Básico de Arduino 19/39
Exp. 1: Semáforo Objetivo: Fazer a sinalização de duas vias que se cruzam Materiais: 6 LEDs (ou 2 LEDs RGB). Cassio Batista, Iago Souza Curso Básico de Arduino 20/39
Exp. 1: Semáforo Funcionamento Via 1 Via 2 1 Fechado Aberto 2 Fechado Atenção 3 Fechado Fechado 4 Aberto Fechado 5 Atenção Fechado 6 Fechado Fechado 1 Fechado Aberto Cassio Batista, Iago Souza Curso Básico de Arduino 21/39
Exp. 1: Semáforo Código (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() Cassio Batista, Iago Souza Curso Básico de Arduino 22/39
Exp. 1: Semáforo Código (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... Cassio Batista, Iago Souza Curso Básico de Arduino 23/39
Desafio 1: Semáforo e Botão Objetivo: Acionar um semáforo utilizando um botão Materiais: 3 LEDs (ou 1 LED RGB) e 1 botão Background: Experiência 1 Cassio Batista, Iago Souza Curso Básico de Arduino 24/39
Desafio 1: Semáforo e Botão Objetivo: Acionar um semáforo utilizando um botão Materiais: 3 LEDs (ou 1 LED RGB) e 1 botão Background: Experiência 1 Sugestão: int estado = digitalread(pinoanalógico); Cassio Batista, Iago Souza Curso Básico de Arduino 25/39
Exp. 2: Entrada e Saída Serial (Monitor) Objetivo: Ler uma string do serial monitor e imprimí-la também no serial monitor Materiais: Biblioteca Serial Begin() Read() Print() Cassio Batista, Iago Souza Curso Básico de Arduino 26/39
Exp. 2: Entrada e Saída Serial Código 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]); } Serial.println(""); } } Cassio Batista, Iago Souza Curso Básico de Arduino 27/39
Exp. 3: Sensor de Luminosidade Objetivo: Simular o controle de luz do ambiente Definir faixas de luminosidade baseadas no feedback do sensor Claro: T sensor > 80.0 Dois LEDs apagados; Escuro: T sensor < 20.0 Dois LEDs acesos; Ideal: Um LED aceso e outro apagado; Materiais: 2 LEDs, 1 sensor de luz, 1 resistor de 10 kω Cassio Batista, Iago Souza Curso Básico de Arduino 28/39
Exp. 3: Sensor de Luminosidade Esquemático Cassio Batista, Iago Souza Curso Básico de Arduino 29/39
Exp. 3: Sensor de Luminosidade Código (1/2) void setup() { Serial.begin(9600); //baud rate /* define os pinos de sa~ada (LEDs) */ 5 pinmode(12, OUTPUT); pinmode(13, OUTPUT); } Cassio Batista, Iago Souza Curso Básico de Arduino 30/39
Exp. 3: Sensor de Luminosidade Código (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); } delay(800); //1 second 20 } Cassio Batista, Iago Souza Curso Básico de Arduino 31/39
Exp. 4: Brincando com Potenciômetro Objetivo: Acender somente um LED de acordo com uma faixa específica de tensão, a qual será varia de acordo com a resistência do potenciômetro. À medida que o giramos o potenciômetro, a fila de LEDs acesos anda. Materiais: 1 potênciômetro e 5 LEDs Cassio Batista, Iago Souza Curso Básico de Arduino 32/39
Exp. 4: Brincando com Potenciômetro Cassio Batista, Iago Souza Curso Básico de Arduino 33/39
Exp. 4: Potenciômetro Código (1/2) void setup() { Serial.begin(9600); pinmode(8, OUTPUT); 5 pinmode(9, OUTPUT); pinmode(10, OUTPUT); pinmode(11, OUTPUT); pinmode(12, OUTPUT); } Cassio Batista, Iago Souza Curso Básico de Arduino 34/39
Exp. 4: Potenciômetro Código (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 } Cassio Batista, Iago Souza Curso Básico de Arduino 35/39
Shields Placas de circuito que podem ser conectadas ao Arduino, expandindo sua capacidade. Podem conter displays de LCD, sensores, módulos de comunicação, relés, 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 à internet. Bluetooth Low Energy (BLE) Shield for Arduino 2.0 Adiciona ao Arduino a capacidade de conversar com outros dispositivos Bluetooth. Cassio Batista, Iago Souza Curso Básico de Arduino 36/39
Shields Figura : Shield Ethernet Cassio Batista, Iago Souza Curso Básico de Arduino 37/39
Código dos Resistores
Obrigado! Introdução Experiências Shields Apêndice Resistor cassio.batista.13@gmail.com iagosousza@gmail.com Cassio Batista, Iago Souza Curso Básico de Arduino 39/39