Introdução Ao Arduino Com Lab Remoto - Rexlab
Introdução Ao Arduino Com Lab Remoto - Rexlab
Este documento e suas imagens estão licenciados sob a licença Creative Commons -
Atribuição-NãoComercial-Sem Derivados 4.0 Internacional. Uma cópia desta licença pode
ser visualizada em http://creativecommons.org.nz/ licences/licences-explained/.
Ela define que este manual é livre para reprodução e distribuição, porém sempre deve ser
citado o autor. Não deve ser usado para fins comerciais ou financeiros e não é permitido
qualquer trabalho derivado.
[3]
APRESENTAÇÃO DO CURSO
OBJETIVOS
O objetivo deste curso é que os participantes obtenham conhecimentos sobre a plataforma
Arduino e que ao final dele estejam aptos a realizar projetos com placas Arduino ou
compatíveis. Neste curso os participantes também aprenderão os conceitos de hardware e
software livre, microcontroladores, sobre o mundo maker e DIY (Do it Yourself ou faça você
mesmo, em português).
Ao final do curso, os participantes poderão:
• Conhecer a linguagem de programação utilizada no Arduino;
• Programar e executar programas na plataforma Arduino e compatíveis;
• Usar o ambiente de programação remoto de forma eficaz;
• Conhecer o potencial do Arduino para usar em aplicação aplicações de automação e
robótica;
• Aprender a operar componentes de hardware para receber sinais externos usando
sensores;
• Controlar elementos para interagir com o mundo físico através de atuadores;
• E outras.
REQUISITOS
Este curso é para iniciantes, portanto não é necessário conhecimento prévio.
METODOLOGIA
O curso será realizado na modalidade EaD e será composto por uma combinação de teoria e
prática que estabelecem as bases necessárias para entender a plataforma Arduino, em termos
de hardware e software, com duração de 20 horas. As atividades práticas serão realizadas
utilizando laboratórios remotos.
PROGRAMA
• Conhecendo o Arduino
• O Ambiente para Desenvolvimento em Arduino
• O hardware do laboratório remoto
• Introdução a programação do Arduino
• Exemplos práticos utilizando o laboratório remoto
CERTIFICAÇÃO
Estarão aptos para receber os certificados aqueles que realizarem as tarefas e atividades
determinadas no ambiente virtual de ensino e aprendizagem.
[4]
CONHECENDO O ARDUINO
O QUE É ARDUINO
O Arduino é uma plataforma de prototipagem para hardware, baseada em uma placa com
microcontrolador e um ambiente de desenvolvimento, projetado para facilitar o uso de
eletrônicos em projetos multidisciplinares. Foi desenvolvida por Massimo Banzi e David
Cuartielles em 2005 na Itália, com o objetivo facilitar o desenvolvimento de projetos, desde
os mais simples aos mais complexos.
A plataforma Arduino em si é um hardware de código aberto, ou seja, embora exista uma
empresa chamada Arduino que produz placas e dá suporte ao Arduino IDE, existem muitas
outras empresas que produzem placas “Arduino compatível” e que também podem ser
programados no IDE Arduino. Esta característica amplia de forma muito expressiva a
disponibilidade de recursos de software e hardware para apoiar o uso da plataforma. Além
disso, o hardware do Arduino é geralmente de custo baixo, e isso ajuda a sua popularidade.
A plataforma Arduino foi projetada para ser de fácil uso por iniciantes ou por aqueles que não
têm experiência em desenvolvimento de software, eletrônica, sistemas embarcados, etc.
Pode-se conectar a plataforma Arduino ao um computador pessoal através de um simples
cabo USB e programa-la. A linguagem de programação do Arduino foi desenvolvida reduzindo
significativamente a sua complexidade através da criação de funções simples que a tornam
mais simples de usar. Além disso, estão disponíveis muitas bibliotecas de código do Arduino
que podem ser instaladas e usadas. Estas bibliotecas simplificam o uso de todos os tipos de
componentes, desde a maneira de interagir com diferentes tipos de sensores, até controlar
os diferentes de saídas. O código para programação do Arduino tem funções específicas para
ler as entradas e controlar as saídas, tornando mais simples a programação. A conexão com
dos componentes elétricos ao microcontrolador também é muito fácil com uma placa
Arduino, porque ela tem conectores nas bordas da placa para esta finalidade.
Com Arduino é possível construir artefatos que possam responder e/ou controlar, por
exemplo, a luz, o som, o toque ou o movimento, entre outros. O Arduino tem sido usado para
construir uma variedade incrível de coisas, incluindo robôs, jogos, entre outros.
Portanto, o Arduino, é um dispositivo programável como um computador ou um dispositivo
móvel, por exemplo, ou seja, pode-se alterar a sua funcionalidade por meio de comandos em
uma linguagem de programação específica que é capaz de ser interpretada pelo dispositivo e
seguir esses comandos a fim de executar uma tarefa automática ou resolver um problema.
Diferente dos computadores ou dispositivos móveis onde a entrada de dados ocorre através
da interação com teclados, mouses ou a inclinação do smartphone, entre outras, e a saída
ocorre através de um display, no Arduino, as possibilidades de entradas e saídas de dados, são
mais amplas e podem ser utilizados uma grande variedade de componentes de hardware do
tipo sensores e atuadores.
Estes dispositivos (transdutores) podem ser utilizados para converter variações de energia
produzidas por alterações no ambiente físico, em sinais elétricos compreensíveis pelas
máquinas (vide Figura 1). Neste sentido as entradas para este tipo de plataforma (Arduino e
similares) são os sensores e as saídas são os atuadores que convertem os sinais elétricos em
magnitudes físicas.
[5]
Portanto, o Arduino é um dispositivo programável que permite a interação com o ambiente.
Por exemplo, pode-se efetuar a leitura da temperatura e da umidade de um ambiente, entre
as diversas aplicações possíveis.
A plataforma Arduino não contempla apenas o hardware (HW), mas também disponibiliza o
software que consiste em um ambiente de desenvolvimento (IDE - Integrated Development
Environment) e uma linguagem de programação simplificada para utilização do HW. Uma das
principais características do software (IDE) e da linguagem de programação é a sua
simplicidade e facilidade de uso. Mais informações podem ser obtidas no site
oficial: https://www.arduino.cc/en/Guide/Introduction.
Então, podemos definir o Arduino a partir de três itens: o hardware físico, que utiliza um
microcontrolador, o ambiente de desenvolvimento Arduino, chamado Arduino IDE, e o código
(programa) que no Arduino é chamado de sketch.
PARA QUE SERVE O ARDUINO?
O Arduino pode ser usado para desenvolver dispositivos artefatos autônomos, conectando-se
a dispositivos e interagindo com hardware e software. Por exemplo, possibilita a construção
de agentes autônomos (aparatos robóticos), controlar luzes, monitorar temperaturas, acionar
motores, etc. Para a aplicação em dispositivos conectados à internet, o Arduino é uma solução
muito boa.
O Arduino é amplamente utilizado em muitos programas educacionais, particularmente por
pessoas que querem criar facilmente protótipos, e que não precisam do conhecimento
aprofundado nem dos detalhes técnicos por trás de suas criações. Projetado pensando nos
usuários o software inclui muitos códigos de exemplo para demonstrar como usar as várias
instalações da placa Arduino.
Embora seja fácil de usar, o hardware do Arduino funciona no mesmo nível de sofisticação dos
utilizados regularmente pelos projetistas que desenvolvem e constroem sistemas embarcados
nas empresas. Em geral, profissionais e entusiastas que tenham trabalhado com
microcontroladores e plataformas embarcadas são atraídos pelo Arduino devido a sua
capacidade ágil de desenvolvimento e as suas facilidades para rápida implementação de
ideias.
[6]
O AMBIENTE PARA DESENVOLVIMENTO EM ARDUINO
Antes de iniciarmos a utilização do hardware do Arduino, vamos conhecer o software Arduino.
O ambiente de desenvolvimento integrado também chamado IDE (acrônimo de Integrated
Development Environment), é um programa de computador composto por um conjunto de
ferramentas de programação. Este pode ser dedicado exclusivamente a uma única linguagem
de programação, ou pode ser usado para vários idiomas. Um IDE é um ambiente de
programação composto por um programa aplicativo, que consiste em um editor de código,
um compilador, um depurador e uma interface gráfica (GUI). No caso do Arduino incorpora as
ferramentas necessárias para carregar um programa já compilado na memória flash do
hardware.
No curso será utilizado, como ambiente de desenvolvimento, o laboratório remoto “Ambiente
para Desenvolvimento em Arduino”. Este ambiente tem como objetivo auxiliar nos estudos e
práticas relacionadas a programação para o microcontrolador Arduino, e permite a
verificação, carregamento de códigos e manipulação de um Arduino remotamente, através da
Internet. Também possibilita o controle de sensores e atuadores destinados a alunos de todos
os níveis educacionais, hobistas e demais interessados nas áreas de eletrônica, programação
de computadores, automação, etc.
O laboratório remoto (LR) está disponível no sistema de gerenciamento RELLE (Remote Labs
Learning Enviromment), que provê uma série de funcionalidades necessárias para a
administração de experimentos remotos. O acesso ao LR poderá ser realizado em
http://relle.ufsc.br/, conforme mostra a Figura 2.
[7]
Após selecionar a opção “Acessar” será apresenta a tela mostrada na Figura 3.
① ②
②
[8]
O IDE, mostrado na Figura 5, será a ferramenta de trabalho durante o curso, daí a importância
de saber como funciona.
Os programas Arduino são compostos por um único arquivo com uma extensão “ino”, embora
também seja possível organizá-lo em vários arquivos. É recomendado que o arquivo principal
deve estar sempre em uma pasta com o mesmo nome do arquivo.
[9]
Figura 7: Ambiente para desenvolvimento do software – monitor serial
[10]
O HARDWARE DO LABORATÓRIO REMOTO
O laboratório remoto está implementado a partir da comunicação serial via cabo USB com a
placa Arduino Uno que recebe dados advindo de um computador embarcado Raspberry Pi. O
circuito da aplicação é composto por um shield onde estão conectados os módulos com
sensores e atuadores.
A Figura 8 apresenta o diagrama de conexões dos recursos de hardware disponíveis no
laboratório remoto.
[11]
Quadro 1 – Componentes disponíveis para uso no laboratório remotos
A placa Arduino Uno e os sensores e atuadores estão conectados a um shield que dispõe de
16 portas, divididas em quatro áreas funcionais: 4 portas analógicas, 7 portas digitais, 4 portas
I2C (Inter-Integrated Circuit) e 1 porta UART (Universal Asynchrounous Receiver/Transmiter ou
Receptor/Transmissor Universal Assíncrono).
[12]
A Figura 9 mostra a distribuição das portas no shield. No shield, Figura 9, são apresentados os
números dos conectores em letras maiores, por exemplo: D4, D3, I2C, A2, etc. Já as letras
menores indicam os pinos de conexão na placa do Arduino. Por exemplo, o conector D4 do
shield, está relacionado aos pinos digitais D5 e D4 do Arduino, representados pelas cores
branco (D5) e amarelo (D4) dos cabos de conexão dos módulos de sensores e atuadores.
Todos os módulos tem cores que identificam o tipo de sinal, por exemplo, o fio amarelo
transmite o sinal (“SIG”), o fio preto transmite o GND e o fio vermelho transmite o VCC (5
Volts). Já o fio branco não transmite nenhum sinal, e está marcado com “NC”.
Conforme mostra a Figura 9 estão sete portas digitais, rotuladas de D2 a D8. Cada uma delas
lida com um par de pinos digitais (2/3 ... 8/9) na placa Arduino Uno. Elas podem ser usadas
para ler um sensor digital (por exemplo, um botão) ou controlar um atuador digital (ou
analógico, via PWM). De qualquer forma, cada porta só pode lidar com dois estados lógicos: 0
ou 1.
As portas analógicas, disponíveis em número de quatro possibilitam fazer leituras analógicas
e retornar leituras que variam de 0 a 1023. Em comparação com sensores digitais que só
retornam 0 ou 1, as leituras analógicas são mais detalhadas e precisas.
Estão disponíveis quatro portas I2C. O I2C é um protocolo de barramento de baixa velocidade
que transfere dados através de dois fios: SCL e SDA. O SCL é a linha de relógio para sincronizar
a transferência de dados sobre o barramento I2C; SDA é a linha de dados.
Um sensor é um dispositivo capaz de detectar magnitudes físicas ou químicas, chamadas
variáveis de instrumentação, e transformá-las em variáveis elétricas. As variáveis de
instrumentação podem ser, por exemplo: temperatura, intensidade da luz, distância,
aceleração, inclinação, deslocamento, pressão, força, torção, umidade, movimento, pH, etc.
Já uma magnitude elétrica pode ser uma resistência elétrica, uma capacidade elétrica (por
exemplo a partir de um sensor de umidade ou um sensor capacitivo), uma tensão elétrica (por
exemplo em um termopar), ou uma corrente elétrica (como em um foto transistor), etc. Os
sensores podem ser classificados com base nos dados de saída em digitais ou analógicos.
Durante o curso será utilizada a placa Arduino UNO, que é dos modelos mais conhecidos e
documentado. Lançado em 2010, ele vem equipado com microcontrolador Atmega328p com
32Kbytes de ROM para armazenar o programa. As especificações técnicas da placa Arduino
Uno são as seguintes:
[13]
• Microcontrolador: ATmega328
• Portas Digitais: 14
• Portas Analógicas: 6
• Memória Flash: 32KB (0,5KB usado no bootloader);
• SRAM: 2KB
• EEPROM: 1KB
• Velocidade do Clock: 16MHz
Maiores informações podem ser obtidas nos links indicados a seguir:
• Placa Arduino Uno: https://www.arduino.cc/en/Main/ArduinoBoardUno
• Diagrama esquemático: http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-
schematic.pdf
• Microcontrolador: http://www.atmel.com/devices/atmega328p.aspx
O Arduino é um computador como qualquer outro, porém em menor escala, ou seja, dispõe
de menor capacidade de memória e também apresenta menor poder de processamento. Suas
principais partes são:
• Microprocessador. Que é responsável pela execução das funções lógicas, aritméticas,
etc.;
• Memória RAM. Memória volátil utilizada para armazenar dados e instruções;
• Memória FLASH. Memória não volátil utilizada para armazenar o software;
• Demais componentes necessários a um sistema computadorizado, tais como,
temporizadores (timers), contadores, gerador de clock, etc.
Detalhando um pouco mais os três tipos de memórias utilizadas no Arduino:
• SRAM (Static Random Access Memory): É uma memória volátil utilizada para
variáveis locais e dados parciais. É a área de memória onde o sketch cria e manipula
variáveis quando é executado. É um recurso limitado e devemos monitorar seu uso
para evitar esgotá-lo. Sua capacidade no Arduino Uno é de 2KB.
• EEPROM (Electrically Erasable Programmable Read-Only Memory): Memória não
volátil para armazenamento dos dados após uma reinicialização. Pode ser gravada a
partir do programa de microcontrolador, geralmente também abriga as constantes
do programa. As EEPROMs têm um número limitado de leituras/gravações. Este
tipo de memória só permite a leitura byte a byte e seu uso pode ser um pouco
complicado. Também é um pouco mais lenta que a SRAM. A vida útil de uma
EEPROM é de cerca de 100.000 ciclos de gravação. Sua capacidade no Arduino Uno
é de 1KB.
• Flash: É uma memória não volátil onde ficar armazenado o programa. Sua capacidade
no Arduino Uno é de 32KB. É nela que o sketch já compilado é salvo. Seria o
equivalente ao disco rígido de um computador. Na memória flash também é
armazenado o bootloader (programa inicializador). É possível executar um programa
a partir da memória flash, mas não é possível modificar os dados, neste caso é
[14]
necessário copiar os dados na SRAM para poder modificá-los. A memória flash usa a
mesma tecnologia dos cartões SD, pen drives ou alguns tipos de SSD, esta memória
tem uma vida útil de cerca de 100.000 ciclos de gravação.
A Figura 11 apresenta a placa Arduino Uno e os principais componentes que a compõem.
[15]
Figura 12: Botão de reset
A Figura 13 mostra a porta USB. Esta é a porta usada para estabelecer uma conexão entre a
placa de Arduino e um microcomputador. É ela que permite o envio de códigos para o
processador, permite conexão com a serial e também é usada para a alimentação da placa.
[16]
A função de cada conector é descrita a seguir:
• IOREF: Fornece uma tensão de referência para que shields possam selecionar o tipo
de interface apropriada, dessa forma shields que funcionam com a placas Arduino
que são alimentadas com 3,3V. podem se adaptar para ser utilizados em 5V. e vice-
versa.
• RESET: pino conectado a pino de RESET do microcontrolador. Pode ser utilizado para
um reset externo da placa Arduino.
• 3,3 V: Fornece tensão de 3,3V. para alimentação de shield e módulos externos.
Corrente máxima de 50 mA.
• 5 V: Fornece tensão de 5 V para alimentação de shields e circuitos externos.
• GND: pinos de referência, terra.
• VIN: pino para alimentar a placa através de shield ou bateria externa. Quando a placa
é alimentada através do conector de entrada de alimentação a tensão da fonte
estará nesse pino.
A placa Arduino UNO possui pinos de entrada e saídas digitais são 14 pinos que podem ser
usados como entrada ou saída digitais. Estes Pinos operam em 5 V, onde cada pino pode
fornecer ou receber uma corrente máxima de 40 mA. Cada pino possui resistor de pull-up
interno que pode ser habilitado por software. A Figura 16 mostra os pinos digitais.
Alguns pinos referentes as entradas e saídas digitais possuem funções especiais, são eles:
• PWM: 3,5,6,9,10 e 11 podem ser usados como saídas PWM de 8 bits através da
função analogWrite().
• Comunicação serial: 0 e 1 podem ser utilizados para comunicação serial. Deve-se
observar que estes pinos são ligados ao microcontrolador responsável pela
comunicação USB com o PC.
• Interrupção externa: 2 e 3. Estes pinos podem ser configurados para gera uma
interrupção externa, através da função attachInterrupt().
[17]
Um sistema de controle microcontrolado não tem capacidade de trabalhar com sinais
analógicos, então torna-se necessário converter os sinais analógicos em sinais digitais para
poder trabalhar com eles.
O sinal digital obtido a partir de um analógico tem duas propriedades fundamentais:
• Valores. Qual valor em volts define 0 e 1;
• Resolução analógica: nº de bits usados para representar um sinal analógico com
uma notação digital.
https://www.arduino.cc/reference/pt/language/functions/zero-due-mkr-
family/analogreadresolution/ ;
https://www.arduino.cc/reference/pt/language/functions/zero-due-mkr-
family/analogwriteresolution/
Por exemplo no caso de um Arduino Uno, o valor de 0 volts analógicos é expresso em digital
como B0000000000 (0) e o valor de 5V analógico é expresso em digital como B1111111111
(1023). Portanto, cada valor analógico intermediário é expresso com um valor entre 0 e 1023,
ou seja, somamos 1 em binário cada 4,883 mV. O Arduino Uno contém um conversor
analógico-digital de 6 canais na placa. O conversor tem uma resolução de 10 bits, retornando
inteiros entre 0 e 1023. Os pinos analógicos do Arduino também possuem todas as
funcionalidades dos pinos digitais. Portanto, se precisarmos de mais pinos digitais podemos
usar os pinos analógicos. A nomenclatura para pinos analógicos é A0, A1, etc...
No Arduino os pinos analógicos são definidos e têm as seguintes
propriedades: http://arduino.cc/en/Tutorial/AnalogInputPins.
Para tratar as entradas e saídas digitais são utilizadas as seguintes funções:
• analogReference() – configura a referência de tensão usada para entrada
analógica. https://www.arduino.cc/reference/pt/language/functions/analog-
io/analogreference/
• analogRead() – lê o valor do pino analógico especificado.
https://www.arduino.cc/reference/pt/language/functions/analog-io/analogread/
• analogWrite() – escreve um valor analógico (onda PWM) para o pino especificado.
Nem em todos os pinos digitais podem ser aplicados PWM.
https://www.arduino.cc/reference/pt/language/functions/analog-io/analogwrite/
Na Figura 17 são mostrados os seis pinos analógicos disponíveis na placa Arduino Uno.
[18]
A placa Arduino Uno é equipada com um microcontrolador ATMega328P, vide Figura 17B, que
dispõe de 32 KB de memória tipo Flash, ainda possui 2KB de SRAM e 1KB de EEPROM.
[19]
INTRODUÇÃO A PROGRAMAÇÃO DO ARDUINO
Uma linguagem de programação é uma linguagem formal projetada para executar processos
que podem ser realizados por máquinas tais como os computadores. Elas podem ser usadas
para criar programas que podem ser utilizados, por exemplo, para controlar o comportamento
físico e lógico de uma máquina, para expressar algoritmos ou como um modo de comunicação.
Uma linguagem de programação consiste em um conjunto de símbolos, regras sintáticas e
semânticas que definem sua estrutura e o significado de seus elementos e expressões. O
processo pelo qual o código de um programa de computador é escrito, testado, depurado,
compilado ou interpretado e mantido é chamado de programação.
A linguagem de programação de Arduino é uma adaptação do C++ que tem origem na avr-libc
que fornece uma biblioteca C para uso com o compilador GCC (C e C++) nos
microcontroladores AVR da Atmel. As ferramentas necessárias para programar os
microcontroladores AVR da Atmel são avr-binutils, avr-gcc e avr-libc e já estão incluídas no IDE
Arduino, mas quando compilamos e carregamos um sketch 1 estamos usando essas
ferramentas. Assim, a programação do Arduino é feita em C ++, porém, o Arduino oferece
algumas bibliotecas que facilitam a programação dos pinos de entrada e saída e das portas de
comunicação, bem como outras bibliotecas para operações específicas. O IDE em si já inclui
essas bibliotecas automaticamente e não é necessário declará-las expressamente.
void loop() {
// inserir aqui o código principal, para executar repetidamente:
A estrutura básica de um sketch de Arduino é bastante simples e consiste em pelo menos duas
partes. Estas duas partes são obrigatórias e incluem blocos contendo declarações,
propriedades ou instruções, são elas as funções setup() e Loop().
A função setup() é chamada quando um sketch inicia. É usada para inicializar variáveis,
configurar o modo dos pinos (INPUT ou OUTPUT), inicializar bibliotecas, etc. A função setup()
1
Um projeto do Arduíno é chamado de sketch, e consiste tipicamente em duas partes (rotinas): a rotina de
setup, que inicializa o sketch, e a rotina de loop, que normalmente contém o código principal do programa (é
como a função main() da linguagem C).
[20]
será executada apenas uma vez, após a placa ser alimentada ou acontecer um reset.
[ https://www.arduino.cc/reference/pt/language/structure/sketch/setup/]
Depois de criar uma função setup(), a qual inicializa e atribui os valores iniciais, a função
loop() faz precisamente o que o seu nome sugere, e repete-se consecutivamente enquanto a
placa estiver ligada, permitindo o seu programa mudar e responder a essas mudanças. É usada
para controlar ativamente uma placa Arduino.
[ https://www.arduino.cc/reference/pt/language/structure/sketch/loop/ ]
Além disso, também é possível incluir uma introdução com os comentários que descrevem o
programa e a declaração de variáveis e chamadas para bibliotecas. A Figura 18 mostra o
exemplo de sketch para Arduino
[21]
Figura 19 – Fluxograma de sketch para Arduino
[22]
EXEMPLOS PRÁTICOS UTILIZANDO O LABORATÓRIO REMOTO
PRATICANDO COM LED
LEDs (Light-Emitting Diode) podem ser encontrados em muitas cores e tamanhos. Este
exemplo mostra como fazer com um Arduino para ver uma saída física, piscando um LED.
Neste exemplo também se estará mostrando como usar as funções pinMode(),
digitalWrite() e delay().
Neste exemplo será utilizado o módulo LED, mostrado na Figura 21, e a placa Arduino Uno.
Conforme mostrado no módulo LED há um resistor variável de 10k ohm que é usado para
controlar o brilho do LED. O módulo LED está conectado no laboratório remoto ao shield
através de um cabo de 4 pinos ao conector D2, conforme mostrado na Figura 22.
[23]
A Figura 23 mostra com mais detalhes o diagrama do circuito.
O módulo LED Grove tem 4 pinos denominados: GND, VCC, NC e SIG onde:
• GND está conectado ao GND do shield e, portanto, ao GND do Arduino;
• O pino VCC é conectado ao VCC do shield e, portanto, ao pino de +5V do Arduino;
• O NC (não conectado) não está conectado;
• O pino SIG (sinal) está conectado ao pino D2 do shield e, portanto, ao pino digital
A02 do Arduino.
/***********************************************************************
**
* Exemplo de pisca-pisca com led para Arduino Uno utilizando o módulo
* conectado ao pino A02.
*
*
************************************************************************
/
#define LED 2 // definir pino onde o LED esta conectado
void setup(void) {
pinMode(LED, OUTPUT); // Inicialize o pino digital como uma saída com
pinMode() para configurar o pino LED como saída.
}
// main loop
void loop() {
digitalWrite(LED, HIGH); // liga o led (HIGH é o nível de tensão)
delay(500); // espera 500ms
digitalWrite(LED, LOW); // Desliga o LED (LOW é o nível de tensão)
delay(500); // espera 500ms
}
// final do código.
Observação: Na função delay( ), 1s equivale a 1000ms.
[24]
A Figura 24 mostra o programa em funcionamento no laboratório remoto “Ambiente de
Desenvolvimento para Arduino.
[25]
Conhecendo um pouco mais os LEDS
Um LED sendo um diodo tem uma queda de tensão que depende do tipo e cor do LED. Para
usar um LED é essencial colocar uma resistência adequada para cada tipo de LED. De acordo
com a lei de ohm: V = I * R, então se a tensão for 5 V e quisermos que o LED trabalhe com
correntes entre 5 mA (0,005 A) e 20 mA (0,02 A), então será necessário utilizar resistores
limitadores de corrente entre 250 e 1000 ohms.
Os LEDs comuns têm dois pinos, vide Figura 25. A extremidade positiva de um LED (pino maior)
é chamada de ânodo, e a extremidade negativa é chamada de cátodo.
[26]
A fórmula para calcular o resistor adequado para um LED é:
R = (Valimentação - VLED) / I
Onde:
• R é a resistência em ohms do resistor adequado para o LED;
• Valimentação é a tensão em volts da fonte de alimentação que será usada no LED.
• Vled é a tensão em volts do LED.
• I é a corrente do LED em amperes.
[27]
PRATICANDO COM UM LCD
Neste exemplo estaremos utilizando o LCD 16 x 2, mostrado na Figura 26. O LCD (em inglês
Liquid Crystal Display) é um display LCD I2C de fácil utilização e muito aplicado nas plataformas
Arduino e Raspberry Pi. O termo 16x2 significa que ele dispõe de duas linhas e que cada linha
tem 16 colunas, totalizando 32 caracteres no total.
Observa-se na Figura 27 que o display LCD 16×2 está conectado à porta I2C do shield onde:
• O pino GND está conectado ao Arduino GND,
• Pino VCC é conectado ao pino Arduino +5V,
• O SDA está conectado ao pino analógico Arduino 4 (A4),
• O SCL está conectado ao pino analógico Arduino 5 (A5).
O protocolo I2C (Inter-Integrated Circuit) foi desenvolvido pela Philips Semiconductors com o
objetivo de construir um barramento bidirecional usando apenas duas linhas de comunicação.
É um protocolo para curtas distancias, tipicamente dentro de uma mesma placa de circuito
impresso, média velocidade, e necessita de apenas dois fios para comunicação (SDA – dados,
e SCL (clock).
A seguir é apresentado um exemplo de código para utilização do LCD 16x2 no laboratório
remoto.
[28]
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
/*
const int colorR = 255;
const int colorG = 0;
const int colorB = 0;
*/
void setup() {
// configurar o número de colunas e linhas do LCD:
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
delay(1000);
}
void loop() {
// (nota: a linha 1 é a segunda linha, já que a contagem começa com 0):
lcd.setCursor(0, 1); // definir o cursor para a coluna 0, linha 1
lcd.print(millis()/1000); // imprimir o número de segundos desde o reset:
delay(100);
}
Comentando o código
#include <Wire.h> // Inclui biblioteca Arduino Wire
#include "rgb_lcd.h" // inclui biblioteca LCD
A diretiva #include é usada para incluir bibliotecas externas ao seu /sketch.
Isso dá acesso a um grande número de bibliotecas padrão da linguagem //C
(grupos de funções prontas), e também bibliotecas escritas especialmente
para a linguagem Arduino.
Note que #include, similarmente a #define, não é terminada com um ponto e
vírgula, e o compilador irá mostrar mensagens de erro enigmáticas se você
adicionar um.
void setup() {
//A palavra-chave void é usada apenas em declarações de funções. Ela indica
que é esperado que a função não retorne nenhuma informação para a função da
qual foi chamada.
lcd.begin(16, 2);
[29]
// inicializa o LCD com 16 colunas e 2 linhas.
lcd.print("Alo, Mundo!");
// Imprimir uma mensagem para o LCD.
delay(1000);
//delay(ms) Pausa o programa por uma quantidade especificada de tempo (em
milissegundos). Cada segundo equivale a 1000 milissegundos.
void loop() {
lcd.setCursor(0, 1); // definir o cursor para a coluna 0, linha 1. (nota: a
linha 1 é a segunda linha, já que a contagem começa com 0):
lcd.print(millis()/1000); // imprimir o número de segundos desde o reset. //
delay(100);
}
[30]
Conhecendo um pouco mais o LCD
O LCD (Display de Cristal Líquido) é um dispositivo gráfico amplamente utilizado nos mais
diversos tipos de projetos. O LCD é formado por uma fina camada de cristal líquido entre duas
placas de vidro, com uma fonte de luz fluorescente ou de LEDs por baixo de toda essa
estrutura. A formação de caracteres e imagens ocorre devido ao fato do cristal líquido,
naturalmente transparente, se tornar opaco ao receber uma carga elétrica, impedindo a
passagem de luz.
Existem, basicamente, dois tipos de LCDs:
• Caractere: Esses tipos de LCD permitem apenas a escrita de caracteres, números e
pequenos símbolos criados pelo usuário. Alguns tamanhos comuns para esse tipo de
display são: 8×2, 16×2, 20×4, 24×4, 40×2, entre outros.
• Gráficos: Os LCDs gráficos possuem resoluções bem maiores e permitem a exibição de
figuras e imagens. Alguns tamanhos comuns para esse tipo de display são: 122×32,
128×64, 240×64, 240×128, entre outros.
No módulo LCD é utilizado um LCD 16×2. Isso quer dizer que esse display pode apresentar
16×2, ou seja, 32 caracteres em sua tela. Na Figura 28 é possível identificar a disposição dos
caracteres na tela.
Cada caractere é composto de uma matriz de 5 colunas por 8 linhas de pixels. O estado desses
pixels, “ligados” ou “desligados”, desenharam o caractere. A Figura 29 mostra como estão
dispostos os pixels para formar um caractere. No caso com todos os pixels ligados, com todos
os pixels desligados e configurados para formar a letra “V”.
[31]
SENSOR DE TEMPERATURA COM O ARDUINO
O módulo sensor de temperatura utiliza um termistor para detectar a temperatura ambiente.
Um termistor é um elemento sensor de temperatura composto por material semicondutor
sinterizado, capaz de exibir uma grande alteração de resistência proporcional a pequenas
alterações de temperatura. Os termistores geralmente apresentam coeficiente de
temperatura negativo, o que significa que a resistência do termistor diminui à medida que a
temperatura aumenta. No módulo utilizado a resistência de do termistor aumentará quando
a temperatura ambiente diminuir. É essa característica que se usa para calcular a temperatura
ambiente.
A Figura 30 mostra o módulo sensor de temperatura utilizado no laboratório remoto.
[32]
O módulo de temperatura está conectado a uma das portas analógicas disponíveis, no caso
A1. A Figura 31 mostra a conexão do módulo sensor de temperatura ao shield.
#include <math.h>
// A biblioteca de math foi incluída porque precisamos fazer alguns cálculos, um dos
quais é um logaritmo.
void setup()
{
Serial.begin(9600);
}
[33]
void loop()
{
int a = analogRead(pinTempSensor);
float R = 1023.0/a-1.0;
R = R0*R;
float temperatura = 1.0/(log(R/R0)/B+1/298.15)-273.15;
/* converte para temperatura de acordo com os dados do fabricante do
termistor.
Dentro do loop, a temperatura é calculada em graus Celsius quebrando a
fórmula em três partes, e elaborando alguns resultados intermediários.*/
Serial.print("temperatura = ");
Serial.println(temperatura);
delay(100);
}
O passo seguinte é abrir o Monitor Serial do Arduino IDE conforme mostra a Figura 33.
[34]
Figura 33: Selecionando o monitor de comunicação serial
[35]
Conhecendo um pouco mais os termistores
Um termistor é um sensor que serve para detectar temperatura através de alterações na
resistência de acordo com o calor ou frio detectado. Um termistor é composto de um
semicondutor como óxido férrico, óxido de níquel ou óxido de cobalto. À medida que a
temperatura aumenta, a concentração dos portadores varia, de modo que a resistência do
dispositivo varia. Existem dois tipos de sensores de acordo com seu coeficiente de
temperatura o NTC (Negative Temperature Coefficient ou coeficiente de temperatura
negativo) e PTC (Positive Temperature Coefficient ou coeficiente de temperatura positivo).
Num NTC, quando a temperatura aumenta, a resistência diminui.
Por outro lado, quando a temperatura diminui, a resistência aumenta, este tipo de este tipo
de termistor é o mais usado. Um termistor PTC funciona um pouco diferente. Quando a
temperatura aumenta, a resistência aumenta, e quando a temperatura diminui, a resistência
diminui. Este tipo de este tipo de termistor é geralmente usado como um fusível. Os símbolos
do termistor são mostrados na Figura 35:
A seta apontada pelo T significa que a resistência é variável com base na temperatura. A
direção da seta ou da barra não é significativa. Os termistores são fáceis de usar, baratos,
resistentes e respondem previsivelmente às mudanças de temperatura. Embora não
funcionem bem com temperaturas excessivamente quentes ou frias, eles são os sensores
escolhidos para aplicações que medem a temperatura em um ponto base desejado. São ideais
quando são necessárias temperaturas muito precisas.
Alguns dos usos mais comuns dos termômetros estão em termômetros digitais, em carros
para medir temperaturas de óleo e refrigeração, e em eletrodomésticos, como fornos e
geladeiras, mas também são encontrados em quase qualquer aplicação que exija circuitos de
proteção de aquecimento ou resfriamento para operação segura. Para aplicações mais
sofisticadas, como detectores de estabilização a laser, blocos ópticos e dispositivos acoplados
de carga, os termistores são incorporados.
Um termistor não “lê” nada, em vez disso, a resistência de um termistor muda de acordo com
a temperatura. Ao contrário de outros sensores, os termistores não são lineares, o que
significa que os pontos em um gráfico representando a relação entre resistência e
temperatura não formarão uma linha reta. A localização da linha e o quanto ela muda é
determinada pela construção do termistor.
Um gráfico típico do termistor se parece com o mostrado na Figura 36.
[36]
Figura 36: Gráfico de resposta resistência vs temperatura
[37]
Programa exemplo
/*Função: Comunicação serial (leitura e escrita), LED vermelho e visor LCD
16x2.LED: pino 2. LCD RGB. Porta serial: baudrate 9600*/
#include <Wire.h>
#include "rgb_lcd.h" // Biblioteca do visor LCD
String state;
rgb_lcd lcd;
[38]
PRATICANDO COM SENSOR DE LUMINOSIDADE
O módulo sensor de luz utilizado no laboratório remoto (Figura 37), incorpora um Resistor
Dependente de Luz (LDR), ou seja, um resistor cuja resistência varia com a quantidade de luz
que incide sobre ele. Normalmente, a resistência do LDR ou Foto resistor diminuirá quando a
intensidade da luz ambiente aumentar. Isso significa que o sinal de saída deste módulo será
ALTO em luz brilhante, e BAIXO no escuro.
Um LDR é um sensor adequado para fornecer medições quantitativas no nível de luz, tanto
dentro quanto fora de casa, e reagindo, por exemplo, acendendo uma luz, levantando um
cego ou orientando um robô.
O módulo sensor de luminosidade está conectado a porta analógica 0 (A0) do Arduino, como
mostrado na Figura 38.
[39]
Figura 38: Conexão do módulo sensor de luminosidade ao shield
A seguir são apresentados alguns exemplos de código para praticar com o sensor de
luminosidade.
/* Exemplo de utilização do LDR
Neste exemplo utiliza-se as entradas digitais para piscar o módulo LED
enquanto o LDR recebe luz suficiente */
#include <math.h>
#define LED 2 // definir pino onde o LED esta conectado
const int LDRPin = 0;
void setup()
{
pinMode(LED, OUTPUT); // configura o pino LED como saída
pinMode(LDRPin, INPUT);
}
void loop()
{
int value = digitalRead(LDRPin);
if (value == HIGH)
{
digitalWrite(LED, HIGH); // Liga o led
delay(50);
digitalWrite(LED, LOW); // Desliga o LED
delay(50);
}
}
[40]
A Figura 39 mostra o programa em funcionamento no laboratório remoto “Ambiente de
Desenvolvimento para Arduino.
[41]
Conhecendo um pouco mais um LDR
Um LDR (Light dependent resistor), ou fotoresistor, é um resistor cuja resistência depende da
intensidade de luz que incide sobre ele. Ou seja, é um sensor que age como uma resistência
variável dependendo da luz que captura. Quanto maior a intensidade da luz, menor a
resistência. Portanto, o LDR atua como um resistor variável. Os valores típicos são 1 MΩ para
escuridão total, e de 50-100Ω para luz brilhante.
Por outro lado, a variação de resistência é relativamente lenta, de 20 a 100ms dependendo
do modelo. Essa lentidão não permite registrar variações rápidas, como as produzidas em
fontes de luz artificial alimentadas pela corrente alternada. Esse comportamento pode ser
benéfico, pois dá ao sensor grande estabilidade.
A Figura 40 mostra um LDR e os símbolos utilizados na sua representação em circuitos
elétricos.
Onde Vout é a voltagem lida pelo pino analógico do Arduino e que será convertida em um
[42]
valor digital, Vin é a tensão de entrada (5V), R2 será o valor do resistor fixo colocado
(geralmente 10KΩ) e R1 é o valor resistivo do sensor LDR. À medida que o valor do sensor LDR
varia, teremos uma fração maior ou menor da tensão de entrada Vin. Após a leitura do valor
na porta analógica do Arduino é realizada a Conversão Analógica-Digital (ADC), que é um
processo pelo qual uma magnitude física como tensão, corrente, temperatura, etc. é
convertida em um número binário (ou sinal digital) a fim de facilitar seu manuseio por circuitos
digitais, como uma CPU.
[43]
PRATICANDO COM UM SERVO MOTOR
Um servo (Figura 42) é um motor DC com engrenagens e sistema de retroalimentação. É usado
no mecanismo de condução de robôs, entre outras aplicações. Através de uma biblioteca
servo disponível na Arduino IDE, é possível ajustar os movimentos do servo para qualquer
posição entre 0 a 180 graus.
O servo motor utilizado no laboratório remoto tem três fios: energia, terra e sinal. O fio de
alimentação é tipicamente o vermelho, e deve ser conectado ao pino de 5V na placa Arduino.
O fio de terra é tipicamente preto ou marrom e deve ser conectado a um pino de terra na
placa Arduino. O pino de sinal é tipicamente amarelo, laranja ou branco e no exemplo de
aplicação está conectado ao D5 na placa Arduino.
No exemplo vamos posicionar o eixo do servo para frente e para trás através de 180 graus
usando a Biblioteca Arduino Servo.
O servo motor está conectado a porta digital D5 do Arduino, como mostrado na Figura 43.
[44]
Figura 43: Conexão do servo motor ao shield
#include <Servo.h>
void setup() {
myservo.attach(5); // conecta o servo do pino 5 ao objeto servo
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // vai de 0 graus a 180 graus
// em etapas de 1 grau
myservo.write(pos); // manda o servo ir para a posição
em variável 'pos'
delay(15); // espera 15ms para o servo chegar
à posição
}
for (pos = 180; pos >= 0; pos -= 1) { // vai de 180 graus a 0 graus
myservo.write(pos); // mandao servo para ir para a
posição em variável 'pos'
delay(15); // espera 15ms para o servo chegar
à posição
}
}
[45]
Figura 44: Programa em uso no laboratório remoto
[46]
Conhecendo os servos motores
[47]
• Controlador e circuitos complementares: Este é o circuito de controle do servo
motor. A saída dos sensores é utilizada como realimentação e comparada com o sinal
de controle (posição e velocidade desejadas). A diferença dos dois sinais é o sinal de
controle utilizado pelo circuito controlador para corrigir a posição do atuador.
Os Servos são acionados por meio de três fios, dois para alimentação e um correspondente
ao sinal de controle para determinar a posição. No caso do EMAX 9g ES08A, os três fios são:
• Vermelho: Alimentação positiva;
• Marrom: GND;
• Laranja: Sinal de controle PWM;
Este motor faz rodar uma caixa de engrenagens (vide Figura 46) que reduzem a velocidade e
aumentam o movimento binário e por sua vez arrastam um potenciômetro que regula o
alcance de operação.
[48]
• Automodelismo;
• Robótica;
• Automação de processos;
• Controle de válvulas;
• Qualquer aplicação em que seja preciso controlar posição ou movimento.
[49]
REFERÊNCIAS
https://www.makerguides.com/tutorials/
https://www.arduino.cc/reference/pt/language/functions/time/delay/
https://www.ingmecafenix.com/category/electronica/
[50]
Laboratório de Experimentação Remota
Universidade Federal de Santa Catarina – Campus Araranguá
https://rexlab.ufsc.br/
rexlab@contato.ufsc.br
rexlabufsc@gmail.com
Siga-nos nas redes sociais e fique por dentro de todas as nossas ações.
[51]