TPL02 :: Microcontrolador Arduino MKR1000 com entradas
analógicas e saı́das digitais
SMD::SE::TSE::2023/2024
Outubro 2023
1 Objectivo
Elaborar um circuito e um pequeno programa de exploração usando o módulo MKR1000 e alguns componentes
do kit fornecido.
1.1 Material
Módulo Arduino MKR1000. Iremos usar alguns componentes do kit
[Link]
Ambiente de desenvolvimento IDE do módulo Arduino.
Componentes electrónicos
– Fototransistor
– Buzzer piezoelectrico
– Resistência (10 kΩ)
2 Requisitos funcionais
Neste trabalho pretende-se construir um sistema (montar circuito na breadboard e programar a aplicação)
que se deve comportar como sinalizador sonoro com dois limiares de alarme consoante a intensidade da luz
ambiente detectada.
O sistema a desenvolver deverá ser capaz de
Medir a luminosidade ambiente a cada 50 ms mediante a leitura da tensão de emissor de um fototran-
sistor polarizado.
Estimar os limites de luminosidade da sala nas condições de operação.
– Luminosidade minima = por exemplo tapando o sensor
– Luminosidade máxima = por exemplo iluminando o sensor com LED de telemóvel ou outra fonte
de luz intensa.
Definir dois limiares de luminosidade (L1 e L2) em função das condições de operação em que montar o
circuito.
Acender o LED interno se o primeiro limiar for ultrapassado
Acender o LED interno e actuar um buzzer apenas se o segundo limiar for ultrapassado
1
3 INTRODUÇÃO
3 Introdução
3.1 Arduino MKR1000
Deve usar-se o módulo fornecido cujo pinout de ligações é aqui apresentado. Tenha sempre atenção às ligações
que faz e certifique-se que se encontram de acordo com o circuito que projectar.
3.2 Fototransistor - Medição de luminosidade ambiente
Para medir a luminosidade ambiente necessitamos de ler o sinal de um sensor que forneça um valor que lhe
seja proporcinal. Para tal precisamos de introduzir dois conceitos novos:
Fototransistor - um sensor capaz realizar a conversão de luz em sinal eléctrico.
ADC - o conversor analógico-digital disponı́vel no módulo MKR
2
3 INTRODUÇÃO
O fototransistor consiste num elemento semicondutor com estrutura semelhante a um transistor. Estes
dispositivos permitem controlar e amplificar a corrente entre 2 dos seus terminais (colector e emissor) mediante
uma terceira corrente (corrente de base). Num transistor normal esta corrente é fornecida electricamente por
um circuito electrico. No fototransistor, a corrente de base é gerada expondo o dispositivo a uma fonte de
luz externa. Assim, o fototransistor comporta-se como mais ou menos condutor de uma corrente entre o
colector e o emissor consoante a luz que incide sobre ele. Use uma resistência de 10 kΩ entre o emissor do
fototransistor e a terra (GND), num circuito semelhante ao da figura.
A leitura do valor da luminosidade será assim proporcional à tensão no emissor, pelo que é esta a grandeza
que estamos interessados em medir.
Para realizar esta medição vamos usar o ADC integrado no MKR1000. Para tal deve fazer uso da função
AnalogRead(). Ver referência [Link]
analogread/
AnalogRead()
int analogPin = A6;
...
...
valor = analogRead(analogPin);
O ADC do MKR1000 tem uma resolução máxima de 12 bits (i.e. consegue distinguir 212 nı́veis de amplitude
distintos). No entanto, no nosso exemplo vamos usá-lo com uma resolução de 10 bits. Para tal deve colocar-se
a função de configuração de resolução no lugar adequado no programa.
analogReadResolution()
analogReadResolution(10);
Após montar o circuito com o fototransistor, comece por fazer um pequeno programa de teste para imprimir
o valor lido na consola (”Serial Monitor”). Para tal deve
Inicializar a consola de comunicação série no setup() com a velocidade adequada
3
3 INTRODUÇÃO
[Link]()
[Link](9600);
Escrever no porto série monitorizado pela consola
[Link]()
[Link](valor);
Uma vez testada a aquisição desta forma tente usar a funcionalidade ”Serial Plotter”alterando a luminosidade
incidente no fototransistor.
Em função dos valores lidos pelo ADC determine qual o valor minimo e máximo que consegue registar (repare
que as unidades de amplitude são arbitrárias e apenas referentes à gama de entrada de um ADC de 10 bits).
Estabeleça um limiar a cerca de metade desta amplitude. Altere o programa para acender o LED interno
quando o limiar for ultrapassado
3.3 Buzzer
O buzzer consiste de um filme piezoelectrico depositado sobre uma membrana metalica. Como todos os
materiais piezoelectricos, responde mecanicamente quando sujeito a uma diferença de potencial aos seus
terminais. Estes dispositivos respondem apenas a sinais variáveis e não a sinais com nı́veis de tensão fixos.
Por esta razão necessitamos de usar uma função especial para gerar um sinal variável numa saı́da digital.
Ligue o buzzer de acordo com o esquema da figura e escreva um pequeno programa de teste
4
3 INTRODUÇÃO
Para testar deverá usar a função tone(). Ver referência em [Link]
language/functions/advanced-io/tone/
tone()
tone(pin, frequency, duration);
Teste o programa para várias frequências de activação do buzzer.
3.4 Sistema completo
Uma vez testadas as diferentes funcionalidades dos pontos anteriores monte um circuito completo de acordo
com os requisitos funcionais listados anteriormente e elabore o programa do microcontrolador.
Teste para vários valores do parâmetro de limiares (primeiro e segundo). Use por exemplo os valores:
primeiro limiar = Valor médio
segundo limiar = 0.8VM aximo ;
3.5 Elaboração de Relatório
Elabore um pequeno relatório (máx 2 páginas A4) sobre o trabalho realizado, onde conste:
Os requisitos de funcionamento
O esquema de ligações
Os resultados obtidos (com traçado da resposta do foto-transistor)
O código do Arduino devidamente comentado