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

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 250: Linha 250:
:O circuito da lâmpada na rede 127/220 V CA é mostrado na figura abaixo.
:O circuito da lâmpada na rede 127/220 V CA é mostrado na figura abaixo.
[[Arquivo:LampadaRele.png]]
[[Arquivo:LampadaRele.png]]
==Sensor de Temperatura NTC 10k==
O sensor de temperatura '''NTC 10k''' é um '''thermistor''', isto é, um resistor cuja resistência varia com a temperatura.
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 Ω.
Esquema de ligação com Arduíno:
[[Arquivo:DivisorTensao-NTC10k.png]]
;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 (Ω).
:<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 °C = 298.15 K) é:
:*a = 0.001129148,
:*b = 0.000234125,
:*c = 0.0000000876741.
;Código para Arduíno: Referência: (http://playground.arduino.cc/ComponentLib/Thermistor2):
<syntaxhighlight lang="c">
//Sensor de temperatura NTC10k
#include <math.h>
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  double R; 
  double lnR;
  double T;
  int leituraBin;
  leituraBin = analogRead(A0);
  R = (10000.0 * ((float)1023/leituraBin - 1)); //Resistência do NTC
  lnR = log(R); //Logaritmo base e de R
  // Equação de Steinhart–Hart
  T = 1 / (0.001129148 + (0.000234125 * lnR) + (0.0000000876741 * pow(lnR,3)));
  T = T - 273.15; // Converte Kelvin para Celcius
  Serial.print("Temperatura: ");
  Serial.println(T);
  delay(1000);
}
</syntaxhighlight>


==Referências==
==Referências==

Edição das 20h53min de 1 de junho de 2017

Minicurso: Arduíno e eletrônica

Este minicurso tem como objetivos realizar uma introdução ao microcontrolador Arduíno e a eletrônica 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.

Características do microcontrolador Arduíno

Arduíno
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.

Leds

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

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 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.

Exemplo cálculo do resistor de proteção de um circuito com led

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 (Prefixos SI)
Calculando:
R = (5 - 2)/10 . (1/10-3) = 3/10 . 103 = 300Ω 
Valores comerciais:
270Ω ou 330Ω
Código de cores de resistores

Laboratório 2: 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.

  • 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 = 5 mA

Laboratório 3: Chave digital

digitalRead

Laboratório 4: 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);

Divisor de Tensão

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.

Quedas de tensão ao longo da malha (2a Lei de Kirchhoff)
V = I.R1 + I.R2 
Isolando I:
I = V / (R1 + R2)
Mas:
V1 = R1.I
Substituindo I temos:
V1 = R1/(R1 + R2) . V
O mesmo para V2:
V2 = R2/(R1 + R2) . V
Note que, Se:
R = R1 = R2
Temos:
V1 = V2 = R/(R + R) . V = R/(2.R) . V = V / 2
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.

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.

Simulação do funcionamento do Potenciômetro Divisor de Tensão
Circuits -> Basic -> Potentiometer Divider

Laboratório 5: 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.

Sensores baseados em resistência variável para Arduíno

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.

Laboratório 6: Sensor de luminosidade LDR

LDR
  • Montar hardware com o sensor LDR, conforme mostrado no link do exemplo Arquivo/Exemplos/Analog/AnalogInput, e verificar o valor da frequência do pulsar do led em função do valor da luminosidade.

Laboratório 7: Sistema indicador de luminosidade

LDR
  • Montar hardware com sensor LDR e três leds (vermelho, amarelo e verde), utilizando divisor de tensão para o sensor e resistores de proteção adequados para os leds.
  • Construir programa para acender led verde com alta luminosidade, led amarelo com média luminosidade e led vermelho com baixa luminosidade.

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 8: 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.

Comunicação Serial

A comunicação serial permite enviar dados do computador ao Arduíno pela interface serial.

Laboratório 9: Comunicação 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.

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.

Os leds RGB são encontrados em duas estruturas:

  • Anodo comum;
  • Catodo comum.

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 hexadecimal (00 a FF) (ou de 0 a 255 em decimal):

[2]

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) .

Laboratório 10: 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.
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.

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 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é.

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 11: 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.

Sensor de Temperatura NTC 10k

O sensor de temperatura NTC 10k é um thermistor, isto é, um resistor cuja resistência varia com a temperatura.

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 divisor de tensão com um resistor de 10K Ω.

Esquema de ligação com Arduíno:

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 (Ω).
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 °C = 298.15 K) é:
  • a = 0.001129148,
  • b = 0.000234125,
  • c = 0.0000000876741.
Código para Arduíno
Referência: (http://playground.arduino.cc/ComponentLib/Thermistor2):
//Sensor de temperatura NTC10k
#include <math.h>
void setup() 
{
  Serial.begin(9600);
}
void loop() 
{
  double R;   
  double lnR; 
  double T;
  int leituraBin;
  leituraBin = analogRead(A0);
  R = (10000.0 * ((float)1023/leituraBin - 1)); //Resistência do NTC
  lnR = log(R); //Logaritmo base e de R
  // Equação de Steinhart–Hart 
  T = 1 / (0.001129148 + (0.000234125 * lnR) + (0.0000000876741 * pow(lnR,3)));
  T = T - 273.15; // Converte Kelvin para Celcius
  Serial.print("Temperatura: "); 
  Serial.println(T); 
  delay(1000);
}

Referências


--Evandro.cantu (discussão) 16h33min de 12 de setembro de 2016 (BRT)