AULA 5 - Microcontroladores - Engenharia: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
Sem resumo de edição
imported>Fargoud
 
(38 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 16: Linha 16:
* 1 computador PC com software Arduino IDE instalado
* 1 computador PC com software Arduino IDE instalado
* 1 proto ''shield'' para montagens
* 1 proto ''shield'' para montagens
* 4 leds vermelhos;
* 1 potenciômetro;
* 4 resistores de 150 ou 200 Ω
* 1 resistor de 200 Ω
* 2 resistores de 1000 Ω
* 1 resistor de 10kΩ
* 2 chaves digitais tipo ''push-button'';
* 1 led vermelho;
* 4 chaves digitais ''on-off'';
* 1 sensor de temperatura NTC;
* 1 sensor de temperatura LM35;
* 1 sensor de luminosidade fotoresistor LDR;
* 1 chave push-button;
* cabos fêmea-macho
* cabos fêmea-macho


Linha 63: Linha 66:


[[image: adc.jpg|center]]
[[image: adc.jpg|center]]
A frequência de amostragem '''''fs''''' depende da velocidade do microcontrolador Atmega (normalmente, 16 MHz), do número de bits da palavra, da velocidade de clock do conversor A/D.
Um valor típico é de 125 KHz / 13 bits por amostra = 9600 amostras por segundo.


===EXEMPLO 1: lendo dados de um potenciômetro===
===EXEMPLO 1: lendo dados de um potenciômetro===
Linha 89: Linha 97:


[[image:analog2.jpg|center]]
[[image:analog2.jpg|center]]


=Sensores=
=Sensores=
Linha 106: Linha 112:


===EXEMPLO 3: lendo um NTC e utilizando a equação de Steinhart-Hart ===
===EXEMPLO 3: lendo um NTC e utilizando a equação de Steinhart-Hart ===
Termistor é um resistor cuja resistência varia em função da temperatura (Kelvin).
Há duas categorias de termistores: '''PTC''' (''positive thermal coefficient''), que aumenta sua resistência elétrica com o aumento da temperatura e o '''NTC''' (''negative thermal coefficient''), que diminui a resistência elétrica com o aumento da temperatura.
[[image:analogntcptc.jpg|center]]
Vale ressaltar que Termistores não são polarizados.
====Especificações e características:====
– Tensão de operação: 3,3 ou 5VDC
– Faixa de medição: -55°C a 125° celsius
– Precisão: ±1%
– Dissipação típica constante: 2mW/° celsius
====Experimento:====
Utilizar o Termistor NTC 10K (Sensor de Temperatura) em conjunto com o Arduino e medir a temperatura ambiente.
Como a temperatura é medida em função da resistência do NTC, é necessário utilizar-se a [http://www.analogica.com.br/arquivos/nt-011-termistores.pdf equação de Steinhart-Hart] para correção do valor lido:


[[image:analog3.jpg|center]]
[[image:analog3.jpg|center]]
Linha 112: Linha 142:




Outro projeto:
Porém, como tudo no Arduino, existe uma biblioteca específica para uso com o termistor, a ''Thermistor.h''.
 
Aí, o problema se resume a incluir a biblioteca e rodar seus métodos. Por exemplo:
 
Biblioteca Thermistor.h:
* [https://drive.google.com/file/d/1g-4T3zU4QwoU317Lw1hED_JTQw3hJ45G/view?usp=drive_link Thermistor.zip]
 
#include <Thermistor.h> //inclusão da biblioteca
Thermistor temp(0); //objeto do tipo Thermistor, conectado à porta analógica A0
void setup() {
  Serial.begin(9600); //inicializa a Serial
  delay(1000); 
}
void loop() {
  int temperature = temp.getTemp(); //VARIÁVEL QUE RECEBE TEMPERATURA CALCULADA PELA BIB.
  Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
  Serial.print(temperature); //IMPRIME NO MONITOR SERIAL A TEMPERATURA MEDIDA
  Serial.println("*C"); //IMPRIME O TEXTO NO MONITOR SERIAL
  delay(1000); //INTERVALO DE 1 SEGUNDO
}
 
===EXEMPLO 4: lendo o sensor de temperatura LM35 ===
 
LM35 é um
[[image:analogLM35.jpg|center]]
 
'''Código:'''
 
  void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  float temp=analogRead(0);
  float temperatura = 100*temp*(5.0/1023);
  delay(100);
  Serial.print("Temperatura [oC]: ");
  Serial.println(temperatura);
}
 
===EXEMPLO 5: Acionando leds em função da luminosidade do local ===
Utilizaremos agora um '''fotoresistor''', ou LDR.
 
[[image: MIC2ldr.png|center]]
Um código simples, apenas para acionar o LDR seria:
 
int ldr = A0;//Atribui A0 a variável ldr
int valorldr = 0;//Declara a variável valorldr como inteiro
 
void setup() {
  Serial.begin(9600);//Inicialização da serial, com taxa de 9600 bps
}
void loop() {
  valorldr=analogRead(ldr);//Lê o valor do sensor ldr e armazena na variável valorldr
  Serial.print("Valor lido pelo LDR = ");//Imprime na serial a mensagem Valor lido pelo LDR
  Serial.println(valorldr);//Imprime na serial os dados de valorldr
}
 
Agora, vamos usar o LDR para acionar lâmpadas de emergência, representadas aqui por leds. Valores dos resistores: R<sub>1</sub> &cong; 200 &Omega; e R<sub>3</sub> = 10 k&Omega;.
 
[[image: MIC2ldr3.png|center]]
 
const int limite_claridade= 716; // 70% do valor de fundo de escala de 1023
const int led = 4;  // pino digital do led
 
void setup() {
  pinMode(led, OUTPUT);
  pinMode(chave, INPUT);
  Serial.begin(9600);
}
 
void loop() {
  int sensor=analogRead(3);
  Serial.print("Valor lido pelo LDR = ");//Imprime na serial a mensagem Valor lido pelo LDR
  Serial.println(sensor);//Imprime na serial os dados de valorldr
  if (sensor <= limite_claridade)
    digitalWrite(led, HIGH);
  else
    digitalWrite(led, LOW);
 
}
 


[https://www.electronicshub.org/arduino-based-digital-thermometer/ Termômetro com arduino - usando LM35]
Neste outro exemplo, quando diminui a luminosidade no fotoresistor, o Arduino aciona a [https://br-arduino.org/2014/12/sensores-analogicos-no-arduino-uma-experiencia-inicial-incluindo-funcoes.html lâmpada de emergência], no caso, led.


----
----

Edição atual tal como às 15h19min de 18 de setembro de 2025

<< Página do curso

PLANO DE AULA


CARGA HORÁRIA: 5 h
CARGA HORÁRIA TEÓRICA: 2 h CARGA HORÁRIA PRÁTICA: 3 h

MATERIAIS

Por aluno:

  • 1 placa Arduino Uno
  • cabo de comunicação/alimentação USB
  • 1 computador PC com software Arduino IDE instalado
  • 1 proto shield para montagens
  • 1 potenciômetro;
  • 1 resistor de 200 Ω
  • 1 resistor de 10kΩ
  • 1 led vermelho;
  • 1 sensor de temperatura NTC;
  • 1 sensor de temperatura LM35;
  • 1 sensor de luminosidade fotoresistor LDR;
  • 1 chave push-button;
  • cabos fêmea-macho

METODOLOGIA

  • Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
  • Navegação assistida em outros sites e portais, de conteúdos relacionados.
  • Montagens práticas e desenvolvimento em computador de aplicativos.
  • Testes de verificação e validação.


Portas Analógicas

É possível ler grandezas analógicas com o Arduino, além de valores digitais.

Para isto, existem 6 Portas analógicas para ENTRADA de dados:

  • A0 (pino 14),
  • A1 (pino 15),
  • A2 (pino 16),
  • A3 (pino 17),
  • A4 (pino 18) e
  • A5 (pino 19).

Não é necessário definir-se na função setup( ) se as portas serão usadas como entrada, ou saída.

A função de leitura das portas analógicas é a analogRead( PORTA )

  O microcontrolador do Arduino dispõe de um Conversor Analógico-Digital (ADC) de 10 bits, o que significa capacidade de quantificar 1024 patamares de valor: 0 a 1023. 

Ou seja, as tensões analógicas de entrada, que devem variar de 0 a 5 V, são quantificadas como:

  • 0 - correspondente ao valor de 0 V (GND)
  • 1 - correspondente ao valor de 1x(5 V - 0 V)/1024 = 0,0048828125 V
  • 2 - correspondente ao valor de 2x(5 V - 0 V)/1024 = 0,009765625 V
  • 3 - correspondente ao valor de 3x(5 V - 0 V)/1024 = 0,0146484375 V
  • ...
  • 1023 - correspondente ao valor de 5 V (VCC)


O programador deve saber como interpretar o número digital da conversão. Desta forma, podem ser lidos os mais variados sensores, desde que eles gerem um sinal de tensão de até 5V (limite permitido).

Adc.jpg

A frequência de amostragem fs depende da velocidade do microcontrolador Atmega (normalmente, 16 MHz), do número de bits da palavra, da velocidade de clock do conversor A/D.

Um valor típico é de 125 KHz / 13 bits por amostra = 9600 amostras por segundo.


EXEMPLO 1: lendo dados de um potenciômetro

Analog1.jpg

Para ler os valores diretamente em Volts:

void setup()
{ 
  Serial.begin(9600);
}

void loop()
{ 
   float valt;
   int val = analogRead(0);
  
   valt = (val*5.0)/1023;

   Serial.println(valt);

 }

EXEMPLO 2: lendo dados do potenciômetro para temporizar acionamento de led

Analog2.jpg

Sensores

A leitura de valores analógicos é fundamental, porque a maioria dos sensores e transdutores fornece valor analógico, como saída.

MIC2sensores.png

O que é um sensor?

O que é um transdutor?

Circuitos com Sensores e Arduino

EXEMPLO 3: lendo um NTC e utilizando a equação de Steinhart-Hart

Termistor é um resistor cuja resistência varia em função da temperatura (Kelvin).

Há duas categorias de termistores: PTC (positive thermal coefficient), que aumenta sua resistência elétrica com o aumento da temperatura e o NTC (negative thermal coefficient), que diminui a resistência elétrica com o aumento da temperatura.

Analogntcptc.jpg

Vale ressaltar que Termistores não são polarizados.

Especificações e características:

– Tensão de operação: 3,3 ou 5VDC

– Faixa de medição: -55°C a 125° celsius

– Precisão: ±1%

– Dissipação típica constante: 2mW/° celsius

Experimento:

Utilizar o Termistor NTC 10K (Sensor de Temperatura) em conjunto com o Arduino e medir a temperatura ambiente.

Como a temperatura é medida em função da resistência do NTC, é necessário utilizar-se a equação de Steinhart-Hart para correção do valor lido:

Analog3.jpg
Analog4.jpg


Porém, como tudo no Arduino, existe uma biblioteca específica para uso com o termistor, a Thermistor.h.

Aí, o problema se resume a incluir a biblioteca e rodar seus métodos. Por exemplo:

Biblioteca Thermistor.h:

#include <Thermistor.h> //inclusão da biblioteca
Thermistor temp(0); //objeto do tipo Thermistor, conectado à porta analógica A0
void setup() {
 Serial.begin(9600); //inicializa a Serial
 delay(1000);  
}
void loop() {
  int temperature = temp.getTemp(); //VARIÁVEL QUE RECEBE TEMPERATURA CALCULADA PELA BIB.
  Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
  Serial.print(temperature); //IMPRIME NO MONITOR SERIAL A TEMPERATURA MEDIDA
  Serial.println("*C"); //IMPRIME O TEXTO NO MONITOR SERIAL
  delay(1000); //INTERVALO DE 1 SEGUNDO
}

EXEMPLO 4: lendo o sensor de temperatura LM35

LM35 é um

AnalogLM35.jpg

Código:

 void setup()
{ 
  Serial.begin(9600);
}
 
void loop()
{
  float temp=analogRead(0);
  float temperatura = 100*temp*(5.0/1023);

  delay(100);
  Serial.print("Temperatura [oC]: ");
  Serial.println(temperatura);

}

EXEMPLO 5: Acionando leds em função da luminosidade do local

Utilizaremos agora um fotoresistor, ou LDR.

MIC2ldr.png

Um código simples, apenas para acionar o LDR seria:

int ldr = A0;//Atribui A0 a variável ldr
int valorldr = 0;//Declara a variável valorldr como inteiro
 
void setup() {

  Serial.begin(9600);//Inicialização da serial, com taxa de 9600 bps
}
void loop() {
  valorldr=analogRead(ldr);//Lê o valor do sensor ldr e armazena na variável valorldr
  Serial.print("Valor lido pelo LDR = ");//Imprime na serial a mensagem Valor lido pelo LDR
  Serial.println(valorldr);//Imprime na serial os dados de valorldr
}

Agora, vamos usar o LDR para acionar lâmpadas de emergência, representadas aqui por leds. Valores dos resistores: R1 ≅ 200 Ω e R3 = 10 kΩ.

MIC2ldr3.png
const int limite_claridade= 716; // 70% do valor de fundo de escala de 1023
const int led = 4;  // pino digital do led
 
void setup() {
 pinMode(led, OUTPUT);
 pinMode(chave, INPUT);
 Serial.begin(9600);
}
 
void loop() {
 int sensor=analogRead(3);
 Serial.print("Valor lido pelo LDR = ");//Imprime na serial a mensagem Valor lido pelo LDR
 Serial.println(sensor);//Imprime na serial os dados de valorldr
 if (sensor <= limite_claridade) 
   digitalWrite(led, HIGH);
 else
   digitalWrite(led, LOW);
 
}


Neste outro exemplo, quando diminui a luminosidade no fotoresistor, o Arduino aciona a lâmpada de emergência, no caso, led.


<< Página do curso

Uso da comunicação serial AULA 5 - Leitura e escrita nas portas analógicas PWM e acionamento motores >>