Arduino: Entradas e Saidas: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
 
(54 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
=Minicurso: Arduíno e eletrônica de interface com o mundo físico=
=Arduíno: Entradas e Saídas=


;Professor Evandro Cantú: Instituto Federal do Paraná - Campus Foz do Iguaçu
O Arduíno pode ler '''sensores''' através de pinos de '''entrada digitais e analógicas''', assim como  controlar '''atuadores''' através de '''saídas digitais''' e '''saídas PWM'''.
 
Este minicurso tem como objetivos realizar uma introdução ao microcontrolador '''Arduíno''' e a '''eletrônica de interface com o mundo físico''' a partir de atividades teóricas e práticas.
 
O minicurso está organizados em '''módulos''', cada um deles trabalhando conceitos específicos sobre o microcontrolador '''Arduíno''' e os correspondentes conceitos de '''eletricidade''' e '''eletrônica''' envolvidos nos sensores e atuadores de interação com o mundo físico.
 
;Realizações:
*Curso para alunos voluntários 2016
*Curso para professores e alunos IFSC 2017
*Oficina Sepin 2017 (2 horas)
*Curso para alunos voluntários 2017


==Características do microcontrolador Arduíno==
==Características do microcontrolador Arduíno==


;[[Arduíno]]
;[[Arduino]]


;[https://www.arduino.cc/ Site oficial do Arduíno]:
;[https://www.arduino.cc/ Site oficial do Arduíno]:
Linha 38: Linha 28:
*Modificar o '''tempo''' ('''''delay''''') e verificar a mudança na '''frequência''' do piscar do led.
*Modificar o '''tempo''' ('''''delay''''') e verificar a mudança na '''frequência''' do piscar do led.
:A função '''delay(1000);''' estabelece um atraso em '''ms''' (mili segundos), logo '''1000 ms = 1 s'''.
:A função '''delay(1000);''' estabelece um atraso em '''ms''' (mili segundos), logo '''1000 ms = 1 s'''.
==Leds==
[[Arquivo:Arduino_Blink.png|600px]]


==Leds==
Um '''led''' é um '''diodo emissor de luz''' (''light emitting diode''). Ele se comporta como um [[Diodos|'''Diodo''']], conduzindo apenas quanto polarizado diretamente.
Um '''led''' é um '''diodo emissor de luz''' (''light emitting diode''). Ele se comporta como um [[Diodos|'''Diodo''']], conduzindo apenas quanto polarizado diretamente.


[[Arquivo:led.jpeg | 200px]]
[[Arquivo:led.jpeg | 200px]]


Para utilizar um '''led''' é necessário alguns conceitos de '''[[Eletricidade Básica]]'''.
Um '''led''' não pode receber tensão diretamente em seus terminais sob risco de colocar o componente em '''curto-circuito'''. A '''corrente elétrica''' no led deve ser limitada, tipicamente entre '''10 mA''' a '''30 mA''' por  um '''resistor''' externo.  
 
Um '''led''' não pode receber tensão diretamente em seus terminais sob risco de colocar o componente em '''curto-circuito'''. A '''corrente elétrica''' no led deve ser limitada, tipicamente entre '''15 mA''' a '''30 mA''' por  um '''resistor''' externo.  


A '''queda de tensão direta''' nos leds depende da '''cor do led'''. De modo simplificado, tipicamente se usa-se queda de tensão de '''2 V'''.
A '''queda de tensão direta''' nos leds depende da '''cor do led'''. De modo simplificado, tipicamente se usa-se queda de tensão de '''2 V'''.
Linha 61: Linha 51:
  R = (V - V<sub>led</sub>) / I
  R = (V - V<sub>led</sub>) / I
:Atribuindo valores:
:Atribuindo valores:
  V = 5V, V<sub>led</sub> = 2V, I = 10mA ([https://pt.wikipedia.org/wiki/Prefixos_do_Sistema_Internacional_de_Unidades#Lista_de_prefixos_do_SI Prefixos SI])
  V = 5V, V<sub>led</sub> = 2V, I = 10mA
:Calculando:
:Calculando:
  R = (5 - 2)/10 . (1/10<sup>-3</sup>) = 3/10 . 10<sup>3</sup> = 300&Omega;  
  R = (5 - 2)/(10/1000) = 3/(1/100) = 3 . 100 = 300&Omega;  
:Valores comerciais:
:Valores comerciais:
  270&Omega; ou 330&Omega;
  270&Omega; ou 330&Omega;
Linha 69: Linha 59:
;[[Resistores | Código de cores de resistores]]:
;[[Resistores | Código de cores de resistores]]:


===Laboratório 2: Semáforo automatizado com leds===
===Projeto 1: Semáforo automatizado com leds===
;Semáforo:  
;Semáforo:  
*Montar hardware para acionamento de  '''3 leds''' (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando '''resistores''' de proteção adequados.
*Montar hardware para acionamento de  '''3 leds''' (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando '''resistores''' de proteção adequados.
*Modificar programa '''[https://www.arduino.cc/en/Tutorial/Blink Arquivo/Exemplos/Basic/Blink]''' para acionar os leds como um '''semáforo''', com '''temporização''' adequada para cada cor.
*Modificar programa '''[https://www.arduino.cc/en/Tutorial/Blink Arquivo/Exemplos/Basic/Blink]''' para acionar os leds como um '''semáforo''', com '''temporização''' adequada para cada cor.
[[Arquivo:Arduino_Semaforo.png|600px]]


==Entradas digitais==
==Entradas digitais==
Linha 105: Linha 97:
:Corrente desprezível para o Arduíno.
:Corrente desprezível para o Arduíno.


===Laboratório 3: Chave digital===
===Laboratório 2: Chave digital===
[[Arquivo:Arduino_Botao.png|600px]]
 
;digitalRead:  
;digitalRead:  
*Montar hardware com '''chave''' ('''''push botton'''''), utilizando '''resistores''' de proteção de 10 K&Omega;.
*Montar hardware com '''chave''' ('''''push botton'''''), utilizando '''resistores''' de proteção de 10 K&Omega;.
Linha 111: Linha 105:
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/DigitalReadSerial Arquivo/Exemplos/Basic/DigitalReadSerial]''' para verificar no terminal serial o valor da chave digital.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/DigitalReadSerial Arquivo/Exemplos/Basic/DigitalReadSerial]''' para verificar no terminal serial o valor da chave digital.


===Laboratório 4: Coreografia com leds===
===Projeto 2: Coreografia com leds===
Implementar uma '''coreografia de luzes''' com 6 '''leds''' e 2 '''chaves digitais''', de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.
Implementar uma '''coreografia de luzes''' com 6 '''leds''' e 2 '''chaves digitais''', de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.


==Entradas Analógicas==
==Entradas Analógicas==
;O Arduíno UNO possui 6 entradas analógicas: As '''entradas analógicas''' utilizam um processo de '''[[Conversão Analógico Digital]] (ADC)''' para obter valores digitais correspondentes a cada entrada.
;O Arduíno UNO possui 6 entradas analógicas: As '''entradas analógicas''' utilizam um processo de '''[[Conversao Analogico Digital|Conversão Analógico Digital]] (ADC)''' para obter valores digitais correspondentes a cada entrada.
*As '''entradas analógicas''' são nomeadas de '''A0''' até '''A5'''.  
*As '''entradas analógicas''' são nomeadas de '''A0''' até '''A5'''.  
*Cada entrada analógica recebe '''valores analógicos''' entre '''0 V''' e '''5 V'''.
*Cada entrada analógica recebe '''valores analógicos''' entre '''0 V''' e '''5 V'''.
Linha 124: Linha 118:
  valorPino = analogRead(A0);
  valorPino = analogRead(A0);


==Divisor de Tensão==
==Potenciômetros==
Quando uma '''tensão''' é aplicada sobre '''resistores em série''', a tensão total sobre os dois resistores é igual a somas das quedas de tensão sobre cada resistor.
 
[[Arquivo:DivisorTensao.png]]
 
;Quedas de tensão ao longo da malha  (2<sup>a</sup> Lei de Kirchhoff):
V = I.R<sub>1</sub> + I.R<sub>2</sub>
:Isolando I:
I = V / (R<sub>1</sub> + R<sub>2</sub>)
:Mas:
V<sub>1</sub> = R<sub>1</sub>.I
:Substituindo I temos:
V<sub>1</sub> = R<sub>1</sub>/(R<sub>1</sub> + R<sub>2</sub>) . V
:O mesmo para V<sub>2</sub>:
V<sub>2</sub> = R<sub>2</sub>/(R<sub>1</sub> + R<sub>2</sub>) . V
:Note que, Se:
R = R<sub>1</sub> = R<sub>2</sub>
:Temos:
V<sub>1</sub> = V<sub>2</sub> = R/(R + R) . V = R/(2.R) . V = V / 2
 
;[http://www.falstad.com/circuit/circuitjs.html Simulação do funcionamento do Divisor de Tensão]:Circuits -> Basic -> Voltage Divider
 
===Potenciômetros===
São '''resistências variáveis''' através de um cursor.
São '''resistências variáveis''' através de um cursor.


Linha 153: Linha 125:
[[Arquivo:Potenciometro.png]] [[Arquivo:potenciometro.jpg|150px]]
[[Arquivo:Potenciometro.png]] [[Arquivo:potenciometro.jpg|150px]]


;[http://www.falstad.com/circuit/circuitjs.html Simulação do funcionamento do Potenciômetro Divisor de Tensão]:Circuits -> Basic -> Potentiometer Divider
===Laboratório 3: Leitura de entrada analógica===
 
[[Arquivo:Arduino_Potenciometro.png|600px]]  


===Laboratório 5: Leitura de entrada analógica===
;analogRead:  
;analogRead:  
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
Linha 162: Linha 135:
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Arquivo/Exemplos/Analog/AnalogInput]''' e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor do '''potenciômetro'''.
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Arquivo/Exemplos/Analog/AnalogInput]''' e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor do '''potenciômetro'''.


==Sensores baseados em resistência variável para Arduíno==
===Projeto 3: Coluna de leds e potenciômetro===
'''Sensores de luminosidade (LDR)''' e '''sensores de temperatura''' (como o '''NTC''') possuem um resistor variável em função da grandeza que estão medindo.
*Montar hardware com uma '''coluna de 5 leds''' utilizando um resistor de proteção para cada led e um '''potenciômetro'''.
 
*Acender a '''coluna de leds''' em função da tensão lida no ponto central do '''potenciômetro'''.
===Laboratório 6: Sensor de luminosidade LDR===
;LDR: O '''LDR''' (''Light Dependent Resistor'') é um '''resistor dependente de luz''' ou '''fotoresistor''', o qual varia sua resistência em função da luminosidade. 
 
[[Arquivo:DivisorTensao-LDR.png]]
 
*Montar hardware com o '''sensor LDR''', conforme mostrado na figura acima.
*Testar o código exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Arquivo/Exemplos/Analog/AnalogInput]''', e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor da '''luminosidade'''.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogReadSerial Arquivo/Exemplos/Basic/AnalogReadSerial]''' e verificar o valor da '''entrada analógica''' gerada pelo '''LDR''' no '''monitor serial'''.
 
===Laboratório 7: Sistema indicador de luminosidade===
;LDR:
*Montar hardware com '''sensor LDR''' utilizando '''divisor de tensão''' para o sensor e uma '''coluna de 5 leds''' utilizando um '''resistor de proteção''' para cada led.
*Construir programa para ir acendendo os '''leds''' a medida que aumenta a '''luminosidade'''.
:Use o programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogReadSerial Arquivo/Exemplos/Basic/AnalogReadSerial]''' para verificar como a luminosidade do ambiente interfere no LDR.


==Saídas Analógicas==
==Saídas Analógicas==
Linha 189: Linha 148:
As '''6 Saídas PWM''' são identificadas pelo sinal '''~''' e fornecem '''saídas analógicas''' através de '''pulsos PWM''' de '''8 bits''', possibilitando, portanto, '''256 valores''' diferentes de '''tensão analógica''' entre '''0V e 5V''', com passos de '''0 a 255'''.
As '''6 Saídas PWM''' são identificadas pelo sinal '''~''' e fornecem '''saídas analógicas''' através de '''pulsos PWM''' de '''8 bits''', possibilitando, portanto, '''256 valores''' diferentes de '''tensão analógica''' entre '''0V e 5V''', com passos de '''0 a 255'''.


===Laboratório 8: Saída analógica===
===Laboratório 4: Saída analógica===
;analogWrite:  
;analogWrite:  
;analogRead:  
;analogRead:  
Linha 198: Linha 157:
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogInOutSerial Arquivo/Exemplos/Analog/AnalogInOutSerial]''' e verificar a variação da luminosidade do '''led''' da '''pino 9''' em função do '''potenciômetro'''.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogInOutSerial Arquivo/Exemplos/Analog/AnalogInOutSerial]''' e verificar a variação da luminosidade do '''led''' da '''pino 9''' em função do '''potenciômetro'''.


==Comunicação Serial==
==Monitor Serial==
A '''comunicação serial''' permite enviar dados do '''computador''' ao '''Arduíno''' pela '''interface serial'''.  
O '''monitor serial''' permite enviar dados do '''computador''' ao '''Arduíno''' pela '''interface serial USB'''.  


===Laboratório 9: Comunicação serial===
===Laboratório 5: Monitor serial===
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/PhysicalPixel Arquivo/Exemplos/Communication/PhysicalPixel]''' e '''acionar''' o '''led''' do '''pino 13''' a partir de comandos '''H''' e '''L''' enviados pelo terminal serial.
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/PhysicalPixel Arquivo/Exemplos/Communication/PhysicalPixel]''' e '''acionar''' o '''led''' do '''pino 13''' a partir de comandos '''H''' e '''L''' enviados pelo terminal serial.
*Montar hardware para acionamento de '''led''' conectado ao '''pino 9''', escolhendo resistor de proteção adequado;
*Montar hardware para acionamento de '''led''' conectado ao '''pino 9''', escolhendo resistor de proteção adequado;
Linha 222: Linha 181:
[[Arquivo:CoresPrimarias.jpg|300px]]  
[[Arquivo:CoresPrimarias.jpg|300px]]  


===COLOR PICKER===
;COLOR PICKER: A ferramenta '''[http://htmlcolorcodes.com/color-picker/ color picker]''' é utilizada para obter as '''misturas das cores primárias''' utilizada na '''Linguagem HTML''' com uma paleta de '''256 cores RBG'''.
A ferramenta '''[http://htmlcolorcodes.com/color-picker/ color picker]''' é utilizada para obter as '''misturas das cores primárias''' utilizada na '''Linguagem HTML''' com uma paleta de '''256 cores RBG'''.
:A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' está expressa em '''hexadecimal''' de '''8 bits''', por exemplo, o '''amarelo''' é '''#FFFF00''', ou seja, é o resultado da mistura do '''vermelho''' (FF ou 255) e do '''verde''' (FF ou 255), sem nada de '''azul'''  (00 ou 0) .  
 
:A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' também é mostrada em valores de 0 a 255.
A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' está expressa em '''hexadecimal''' de '''8 bits''', por exemplo, o '''amarelo''' é '''#FFFF00''', ou seja, é o resultado da mistura do '''vermelho''' (FF ou 255) e do '''verde''' (FF ou 255), sem nada de '''azul'''  (00 ou 0) .  
 
A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' também é mostrada em valores de 0 a 255.


===Leds <font color="red">R</font><font color="green">G</font><font color="blue">B</font>===
===Leds <font color="red">R</font><font color="green">G</font><font color="blue">B</font>===
Linha 238: Linha 194:
[[Arquivo:LedRGB.png]]
[[Arquivo:LedRGB.png]]


<!--
===Laboratório 6: Led RGB===
===Tabela de mistura das cores primárias===
A tabela abaixa mostra a '''mistura das cores primárias''' utilizada na '''Linguagem HTML''' com uma paleta de '''256 cores RBG'''.
 
A tabela mostra a '''quantidade de cada cor''' em valores de '''8 bits''', expressos em '''[http://wiki.foz.ifpr.edu.br/wiki/index.php/Sistemas_Numericos#Sistema_Hexadecimal: hexadecimal]''' (00 a FF) (ou de 0 a 255 em decimal):
 
[[Arquivo:TabelaCoresRGB.png]]<ref>http://carlosemargarida.blogspot.com.br/2010_11_01_archive.html</ref>
 
A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' está expressa em '''hexadecimal''' de '''8 bits''', por exemplo, o '''amarelo''' é '''#FFFF00''', ou seja, é o resultado da mistura do '''vermelho''' (FF ou 255) e do '''verde''' (FF ou 255), sem nada de '''azul'''  (00 ou 0) .-->
 
===Laboratório 10: Led RGB===
;Cores primárias: digitalWrite.
;Cores primárias: digitalWrite.
*Montar hardware para '''led RGB anodo comum''' utilizando '''resistores''' de proteção adequados.
*Montar hardware para '''led RGB anodo comum''' utilizando '''resistores''' de proteção adequados.
Linha 258: Linha 204:
**1000Hz
**1000Hz
:Verificar o resultado nas cores observadas.
:Verificar o resultado nas cores observadas.
===Projeto 4: Misturando as cores primárias com leds RGB===


;Misturando as cores primárias: analogWrite
;Misturando as cores primárias: analogWrite
*Montar hardware para '''led RGB anodo comum''' utilizando os pinos 3, 5 e 6 respectivamente.
*Montar hardware para '''led RGB anodo comum''' utilizando os pinos 3, 5 e 6 respectivamente.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/ReadASCIIString Arquivo/Exemplos/Communication/ReadASCIIString]''' e '''misturar as cores''' do '''led RGB''' utilizando quantidades de RGB de 0 a 255, de modo a obter as cores mostrada na '''tabela de cores''' acima.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/ReadASCIIString Arquivo/Exemplos/Communication/ReadASCIIString]''' e '''misturar as cores''' do '''led RGB''' utilizando quantidades de RGB de 0 a 255, de modo a obter as cores mostrada na '''tabela de cores''' acima.
 
*Montar hardware com utilizando três '''potenciômetros''' conectado a três '''entradas analógicas''', as quais devem ser combinadas para '''misturar as cores''' do '''led RGB'''.
==Sensor de Temperatura NTC 10k==
 
O sensor de temperatura '''NTC 10k''' é um '''thermistor''', isto é, um resistor cuja resistência varia com a temperatura, podendo medir de −90 &deg;C a 130 &deg;C.
 
Existem dois tipos de thermistores:
*NTC (Negative Temperature Coefficient), no qual a resistência diminui com o aumento da temperatura;
*PTC (Positive Temperature Coefficient), no qual a resistência aumenta com o aumento da temperatura.
 
Para leitura com o Arduíno, o sensor '''NTC 10k''' é utilizado numa estrutura com um [http://200.17.101.9/wiki/index.php/Resistores#Divisor_de_Tens.C3.A3o divisor de tensão] com um resistor de 10K &Omega;.
 
Esquema de ligação com Arduíno:
[[Arquivo:DivisorTensao-NTC10k.png]]
 
;Cálculo da resistência do NTC: Na temperatura de 25 &deg;C a resistência do NTC é 10 k &Omega;, variando linearmente com a temperatura.
:Portando, quando:
R<sub>NTC</sub> = 10k &Omega; (25 &deg;C)
:Temos:
leitura_analógica = 512 (V<sub>divisor</sub> = 2,5V)
:Logo, para qualquer leitura analógica temos:
R<sub>NTC</sub> = 10k . (1023/leitura_analógica - 1)
 
;Equação de Steinhart–Hart: A equação de '''Steinhart–Hart''' (https://en.wikipedia.org/wiki/Thermistor), detalha a operação do '''''thermistor'' NTC''' relacionando a variação de '''temperatura''' (Kelvin) com a '''resistência''' (&Omega;).
:<math>{1 \over T} = a + b\,\ln(R) + c\,(\ln(R))^3</math>
:onde a, b e c são parâmetros de Steinhart–Hart específicos para cada dispositivo.
:Valores típicos para um thermistor com resistência de 10K Ω na temperatura de (25 &deg;C = 298.15 K) é:
:*a = 0.001129148,
:*b = 0.000234125,
:*c = 0.0000000876741.
 
===Laboratório 11: Sensor de Temperatura com NTC===
 
*Monte o hardware para o '''sensor de temperatura''' '''NTC10k''';
*Carregue e teste o '''código''' abaixo (adaptado de <ref>http://playground.arduino.cc/ComponentLib/Thermistor2</ref>):
 
<syntaxhighlight lang="c">
//Sensor de temperatura NTC10k
#include <math.h>
const double a = 0.001129148;    //
const double b = 0.000234125;    //Parâmetros de Steinhart–Hart
const double c = 0.0000000876741; //
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  double R;    //Resistência do NTC
  double T;    //Temperatura em Kelvin
  int leitura; //Leitura analógica (0 a 1023)
  leitura = analogRead(A0);
  R = (10000.0 * ((float)1023/leitura - 1));  //Calcula valor de R em função da leitura
  T = 1 / (a + (b * log(R)) + (c * pow(log(R),3))); //Equação de Steinhart–Hart
  T = T - 273.15; //Converte Kelvin para Celcius
  Serial.print("Temperatura: ");
  Serial.print(T);
  Serial.println(" oC"); 
  delay(1000);
}
</syntaxhighlight>
 
==Sensor de temperatura (LM35) ==
 
;Funcionamento do sensor LM35: O '''LM35''' é um '''circuito integrado''' exclusivo para medir temperatura com uma tensão de saída variando linearmente com a temperatura em graus Célsius.
:Na configuração básica este sensor mede temperaturas entre 2<sup>o</sup>C e 150<sup>o</sup>C, variando a saída em função da temperatura de 0 mV + 10mV por 1<sup>o</sup>C.
:Com a configuração mostrada em <ref> http://www.ti.com/lit/ds/symlink/lm35.pdf</ref> é possível medir temperatura de -55<sup>o</sup>C e 150<sup>o</sup>C.
 
;Esquema de ligação com Arduíno:
            _______
            |      |
            | LM 35 |
            |_______|
              | | |
    (+5v) ----+ | +---- (Ground)
                |
          Analog Pin
        0mV + 10mV / <sup>o</sup>C
 
;Leitura pela entrada analógica do Arduíno: O valor de tensão (entre '''0V e 5V''') lido pelo Arduíno na '''entrada analógica'''  é convertido um número digital com '''10 bits de magnitude''', ou seja, 2<sup>10</sup> (1024) valores (entre 0 e 1023).
 
:Para obter o valor de tensão, para uso no cálculo da temperatura, multiplica-se o valor digital obtido na leitura por 5/1023.
 
:Como a tensão medida pelo sensor varia de 0 mV + 10mV/1<sup>o</sup>C, se multiplicarmos por 100, teremos o valor em graus Celsius:
 
===Laboratório 12: Sensor de temperatura LM35===
*Monte o hardware com LM35 conforme a figura, utilizando a entrada analógica A0 para leitura.
*Carregue o código exemplo abaixo e verifique o funcionamento do sensor:
 
<syntaxhighlight lang="c">
//Sensor de temperatura LM35
float valorSensor;
float temperatura;
void setup() {
  Serial.begin(9600);
}
void loop() {
  valorSensor = analogRead(A0) * 5.0 / 1023.0;
  temperatura = valorSensor * 100.0;
  Serial.print("Temperatura: ");
  Serial.println(temperatura);
  delay(2000); //Tempo entre as leituras em ms
}
</syntaxhighlight>
 
==Sensor de Temperatura e Humidade DHT11==
 
O DHT11 é um sensor de temperatura e humidade. Este sensor inclui um medidor de humidade resistivo e um sensor de temperatura tipo NTC conectado a um microcontrolador de 8 bits <ref>http://www.micro4you.com/files/sensor/DHT11.pdf</ref>.
 
O DHT11 possui uma biblioteca com funções prontas para seu funcionamento, documentada em <ref>http://playground.arduino.cc/main/DHT11Lib</ref>.
 
;Esquema de ligação com Arduíno:
            _______
            |      |
            | DHT11 |
            |_______|
              | | |
(Ground) ----+ | +---- (+5v)
                |
          Analog Pin 1
 
===Laboratório 13: Sensor de temperatura DHT11===
*Monte o hardware com DHT11 conforme a figura, utilizando a entrada analógica A1 para leitura.
*Baixe a biblioteca [[Mídia:DHT11.zip |DHT11.zip]] e salve no computador (Última versão disponível em <ref>https://github.com/adafruit/DHT-sensor-library</ref>).
*:A biblioteca DHT11, contida no arquivo DHT11.zip, é formada por dois arquivos:
*:*dht11.h
*:*dht11.cpp
*Insira a biblioteca DHT11.zip no ambiente da IDE do Arduíno:
Sketch -> Incluir Biblioteca -> Adicionar biblioteca .ZIP
*As bibliotecas são instaladas por padrão no diretório:
~/Arduino/libraries
*Carregue o código exemplo abaixo e verifique o funcionamento do sensor:
 
<syntaxhighlight lang="c">
//Sensor de temperatura LDHT11
#include <dht11.h>
dht11 sensor; //Inicializa sensor
void setup() {
  Serial.begin(9600);
  delay(1000);
}
void loop() {
  sensor.read(A1);
  Serial.print("Temperatura (oC): ");
  Serial.println(sensor.temperature);
  Serial.print("Unidade (%): ");
  Serial.println(sensor.humidity);
  delay(2000); //Tempo entre as leituras em ms
}
</syntaxhighlight>
 
==Acionamento de Cargas com Relés==
Um '''relé''' é um '''interruptor eletromecânico''' ou '''eletrônico''' que pode ser utilizado para ligar ou desligar '''cargas''' conectadas em '''127/220V CA''' ([[Corrente Contínua e Corrente Alternada|Corrente Alternada]]).
 
O '''acionamento do relé''' pelo '''Arduíno''' é realizado a partir de uma '''saída digital''', além do fornecimento das tensões 5V e GNG para alimentar o relé.
 
[[Arquivo:Rele.png]]
 
A '''carga CA''' é conectada nos terminais de potência do relé, o qual geralmente apresenta três terminais:
*NA - Normalmente Aberto
*COM - Comum
*NF - Normalmente Fechado
 
Para acionamento de uma '''carga simples''', como uma '''lâmpada''', utilizar '''NA-COM''' como '''chave liga-desliga'''.
 
===Laboratório 14: Acionamento de uma lâmpada com relé===
;LDR e relé:
*Montar hardware com '''sensor LDR''' e um '''relé''' para acionamento pelo Arduíno de uma '''lâmpada 127/220V'''.
*O circuito da '''lâmpada''' na '''rede 127/220 V CA''' é mostrado na figura abaixo.
[[Arquivo:LampadaRele.png]]
 
==Sensor Piezoelétrico==
 
Um '''sensor piezoelétrico''' é um dispositivo eletrônico que gera uma tensão quando é atingido por uma vibração, onda sonora ou uma tensão mecânica <ref name="Piezo">https://www.arduino.cc/en/Tutorial/Knock</ref>.
 
Para usar o '''sensor piezoelétrico''' com o Arduíno, utiliza-se '''analogRead()''' para ler uma tensão de 0 a 5V, a qual será convertida pelo [[Conversão Analógico Digital|Conversor Analógico Digital]] para valores digitais 0 a 1023.
 
Se a tensão lida for maior que um '''limiar''', supõe-se que o '''sensor piezoelétrico''' detectou uma vibração.
 
;Circuito: O '''sensor piezoelétrico''' tem polaridade. O terminal negativo deve ser ligado a terra, em paralelo com um resistor de 1 M &Omega;. O terminal positivo deve ser ligado a entrada analógica.
 
[[Arquivo:Piezo.png]]
 
===Laboratório 15: Sensor Piezoelétrico===
*Monte o hardware para o '''sensor piezoelétrico''' e teste o '''código''' abaixo (adaptado de <ref name="Piezo"/>).
*:Pode ser necessário testar vários valores para o '''limiar''' para definir o melhor funcionamento do sensor piezoelétrico.
 
<syntaxhighlight lang="c">
//Sensor Piezoelétrico
 
const int limiar = 100;    // tensão de limiar
int leituraSensor = 0;      // veriável com leitura do sensor
int estadoLed = LOW;        // estado inicial do led
 
void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}     
 
void loop() {
  leituraSensor = analogRead(A0);
  if (leituraSensor >= limiar) {
    estadoLed = !estadoLed; //inverte estado do led
    digitalWrite(13, estadoLed);
    Serial.println("Vibração detectada!");
  }
  delay(100);
}
</syntaxhighlight>


==Referências==
==Referências==
Linha 475: Linha 217:


----
----
--[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 16h33min de 12 de setembro de 2016 (BRT)
[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 09h41min de 17 de setembro de 2021 (-03)
----
----


[[Categoria: Arduíno]]
[[Categoria: Arduíno]] [[Categoria: IoT]]

Edição atual tal como às 21h18min de 4 de julho de 2023

Arduíno: Entradas e Saídas

O Arduíno pode ler sensores através de pinos de entrada digitais e analógicas, assim como controlar atuadores através de saídas digitais e saídas PWM.

Características do microcontrolador Arduíno

Arduino
Site oficial do Arduíno

Saídas digitais

O Arduíno UNO possui 14 Entradas/Saídas Digitais
  • As entradas/saídas digitais estão localizadas nos pinos 0 a 13.
  • Estas entradas/saídas operam com valores digitais LOW e HIGH, os quais correspondem aos valores de tensão 0 V e 5 V, respectivamente..
  • Cada pino fornece corrente de até 20 mA, sendo que qualquer corrente solicitada acima de 40mA pode danificar o Arduíno.
pinMode
Comando da linguagem de programação do Arduíno que configura o pino digital como entrada (INPUT) ou saída (OUTPUT).
Exemplo:
pinMode(13, OUTPUT);
digitalWrite
Comando para escrever na saída digital.
digitalWrite(13, HIGH/LOW);

Laboratório 1: Saída digital

digitalWrite
  • Carregar no Arduíno o programa exemplo Arquivo/Exemplos/Basic/Blink para piscar o led do pino 13, mantendo acesso por 1 seg e em seguida apagada por 1 seg. O led do pino 13 é um led instalado na própria placa do Arduíno.
  • Modificar o tempo (delay) e verificar a mudança na frequência do piscar do led.
A função delay(1000); estabelece um atraso em ms (mili segundos), logo 1000 ms = 1 s.

Leds

Um led é um diodo emissor de luz (light emitting diode). Ele se comporta como um Diodo, conduzindo apenas quanto polarizado diretamente.

Um led não pode receber tensão diretamente em seus terminais sob risco de colocar o componente em curto-circuito. A corrente elétrica no led deve ser limitada, tipicamente entre 10 mA a 30 mA por um resistor externo.

A queda de tensão direta nos leds depende da cor do led. De modo simplificado, tipicamente se usa-se queda de tensão de 2 V.

Exemplo cálculo do resistor de proteção de um circuito com led
Supondo:
Iled = 10 mA

Soma das tensões ao longo da malha (2a Lei de Kirchhoff):

V = Vled + R.I
Isolando R:
R = (V - Vled) / I
Atribuindo valores:
V = 5V, Vled = 2V, I = 10mA
Calculando:
R = (5 - 2)/(10/1000) = 3/(1/100) = 3 . 100 = 300Ω 
Valores comerciais:
270Ω ou 330Ω
Código de cores de resistores

Projeto 1: Semáforo automatizado com leds

Semáforo
  • Montar hardware para acionamento de 3 leds (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando resistores de proteção adequados.
  • Modificar programa Arquivo/Exemplos/Basic/Blink para acionar os leds como um semáforo, com temporização adequada para cada cor.

Entradas digitais

Um pino digital do Arduíno pose ser definido como entrada (INPUT).

pinMode(2, INPUT);
digitalRead
Comando para ler o estado de uma entrada digital.
int estadoPino; 
estadoPino = digitalRead(2);

Neste caso o Arduíno vai ler se o estado do pino é LOW (0 V) ou HIGH (5 V).

Chave digital

Uma chave digital fornecerá 0 V (LOW) ou 5 V (HIGH) caso estiver aberta ou fechada.

Funcionamento:

  • Caso a chave estiver aberta, não haverá corrente no o resistor e a tensão entregue ao pino do Arduíno será 0 V.
  • Caso a chave estiver fechada, haverá corrente no resistor e a tensão entregue ao pino do Arduíno será 5 V.

Corrente no resistor:

V = R I (Lei de Ohm)
Isolando I:
I = V / R
Atribuindo valores:
V=5V, R=10k(Ω)  (Prefixos SI)
Calculando:
I = 5/10 . (1/103) = 0,5 . 10-3 = 0,5 mA
Corrente desprezível para o Arduíno.

Laboratório 2: Chave digital

digitalRead

Projeto 2: Coreografia com leds

Implementar uma coreografia de luzes com 6 leds e 2 chaves digitais, de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.

Entradas Analógicas

O Arduíno UNO possui 6 entradas analógicas
As entradas analógicas utilizam um processo de Conversão Analógico Digital (ADC) para obter valores digitais correspondentes a cada entrada.
  • As entradas analógicas são nomeadas de A0 até A5.
  • Cada entrada analógica recebe valores analógicos entre 0 V e 5 V.
  • Os valores analógicos são convertidos para valores digitais com 10 bits de resolução (valores entre 0 (0000000000) a 1023 (1111111111).
analogRead
Comando para ler entrada analógica.
int valorPino;
valorPino = analogRead(A0);

Potenciômetros

São resistências variáveis através de um cursor.

Na figura, através de um potenciômetro é possível implementar um divisor de tensão com uma tensão variável Vx obtida a partir do terminal central do potenciômetro.

Laboratório 3: Leitura de entrada analógica

analogRead
  • Montar hardware com utilizando o ponto central de um potenciômetro conectado a entrada analógica A0 (com os demais terminais conectados ao GND e 5V, respectivamente).
  • Carregar programa exemplo Arquivo/Exemplos/Basic/AnalogReadSerial e verificar o valor da entrada analógica no monitor serial.
  • Carregar programa exemplo Arquivo/Exemplos/Basic/ReadAnalogVoltage e verificar o valor da entrada analógica em Volts no monitor serial.
  • Carregar programa exemplo Arquivo/Exemplos/Analog/AnalogInput e verificar o valor da frequência do pulsar do led em função do valor do potenciômetro.

Projeto 3: Coluna de leds e potenciômetro

  • Montar hardware com uma coluna de 5 leds utilizando um resistor de proteção para cada led e um potenciômetro.
  • Acender a coluna de leds em função da tensão lida no ponto central do potenciômetro.

Saídas Analógicas

O Arduíno emula saídas analógicas através de modulação PWM (Pulse Width Modulation).

O sinal PWM é uma onda quadrada, com frequência constante, mas a fração de tempo em que o sinal é HIGH (5V) (duty cycle) pode variar entre 0 e 100%, fornecendo uma média de tensão variável na saída [1].

As 6 Saídas PWM são identificadas pelo sinal ~ e fornecem saídas analógicas através de pulsos PWM de 8 bits, possibilitando, portanto, 256 valores diferentes de tensão analógica entre 0V e 5V, com passos de 0 a 255.

Laboratório 4: Saída analógica

analogWrite
analogRead
map;
  • Montar hardware para acionamento de led conectado ao pino 9, escolhendo resistor de proteção adequado;
  • Carregar programa exemplo Arquivo/Exemplos/Basic/Fade e verificar a variação da luminosidade do led da porta 9.
  • Montar hardware com utilizando o ponto central de um potenciômetro conectado a entrada analógica A0 (com os demais terminais conectados ao GND e 5V, respectivamente).
  • Carregar programa exemplo Arquivo/Exemplos/Analog/AnalogInOutSerial e verificar a variação da luminosidade do led da pino 9 em função do potenciômetro.

Monitor Serial

O monitor serial permite enviar dados do computador ao Arduíno pela interface serial USB.

Laboratório 5: Monitor serial

  • Carregar programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel e acionar o led do pino 13 a partir de comandos H e L enviados pelo terminal serial.
  • Montar hardware para acionamento de led conectado ao pino 9, escolhendo resistor de proteção adequado;
  • Carregar programa exemplo Arquivo/Exemplos/Communication/Dimmer e controlar a intensidade do led do pino 9 a partir do envio de valores entre 0 e 255 pelo terminal serial.
    No programa exemplo acima, trocar a linha:
brightness = Serial.read();
por
brightness = Serial.parseInt();
para converter os caracteres ASCII lidos para inteiros.

Led RGB

Um led RGB apresenta em um único led a possibilidade de fornecer todas as cores, obtidas a partir da mistura das cores primárias luz, ou cores primárias aditivas, que são vermelho (Red), verde (Green) e azul (Blue).

  • As cores primárias não resultam da mistura de nenhuma cor.
  • A cor branca é a soma das três cores primárias.
  • As cores secundárias são misturas de duas cores, como o amarelo, ciano e magenta.
  • A cor preta é a ausência de cores.
  • As demais cores requerem mistura das três cores primárias em quantidades específicas.

COLOR PICKER
A ferramenta color picker é utilizada para obter as misturas das cores primárias utilizada na Linguagem HTML com uma paleta de 256 cores RBG.
A quantidade de cada cor RGB está expressa em hexadecimal de 8 bits, por exemplo, o amarelo é #FFFF00, ou seja, é o resultado da mistura do vermelho (FF ou 255) e do verde (FF ou 255), sem nada de azul (00 ou 0) .
A quantidade de cada cor RGB também é mostrada em valores de 0 a 255.

Leds RGB

Os leds RGB são encontrados em duas estruturas:

  • Anodo comum;
  • Catodo comum.

Laboratório 6: Led RGB

Cores primárias
digitalWrite.
  • Montar hardware para led RGB anodo comum utilizando resistores de proteção adequados.
  • Modificar programa blink para piscar cores vermelho (R), verde (G) e azul (B) alternadamente;
  • Variar a frequência do piscar de leds RGB nos seguintes valores:
    • 1 Hz
    • 10 Hz
    • 100 Hz
    • 1000Hz
Verificar o resultado nas cores observadas.

Projeto 4: Misturando as cores primárias com leds RGB

Misturando as cores primárias
analogWrite
  • Montar hardware para led RGB anodo comum utilizando os pinos 3, 5 e 6 respectivamente.
  • Carregar programa exemplo Arquivo/Exemplos/Communication/ReadASCIIString e misturar as cores do led RGB utilizando quantidades de RGB de 0 a 255, de modo a obter as cores mostrada na tabela de cores acima.
  • Montar hardware com utilizando três potenciômetros conectado a três entradas analógicas, as quais devem ser combinadas para misturar as cores do led RGB.

Referências


Evandro.cantu (discussão) 09h41min de 17 de setembro de 2021 (-03)