Escola Secundária Afonso Lopes Vieira Curso Profissional de Técnico de Eletrónica e Telecomunicações 2009/2012 Explorando a Plataforma Arduino Relatório da Prova de Aptidão Profissional Carlos Daniel Bajouco Martins Moço, N.º 17464, 3.º ET Leiria, junho de 2012
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Escola Secundária Afonso Lopes VieiraCurso Profissional de Técnico de Eletrónica e Telecomunicações
2009/2012
Explorando a Plataforma Arduino
Relatório da Prova de Aptidão Profissional
Carlos Daniel Bajouco Martins Moço, N.º 17464, 3.º ET
Leiria, junho de 2012
Escola Secundária Afonso Lopes VieiraCurso Profissional de Técnico de Eletrónica e Telecomunicações
2009/2012
Explorando a Plataforma Arduino
Relatório da Prova de Aptidão Profissional
Carlos Daniel Bajouco Martins Moço, N.º 17464, 3.º ET
Orientador – Paulo Manuel Martins dos Santos
Coorientadora – Judite de Jesus Rosa Judas da Cunha Vieira
Leiria, junho de 2012
Relatório da Prova de Aptidão Profissional – Carlos Moço
Dedicatória
Dedico este trabalho aos meus pais, pela sua constante preocupação e apoio.
Aos meus amigos, especialmente, o Emanuel por me ter ajudado a superar algumas
dificuldades.
- i -
Relatório da Prova de Aptidão Profissional – Carlos Moço
Agradecimentos
Em primeiro lugar, agradeço ao senhor diretor da escola, Dr. Luís Pedro Biscaia, por nos ter
apoiado, ao longo do curso.
Agradeço à diretora de turma e ex-presidente do conselho executivo da escola, Dr.ª Judite da
Cunha Vieira, responsável pela abertura do curso e por ter me ter dado a oportunidade de o
concluir.
Agradeço ao diretor de curso, Dr. Paulo Manuel Martins dos Santos, que nos acompanhou ao
longo destes anos.
O meu reconhecimento à empresa Baquelite Liz, S.A. por me ter proporcionado o contacto
com o mundo do trabalho.
Não posso deixar de agradecer a todos os professores em geral.
Quero, ainda, deixar aqui o meu reconhecimento à minha família, sem eles, nada sou.
Finalmente, agradeço aos meus colegas que também me ajudaram.
- ii -
Relatório da Prova de Aptidão Profissional – Carlos Moço
Relatório da Prova de Aptidão Profissional – Carlos Moço
Arduino Mega ADK
O Arduino Mega ADK é uma placa baseada no microcontrolador ATmega2560. Possui uma
interface USB baseada no circuito integrado MAX3421 para ligação a tablets ou telemóveis
- 6 -
Figura 3: Arduino Ethernet Shield
Figura 4: Arduino Mega ADK
Relatório da Prova de Aptidão Profissional – Carlos Moço
Android. O módulo possui 16 entradas analógicas e ainda 54 pinos que podem funcionar
como entradas ou saídas digitais, dos quais 14 podem ser usados como saídas em modulação
por largura de pulso (PWM).
O Arduino Mega ADK pode ser alimentado através da ligação USB ou com uma fonte de
alimentação independente. A fonte de energia é selecionada automaticamente.
Arduino Motor Shield
O Arduino Motor Shield é baseado no L298, que é uma ponte em H dupla, concebidas para
cargas indutivas, como relés, eletroímanes, motores de corrente contínua e motores passo a
passo.
Este módulo permite comandar até dois motores de corrente contínua ou um motor passo a
passo, controlando a velocidade e a direção de cada um de forma independente.
O Arduino Motor Shield deve ser alimentado apenas por uma fonte de alimentação separada,
porque o circuito integrado L298 montado na shiled tem duas ligações de alimentação
separadas, uma para a lógica (5V) e a outra para a alimentação do motor (Vin).
- 7 -
Figura 5: Arduino Motor Shield
Relatório da Prova de Aptidão Profissional – Carlos Moço
Gameduino
Gameduino é um adaptador de jogos para Arduino Uno (ou qualquer outra placa com uma
interface SPI) que funciona como uma simples shield que se monta sobre o Arduino e conta
com uma saída para ligação a monitores de vídeo VGA e outra com som estéreo.
Para evitar possíveis danos para a placa Arduino em que a shield está montada, recomenda-se
a utilização de uma fonte de alimentação externa que forneça uma tensão entre 7 e 12V.
2.2. Métodos e técnicas utilizadas
Primeiro que tudo comecei a fazer o esquemático para ligar 64 LEDs numa matriz 8x8 no
programa EAGLE, depois de concluído o esquemático, comecei a desenhar as duas placas de
- 8 -
Figura 6: Arduino Uno (em baixo) com as shields Ethernet (no meio)
e VGA (em cima)
Relatório da Prova de Aptidão Profissional – Carlos Moço
circuito impresso, a dos LEDs e a shield a encaixar no Arduino Uno.
Depois comecei a testar vários circuitos em protoboard ligados ao Arduino Uno. Basicamente
com LEDs, resistências e potenciómetros. O objetivo era aprender como as coisas
funcionavam. Para cada exemplo desenvolvi o código em linguagem C no programa Arduino
a correr no sistema operativo Linux/Ubuntu.
2.3. Execução do projeto
O esquemático que elaborei pode ser observado na figura, nele se pode ver a matriz de LEDs
8x8, com os ânodos ligados por linha, os cátodos por coluna e os dois potenciómetros que
ligam às entradas analógicas A4 e A5 e permitem a interação com o Arduino Uno.
- 9 -
Figura 7: Esquemático elaborado no EAGLE
Relatório da Prova de Aptidão Profissional – Carlos Moço
Depois de ter concluído o esquemático desenhei também no EAGLE duas placas de circuito
impresso, uma para o mostrador de LEDs e a outra para encaixar como shield no Arduino
Uno. Tiveram de ser de dupla face devido à existência de muitas ligações. Seguem-se as
respetivas imagens, as figuras 8 e 9 referem-se ao mostrador de LEDs, as figuras 10 e 11
referem-se à shield para o Arduino Uno e as figuras 12 e 13 dizem respeito à disposição dos
vários componentes em ambas as placas.
- 10 -
Figura 8: Desenho da placa de circuito impresso
do mostrador - lado dos componentes
Relatório da Prova de Aptidão Profissional – Carlos Moço
- 11 -
Figura 9: Desenho da placa de circuito impresso
do mostrador - lado das soldaduras
Figura 10: Desenho da
placa de circuito impresso
da shield - face superior
Figura 11: Desenho da
placa de circuito impresso
da shield - face inferior
Relatório da Prova de Aptidão Profissional – Carlos Moço
- 12 -
Figura 12: Disposição dos componentes na placa
de circuito impresso do mostrador
Figura 13: Disposição dos
componentes na placa de
circuito impresso da shield
Relatório da Prova de Aptidão Profissional – Carlos Moço
Na tabela 1 apresento a lista de material que utilizei no meu projeto.
Tabela 1 – Lista de material
Item n.º Nome Quantidade Descrição/Valor
1 SV1,
SV2
2 Ligador com 2x8 pinos
2 R16, R17 2 Potenciómetro de 10kΩ linear
3 R1, R2,
R3, R4,
R5, R6,
R7, R8
8 Resistência de 10kΩ 1/4W
4 D1, D2,
D3, D4,
D5, D6,
D7, D8,
D9, D10,
…, D60,
D61,
D62,
D63, D64
64 LED Ø5mm vermelho
5 JP1, JP2,
JP3, JP4
4 Ligador de 3 pinos
2.4. Código-fonte desenvolvido
Depois de desenhar os esquemáticos e as placas de circuito impresso, passei para a
programação do microcontrolador do Arduino Uno, não sem antes ter montado numa
protoboard um circuito simples para testes, conforme figura 14, cuja fotografia se encontra na
figura 15.
- 13 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
- 14 -
Figura 14: Esquemático do circuito para testes
Figura 15: Circuito de testes montado em protoboard
Relatório da Prova de Aptidão Profissional – Carlos Moço
Seguidamente descarreguei da internet o programa que se chama Arduino 1.0, onde
desenvolvi o código-fonte em linguagem C para alguns exemplos, que se transcreve de
seguida:
Exemplo 1
/* Nome do programa: pisca4.ino Descrição: Pisca o LED ligado ao pino 4 do Arduino Uno. Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP) Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira Data: 26/04/2012 */
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { // configura o pino digital 4 do Arduino como saída pinMode(4, OUTPUT); }
/* função principal do programa, executada continuamente */void loop() { digitalWrite(4, HIGH); // acende o LED delay(500); // aguarda meio segundo
- 15 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
digitalWrite(4, LOW); // apaga o LED delay(500); // aguarda meio segundo}
Exemplo 2
/* Nome do programa: pisca4.ino Descrição: Pisca o LED ligado ao pino 4 do Arduino Uno. Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP) Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira Data: 26/04/2012 */
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { // configura o pino digital 4 do Arduino como saída pinMode(4, OUTPUT); }
/* função principal do programa, executada continuamente */void loop() { digitalWrite(4, HIGH); // acende o LED delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED
- 16 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
delay(500); // aguarda meio segundo}
Exemplo 3
/* Nome do programa: pisca451011.ino Descrição: Pisca os LEDs ligados aos pinos 4, 5, 10 e 11 do Arduino Uno, na sequência 4 -> 5 -> 10 -> 11 -> 10 -> 5 -> 4 -> 5 -> ... Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP) Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira Data: 26/04/2012 */
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { // configura os pinos digitais 4, 5, 10 e 11 do Arduino como saídas pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); }
- 17 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
/* função principal do programa, executada continuamente */void loop() { digitalWrite(4, HIGH); // acende o LED ligado ao pino 4 digitalWrite(5, LOW); // apaga o LED ligado ao pino 5 digitalWrite(10, LOW); // apaga o LED ligado ao pino 10 digitalWrite(11, LOW); // apaga o LED ligado ao pino 11 delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED ligado ao pino 4 digitalWrite(5, HIGH); // acende o LED ligado ao pino 5 digitalWrite(10, LOW); // apaga o LED ligado ao pino 10 digitalWrite(11, LOW); // apaga o LED ligado ao pino 11 delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED ligado ao pino 4 digitalWrite(5, LOW); // apaga o LED ligado ao pino 5 digitalWrite(10, HIGH); // acende o LED ligado ao pino 10 digitalWrite(11, LOW); // apaga o LED ligado ao pino 11 delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED ligado ao pino 4 digitalWrite(5, LOW); // apaga o LED ligado ao pino 5 digitalWrite(10, LOW); // apaga o LED ligado ao pino 10 digitalWrite(11, HIGH); // acende o LED ligado ao pino 11 delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED ligado ao pino 4 digitalWrite(5, LOW); // apaga o LED ligado ao pino 5 digitalWrite(10, HIGH); // acende o LED ligado ao pino 10 digitalWrite(11, LOW); // apaga o LED ligado ao pino 11 delay(500); // aguarda meio segundo digitalWrite(4, LOW); // apaga o LED ligado ao pino 4 digitalWrite(5, HIGH); // acende o LED ligado ao pino 5 digitalWrite(10, LOW); // apaga o LED ligado ao pino 10 digitalWrite(11, LOW); // apaga o LED ligado ao pino 11 delay(500); // aguarda meio segundo}
Exemplo 4
- 18 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
/* Nome do programa: potenciometro4.ino Descrição: Pisca os LEDs ligados aos pinos 4, 5, 10 e 11 do Arduino Uno, na sequência 4 -> 5 -> 10 -> 11 -> 10 -> 5 -> 4 -> 5 -> ... A velocidade da sequência de acendimentos é ajustada através de um potenciómetro ligado ao pino analógico A4. São também enviadas mensagens através da ligação série, que podem ser visualizadas com o Serial Monitor (Ctrl+Shift+M). Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP) Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira Data: 26/04/2012 */
/* declaração de constantes e variáveis */int potPin = A4; // selec. o pino analógico ao qual está ligado o sensorint led1Pin = 4; // seleciona o pino digital ao qual está ligado o LED1int led2Pin = 5; // seleciona o pino digital ao qual está ligado o LED2int led3Pin = 10; // seleciona o pino digital ao qual está ligado o LED3int led4Pin = 11; // seleciona o pino digital ao qual está ligado o LED4int potValue = 0; // variável para guardar o valor analógico do sensor
- 19 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { Serial.begin(57600); // inicializa a linha de série para 57600bps Serial.println("Arduino@CPTET"); // envia mensagem através da linha série Serial.println("-------------"); // envia mensagem através da linha série
// configura os pinos digitais onde estão ligados os LEDs como saídas pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); }
/* função principal do programa, executada continuamente */void loop() { // lê o valor analógico presente no cursor do potenciómetro potValue = analogRead(potPin);
// envia o valor lido através da linha de comunicação série Serial.write("Leitura: "); Serial.println(potValue, DEC);
// faz a sequência de acendimentos digitalWrite(led1Pin, HIGH); // acende o LED1 digitalWrite(led2Pin, LOW); // apaga o LED2 digitalWrite(led3Pin, LOW); // apaga o LED3 digitalWrite(led4Pin, LOW); // apaga o LED4 delay(potValue); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1 digitalWrite(led2Pin, HIGH); // acende o LED2 digitalWrite(led3Pin, LOW); // apaga o LED3 digitalWrite(led4Pin, LOW); // apaga o LED4 delay(potValue); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1 digitalWrite(led2Pin, LOW); // apaga o LED2 digitalWrite(led3Pin, HIGH); // acende o LED3 digitalWrite(led4Pin, LOW); // apaga o LED4 delay(potValue); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1
- 20 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
digitalWrite(led2Pin, LOW); // apaga o LED2 digitalWrite(led3Pin, LOW); // apaga o LED3 digitalWrite(led4Pin, HIGH); // acende o LED4 delay(potValue); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1 digitalWrite(led2Pin, LOW); // apaga o LED2 digitalWrite(led3Pin, HIGH); // acende o LED3 digitalWrite(led4Pin, LOW); // apaga o LED4 delay(potValue); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1 digitalWrite(led2Pin, HIGH); // acende o LED2 digitalWrite(led3Pin, LOW); // apaga o LED3 digitalWrite(led4Pin, LOW); // apaga o LED4 delay(potValue); // aguarda algum tempo}
Exemplo 5
/* Nome do programa: potenciometro45.ino Descrição: Pisca os LEDs ligados aos pinos 4 e 5 do Arduino Uno a um ritmo ajustado pelo potenciómetro ligado à entrada A4. O potenciómetro ligado à entrada A5 ajusta a intensidade luminosa dos LEDs ligados aos pinos 10 e 11. Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP)
- 21 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira Data: 26/04/2012 */
/* declaração de constantes e variáveis */// seleciona o pino analógico ao qual liga o potenciómetro da temporizaçãoint pot1Pin = A4;// seleciona o pino analógico ao qual liga o potenciómetro da intensidadeint pot2Pin = A5;int led1Pin = 4; // seleciona o pino digital ao qual está ligado o LED1int led2Pin = 5; // seleciona o pino digital ao qual está ligado o LED2int led3Pin = 10; // seleciona o pino digital ao qual está ligado o LED3int led4Pin = 11; // seleciona o pino digital ao qual está ligado o LED4// variável para guardar o valor analógico do potenciómetro da temporizaçãoint pot1Value = 0;// variável para guardar o valor analógico do potenciómetro da intensidadeint pot2Value = 0;
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { // configura os pinos digitais onde estão ligados os LEDs como saídas pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); }
/* função principal do programa, executada continuamente */void loop() { // lê o valor analógico presente no cursor do potenciómetro ligado a A4 pot1Value = analogRead(pot1Pin); // lê o valor analógico presente no cursor do potenciómetro ligado a A5 pot2Value = analogRead(pot2Pin); pot2Value = pot2Value / 4; // cálculo para ajustar ao intervalo 0 .. 255 digitalWrite(led1Pin, HIGH); // acende o LED1
- 22 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
digitalWrite(led2Pin, HIGH); // acende o LED2 analogWrite(led3Pin, pot2Value); // ajusta intensidade do LED3 analogWrite(led4Pin, pot2Value); // ajusta intensidade do LED4 delay(pot1Value); // aguarda algum tempo digitalWrite(led1Pin, LOW); // apaga o LED1 digitalWrite(led2Pin, LOW); // apaga o LED2 analogWrite(led3Pin, pot2Value); // ajusta intensidade do LED3 analogWrite(led4Pin, pot2Value); // ajusta intensidade do LED4 delay(pot1Value); // aguarda algum tempo}
Exemplo 6
/* Nome do programa: movimento45.ino Descrição: Sinaliza a rotação anti-horária do cursor do potenciómetro 1 acendendo o LED 1, enquanto a rotação horária é sinalizada pelo LED 2. Sinaliza a rotação anti-horária do cursor do potenciómetro 2 acendendo o LED 3, enquanto a rotação horária é sinalizada pelo LED 4. Não havendo movimento dos cursores dos potenciómetros todos os LEDs mantém-se apagados. Autor(es): 17464 - Carlos Daniel Bajouco Martins Moço Turma: 3.º ET Disciplina: Prova de Aptidão Profissional (PAP) Curso: C P de Técnico de Eletrónica e Telecomunicações Escola: Escola Secundária Afonso Lopes Vieira
- 23 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
Data: 26/04/2012 */
/* declaração de constantes e variáveis */// seleciona o pino analógico ao qual está ligado o potenciómetro 1int pot1Pin = A4;// seleciona o pino analógico ao qual está ligado o potenciómetro 2int pot2Pin = A5;// seleciona o pino digital ao qual está ligado o LED1int led1Pin = 4;// seleciona o pino digital ao qual está ligado o LED2int led2Pin = 5;// seleciona o pino digital ao qual está ligado o LED3int led3Pin = 10;// seleciona o pino digital ao qual está ligado o LED4int led4Pin = 11;// variável para guardar o valor analógico do potenciómetro 1int pot1Value = 0;// variável para guardar o valor analógico do potenciómetro 2int pot2Value = 0;// variável para guardar o valor analógico anterior do potenciómetro 1int pot1ValueOld = pot1Value;// variável para guardar o valor analógico anterior do potenciómetro 2int pot2ValueOld = pot2Value;int potGap = 1; // define a sensibilidade para evitar o ruído nas leituras
/* função de inicialização do microcontrolador, executada uma só vez */void setup() { // configura os pinos digitais onde estão ligados os LEDs como saídas pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); }
/* função principal do programa, executada continuamente */void loop() {
- 24 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
// lê os valores analógicos dos potenciómetros 1 e 2 pot1Value = analogRead(pot1Pin); pot2Value = analogRead(pot2Pin);
if (pot1Value < (pot1ValueOld - potGap)) { digitalWrite(led1Pin, HIGH); } if (pot1Value > (pot1ValueOld + potGap)) { digitalWrite(led2Pin, HIGH); } if (pot2Value < (pot2ValueOld - 2)) { digitalWrite(led3Pin, HIGH); } if (pot2Value > (pot2ValueOld + 2)) { digitalWrite(led4Pin, HIGH); } delay(100); // aguarda algum tempo // apaga todos os LEDs digitalWrite(led1Pin, LOW); digitalWrite(led2Pin, LOW); digitalWrite(led3Pin, LOW); digitalWrite(led4Pin, LOW); // guarda os valores lidos para futura comparação pot1ValueOld = pot1Value; pot2ValueOld = pot2Value;}
- 25 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
3. Conclusão
O meu projeto consistiu em falar sobre o Arduino Uno, para conseguir concluir este projeto
foi preciso ter uma grande capacidade de autonomia e persistência, aspetos esses que se foram
desenvolvendo à medida que o concebia, planeava e executava.
A execução do projeto da Prova de Aptidão Profissional envolveu um grande esforço e
dedicação. Para além das competências técnicas e diversas capacidades que o trabalho exigiu,
penso que foi benéfico para mim a nível profissional e a nível social, uma vez que no futuro
irei enfrentar outros projetos tão ou mais importante que este.
Naturalmente que, no decorrer da realização do projeto da Prova de Aptidão Profissional senti
diversas dificuldades, as quais só puderam ser ultrapassadas com a capacidade de trabalho que
foi desenvolvida em mim, com o apoio do professor Paulo Santos e da colaboração de alguns
dos meus colegas.
- 26 -
Relatório da Prova de Aptidão Profissional – Carlos Moço
Bibliografia
[1] Ping Pong com Matriz de Leds 8×8 e Arduino | Bruno Soares, acedido a 20 de
setembro de 2011, em http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-
matrix-on-arduino.
[2] Snake on a 8x8 led matrix – Arduino Forum, acedido a 27 de setembro de 2011, em