sexta-feira, 30 de agosto de 2019

Medição da força do campo magnético com Arduino

Neste projeto   estamos usando o conceito de  ADC (Conversão analógica para digital) em ARDUINO UNO. Usaremos um  Sensor de efeito Hall  e um Arduino para medir a intensidade de campo de um ímã. O sensor que usamos aqui é UGN3503U. Este é um sensor de salão que detecta a intensidade do campo magnético e fornece uma tensão variável na saída proporcional à intensidade do campo. Esse sensor capta a intensidade de campo nas unidades de < GAUSS’.
UGN3503U Sensor Pinout
Assim, com este sensor, teremos força de campo como tensão variável. Usando o recurso ADC, converteremos essa voltagem em um número. Este número representa a intensidade do campo e é mostrado no LCD. [Verifique também:  Interfaces LCD 16x2 com Arduino]

O Arduino possui seis canais ADC. Naqueles qualquer um ou todos eles podem ser usados ​​como entradas para tensão analógica. O UNO ADC é de 10 bits de resolução (então os valores inteiros de (0- (2 ^ 10) 1023)). Isso significa que ele mapeará tensões de entrada entre 0 e 5 volts em valores inteiros entre 0 e 1023. Assim, para cada (5/1024 = 4,9 mV) por unidade.


Em tudo isso, vamos conectar um potenciômetro ou potenciômetro ao "A0 ’ canal, e vamos mostrar o resultado do ADC em um display simples. Os monitores simples são unidades de exibição de 16x1 e 16x2. A unidade de exibição 16x1 terá 16 caracteres e estará em uma linha. O 16x2 terá 32 caracteres no total 16 em 1 st   linha e outro 16 em 2 nd   linha. Aqui é preciso entender que em cada personagem existem 5x10 = 50 pixels, então, para exibir um caractere, todos os 50 pixels devem trabalhar juntos, mas não precisamos nos preocupar com isso, porque há outro controlador (HD44780) na unidade de exibição que faz o trabalho de controlar os pixels (você pode vê-lo na unidade de LCD, é o olho negro na parte de trás).

Componentes Requeridos

Hardware: ARDUINO UNO, fonte de alimentação (5v), JHD_162ALCD (16x2LCD), capacitor de 100uF (2 peças), UGn3503U.
Software: arduino IDE (Arduino todas as noites)

Diagrama de Circuito e Explicação

Circuit Diagram for Magnetic Field Measurement using Arduino
A figura acima mostra o   diagrama de circuito para medição de campo magnético usando arduino uno.
No LCD de 16x2, há 16 pinos acima de tudo, se houver luz de fundo, se não houver luz de fundo, haverá 14 pinos. Pode-se ligar ou deixar os pinos de luz de fundo. Agora nos 14 pinos existem 8 pinos de dados (7-14 ou D0-D7), 2 pinos de alimentação (1 & amp; 2 ou VSS & VDD ou GND & amp; + 5v), 3rd pino para controle de contraste (VEE controla o quão espesso os caracteres devem ser mostrados) e   3 pinos de controle (RS & RW & E).

No circuito acima, você pode observar que eu peguei apenas dois pinos de controle, o bit de contraste e READ / WRITE não são usados ​​com frequência para que possam ser colocados em curto com o terra. Isso coloca o LCD no mais alto contraste e no modo de leitura. Nós só precisamos controlar os pinos ENABLE e RS para enviar caracteres e dados de acordo.

As conexões que são feitas para o LCD são dadas abaixo:
PIN1 ou VSS ao solo
PIN2 ou VDD ou VCC para alimentação de + 5v
PIN3 ou VEE para o terra (dá melhor contraste máximo para um iniciante)
PIN4 ou RS (seleção de registro) para PIN8 de ARDUINO UNO
PIN5 ou RW (leitura/gravação) para o terra (coloca o LCD no modo de leitura facilita a comunicação para o usuário)
PIN6 ou E (Ativar) para PIN9 de ARDUINO UNO
PIN11 ou D4 ao PIN10 de ARDUINO UNO
PIN12 ou D5 para PIN11 de ARDUINO UNO
PIN13 ou D6 ao PIN12 de ARDUINO UNO
PIN14 ou D7 para PIN13 de ARDUINO UNO

O ARDUINO IDE permite ao usuário usar o LCD no modo de 4 bits. Este tipo de comunicação permite que o usuário diminua o uso de pinos no ARDUINO, ao contrário de outros ARDUINO não precisa ser programado separadamente para usá-lo no modo 4-it, porque por padrão o ARDUINO está configurado para se comunicar no modo de 4 bits. No circuito você pode ver que usamos comunicação de 4 bits (D4-D7). Portanto, a partir da simples observação da tabela acima, estamos conectando 6 pinos de LCD ao controlador, em que 4 pinos são pinos de dados e 2 pinos para controle.

Trabalhando

Para fazer a interface de um LCD com o ARDUINO UNO, precisamos saber algumas coisas.
  1. analogRead(pin);
  2. analogReference();
  3. analogReadResolution(bits);
Em primeiro lugar, os canais UNO ADC têm um valor de referência padrão de 5V. Isso significa que podemos fornecer uma tensão de entrada máxima de 5V para conversão de ADC em qualquer canal de entrada. Como alguns sensores fornecem voltagens de 0 a 2,5 V, com uma referência de 5 V, obtemos uma precisão menor, de modo que temos uma instrução que nos permite alterar esse valor de referência.   Então, para alterar o valor de referência que temos (“ analogReference (); ”)

Como padrão, obtemos a resolução ADC máxima da placa, que é de 10 bits, esta resolução pode ser alterada usando a instrução (“ analogReadResolution (bits); ”). Essa alteração de resolução pode ser útil em alguns casos.

Agora, se as condições acima estiverem definidas como padrão,   podemos ler o valor do ADC do canal ‘0’ chamando diretamente a função “ analogRead (pin); ”, “ pin ” representa o pino onde nós conectamos o sinal analógico, neste caso seria "A0". O valor do ADC pode ser levado em um inteiro como "int ADCVALUE = analogRead (A0); ”, por esta instrução, o valor após o ADC é armazenado no inteiro “ ADCVALUE ”.

Agora vamos falar um pouco sobre LCD de 16x2. Primeiro, precisamos ativar o arquivo de cabeçalho (#include < LiquidCrystal.h > ’), esse arquivo de cabeçalho contém instruções nele, o que permite ao usuário interface de um LCD para UNO no modo de 4 bits sem qualquer fuzz. Com este arquivo de cabeçalho não precisamos enviar dados para o LCD pouco a pouco, tudo isso será resolvido e não precisamos escrever um programa para enviar dados ou um comando para o LCD pouco a pouco.

Em segundo lugar, precisamos informar ao quadro que tipo de LCD estamos usando aqui. Já que temos muitos tipos diferentes de LCD (como 20x4, 16x2, 16x1 etc.). Aqui, vamos fazer a interface de um LCD de 16x2 com o UNO, de modo que recebemos o lcd.begin (16, 2); Para 16x1 obtemos "lcd.begin (16, 1)".’.

Nesta instrução, vamos dizer à placa onde conectamos os pinos. Os pinos que estão conectados devem ser representados em ordem como "RS, En, D4, D5, D6, D7". Esses pinos devem ser representados corretamente. Desde que nos conectamos & nbsp; RS para PIN0 e assim por diante, como mostra o diagrama de circuito, Nós representamos o número de pinos a ser inserido como LiquidCrystal lcd (0, 1, 8, 9, 10, 11);”.

Depois de tudo o que resta é enviar dados, os dados que precisam ser exibidos no LCD devem ser escritos como “ cd.print("hello, world!");”. Com este comando, o LCD exibe ‘hello, world!’. Como você pode ver, não precisamos nos preocupar com nada disso, apenas precisamos inicializar e a ONU estará pronta para exibir dados. Não precisamos escrever um loop de programa para enviar os dados BYTE a BYTE aqui.

Quando um ímã é aproximado do sensor, este representa uma tensão na saída proporcional ao campo, esse valor é captado por Uno e mostrado no LCD. O trabalho deste projeto de medição de campo magnético é explicado mais detalhadamente através do código C abaixo.
Código: 
#include <LiquidCrystal.h>
//inicialize a biblioteca com os números dos pinos da interface
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);///REGISTRAR PIN DE SELEÇÃO, ATIVAR PIN, PIN D4, PIN D5, PIN D6, PIN D7
char ADCSHOW[5];//inicializando um caractere de tamanho 5 para mostrar o resultado ADC
void setup()
{
  //configurar o número de colunas e linhas do LCD:
lcd.begin(16, 2);
}

void loop()
{
             lcd.print("FluxDensity");//mostrando o nome
                lcd.setCursor(0, 1);//mover para a segunda linha
                lcd.print("(in Gauss):");//mostrando unidades
                String ADCVALUE = String((analogRead(A0)-515)/3.76);
 /* Agora, como a referência padrão se 5V e a resolução é de 10 bits, para cada 5/1024 = 5mV, obtemos um incremento é a contagem. O sensor fornece uma tensão de incremento de 1,3V para cada incremento de 1Gauss se campo.
Portanto, precisamos dividir o valor ADC por 3,76 para obter o valor de gauss, agora a saída de 0 gauss do sensor é de 2,5V, portanto, precisamos subtraí-lo primeiro. Para manter uma leitura de 0V no campo 0Gauss. */
                //Converter a leitura em uma matriz de caracteres
                ADCVALUE.toCharArray(ADCSHOW, 5);
                lcd.print(ADCSHOW);//mostrando o valor da força do campo
                lcd.print("G   ");
                lcd.setCursor(0, 0);//defina o cursor para a coluna 0, linha 0
}

Nenhum comentário:

Postar um comentário

Peço que use somente caixa baixa, não todo escrito em letra grande.