Introduction: Arduino Tutorial - Analog Input - Resistive Sensors - Monitor Serial

About: This is a channel for Homemakers and DIY where you will find useful tutorials about Arduino and IOT systems, some Gardening techniques and Woodworking projects.

Bem vindos a mais um tutorial onde vamos demonstrar o funcionamento dos pinos de entrada analógica do Arduino, nos vários modelos de placas de Arduino normalmente existem muito menos pinos de entrada analógica do que pinos de sinal digital, o que pode limitar um pouco as montagens dos nossos projectos (Ver modelos de Arduino em https://www.arduino.cc/en/Main/Products).

No caso da placa do Arduino UNO esta contem apenas 6 pinos de entrada analógica e para explicar a utilização deste tipo de pinos, escolhemos uma montagem cujo o objectivo será utilizar um potenciómetro ou resistência variável, como um sensor de posição. Este potenciómetro irá ser rodado para uma determinada direcção ou rumo, sendo depois reproduzida essa direcção através de uma montagem simples com LED a representar uma Rosa-dos-ventos, ou seja, Norte, Sul, Este e Oeste (Ver imagem acima).

Caso queiram saber mais sobre estas ou outras funções do Arduino UNO, vejam as especificações detalhadas na página oficial do Arduino em https://store.arduino.cc/arduino-uno-rev3.

Step 1: Montagem

Na nossa montagem foi utilizada uma "Breadboard" onde colocamos os componentes electrónicos e onde fazemos as suas respectivas ligações eléctricas, sendo um desses componentes o nosso sensor, que neste caso é um potenciómetro ou resistência variável de 10KΩ.

Este potenciómetro é rotativo tendo uma amplitude de 360º e que será ligado de forma a funcionar como um divisor de tensão, assim quando rodamos o seu eixo este irá variar a sua resistência eléctrica alterando a tensão no pino de entrada analógica A0,

Esta variação do valor de tensão será entre os 0 e 5V, assim quando o valor de tensão é máximo, ou seja, cerca de 5V o valor convertido pela função dos pinos de entrada analógica indicando o valor de 1023, por outro lado se a tensão estiver nos 0V o valor convertido será também de 0 (Ver circuito acima).

A montagem contem também 4 LED estando estes numa disposição idêntica a uma Rosa-dos-Ventos, indicando os pontos cardeais, ou seja, o Norte, Sul, Este e Oeste. Para que a posição do potenciómetro corresponda a cada um dos LED teremos de dividir os 360º em 4 quadrantes, assim os LED não acenderão apenas num valor específico, mas sim quando estiverem dentro de um dos destes quadrantes (Ver imagem acima).

Para tornarmos este sistema mais preciso teremos de colocar mais LED e dividir o valor de 1023, não por 4 partes iguais mas sim por 8 ou 16, podendo assim indicar os pontos colaterais, Nordeste, Noroeste, Sudeste e Sudoeste ou sub-colaterais, lés-nordeste, lés-susdeste, sul-sudeste, nor-nordeste, nor-noroeste, sul-suldoeste, oés-sudoeste e oés-noroeste.

Material necessário:

  • 1x Arduino UNO;
  • 1x Cabo USB;
  • 1x Breadboard;
  • 4x LED Vermelho;
  • 4x Resistências 1KΩ;
  • 1x Potenciómetro 10KΩ.

Nunca é demais relembrar que os LED devem ser ligados directamente polarizados e com uma resistência eléctricas de 1KΩ em série, para que não se danifiquem quando os ligarmos (Ver imagens acima).

Step 2: Código

Com a montagem terminada, só falta ligamos o cabo USB e carregamos o respectivo código na placa do Arduino UNO.

Como foi explicado anteriormente, a principal vantagem entre os pinos de entrada analógica e os pinos de sinal digital é a capacidade de conseguir identificar valores intermédios de tensão, ou seja, valores entre 0 e 5V, ao contrario do que acontece com os pinos de sinal digital que apenas permitem distinguir o seu estado ou seja se este se encontra em nível baixo ou nível alto, ou seja, 0 ou 5V (Ver imagem acima).

No entanto também existem desvantagens, pois estes pinos apenas têm apenas a capacidade de poderem ser definidos com entradas e não com saídas, o que já não acontece com os pinos de sinal digitais, que têm estas 2 funcionalidades.

Entrada analógica

//Leitura do pino analógico:
analogRead(Pino)

Saída Digital

//Coloca o pino digital em nível alto:
digitalWrite(Pino, HIGH)
//Coloca o pino digital em nível baixo:
digitalWrite(Pino, LOW)

Entrada Digital

//Leitura de pino digital:
digitalRead(Pino)

Função Communication Serial:

Para visualizarmos essa informação na janela do Monitor Serial é necessário colocar as suas funções da Communication Serial no dentro das funções SETUP e LOOP:

void setup() {
	//Iniciar a  Communication Serial a 9600b/s:
	Serial.begin(9600);
}

e

void loop() {
	//Escreve no monitor serial o valor da variável:
	Serial.println(VARIAVEL); //"println" > Escreve e depois paragrafo abaixo.
					ou
				  //"print" > Escreve sempre na mesma linha.
}

Este é o código da montagem e reparem onde foram utilizados estes 2 tipos de pinos, o pino de entrada analógica, que lê o nosso sinal vindo do sensor resistivo e os pinos de sinal digital definidos como saídas que ligam e desligam LED indicando as direcções. Caso queiram saber mais sobre esta ultima função vejam o tutorial em Arduino Tutorial - Digital Output - LED, onde explicamos esta função mais detalhadamente.

int Pino_Sensor = A0;	//Variável para selecção do pino de entrada analógica.

int LED_Norte = 9;	//Variável para selecção do pino de saída digital.
int LED_Oeste = 11;	//Variável para selecção do pino de saída digital.
int LED_Este = 8;	//Variável para selecção do pino de saída digital.
int LED_Sul = 10;	//Variável para selecção do pino de saída digital.

int Valor_Sensor = 0;	//Variável para a leitura do sensor.

//Corre a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){
	//Iniciar a Communication Serial 9600b/s:
	Serial.begin(9600);

	//Definição do tipo de pino (Saída ou Entrada):
	pinMode(LED_Norte, OUTPUT);
	pinMode(LED_Oeste, OUTPUT);
	pinMode(LED_Este, OUTPUT);
	pinMode(LED_Sul, OUTPUT);
}

//A rotina de LOOP e executada repetidamente:
void loop(){

	//Leitura da posição do sensor:
	Valor_Sensor = analogRead(Pino_Sensor);

	//Se o valor da variável for menor que 381 e maior que 127:
	if (Valor_Sensor < 381 & Valor_Sensor > 127){
		//Liga o LED (HIGH é nível alto) referente a Oeste:
		digitalWrite(LED_Oeste, HIGH);
		
		//Desliga o LED (LOW é nível baixo) referente a Norte:
		digitalWrite(LED_Norte, LOW);
		
		//Desliga o LED (LOW é nível baixo) referente a Este:
		digitalWrite(LED_Este, LOW);
		
		//Desliga o LED (LOW é nível baixo) referente a Sul:
		digitalWrite(LED_Sul, LOW);
	}

	//Se o valor da variável for maior que 282 e menor que 638:
	else if (Valor_Sensor > 282 & Valor_Sensor < 638){
		//Liga o LED (HIGH é nível alto) referente a Norte:
		digitalWrite(LED_Norte, HIGH);

		//Desliga o LED (LOW é nível baixo) referente a Oeste:
		digitalWrite(LED_Oeste, LOW);

		//Desliga o LED (LOW é nível baixo) referente a Este:
		digitalWrite(LED_Este, LOW);

		//Desliga o LED (LOW é nível baixo) referente a Sul:
		digitalWrite(LED_Sul, LOW);
	}
	//Se o valor da variável for maior que 638 e menor que 893:
	else if (Valor_Sensor >638 & Valor_Sensor < 893){

		//Liga o LED (HIGH é nível alto) referente a Este:
		digitalWrite(LED_Este, HIGH);

		//Desliga o LED (LOW e nível baixo) referente a Oeste:
		digitalWrite(LED_Oeste, LOW);

		//Desliga o LED (LOW e nível baixo) referente a Norte:
		digitalWrite(LED_Norte, LOW);

		//Desliga o LED (LOW e nível baixo) referente a Sul:
		digitalWrite(LED_Sul, LOW);
	}

	//Se o valor da variavel for maior que 0 e menor que 127 ou maior que 893 e menor 1023:
	else if (Valor_Sensor > 0 & Valor_Sensor < 127 || Valor_Sensor > 893 & Valor_Sensor < 1023){
		//Liga o LED (HIGH é nível alto) referente a Sul:
		digitalWrite(LED_Sul, HIGH);

		//Desliga o LED (LOW é nível baixo) referente a Oeste:
		digitalWrite(LED_Oeste, LOW);

		//Desliga o LED (LOW é nível baixo) referente a Norte:
		digitalWrite(LED_Norte, LOW);

		//Desliga o LED (LOW é nível baixo) referente a Este:
		digitalWrite(LED_Este, LOW);
	}
	//Escreve no monitor serial o texto e o valor da variável:
	Serial.print("Posição Sensor = ");
	Serial.println(Valor_Sensor);

	//Atraso para o próximo passo:
	delay(500);
}

Caso queiram saber mais ou tenham dúvidas sobre estas ou outras referências no código, vejam a sua explicação detalhada no site oficial do Arduino, através da ligação https://www.arduino.cc/en/Reference/HomePage.

Procurem também os nossos tutoriais acerca do Arduino, onde são explicadas diversas montagens e o funcionamento dos seus componentes, já agora visitem o nosso canal no Youtube, Instagram, Facebook ou Twitter.

Abraço e bons projectos.