Documente Academic
Documente Profesional
Documente Cultură
kitINTRODUÇÃO À
MICROELETRÓNICA
iluminação
MANUAL 1
ÍNDICE ÍNDICE
ÍNDICE
O QUE É UM ARDUINO® 5
A Linguagem de Programação ARDUINO 6
A Placa ARDUINO Uno 7
COMO COMEÇAR? 13
Descarregar a Distribuição do IDE ARDUINO 13
Preparar a Placa ARDUINO e o Cabo Usb 14
Instalação Manual dos Drivers (Em Windows) 15
Carregar o Primeiro Sketch 17
O IDE do ARDUINO 19
Recursos On-Line 24
LED EXTERNO A PISCAR 27
Materiais 27
Hardware 28
Sketch 31
4 Discussão do Sketch 32 5
LED E BOTÃO DE PRESSÃO 35
Materiais 35
Hardware 36
Sketch 38
Discussão do Sketch 39
VUÍMETRO CONTROLADO COM POTENCIÓMETRO 41
Materiais 41
Hardware 42
Sketch 44
Discussão do Sketch 45
CONTROLO DE BRILHO COM LDR 49
Materiais 49
Hardware 50
Sketch 52
Discussão do Sketch 53
SEMÁFORO SIMPLIFICADO PARA VEÍCULOS E PEÕES 57
Materiais 57
Hardware 58
Sketch 60
Discussão do Sketch 62
CHARLIEPLEXING 65
ÍNDICE
Materiais
Hardware
Sketch
67
67
69
O QUE É UM ARDUINO
Discussão do Sketch 72
GLOSSÁRIO 75 Antes de começar a utilizar o ARDUINO é importante saber o que é
ARDUINO 75 e o que se pode fazer com ele. O ARDUINO é uma plataforma física
Breadboard: A Placa Branca 75 de computação embutida. É um sistema integrado que através da
Comunicação Série 76 utilização de hardware e software permite interagir com o ambiente
Cristal (ou Oscilador) 76 que o rodeia de forma interativa. Por outras palavras, o ARDUINO é
Díodo 77 um mini computador que pode ser programado para processar as
Díodo Emissor de Luz / Light Emitting Diode - Led 77 entradas e saídas do seu chip.
Divisor de Tensão 78
Função 78
Fig.1. JSXSKVEǻEHIYQETPEGE&7)9.34
Função Loop() e Setup() 79
Instrução For 79
Instrução If 80
Lei de Ohm 80
Operadores Lógicos 81
6 Potenciómetro 81 7
PWM 82
Regulador Linear de Tensão 82
Resistência de Pull-Up ou Pull-Down 83
Resistências e Código De Cores 83
Shields (Extensões) Arduino 85
Sketch 85
Tipos de Dados 86 Uma utilização possível do ARDUINO pode ser ligar uma luz durante
Variável e Constante 87 um determinado período de tempo - por exemplo durante 30
segundos - após se carregar num botão. Neste exemplo, o ARDUINO
teria um circuito com uma lâmpada e um botão ligados a ele. Com
a lâmpada inicialmente apagada, o ARDUINO estaria a executar
continuamente um programa que esperaria pacientemente que o
botão fosse pressionado. Quando se pressionasse o botão, então a
lâmpada ligaria e seria iniciada a contagem dos 30 segundos, tempo
após o qual a lâmpada seria desligada e o ciclo repetido. O ARDUINO
pode ser utilizado para desenvolver e prototipar aplicações interativas
autónomas, completamente isolado, ou pode ser ligado a um
computador ou à internet para receber e/ou enviar dados. Pode ser
ÍNDICE ÍNDICE
complementado com circuitos proprietários desenhados à medida e Para programar o ARDUINO é conveniente usar-se o ARDUINO
ligado a LEDs, displays matriciais de pontos ou de segmentos, botões, Integrated Development Environment (IDE), um software livre que
interruptores, motores, sensores diversos, etc. Dispõe ainda de uma permite escrever programas na
Fig.2. MQEKIQHS.)*HS&7)9.34
interface simples que permite acoplar facilmente outras placas com linguagem C para o ARDUINO.
extensões de funcionalidade - que se designam de shields no mundo Um programa é um conjunto de
ARDUINO - como por exemplo módulos Ethernet, WIFI, GPS, displays, instruções passo-a-passo que,
relés, entre muitos outros. neste caso, serão interpretadas por
Há várias versões de placas ARDUINO: Uno, Leonardo, Due, Yún, Mini, um ARDUINO. Depois de redigido
Nano, LilyPad entre outras. Estas variam em forma e capacidade. A o programa no IDE, um programa
placa do ARDUINO Uno R3, distribuída neste kit, é constituída por um deve ser compilado, ocorre então
microcontrolador ATMEL AVR (ATmega328), memória, um cristal ou
oscilador e um regulador linear de tensão de 5V. Tem também um
conector USB para ser ligado a um PC ou Mac para comunicação série erros, o programa é carregado
de dados bidirecional. A placa expõe os pinos de I/O (entrada/saída) (upload) para a memória do
do microcontrolador para que se possam fazer as ligações com outros ARDUINO. O procedimento de
circuitos ou sensores. Nos próximos capítulos vai conhecer melhor compilação é uma conversão do
esta placa. texto escrito do programa para
Tanto o hardware como o software para ARDUINO são opensource, o que código máquina, agora sim, capaz
8 de ser interpretado pelo dispositivo 9
a qualquer pessoa podendo ser usados livre e gratuitamente. Isso
é que um programa pode ser executado. No mundo ARDUINO, os
podem ser produzidos (copiados ou alterados) e até vendidos. Na programas escritos pelos utilizadores designam-se por sketches. É
verdade, com uns poucos componentes colocados numa placa habitual chamar-se ao código compilado de ĀŹķƾ±Źå.
branca (breadboard) pode construír-se o próprio ARDUINO. Isso não só
opensource. Está fora do âmbito deste manual a descrição exaustiva da linguagem
A única exigência que a equipa de desenvolvimento do ARDUINO faz ARDUINO, pelo que para obter mais informações sobre a linguagem
às pessoas que contribuem externamente é que o nome ARDUINO só
pode ser usado exclusivamente por eles nos seus próprios produtos
e, portanto, as placas clonadas a partir de um ARDUINO têm nomes
http://www.arduino.cc/en/Reference/HomePage
como Freeduino, BoArduino, Roboduino, entre outros.
ENTRADA USB
PINOS DE TENSÃO
mais populares devido ao facto de usar um chip de 28 pinos standard
DE REFERÊNCIA
ALIMENTAÇÃO
montado num suporte para circuitos integrados. Assim pode usar-se
BOTÃO DE RESET
a placa para desenvolver um protótipo ou ideia e, posteriormente,
ANALÓGICA
FONTE DE
EXTERNA
transformá-la em algo permanente - um produto autónomo! Uma
CRISTAL
vez que o microcontrolador não está soldado à placa ARDUINO
TERRA DIGITAL
usados como saídas PWM (assinalados com um simbolo ~). Dispõe
ainda de 6 entradas analógicas, um relógio de 16 MHz, uma ligação
RESET
(reset).
Microcontrolador ATmega328
RX
TX
L
Voltagem de operação 5V
10 Alimentação (recomendada) 7-12V
11
Alimentação (limites) 6-20V
Digital I/O 14 (dos quais 6 providenciam output PWM )
PINOS TERRA
Entradas analógicas 6
PINOS ENTRADA/SAÍDA
(INPUT/OUTPUT) DIGITAIS (2-13)
Corrente DC nos pinos I/O 40 mA
Fig.3. IWUYIQEKIVEPHETPEGEHS&7)9.349RS
Corrente DC no pino 3.3V 50 mA
2IQ¾VMEǼEWL 32 KB (ATmega328) dos quais 0.5 KB usados pelo bootloader
MICROCONTROLADOR
ATMEGA328
Frequência do relógio 16 MHz
com mais do que 12V, o regulador de tensão pode sobreaquecer e O Uno tem 6 entradas analógicas assinaladas de A0 a A5. Não é
possível processar grandezas analógicas num dispositivo digital, por
O ATmega328 do ARDUINO Uno vem carregado com um bootloader isso, estes sinais têm de ser convertidos para as suas representações
que permite carregar novos programas sem o uso de um programador digitais pelo ARDUINO recorrendo a um conversor analógico-digital
de hardware externo. O ATmega328 tem 32 KB (com 0.5 KB usados pelo interno (Analog Digital Converter ou ADC). O ADC disponível tem uma
bootloader), tem ainda 2 KB de SRAM e 1 KB de EEPROM (os quais resolução de 10 bits que permite subdividir a amplitude dos valores
podem ser acedidos através de funções da biblioteca EEPROM). Cada de entrada em 1024 valores diferentes. Por omissão no ARDUINO a
um dos 14 pinos digitais do Uno pode ser usado como uma entrada
ou uma saída de dados, usando as funções pinMode(), digitalWrite() e possível alterar o limite superior da gama de variação usando a função
digitalRead(). Cada pino funciona a 5V e pode fornecer ou receber um analogReference() e o pino AREF.
máximo de 40 mA. Além disso, alguns pinos têm funções particulares:
SINAL ANALÓGICO Uma resolução de 10bits não sendo
FUNÇÃO PINO(S) DESCRIÇÃO ORIGINAL perfeita, oferece uma aproximação
muito interessante aos valores reais
Comunicações Série 0 (RX) e Usados, respetivamente, para receber e REPRESENTAÇÃO analógicos lidos.
EREP¾KMGSHMKMXEPGSQHMJIVIRXIWVIWSPY±ÀIW
1 (TX) transmitir dados série TTL. Estão também DIGITAL COM 1 BIT
ligados aos pinos série correspondentes
do chip ATmega8U2 USB-TTL REPRESENTAÇÃO
Fig.4. (SQTEVE±SHIGSRZIVWÀIW
DIGITAL COM 2 BIT
12 13
Interrupts externos 2e3 Podem ser configurados para lançar uma
interrupção. Para mais informação REPRESENTAÇÃO
DIGITAL COM 3 BIT
consulte a função
attachInterrupt() aqui REPRESENTAÇÃO
http://www.arduino.cc/en/Reference/. DIGITAL COM 4 BIT
http://www.arduino.cc/en/Guide/HomePage
http://Arduino.cc/en/Main/Software
ETPMGE±S.)*&7)9.34
Fig.5. a estrutura de diretórios e a
O procedimento é simples, siga os passos indicados de seguida.
Fig.7. ¸GSRIHS&7)9.34.)*
Agora que o ARDUINO está ligado e instalou
endereço da pasta dos drivers. Trata-
os drivers com sucesso, está tudo pronto para
se da pasta drivers que está dentro
carregar o seu primeiro sketch e experimentar o
descomprimidos anteriormente. ARDUINO pela primeira vez. Volte à pasta para a
Se está a seguir as indicações do qual descarregou o IDE e procure o programa com
manual deverá corresponder a: o ícone do ARDUINO IDE.
Fig.8. WIPI±SHSWOIXGLƸ'PMROƹ
-
mação de sucesso na instalação dos
drivers, que deve fechar carregando
em Close.
Device
Manager o dispositivo já se encontra
reconhecido e está acessível, neste
caso, a partir da porta COM3 (aten- O sketch Blink surge numa nova
TPEGE&7)9.34IQYXMPM^E±S
Fig.9. WIPI±SHSXMTSHI
ção: pode ter sido atribuída outra janela. Agora é necessário indicar
qual é a versão da placa ARDUINO e
é importante uma vez que será ne-
qual a porta USB à qual está ligado.
porta série no IDE. No menu Tools
assinalada a placa ARDUINO Uno na
secção Board. Se não é essa a opção
assinalada, selecione-a.
UYIS&7)9.34IWX«PMKEHS
Fig.10. IWGSPLEHETSVXEIQ
HSWOIXGLƸ'PMROƹ
Fig.13. VIWYPXEHSHEI\IGY±S
Se o LED L está a piscar a uma cadência
a porta USB. Para tal clique
novamente em Tools e em
seguida na opção Port. Será Seguem-se agora alguns detalhes
apresentada uma lista das portas sobre o modo de funcionamento e
série disponíveis no computador, operação do ARDUINO IDE.
sendo preciso escolher a que
se refere ao cabo USB que liga
ao ARDUINO. Deve optar pela
O IDE DO ARDUINO
Por detrás da interface aparentemente simplista está disponível uma
instalação dos drivers.
poderosa ferramenta de programação. O IDE está organizado da
seguinte forma: uma barra de ferramentas na parte superior, a janela
de edição de código ao centro e a janela de saída série na parte inferior.
pode carregar-se o sketch Blink no ARDUINO: clique no botão de
A barra de ferramentas é constituída por 6 botões e por baixo desta
Upload.
aparece uma tira com separadores no caso do sketch ser composto
Fig.11. 9TPSEH
sketch. Há também um botão adicional colocado
20 no extremo do lado direito que permite realizar operações sobre a tira 21
de marcadores. Os botões da barra de ferramentas permitem o acesso
rápido às funções de uso mais frequente do menu.
Fig.12. FSXÀIWHS.)*&7)9.34
Durante o tempo de carregamento do sketch (neste caso dura poucos
segundos) repare nos pequenos LEDs RX e TX - a placa está a receber
o novo programa via comunicações série! Na secção inferior da janela
1 2 3 4 5 6
do IDE, podem ler-se várias mensagens durante o carregamento:
Nesta altura os LEDs RX e TX apagam-se, o ARDUINO faz um reset 6 Serial Monitor Mostra os dados série que vão sendo enviados para o ARDUINO
automático e começa a executar o sketch que foi carregado na sua
memória. O sketch Blink é muito simples e serve apenas para fazer
piscar o LED L.
O botão åŹĞüDžxŇķŤĞĮå Do lado direito do Serial Monitor pode selecionar-se a taxa de
está correto. O botão de Upload, quando pressionado, carrega o código transmissão de dados da comunicação série bidirecional entre o
atual para a memória do ARDUINO. Para que tal possa ser realizado
porta selecionadas (no menu Tools) são as corretas. Recomenda-se texto usando essa linha de comunicação série (neste caso o cabo USB),
que antes de fazer o upload guarde o sketch serão enviados 9600 bits por segundo.
upload No topo da janela de debug existe uma caixa de texto em branco
para garantir que não existem erros.
O botão New permite a criação de um novo sketch. Deve indicar um botão Send. Note-se que nenhum dado série será recebido pelo Serial
nome e local para o guardar. Sempre que possível, escolha o diretório Monitor ou pelo ARDUINO, a menos que essa funcionalidade tenha
apresentado por omissão para esta operação. Depois de efetuada esta sido devidamente programada no código do sketch que se encontra
operação, a barra de separadores acima da janela de código passará a carregado. Finalmente, a área central é onde os dados série recebidos
exibir um separador com o nome dado ao sketch. do ARDUINO são exibidos.
O botão Open lista os sketches armazenados no seu caderno De volta à janela do IDE, na sua parte de baixo existe uma área onde
(Sketchbook), os sketches de exemplo ()DŽ±ķŤĮåž) e permite ainda abrir se apresentam mensagens de erros (a vermelho) que possam ocorrer
um sketch ao tentar ligar-se à placa, a compilar ou a carregar o código. No canto
O botão Save permite gravar o código na janela de edição. Caso o inferior esquerdo aparece um número que corresponde à linha atual
do cursor dentro da janela de código. Esta informação pode ser
22 “Save As”/”Guardar Como”, sendo, nesse caso, necessário indicar útil quando procuramos a linha em que está um determinado erro 23
assinalado pelo compilador numa mensagem de erro.
concluída aparece na parte inferior da janela de código a mensagem:
“Done saving.”. seguinte, composto pelos itens File Edit (editar), Sketch
(esquema), Tools (ferramentas) e Help (ajuda), sendo cada um deles um
Fig.14. ENERIPEHIHITYVE±SHIFYKHS.)*&7)9.34
O Serial Monitor é uma ferramenta menu do tipo drop-down (quando clicamos desenrola-se um painel
muito útil, especialmente para com várias opções).
Fig.15. ST±ÀIWHSQIRY+MPI
depurar o código (debug). O
monitor mostra os dados série O menu é File contém várias opções
transmitidos pelo ARDUINO para criar um novo sketch
(pela porta USB ou porta série). pesquisar e abrir (Open) sketches
Também se podem enviar dados existentes no Sketchbook bem
série para o ARDUINO usando como os de exemplo ()DŽ±ķŤĮåž
o Serial Monitor. Quando se opções para gravar o sketch atual
seleciona o botão Serial Monitor é (Save ou Save As para gravar com
aberta uma nova janela, tal como
(Upload) o sketch para a placa de I/O
neste caso com o título COM3,
uma vez que é essa a porta série (Print
usada na ligação com o ARDUINO. de Preferences que irá abrir a janela
Fig.16. ST±ÀIWHSQIRY*HMX
de preferências, onde se podem No menu Tools (ferramentas), tal como
alterar várias opções do IDE, como a refererido anteriormente, encontram-se as
HSQIRY8SSPW
Fig.18. ST±ÀIW
localização por defeito do Sketchbook, opções para seleccionar a placa (Board) e
Quit - a porta série (Serial Port) que irá usar para
que encerra o IDE. comunicar com a placa. Aqui está também
disponível a função de ƣƒŇƐ 8ŇŹķ±ƒ que
O menu Edit disponibiliza as opções formata o código para uma forma mais
de edição que permitem cortar (Cut), legível. A opção Archive Sketch permite comprimir e guardar o sketch
copiar (Copy) e colar (Paste) secções Burn Bootloader que pode ser
de código, selecionar todo (Select All) usada para gravar um ARDUINO Bootloader. O ARDUINO Bootloader
o código, bem como encontrar certas deve ser gravado nos novos chips de modo a torná-los compatíveis
palavras ou frases (Find). A opção com o ARDUINO IDE.
ŇŤDžƐ üŇŹƐ 8ŇŹƣķ irá copiar o código
dentro da janela de sketch, mas num O menu Help apresenta uma série
HSQIRY-IPT
Fig.19. ST±ÀIW
formato que quando colado no Fórum de opções que não são mais do que
ARDUINO será semelhante ao do IDE uma tabela de ligações para obter
(por exemplo fazendo o destaque por cores (highlight) da linguagem. ajuda sobre o IDE ()ĻƽĞŹŇĻķåĻƒ),
Inclui também as opções de desfazer e refazer (Undo e Redo) as últimas a linguagem de programação do
24 alterações. ARDUINO (Reference), e outros aspetos 25
relacionados. A opção About mostra
No menu Sketch temos acesso às funções várias informações sobre o projeto ARDUINO, como o número da
HSQIRYOIXGL
Fig.17. ST±ÀIW
de åŹĞüDžxŇķŤĞĮå e FķŤŇŹƒƐ XĞÆŹ±ŹDž onde se versão atual e a lista de pessoas envolvidas no desenvolvimento deste
mostra uma lista das bibliotecas disponíveis, dispositivo.
armazenado dentro da sua pasta de Uma das opções aqui disponível, “Find in Reference” (ou pelo atalho
bibliotecas. Por exemplo, uma das bibliotecas de teclas Ctrl+Shift+F), é bastante útil uma vez que permite aceder à
que aí se encontra é a Stepper, que é um informação sobre uma determinada keyword da linguagem a partir do
conjunto de funções que podem ser usadas no código de um sketch próprio código. Para testar esta funcionalidade, num sketch aberto no
para controlar um motor passo a passo. Assim, incluindo a biblioteca IDE, coloque o cursor sobre a palavra loop e carregue simultaneamente
Stepper num sketch estamos em condições de usar as funções para nas teclas Ctrl+Shift+F. Aparecerá no seu browser a página referente à
controlar um motor. O utilizador pode criar as suas próprias bibliotecas documentação desta função. A documentação está guardada na pasta
de funções, para as reutilizar em diferentes projetos e, dessa forma, reference da instalação do ARDUINO, não sendo por isso necessária
evitar estar a repetir a escrita de partes complicadas do código. Estão uma ligação ativa à internet.
ainda disponíveis as opções de Show Sketch Folder e Add File, que
serão úteis em projetos de grande dimensão nos quais é conveniente
decompô-los em vários sketches
RECURSOS ON-LINE
mesmo diretório.
Quando se faz uma pesquisa na Internet, simplesmente digitando
ÍNDICE
quantidade de sites a ele dedicados. Pode, por este meio, aceder-se PROJETO 1
a uma impressionante quantidade de informação sobre projetos feitos
com ARDUINO. Se tiver um determinado projeto em mente, será útil
começar por uma pesquisa online. A probabilidade de encontrar outros
entusiastas com ideias semelhantes é muito elevada e pode, desta
LED EXTERNO A PISCAR
maneira, chegar mais rapidamente à solução do problema que procura
Neste projeto vai repetir parte do que fez no primeiro teste ao
resolver. Antes de se avançar para os projetos disponíveis no manual,
ARDUINO (fazer piscar o LED L), no entanto, desta vez irá usar um
deixamos alguns links que consideramos especialmente importantes.
LED externo montado numa placa branca e vai aprender alguns
conceitos relacionados com alguns componentes eletrónicos e com a
programação na linguagem C.
Comece por selecionar os componentes de acordo com a lista de
Introdução: o que é um ARDUINO e por que vai querer usá-lo
materiais. Monte o circuito conforme as indicações da secção hardware
http://Arduino.cc/en/Guide/Introduction sketch. Se necessário, consulte a secção “carregar
o primeiro sketch” para recordar pormenores de escrita e upload de
programas. O resultado esperado é ver-se o LED vermelho sobre a
Instalação: instruções passo a passo para instalar o software placa branca a piscar a uma cadência de 1 segundo ligado, 1 segundo
e ligá-lo a um ARDUINO Uno desligado.
26 http://Arduino.cc/en/Guide/Windows 27
Sketches de exemplo
http://Arduino.cc/en/Tutorial/HomePage
FIOS DE
1 - 1 LED
Características da placa ARDUINO Uno LIGAÇÃO
http://Arduino.cc/en/Main/ArduinoBoardUno
ÍNDICE
HARDWARE
Nas suas montagens de hardware
desligado (desligue o cabo USB entre o computador e o ARDUINO) e
monte o circuito de acordo com a ilustração
Fig.20. GMVGYMXSIP³XVMGS
i
+ tal modo que formem pelo
-
pilha
V R resistência
menos um caminho fechado
para a corrente elétrica.
Fig.21. IWUYIQEHIQSRXEKIQHSTVSNIXS
COMO DECIDIR QUAL O VALOR DA RESISTÊNCIA A USAR?
Os pinos digitais do ARDUINO trabalham com tensões entre 0V (OFF)
e 5V (ON) e correntes até 40mA (de acordo com as indicações do
30 15 pinMode(ledPin, OUTPUT); 31
16 }
17
18 // A rotina loop é executada continuamente durante o período de
Ŝ
19 ſƀƇ
20
21 digitalWrite(ledPin, HIGH);ŵŵ
ſɨƀ
22
Fig.22. IWUYIQEIP³XVMGSHSTVSNIXS
23 delay(1000);ŵŵɨɥɥɥſɨƀ
permanece aceso durante esse periodo
24
25 digitalWrite(ledPin, LOW);ŵŵ
ſɥƀ
26
27 delay(1000); ŵŵɨɥɥɥſɨƀ
permanece aceso apagado durante esse periodo
28 ŵŵ Þ
início da função loop
29 }
ÍNDICE
DISCUSSÃO DO SKETCH
como sendo OUTPUT - assim é possível escrever neste pino os valores
HIGH e LOW.
No decorrer do código é muito útil poder-se comentar ideias e
algoritmos. As instruções escritas após o símbolo “//” (sem as aspas)
ou entre “/* o meu comentário */” são ignoradas pelo compilador. 19 ſƀƇ
20
13 ſƀƇ 29 }
15 pinMode(ledPin, OUTPUT);
ÍNDICE
PROJETO 2
34 35
MATERIAIS
36 37
Fig.24. IWUYIQEHIQSRXEKIQHSTVSNIXS
Fig.23. IWUYIQEIP³XVMGSHSTVSNIXS
SKETCH DISCUSSÃO DO SKETCH
1 /*
2 Experiência 2 - LED e botão de pressão
3 Nas linhas 9 e 10 inicializam-se as variáveis que caracterizam os pinos
4 Adaptação: Talents & Treasures, Lda onde se ligará o LED e o botão de pressão (13 e 7 respetivamente).
5 @2015
6 */
7
(inicialmente desligado).
8 ŵŵº
Ŝ
15 ſƀƇ
9 int led = 13;
16 ŵŵ
ɨɪ
10 int botao = 7;
17 pinMode(led, OUTPUT);
11 boolean ligado = LOW;
18 ŵŵ
ɮ
12
13 ŵŵ²
19 pinMode(botao, INPUT);
se liga o ARDUINO
20 }
14 ŵŵºÃ
15 ſƀƇ
Na função setup descriminam-se as funções dos pinos 13 e 7. O pino
16 ŵŵ
ɨɪ
PROJETO 3
VUÍMETRO CONTROLADO
COM POTENCIÓMETRO
Neste projeto vai montar uma sequência luminosa com LEDs
semelhante ao que existia no famoso carro K.I.T.T. da série de televisão
o Justiceiro (Knight Rider). Com este projeto pretende-se introduzir os
conceitos de array, potenciómetro e a leitura de valores analógicos.
Comece por selecionar os componentes de acordo com a lista de
materiais. Monte o circuito conforme as indicações da secção hardware
sketch.
MATERIAIS
42 43
Fig.26. IWUYIQEHIQSRXEKIQHSTVSNIXS
Fig.25. IWUYIQEIP³XVMGSHSTVSNIXS
SKETCH
1 /* 32 }
2 ɪŞŞ
3 33 }
4 Adaptação: Talents & Treasures, Lda 34
5 @2015
35 //função que altera o estado dos LEDS
6 */
7 ŵŵ
º 36
ſƀƇ
controlo dos LEDS
37 //desliga todos os LEDs
8 ƃƄʰƇɫřɬřɭřɮřɯřɰřɨɥřɨɨř 38 ſʰɥŚʳɨɥŚʫʫƀƇ
12, 13}; 39 digitalWrite(ledPin[x], LOW);
9 ŵŵº
10 int ledDelay; int direction = 1; 40 }
41 // liga o LED correto da sequência
11 int currentLED = 0; ŵŵº
12 unsigned long changeTime; 42 digitalWrite(ledPin[currentLED],HIGH);
43 ŵŵ
13 int potPin = 2; ŵŵº
Ü
14
44 currentLED += direction;
45 ŵŵ
º
15 ŵŵºÞ
44 16 ſƀƇ 46 ſ
ʰʰɰƀƇ
ʰŞɨŚƈ 45
17 ŵŵºſÃƀ
47 ſ
ʰʰɥƀƇ
ʰɨŚƈ
18 ſʰɥŚʳɨɥŚʫʫƀƇ 48 }
19 pinMode(ledPin[x], OUTPUT); }
20
21 //regista o instante ao qual terminou o setup
22 changeTime = millis(); DISCUSSÃO DO SKETCH
23 }
24 Nas linhas 7 a 13 inicializam-se as variáveis que se consideram
25 ſƀƇ necessárias para o projeto. Chama-se especial atenção para linha 8:
26 ŵŵ³
Üř
27 ledDelay = analogRead(potPin); //Note que nos 8 ƃƄʰƇɫřɬřɭřɮřɯřɰřɨɥřɨɨř
Ü
²
º
12, 13};
28 // Se passou mais tempo além de ledDelay desde o momento que
õ
ŜŜŜ
29 ſſſƀŞ
ƀʴƀƇ Aqui declarou-se uma variável de um tipo especial: array de bytes.
30 changeLED(); ŵŵ
Um byte permite representar números positivos de 8-bits (valores
ŵ
inteiros no intervalo [0 - 255]). A intenção do programador foi criar uma
31 changeTime = millis(); ŵŵ
instante atual
estrutura única para manipular os valores correspondentes aos pinos
35 //função que altera o estado dos LEDS
dos vários LEDs. Como são muitos mas no fundo têm a mesma função,
desta vez, por razões de conveniência, optou-se por um novo tipo de 36
ſƀƇ
dados: o array. Um array é uma lista de valores de um mesmo tipo de 37 //desliga todos os LEDs
dados que se podem posteriormente alterar ou ler usando um índice. 38 ſʰɥŚʳɨɥŚʫʫƀƇ
Na linguagem ARDUINO os índices começam no valor zero. Assim, a 39 digitalWrite(ledPin[x], LOW);
expressão: 40 }
41 // liga o LED correto da sequência
byte aux = ledPin[0];ŵŵɥɫ 42 digitalWrite(ledPin[currentLED],HIGH);
43 ŵŵ
byte outroValor = ledPin[3]; // atribui a outroValor o 44 currentLED += direction;
ɮ
45 ŵŵ
º
46 ſ
ʰʰɰƀƇ
ʰŞɨŚƈ
ledPin[1] = 16;ŵŵɬ ɨ 47 ſ
ʰʰɥƀƇ
ʰɨŚƈ
ɨɭŚ
48 }
29 ſſſƀŞ
ƀʴƀƇ
30 changeLED(); ŵŵ
ŵ
31 changeTime = millis(); ŵŵ
instante atual
32 }
PROJETO 4
MATERIAIS
48 49
LED
1 1 LDR
VERMELHO
HARDWARE
Montar o circuito com o ARDUINO de acordo com o IWUYIQEHEǻKYVE
Tome especial atenção ao pino digital, se optar por usar outro que não
o pino 3, deve escolher um dos que têm disponível a função PWM
50 51
Fig.27. IWUYIQEHIQSRXEKIQHSTVSNIXS
Fig.28. IWUYIQEIP³XVMGSHSTVSNIXS
SKETCH
1 /*
2 Projeto 4 - Controlo de brilho com LDR
3
Fig.29. 5VSKVEQEIQI\IGY±SGSQIVMEP2SRMXSVEXMZS
4 Adaptação: Talents & Treasures, Lda
5 @2015
6 */
7 ŵŵ
8 ŵŵ
9 int pinoLED = 3;
10 // Pin connected to LDR
11 int pinoLDR = 0;
12 // Valor lido do LDR
13 int brilho = 0;
14
15 ſƀ
16 Ƈ
17 ŵŵ²º
Þ
9600 bps
52 18 ŜſɰɭɥɥƀŚ 53
19 ŵŵº
20 pinMode(pinoLED, OUTPUT);
21 } DISCUSSÃO DO SKETCH
22 ſƀ
23 Ƈ Como habitualmente, o sketch
24 ŵŵ³
25 brilho = analogRead(pinoLDR);
26 ŵŵ² escolheu-se o pino 3 porque tem a função PWM, mas poderia ter sido
27 ŜſƀŚ escolhido qualquer outro pino com PWM (5, 6, 9, 10 ou 11).
28
29 ŵŵº ɯ ŵŵ
17 ŵŵ²º
Þ
9600 bps
18 ŜſɰɭɥɥƀŚ
ɨɰ ŵŵº
20 pinMode(pinoLED, OUTPUT);
irá continuamente:
1.
e o LDR
54 25 brilho = analogRead(pinoLDR); 55
27 ŜſƀŚ
PROJETO 5
SEMÁFORO SIMPLIFICADO
PARA VEÍCULOS E PEÕES
uma passadeira para peões com acesso controlado também por um
semáforo e um botão de pressão. Quando um peão chega à passadeira
e pretende atravessar, deve solicitar a paragem dos veículos (semáforo
vermelho) carregando no botão. Nessa altura o semáforo dos veículos
deve evoluir para vermelho, e em seguida o semáforo dos peões passa
a verde para que nessa altura o peão possa atravessar a estrada em
58 59
Fig.31. IWUYIQEHIQSRXEKIQHSTVSNIXS
Fig.30. IWUYIQEIP³XVMGSHSTVSNIXS
SKETCH 39 ŵƋº
ɬ
õƋŵ
1 /* 40
2 ɬ޺
Ã
Þ 41 if (state == HIGH && (millis() -
3
4 Adaptação: Talents & Treasures, Lda ƀʴƀƇ
5 @2015 42 ŵŵ
6 */ 43 changeLights();
7
8 ŵŵºÃ
44 }
9
ʰɨɩŚ 45 }
10
ʰɨɨŚ 46
11
ʰɨɥŚ 47
ſƀƇ
12
13 ŵŵºÞ
48 ſ
řƀŚ// desligar
Ã
14 int peoesVermelho = 9; 49 ſ
ř
ƀŚ // ligar
15 int peoesVerde = 8; Ã
16
17 //Pino de input do botão
50 delay(2000); // aguardar 2 segundos
51
18 int botao = 2; 52 ſ
řƀŚ// desligar
19 Ã
60 61
20 ʰɬɥɥɥŚ// tempo permitido 53 ſ
ř
ƀŚ // ligar
Ã
21 unsigned long tempoDeToque; // tempo desde que o 54 delay(1000); // aguardar 1 segundo
botão foi pressionado 55
22
56 digitalWrite(peoesVermelho, LOW); // desligar
23 ſƀƇ Þ
24 ŵŵº
57 digitalWrite(peoesVerde, HIGH);ŵŵ
25 ſ
řƀŚ Þ
26 ſ
řƀŚ 58 ſƀŚŵŵ
27 ſ
řƀŚ 59
60 ŵŵ
Þ
28 pinMode(peoesVermelho, OUTPUT); 61 ſʰɥŚʳɨɥŚʫʫƀƇ
29 pinMode(peoesVerde, OUTPUT); 62 digitalWrite(peoesVerde, HIGH);
30 ŵŵº
31 pinMode(botao, INPUT); 63 delay(250);
32 ŵŵº
64 digitalWrite(peoesVerde, LOW);
33 ſ
ř
ƀŚ 65 delay(250);
34 digitalWrite(peoesVermelho, HIGH); 66 }
67
35 }
36
68 digitalWrite(peoesVermelho, HIGH); // ligar
Þ
37 ſƀƇ 69 delay(500);
38 int state = digitalRead(botao);
ÍNDICE
Uma vez expirado o tempo para atravessar o led verde de peões passar
70 ſ
řƀŚ //
Ã
por uma animação pisca pisca por 5 segundos:
71 ſ
ř
ƀŚ // ligar
Ã
61 ſʰɥŚʳɨɥŚʫʫƀƇ
72 ſ
řƀŚ // desligar
62 digitalWrite(peoesVerde, HIGH);
Ã
73 63 delay(250);
74 ŵŵ
64 digitalWrite(peoesVerde, LOW);
75 tempoDeToque = millis();
65 delay(250);
76 }
66 }
a passadeira (5 segundos).
57 digitalWrite(peoesVerde, HIGH);ŵŵ
Þ
58 ſƀŚŵŵ
PROJETO 6
CHARLIEPLEXING
Imagine uma situação em que necessita controlar mais do que 30 LEDs.
A placa ARDUINO UNO tem apenas 14 pinos digitais endereçáveis,
por isso há que encontrar outras formas de resolver o problema. Uma
solução óbvia seria juntar mais ARDUINOS, mas seria uma solução
Por exemplo:
para 4 pinos: 4 × (4 - 1) = 12
(Possível controlar até 12 LEDs com apenas 4 portas do Arduino)
5 pinos: 5 × (5 - 1) = 20
(Possível controlar até 20 LEDs com apenas 5 portas do Arduino)
Este método usa como vantagem o facto de os LEDs serem díodos nos
66 HARDWARE 67
Fig.32. (LEVPMITPI\MRKGSQTMRSWI1*)W
Fig.33. IWUYIQEIP³XVMGSHSTVSNIXS
SKETCH
1 /*
2 Projeto 6 - Charlieplexing
3
4 Adaptação: Talents & Treasures, Lda
5 @2015
6 */
7
8
ƃɪƄʰƇɯřɰřɨɥƈŚŵŵº
de controlo
9 ʰſ
ƀŵ
ſƀŚ //determina o comprimento do array
10
11 ſƀ
12 Ƈ
13
14 }
15
16
17 ſƀ
68 69
18 Ƈ
19 //Ligar todos os LEDs durante 500 ms
20 allOn(charlie, 500);
21
22 //Desligar todos os LEDs durante 500 ms
23 allOff(charlie, 500);
24
25 ŵŵ
ɬ
ɩɥɥ
cada alteração
26 blinkAll(charlie, 5, 200);
27
28 ŵŵ
ÞÃ
Fig.34. IWUYIQEHIQSRXEKIQHSTVSNIXS
29 allPermsSwitch();
30
31 ŵŵ²Ü
32 delay(2000);
33 }
34
35
36
37
38 ŵŵÞ
39
40 /*
41 Desligar todos os LEDs do array
42 pinArray = Array dos pinos para desligar
43 del = delay até a proxima operação 84 ŵŵº
44 */
85
ſƃƄř
ř
45 ſƃƄřƀ int sink)
46 Ƈ 86 Ƈ
47 for (int pin = 0; pin < numPins; pin++) 87 pinMode(pinArray[source], OUTPUT);
48 Ƈ 88 pinMode(pinArray[sink], OUTPUT);
49 pinMode(pinArray[pin], OUTPUT); 89 for (int pin = 0; pin < numPins; pin++)
50 digitalWrite(pinArray[pin], LOW); 90 Ƈ
51 } 91 if (pin == source)
52 delay(del); 92 Ƈ
53 } 93 ŵŵº
54
55 94 digitalWrite(pinArray[pin], HIGH);
56 /*
57 Ligar todos os LEDs do array 95 }
58 pinArray = Array dos pinos para desligar 96 else if (pin == sink)
59 del = delay até a proxima operação
60 */ 97 Ƈ
61 ſƃƄřƀƇ 98 ŵŵº
70 62 int timer = 0; 99 digitalWrite(pinArray[pin], LOW); 71
63 ʰſƀŚ 100 }
64 ſʳƀƇ 101 else
65 ſʰɥŚʳŚʫʫƀƇ 102 Ƈ
66 ſʰɥŚʳŚʫʫƀƇ 103 ŵŵº
67 if (j == i) INPUT (alta capacitância)
68 continue; 104 pinMode(pinArray[pin], INPUT);
69 switchOn(pinArray, i, j); 105 }
70 } 106 }
71 } 107 }
ʰſƀŞŚ
108
72 109
73 } 110 ŵŵ Þ
111 /*
74 } 112 ŵŵ
Þř
75 113 ligando e desligando cada LED com um atraso de 500 ms
76 114 */
ſƀ
77 /*
78 řŜ 115
79
řº 116 Ƈ
escolhido como OUTPUT, indicando todos os outros pinos como
ſ
ƀŜ 117 ſʰɥŚʳŚʫʫƀƇ
80
81
pinArray = Array dos pinos para trabalhar
ʰ
º
ſ
ƀ
118 ſʰɥŚʳŚʫʫƀƇ
82 ʰ
º
ſ
ƀ
83 */
119 ſʰʰƀƇ
120 continue; aumentar o nº de leds deste projeto basta adicionar mais um elemento
121 } ao array charlie sem ser necessário alterar mais alguma linha no código.
122 switchOn(charlie, i, j); A função setup (linhas 11 a 14), neste caso, não tem qualquer código já
123 delay(500); que o circuito vai comutar os pinos em termos de INPUT / OUTPUT em
124 allOff(charlie, 10); tempo de execução. Recorde que os pinos serão usados em 3 estados
HIGH, LOW e alta impedância.
125 }
A função loop (linhas 17 a 33) irá percorrer um conjunto de estados.
126 } Os estados são ligar todos os LEDs, desligar todos os LEDS, piscar
127 } todos os LEDs 5 vezes e fazer uma animação percorrendo todas as
128
129 combinações possíveis. Usam-se funções auxiliares para cumprir cada
130 um destes estados.
131
132 //Função para piscar todos os LEDs do array
133 17 ſƀ
134 /* 18 Ƈ
135
19 //Ligar todos os LEDs durante 500 ms
136 pinArray = Array dos pinos para trabalhar
137 reps = número de piscas 20 allOn(charlie, 500);
138 del = tempo de permanencia num estado 21
139 */ 22 //Desligar todos os LEDs durante 500 ms
72 140 ſƃƄřř 23 allOff(charlie, 500); 73
ƀƇ
24
ɩɬ ŵŵ
ɬ
ɩɥɥ
141 ſʴɥƀƇ cada alteração
DISCUSSÃO DO SKETCH
No código estão disponíveis também as seguinte funções auxiliares,
cujos nomes são bastante intuitivos relativamente às tarefas que
cumprem:
pinos de controlo dos LEDs (charlie) e o total desses pinos.
•
8
ƃɪƄʰƇɯřɰřɨɥƈŚŵŵº • allOn
de controlo
9 ʰſ
ƀŵ • switchOn
ſƀŚ //determina o comprimento do array
• allPermsSwitch
• blinkAll
ÍNDICE
YQGMVGYMXSMRXIKVEHS
Fig.36. GSPSGE±SHI
da placa as ligações internas dos buracos
são verticais, existindo normalmente
DÍODO
uma separação ao meio que permite a
colocação de circuitos integrados de Um díodo é um dispositivo que permite
Fig.38. IWUYIQEHIYQH¸SHS
forma conveniente, uma vez que cada a passagem de corrente apenas numa
pino do chip irá ligar num conjunto direção. Numa analogia hidráulica, é uma
diferente de buracos. válvula que permite a passagem da água
apenas num dos sentidos. Os díodos
76 ânodo 77
COMUNICAÇÃO SÉRIE podem assim ser úteis para impedir que,
caso alguém acidentalmente inverta as
cátodo
ligações da alimentação e da terra num
A comunicação série é um processo de troca dados entre dispositivos
circuito, os componentes do circuito
digitais. Todas as placas Arduino têm pelo menos uma porta de
comunicações série (que também são conhecidas por portas UART ou
USART). Nas comunicações série, os bits de dados são transmitidos
DÍODO EMISSOR DE LUZ / LIGHT EMITTING DIODE - LED
série usa os pinos digitais 0 (RX) e 1 (TX) assim como a interface USB
Fig.39. IWUYIQEHIYQ1*)
ânodo cátodo
com o PC, por isso, não é recomendável usar os pinos digitais 0 e 1 LED é o acrónico de Light Emitting Diode ou, em
para input/output quando pretendermos usar a comunicação série português, díodo emissor de luz. Um LED é um
nos nossos sketchs! díodo que quando atravessado por corrente elétrica
emite luz. Existem LEDs das mais variadas cores e
brilhos, podendo também emitir luz ultravioleta ou
Fig.37. GVMWXEPHI2-^
o ânodo (polo positivo) e que a mais curta (ou o lado plano) é o cátodo
(polo negativo).
Assim para que o LED emita luz a perna mais comprida deve ser ligada Na linha 1 descrevem-se detalhes sobre a função, tais como o seu
ao potencial mais alto e o terminal mais curto ao potencial mais baixo. nome: “setup”. O texto que surge antes e depois do nome da função
descrevem respetivamente o tipo de retorno e os parâmetros de
entrada. O código escrito entre os símbolos { e } correspondem ao
sujeito a correntes muito elevadas), mas como funciona como isolador corpo da função: as ações ou processamento que faz a função.
não circula corrente e logo não acende. Quando ligado no sentido
correto, é essencial que seja sempre ligada uma resistência em série A linha 3 corresponde à chamada da função pinMode e com os
com o LED para limitar a corrente que atravessa o LED, caso contrário parâmetros de entrada “ledPin” e OUTPUT.
o LED pode queimar. Para além dos LEDs normais que emitem luz de Para conhecer mais detalhes da linguagem Arduino consulte também:
apenas uma cor, existem também LEDs bicolores e tricolores. Existem,
por exemplo, os chamados LEDs RGB que são constituídos por 3 LEDs
http://www.arduino.cc/en/Reference/HomePage
encapsulados, um vermelho, outro verde e outro azul (daí RGB – red,
green, blue). O LED RGB tem 4 pernas, um sendo o ânodo (ou o cátodo)
comum aos 3 LEDs e os outros 3 são os cátodos (ou ânodos) individuais.
Ajustando os níveis de brilho dos LEDs R, G e B pode obter-se uma luz FUNÇÃO LOOP() E SETUP()
de qualquer cor. Este é o princípio usado em cada pixel dos monitores
78 ou TVs a cores. Há duas funções especiais que fazem parte de todos os sketchs 79
Arduino: setup() e loop().
DIVISOR DE TENSÃO A função setup () é executada uma única vez, apenas no início do
programa e nela devem realizar-se as tarefas necessárias para preparar
É um circuito passivo linear que produz uma tensão de saída (Vout) que
é uma fracção da tensão de entrada no circuito (Vin).
depois de feito o setup() o sketch
FUNÇÃO executar o loop(). Estas duas funções devem ser incluídas em todos os
sketchs Arduino mesmo que não se tenha utilidade para elas numa ou
noutra situação.
Uma função (às vezes também designada por procedimento ou sub-
rotina) é um trecho de código que pode ser invocado a partir de um
outro local do sketch. Veja o exemplo:
1 ſƀ
1 for (int x = 0; x « 100; x++)
2 Ƈ
2 Ƈ
3 pinMode(ledPin, OUTPUT);// sets the digital pin as output
3 println(x); // prints o to 99
4 }
4 }
ÍNDICE ÍNDICE
P¾KMGSWSY
Fig.41. STIVEHSVIW
A instrução for é usada para repetir um bloco de expressões de código. && E (conjunção) AND
Os operadores lógicos ou booleanos
|| OU (disjunção) OR
paragem. É muitas vezes usado com arrays para executar operações são os seguintes.
repetitivas em coleções de dados ou pinos. Estes operadores lógicos podem ser ! NÃO (negação) NOT
usados para testar várias condições.
Fig.40. Z«VMSWTSXIRGM¾QIXVSW
resistência ajustável a uma
gama de valores entre 0
Tensão (V): é uma medida do potencial eléctrico. É medido em Volt.
Corrente (I):
valor encontra-se inscrito
condutivo. É medido em Amper.
no potencíometro). O facto
Resistência (R):
do potenciómetro ser 4K7
eléctrica. É medido em Ohm.
Estas 3 grandezas estão relacionadas entre si pela lei de Ohm:
a sua gama é de 0 a 4700
Ohms.
V=R×I
Uma das aplicações clássicas dos potenciómetros é como divisor de
tensão que permite obter uma tensão de saída variável no pino central a
Em função das necessidades de cálculo a cada momento, podemos
usar as equivalências:
do mesmo. Um lado é ligado à terra, outro a 5v e o último (o central) é
I = V / R ou R = V / I
ÍNDICE ÍNDICE
Fig.42. 5;)
Fig.43. VIWMWX´RGMETYPPYT
Modulação por Largura de Pulso
PWM, acrónimo de Pulse Width 0% Duty Cycle - analogWrite(0) aos +5v) ou Pull-down (conectada 5v 5v
Modulation é uma técnica que permite 5v à terra) de inputs: são resistências 1
por via de um sinal digital emular 0v adicionadas aos inputs do Arduino resistência
botão de
25% Duty Cycle - analogWrite(64) R 10k pressão
um resultado analógico. O controlo 5v S
2
digital inerente ao microcontrolador, 0v no caso de não haver um input entrada entrada
82 produz uma onda quadrada que 50% Duty Cycle - analogWrite(127)
2
83
5v
S
R 10k
permanece no tempo num de dois estabilizam o circuito, caso contrário botão de
1
estados possíveis: 5V (ON) ou 0V 0v obteremos um comportamento
pressão resistência
valores numa escala de 0 a 255, de tal modo que analogWrite(255) RESISTÊNCIAS E CÓDIGO DE CORES
corresponde a 100% do tempo no estado 1 (também conhecido como
duty cycle 100%), já analogWrite(127) corresponde um duty cycle de Resistência é um componente eletrónico projetado para causar
50% (ou seja num ciclo completo da onda, metade do tempo está a 0V oposição à passagem da corrente elétrica e, portanto, causar uma
e outra metade a 5V). queda de tensão entre os seus terminais. Numa analogia hidráulica uma
que o tubo que lhe está ligado. Quando a água (corrente elétrica) entra
ÍNDICE ÍNDICE
da outra extremidade é por consequência diminuída. As resistências tolerância é de ± 5%, ou seja o fabricante apenas garante que o valor
são utilizadas para diminuir a tensão ou a corrente noutros dispositivos.
A grandeza eléctrica resistência mede-se em Ohm sendo a letra grega
Fig.45. I\IQTPSWHIETPMGE±SHE
prático terem inscrito o seu valor, por isso é usado um código de 4
riscas coloridas. As riscas são impressas em torno da resistência e o 220 vermelho vermelho castanho
valor que representam pode ser calculado com base no código de 1000 ou 1 k castanho preto vermelho
cores da tabela seguinte:
570 k verde violeta amarelo
285 Não é possível nem necessário ter componentes de todos os valores! Para termos uma resistência
de valor 285 , podemos associar uma de 65 e outra de 220 em série (a resistência equivalente de
uma série é a soma das resistências). Também podemos associar duas (ou mais) resistências em
paralelo (a resistência equivalente de um paralelo de duas resistências é igual à divisão do seu
produto pela sua forma).
2 2 102 ± 2%
são placas de circuitos que contém outros dispositivos de utilização
3 3 103
4 4 104 Ethernet, etc.). Estas placas podem simplesmente encaixar-se na
5 5 105 parte superior do Arduino para permitir funcionalidades adicionais.
6 6 106
7 7
Z«VMSWWLMIPHWEGSTPEHSW
8 8 ± 5%
Fig.46. &7)9.34GSQ
0.1
9 9 0.01 ± 10%
CRÉDITOS DE IMAGENS:
Figura 37
(http://creativecommons.org/licenses/by-sa/2.0)]
Figura 46 por Frédéric BISSON (Arduino Uno et deux shields)
[CC BY 2.0 (https://creativecommons.org/licenses/
by/2.0/)]