Índice:

Magnetômetro Arduino: 5 etapas (com imagens)
Magnetômetro Arduino: 5 etapas (com imagens)

Vídeo: Magnetômetro Arduino: 5 etapas (com imagens)

Vídeo: Magnetômetro Arduino: 5 etapas (com imagens)
Vídeo: Arduino OLED Menu Tutorial (for beginners - Arduino UNO, 128x64px SSD1306 OLED screen, u8g) 2024, Novembro
Anonim
Magnetômetro Arduino
Magnetômetro Arduino

O que estamos construindo?

Os humanos não conseguem detectar campos magnéticos, mas usamos dispositivos que dependem de ímãs o tempo todo. Motores, bússolas, sensores de rotação e turbinas eólicas, por exemplo, requerem ímãs para operação. Este tutorial descreve como construir um magnetômetro baseado em Arduino que detecta o campo magnético usando três sensores de efeito Hall. O vetor do campo magnético em um local é exibido em uma pequena tela usando projeção isométrica.

O que é um Arduino?

Um Arduino é um pequeno microcontrolador de código aberto amigável. Possui pinos de entrada e saída digitais. Ele também possui pinos de entrada analógica, que são úteis para ler a entrada de sensores. Diferentes modelos de Arduino estão disponíveis. Este tutorial descreve como usar o Arduino Uno ou o Arduino MKR1010. No entanto, outros modelos também podem ser usados.

Antes de começar este tutorial, baixe o ambiente de desenvolvimento Arduino, bem como quaisquer bibliotecas necessárias para seu modelo específico. O ambiente de desenvolvimento está disponível em https://www.arduino.cc/en/main/software, e as instruções de instalação estão disponíveis em

O que é um campo magnético?

Os ímãs permanentes exercem forças sobre outros ímãs permanentes. Os fios condutores de corrente exercem forças sobre outros fios condutores de corrente. Ímãs permanentes e fios condutores de corrente também exercem forças uns sobre os outros. Esta força por corrente de teste de unidade é um campo magnético.

Se medirmos o volume de um objeto, obtemos um único número escalar. No entanto, o magnetismo é descrito por um campo vetorial, uma quantidade mais complicada. Primeiro, varia com a posição em todo o espaço. Por exemplo, o campo magnético a um centímetro de um ímã permanente é provavelmente maior do que o campo magnético a dez centímetros de distância.

Em seguida, o campo magnético em cada ponto no espaço é representado por um vetor. A magnitude do vetor representa a força do campo magnético. A direção é perpendicular à direção da força e à direção da corrente de teste.

Podemos imaginar o campo magnético em um único local como uma seta. Podemos imaginar o campo magnético em todo o espaço por uma série de setas em diferentes locais, possivelmente de diferentes tamanhos e apontando em diferentes direções. Uma boa visualização está disponível em https://www.falstad.com/vector3dm/. O magnetômetro que estamos construindo exibe o campo magnético na localização dos sensores como uma seta no visor.

O que é um sensor de efeito Hall e como ele funciona?

Um sensor de efeito Hall é um dispositivo pequeno e barato que mede a força do campo magnético ao longo de uma direção específica. É feito de um pedaço de semicondutor dopado com cargas em excesso. A saída de alguns sensores de efeito Hall é uma tensão analógica. Outros sensores de efeito Hall têm um comparador integrado e produzem uma saída digital. Outros sensores de efeito Hall são integrados em instrumentos maiores que medem a taxa de fluxo, velocidade de rotação ou outras quantidades.

A física por trás do efeito Hall é resumida pela equação de força de Lorentz. Esta equação descreve a força em uma carga móvel devido a um campo elétrico e magnético externo.

Imagem
Imagem

A figura abaixo ilustra o efeito Hall. Suponha que queremos medir a força do campo magnético na direção da seta azul. Conforme mostrado na parte esquerda da figura, aplicamos uma corrente através de um pedaço de semicondutor perpendicular à direção do campo a ser medido. A corrente é o fluxo de cargas, então uma carga no semicondutor se move com alguma velocidade. Esta carga sentirá uma força devida ao campo externo, conforme mostrado na parte central da figura. As cargas se moverão devido à força e se acumularão nas bordas do semicondutor. As cargas aumentam até que a força devida às cargas acumuladas equilibra a força devida ao campo magnético externo. Podemos medir a tensão no semicondutor, conforme mostrado na parte direita da figura. A tensão medida é proporcional à força do campo magnético, e está na direção perpendicular à corrente e à direção do campo magnético.

Imagem
Imagem

O que é projeção isométrica?

Em cada ponto do espaço, o campo magnético é descrito por um vetor tridimensional. No entanto, nossa tela é bidimensional. Podemos projetar o vetor tridimensional em um plano bidimensional para que possamos desenhá-lo na tela. Existem várias maneiras de fazer isso, como projeção isométrica, projeção ortográfica ou projeção oblíqua.

Na projeção isométrica, os eixos x, y e z estão separados por 120 graus e aparecem igualmente reduzidos. Informações adicionais sobre a projeção isométrica, bem como as fórmulas necessárias, podem ser encontradas na página da Wikipedia sobre o assunto.

Etapa 1: reunir suprimentos

Arduino e cabo

O Arduino é o cérebro do magnetômetro. Estas instruções descrevem como usar um Arduino Uno ou um Arduino MKR1010. Em ambos os casos, é necessário um cabo para conectá-lo ao computador.

Opção 1: Arduino Uno e cabo USB AB

www.digikey.com/product-detail/en/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/en/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Opção 2: Arduino MKR1010 e cabo microUSB

www.digikey.com/product-detail/en/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/en/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

Display TFT

TFT significa Thin Film Transistor. Esta tela de 1,44 contém 128 por 128 pixels. É pequena, brilhante e colorida. Ela vem conectada a uma placa breakout. No entanto, os pinos de cabeçalho vêm separados, então você precisa soldá-los. (A solda e um ferro de solda são precisava.)

www.digikey.com/product-detail/en/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Imagem
    Imagem
  • Sensores de efeito Hall analógico

São necessários três sensores de efeito Hall. O link abaixo é para o número da peça Allegro A1324LUA-T. Para este sensor, o pino 1 é a tensão de alimentação, o pino 2 é o aterramento e o pino 3 é a saída. Outros sensores Hall também devem funcionar, mas certifique-se de que sejam analógicos, não digitais. Se você usar um sensor diferente, verifique a pinagem e ajuste a fiação, se necessário. (Na verdade, usei um sensor diferente da mesma empresa para fins de teste. No entanto, o que usei é obsoleto e este sensor é seu substituto.)

www.digikey.com/product-detail/en/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Tábua de ensaio pequena e fio

www.digikey.com/product-detail/en/adafruit-industries-llc/239/1528-2143-ND/7244929

Ímãs permanentes para teste

Imãs de geladeira funcionam bem.

Etapa 2: Fiação

Fiação
Fiação

Solde os cabeçalhos na tela.

Imagem
Imagem

Coloque os sensores em uma extremidade da placa de ensaio e coloque o display e o Arduino na extremidade oposta. A corrente nos fios do Arduino e do display geram campos magnéticos, que não queremos que os sensores leiam. Além disso, podemos querer colocar os sensores perto de ímãs permanentes, o que pode impactar adversamente a corrente nos fios do visor e do sensor. Por essas razões, queremos os sensores longe da tela e do Arduino. Também por essas razões, este magnetômetro deve ser mantido longe de campos magnéticos muito fortes.

Coloque os sensores perpendiculares entre si, mas o mais próximos possível. Dobre suavemente os sensores para deixá-los perpendiculares. Cada pino de cada sensor deve estar em uma linha separada da placa de ensaio para que possa ser conectado separadamente.

Imagem
Imagem

A fiação é ligeiramente diferente entre o MKR1010 e o Uno por dois motivos. Primeiro, o Arduino e o display se comunicam por SPI. Diferentes modelos de Arduino têm diferentes pinos dedicados para certas linhas SPI. Em segundo lugar, as entradas analógicas do Uno podem aceitar até 5 V, enquanto as entradas analógicas do MKR1010 podem aceitar apenas até 3,3 V. A tensão de alimentação recomendada para os sensores de efeito Hall é de 5 V. As saídas do sensor são conectadas às entradas analógicas do Arduino, e estes podem ser tão grandes quanto as tensões de alimentação. Para o Uno, use a alimentação de 5 V recomendada para os sensores. Para o MKR1010, use 3,3 V para que a entrada analógica do Arduino nunca veja uma tensão maior do que ela pode suportar.

Siga os diagramas e instruções abaixo para o Arduino que você está usando.

Fiação com o Arduino Uno

Imagem
Imagem

O display possui 11 pinos. Conecte-os ao Arduino Uno da seguinte maneira. (NC significa não conectado.)

  • Vin → 5V
  • 3,3 → NC
  • Gnd → GND
  • SCK → 13
  • SO → NC
  • SI → 11
  • TCS → 10
  • RST → 9
  • D / C → 8
  • CCS → NC
  • Lite → NC

Conecte o Vin dos sensores a 5V do Arduino. Conecte o aterramento do sensor ao aterramento do Arduino. Conecte a saída dos sensores às entradas analógicas A1, A2 e A3 do Arduino.

Imagem
Imagem

Fiação com o Arduino MKR1010

Imagem
Imagem

O display possui 11 pinos. Conecte-os ao Arduino da seguinte maneira. (NC significa não conectado.)

  • Vin → 5V
  • 3,3 → NC
  • Gnd → GND
  • SCK → SCK 9
  • SO → NC
  • SI → MOSI 8
  • TCS → 5
  • RST → 4
  • D / C → 3
  • CCS → NC
  • Lite → NC

Conecte o Vin dos sensores ao Vcc do Arduino. Este pino está em 3,3V, não 5V. Conecte o aterramento do sensor ao aterramento do Arduino. Conecte a saída dos sensores às entradas analógicas A1, A2 e A3 do Arduino.

Imagem
Imagem

Etapa 3: teste a tela

Vamos fazer o display TFT funcionar. Felizmente, Adafruit tem algumas bibliotecas amigáveis e um excelente tutorial para acompanhá-las. Essas instruções seguem de perto o tutorial, Abra o ambiente de desenvolvimento Arduino. Vá para Ferramentas → Gerenciar Bibliotecas. Instale as bibliotecas Adafruit_GFX, Adafruit_ZeroDMA e Adafruit_ST7735. Reinicie o ambiente de desenvolvimento Android.

O exemplo graphicstest está incluído nas bibliotecas. Abra. Arquivo → Exemplos → Biblioteca Adafruit ST7735 e ST7789 → teste gráfico. Para selecionar a linha 95 de comentário de exibição de 1,44 e a linha 98 de descomentar.

Versão original:

94 // Use este inicializador se estiver usando uma tela TFT de 1,8 :

95 tft.initR (INITR_BLACKTAB); // Chip Init ST7735S, guia preta 96 97 // OU use este inicializador (descomente) se estiver usando um 1.44 TFT: 98 //tft.initR(INITR_144GREENTAB); // Chip Init ST7735R, guia verde

Versão correta para display de 1,44 :

94 // Use este inicializador se estiver usando uma tela TFT de 1,8 :

95 //tft.initR(INIT_BLACKTAB); // Chip Init ST7735S, guia preta 96 97 // OU use este inicializador (descomente) se estiver usando um 1.44 TFT: 98 tft.initR (INITR_144GREENTAB); // Chip Init SST35R, guia verde

O display se comunica usando SPI, e diferentes modelos de Arduinos usam diferentes pinos dedicados para algumas linhas de comunicação. O exemplo graphicstest é configurado para funcionar com os pinos Uno. Se você estiver usando o MKR1010, adicione as seguintes linhas entre as linhas 80 e 81.

Correções para o MKR1010:

80

#define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 3 #define TFT_MOSI 8 #define TFT_SCLK 9 Adafruit_ST7735 tft = Adafruit_ST7735 (TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 81 float p = 3,1415926;

Salve o exemplo de teste gráfico modificado. Conecte o Arduino ao computador, caso ainda não tenha feito isso. Vá para Ferramentas → Placa e ferramentas → Porta para verificar se o computador pode encontrar o Arduino. Vá para Sketch → Upload. Se o exemplo funcionar, o visor mostrará linhas, retângulos, texto e a demonstração completa. O tutorial Adafruit fornece mais detalhes se a solução de problemas for necessária.

Etapa 4: o código do magnetômetro

Baixe o código em anexo e abra-o no ambiente de desenvolvimento do Arduino.

Este programa usa seis funções:

Setup () inicializa o display

Loop () contém o loop principal do programa. Ele escurece a tela, desenha os eixos, lê as entradas e desenha a seta que representa o vetor do campo magnético. Tem uma taxa de atualização de um segundo que pode ser alterada alterando a linha 127

DrawAxes3d () desenha e rotula os eixos x, y e z

DrawArrow3d () leva em uma entrada x, y e z variando de 0 a 1023. A partir desses valores, ele calcula os pontos finais da seta no espaço. Em seguida, ele usa as funções isometricxx () e isometricyy () para calcular os pontos finais na tela. Por fim, ele desenha a seta e imprime as tensões na parte inferior da tela

Isometricxx () encontra a coordenada x da projeção isométrica. Ele obtém as coordenadas x, y e z de um ponto e retorna a localização do pixel x correspondente na tela

Isometricyy () encontra a coordenada y da projeção isométrica. Ele obtém as coordenadas x, y e z de um ponto e retorna a localização do pixel y correspondente na tela

Antes de executar o código, precisamos especificar quais pinos usar para comunicação SPI com o monitor e precisamos especificar a tensão da fonte para os sensores. Se você estiver usando o MKR1010, comente as linhas 92-96 e também a linha 110. Em seguida, descomente as linhas 85-89 e também a linha 108. Se você estiver usando o Uno, comente as linhas 85-89 e também a linha 108. Em seguida, descomente as linhas 92-96, bem como a linha 110.

Faça upload do código, Sketch → Upload.

Você deve ver os eixos x, y e z em vermelho. Uma seta verde com um círculo azul para a ponta representa o vetor do campo magnético nos sensores. As leituras de tensão são exibidas no canto inferior esquerdo. Conforme você aproxima um ímã dos sensores, as leituras de voltagem devem mudar e o tamanho da seta deve aumentar.

Imagem
Imagem

Etapa 5: Trabalho Futuro

Trabalho futuro
Trabalho futuro

A próxima etapa seria calibrar o dispositivo. A folha de dados do sensor fornece informações sobre como converter os valores brutos de tensão do sensor em força do campo magnético. A calibração pode ser verificada por comparação com um magnetômetro mais preciso.

Os ímãs permanentes interagem com os fios condutores de corrente. Fios próximos ao display e no Arduino geram campos magnéticos que podem afetar as leituras do sensor. Além disso, se este dispositivo for usado para medir perto de um ímã permanente forte, o campo magnético do dispositivo em teste irá interagir, introduzir ruído e possivelmente danificar o Arduino e a tela. A blindagem poderia tornar este magnetômetro mais robusto. O Arduino pode suportar campos magnéticos maiores se for blindado em uma caixa de metal, e menos ruído será introduzido se cabos blindados conectarem os sensores em vez de fios desencapados.

O campo magnético é uma função da posição, por isso é diferente em cada ponto do espaço. Este dispositivo usa três sensores, um para medir o componente x, o y e o z do campo magnético em um ponto. Os sensores estão próximos uns dos outros, mas não em um único ponto, e isso limita a resolução do magnetômetro. Seria legal salvar as leituras do campo magnético em diferentes pontos e depois exibi-las como uma série de setas nos locais correspondentes. No entanto, esse é um projeto para outro dia.

Referências

Informações sobre as bibliotecas de gráficos Adafruit Arduino

https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/overview

Visualização de campo magnético

https://www.falstad.com/vector3dm/

Informações sobre sensores de efeito Hall e efeito Hall

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Informações sobre projeção isométrica

  • https://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Recomendado: