Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Meça qualquer corrente CA com ACS712

Componentes e suprimentos

Arduino UNO
× 1
OLED i²c 128x32
× 1
ACS712 30A
× 1
LCD 16x2 i²c
× 1

Sobre este projeto




POR FAVOR, TENHA CUIDADO SE VOCÊ ESTIVER USANDO A LINHA ELÉTRICA

Olá, bem-vindo a outro tutorial, este é sobre medição de corrente alternada (AC), usando ACS712 Estou usando a versão 30Amps que é ACS712 30A, e nossa adorável placa Arduino Uno, tentei adicionar uma tela OLED, mas infelizmente terminei quebrando enquanto gravava o tutorial, mudei para o LCD, mas abaixo você encontrará a fiação e os códigos para ambas as versões.

E por “Any AC ...” quero dizer que veremos um código / biblioteca que funciona para todos os tipos de sinais, não apenas um, e nosso amperímetro será capaz de calcular o TRUE ROOT MEAN SQUARE. E observe que o sensor usa o Efeito Hall (produção de uma diferença de voltagem através de um condutor elétrico, transversal a uma corrente elétrica no condutor e a um campo magnético aplicado perpendicular à corrente)

Você pode combinar este projeto com este:Medição fácil de tensão CA usando Arduino e ZMPT101B

Os testes serão feitos em uma lâmpada incandescente, controlada por um dimmer em série com um multímetro de referência e o módulo sensor de corrente ACS712.

Aqui está o plano:
  • Primeiro, precisamos fazer a interface do nosso módulo com a placa Arduino e verificar a forma do sinal quando o dimmer está LIGADO - Ciclo completo - Meio ciclo.
  • Em seguida, vamos verificar um código simples que não requer nenhuma biblioteca, mas funciona apenas com o sinal Sinewaves (será testado).
  • Depois veremos o código que medirá o TRMS do AC e usaremos o LCD.





Peças


Por favor, tome cuidado ao escolher o ACS712, não tente jogar pelo seguro como eu fiz (comprando uma versão de 30 Amps), isso só vai causar uma grande flutuação quando você tentar usá-lo para um uso doméstico ou aplicações de pequenos amplificadores, então aqui para mim, uma versão 5A ou 10A teria sido suficiente. Observe também que 30A ou 20A ... afetará suas calibrações também, mas é explicado como calibrar em comentários de vídeo e códigos.

Essas são as peças que usei, você pode substituir o UNO por qualquer placa compatível, ou aquele LCD i²c por um OLED ou qualquer display de sua preferência.





Teste 1


Fiação e código

A fiação para o teste 1 pode ser encontrada abaixo (Fiação 1), junto com o código (Código 1).

Resultados

Carregue o código e inicie a plotadora serial, você deve ser capaz de ver uma onda senoidal como sinal, a linha vermelha aparece quando eu abaixei o dimmer e a corrente começou a ter aquela forma que você normalmente encontra em um triac.





Teste 2


Agora, se você quiser medir a corrente usando apenas o código acima, você obterá valores em torno de 512 - 511, eles não refletem o valor RMS de forma alguma. Portanto, para medir o valor RMS do sinal, vamos manter a mesma fiação que acima, mas agora precisamos de outro código que possa calcular o RMS.

Fiação e código

A fiação é a mesma que (Fiação 1), mas com um código diferente pode ser encontrada abaixo (Código 2).

Resultados

Como você pode ver, os valores à esquerda (RMS) são iguais aos valores medidos pelo multímetro, à direita esses são valores de pico a pico e observe que o dimmer está em ciclo completo porque estou usando lâmpada de 75W e 230VAC / 50Hz.

!!!!!!!!!!!!!!!!! MAS !!!!!!!!!!!!!!!!!!!!!

Aqui, abaixei totalmente meu dimmer de luz, o que significa que estou aproximadamente em torno de 1/4 de um ciclo, o multímetro está me dando 0,21A, mas meu código me dá 0,36A, o código ainda mede de pico a pico, mas como você pode ver acima, meu sinal não é linear quando coloco o dimmer no mínimo.

E essa é a diferença entre uma medição TRMS e uma medição que funciona apenas com sinal de ondas senoidais.





Teste 3


Agora você vê o problema do código acima, mas felizmente há uma biblioteca para salvá-la, eu realmente aprecio essa biblioteca por todo o trabalho que ela faz porque, como você sabe, se quiser calcular um valor RMS, você precisa usar o cálculo integral, e isso é muito difícil de conseguir em uma placa de desenvolvimento eletrônico, você pode verificar o arquivo cpp da biblioteca para ver quais métodos são usados, como o “Sigma” “Médio”… Coisas relacionadas a estatísticas / probabilidades….

Fiação, código e biblioteca

A fiação é a mesma usada acima (Fiação 1) e abaixo você pode encontrar o código (Código 3).

E aqui você pode baixar a biblioteca de Filtros:Baixe a biblioteca aqui

Resultados

Os resultados corretos estão no meio, os da esquerda estão sem calibração e os da direita são usados ​​para demonstrar como calibrar (confira o vídeo).

Como você viu, a grande diferença entre os dois códigos responde a um sinal não linear, mas o segundo atua como um multímetro TRMS.





Teste com LCD / OLED


Aqui mantemos as mesmas coisas, tudo o que fazemos é, em vez de usar o monitor serial, podemos usar LCD ou OLED

Fiação, códigos e bibliotecas

As ligações podem ser encontradas abaixo (Wiring_LCD) e (Wiring_OLED), códigos também abaixo (Code_ACS712_LCD) e (Code_ACS712_OLED).

Aqui estão as bibliotecas OLED

https://github.com/adafruit/Adafruit_SSD1306https://github.com/adafruit/Adafruit-GFX-Library

E aqui está o LCD_i2c_library

https://drive.google.com/file/d/1Oc56q2GPs5SOA-PdbVHHSxKCnI9KY5xd/view

Resultado

Este é o único teste que pude fazer porque quebrei minha tela OLED enquanto tentava gravar o vídeo tutorial. No geral, isso funciona da mesma maneira que vimos antes, apenas exibe em uma tela LCD i²c. (Sim, os valores TRMS não o método pico a pico).

Isso é tudo pessoal, espero que gostem deste tutorial, não se esqueçam de curtir o vídeo tutorial e se inscrevam no canal SurtrTech se quiserem apoiar, muito obrigado.

Qualquer dúvida deixe nos comentários.

Código

  • Code_1.ino
  • Code_2.ino
  • Code_3.ino
  • Code_ACS712_LCD.ino
  • Code_ACS712_OLED.ino
Code_1.ino Arduino
Este código é para testar o módulo e visualizar o shap do sinal
 / * Este código trabalha com sensor de corrente ACS712, permite a leitura dos dados brutos É melhor usá-lo com Serial Plotter Mais detalhes em www.surtrtech.com * / #define Current_sensor A0 // A entrada analógica do sensor pinfloat i; void setup () {Serial.begin (9600); pinMode (Current_sensor, INPUT);} void loop () {i =analogRead (Current_sensor); Serial.println (i); atraso (100); // Modificar ou remover o atraso mudará a forma como o sinal é mostrado // configure-o até obter o formato de onda senoidal correto} 
Code_2.ino Arduino
Este código usa o método de medição pico a pico para calcular o RMS de um sinal de onda senoidal
 / * Este código trabalha com o sensor de corrente ACS712, permite calcular o RMS de uma corrente alternada de onda senoidal * usa o Pico a Pico método para calcular o RMS * Para obter mais informações, consulte www.surtrtech.com * / # define SAMPLES 300 // Número de amostras que você deseja tirar toda vez que fizer um loop # define ACS_Pin A0 // Pino de dados ACS712 analógico inputfloat High_peak, Low_peak; // Variáveis ​​para medir ou calcularfloat Amps_Peak_Peak, Amps_RMS; void setup () {Serial.begin (9600); pinMode (ACS_Pin, INPUT); // Define o modo de pin} void loop () {read_Amps (); // Lança a função read_Amps Amps_RMS =Amps_Peak_Peak * 0,3536 * 0,06; // Agora temos o valor de pico a pico, normalmente a fórmula requer apenas a multiplicação por 0,3536 // mas uma vez que os valores serão muito grandes, você deve multiplicar por 0,06, você não pode primeiro usá-lo, // faça seus cálculos e compare-os com valores reais medidos por um amperímetro. ex:0,06 =valor real / valor medido Serial.print (Amps_RMS); // Aqui eu mostro o valor RMS e o valor de pico a pico, você pode imprimir o que quiser e adicionar o símbolo "A" ... Serial.print ("\ t"); Serial.println (Amps_Peak_Peak); delay (200);} void read_Amps () // função read_Amps calcular a diferença entre o pico alto e o pico baixo {// obter o valor de pico a pico int cnt; // Contador High_peak =0; // Primeiro assumimos que nosso pico alto é igual a 0 e o pico baixo é 1024, sim invertido Low_peak =1024; for (cnt =0; cnt  High_peak) // Se esse valor for maior que o pico alto (a princípio é 0) {High_peak =ACS_Value; // O pico alto mudará de 0 para aquele valor encontrado} if (ACS_Value  
Code_3.ino Arduino
Este código utiliza fórmulas estatísticas para calcular o TRMS de um sinal qualquer que seja o som e exibe no monitor serial
 / * Este código funciona com sensor de corrente ACS712, permite o cálculo do sinal TRMS * Visite www.surtrtech.com para mais detalhes * / # inclua  // Esta biblioteca faz um trabalho massivo, verifica seu arquivo .cpp # define ACS_Pin A0 // Pino de dados do sensor em A0 analógico inputfloat ACS_Value; // Aqui mantemos os dados brutos valuessfloat testFrequency =50; // testar a frequência do sinal (Hz) float windowLength =40.0 / testFrequency; // por quanto tempo calcular a média do sinal, para statististfloat intercept =0; // a ser ajustado com base no teste de calibração declive do flutuador =0,0752; // a ser ajustado com base no teste de calibração // Por favor, verifique o vídeo do tutorial do ACS712 da SurtrTech para ver como obtê-los porque depende do seu sensor, ou veja abaixo do flutuador Amps_TRMS; // corrente real estimada em ampsunsigned long printPeriod =1000; // em milissegundos // Rastreia o tempo em milissegundos desde a última leitura unsigned long previousMillis =0; void setup () {Serial.begin (9600); // Inicia a porta serial pinMode (ACS_Pin, INPUT); // Defina o modo de pin} void loop () {RunningStatistics inputStats; // cria estatísticas para ver o sinal de teste bruto inputStats.setWindowSecs (windowLength); // Defina o comprimento da janela while (true) {ACS_Value =analogRead (ACS_Pin); // leia o valor analógico:inputStats.input (ACS_Value); // logar na função Stats if ((unsigned long) (millis () - previousMillis)> =printPeriod) {// a cada segundo fazemos o cálculo previousMillis =millis (); // tempo de atualização Amps_TRMS =intercept + slope * inputStats.sigma (); Serial.print ("\ t Amps:"); Serial.print (Amps_TRMS); }}} / * Sobre a inclinação e interceptação * Primeiro você precisa saber que todos os cálculos TRMS são feitos por funções da biblioteca, é o valor "inputStats.sigma ()" * A princípio você pode exibir aquele "inputStats.sigma () "como seu valor TRMS, então tente medir usando-o quando a entrada for 0,00A * Se o valor medido for 0 como eu obtive, você pode manter a interceptação como 0, caso contrário, você precisará adicionar ou subtrair para fazer isso valor igual a 0 * Em outras palavras "remova o deslocamento" * Em seguida, ligue a alimentação para um valor conhecido, por exemplo, use uma lâmpada ou um led que ou saiba a sua potência e você já conhece a sua tensão, então um pouco de matemática você ' vou obter os amperes teóricos * você divide esse valor teórico pelo valor medido e aqui você tem a inclinação, agora coloque-os ou modifique-os * / 
Code_ACS712_LCD.ino Arduino
Este código usa o método de cálculo TRMS e o exibe no LCD i²c
 / * Este código funciona com ACS712 e LCD ic * Ele mede o TRMS de uma corrente alternada e exibe o valor na tela * Visite www.SurtrTech.com para mais detalhes * / # include  // Esta biblioteca faz um grande trabalho, verifique seu arquivo .cpp # include  // Biblioteca IC LCD # define ACS_Pin A0 // Pino de dados ACS712 # define I2C_ADDR 0x27 // endereço I2C, você deve usar o código para escanear o endereço primeiro (0x27) aqui # define BACKLIGHT_PIN 3 // Declarando pinos LCD # define En_pin 2 # define Rw_pin 1 # define Rs_pin 0 # define D4_pin 4 # define D5_pin 5 # define D6_pin 6 # define D7_pin 7LiquidCrystal_I2C lcd (I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin); // Declarando o lcdfloat testFrequency =50; // testar a frequência do sinal (Hz) float windowLength =40.0 / testFrequency; // por quanto tempo calcular a média do sinal, para statististfloat intercept =0; // a ser ajustado com base no teste de calibração declive do flutuador =0,0752; // a ser ajustado com base no teste de calibração // Por favor, verifique o vídeo do tutorial do ACS712 da SurtrTech para ver como obtê-los porque depende do seu sensor, ou veja abaixo do flutuador Amps_TRMS; float ACS_Value; não assinado longo printPeriod =1000; unsigned long previousMillis =0; void setup () {digitalWrite (2, HIGH); lcd.begin (16,2); lcd.setBacklightPin (BACKLIGHT_PIN, POSITIVO); lcd.setBacklight (HIGH); // Iluminação de fundo lcd.home (); } void loop () {RunningStatistics inputStats; // cria estatísticas para ver o sinal de teste bruto inputStats.setWindowSecs (windowLength); enquanto (verdadeiro) {ACS_Value =analogRead (ACS_Pin); // leia o valor analógico:inputStats.input (ACS_Value); // logar na função Stats if ((unsigned long) (millis () - previousMillis)> =printPeriod) {// a cada segundo fazemos o cálculo previousMillis =millis (); // tempo de atualização Amps_TRMS =intercept + slope * inputStats.sigma (); // Calibra os valores lcd.clear (); // limpa o lcd e imprime em uma determinada posição lcd.setCursor (2,0); lcd.print (Amps_TRMS); lcd.print ("A"); }}} / * Sobre a inclinação e interceptação * Primeiro você precisa saber que todos os cálculos TRMS são feitos por funções da biblioteca, é o valor "inputStats.sigma ()" * A princípio você pode exibir aquele "inputStats.sigma () "como seu valor TRMS, então tente medir usando-o quando a entrada for 0,00A * Se o valor medido for 0 como eu obtive, você pode manter a interceptação como 0, caso contrário, você precisará adicionar ou subtrair para fazer isso valor igual a 0 * Em outras palavras "remova o deslocamento" * Em seguida, ligue a alimentação para um valor conhecido, por exemplo, use uma lâmpada ou um led que ou saiba a sua potência e você já conhece a sua tensão, então um pouco de matemática você ' vou obter os amperes teóricos * você divide esse valor teórico pelo valor medido e aqui você tem a inclinação, agora coloque-os ou modifique-os * / 
Code_ACS712_OLED.ino Arduino
Este código usa o método de cálculo TRMS e exibe o valor no OLED.
 / * Este código funciona com ACS712 e OLED ic * Ele mede o TRMS de uma Corrente Alternada e exibe o valor na tela * Visite www.SurtrTech. com para mais detalhes * / # include  // Esta biblioteca faz um grande trabalho de verificação de seu arquivo .cpp # include  // Bibliotecas OLED # include  #define ACS_Pin A0 # define SCREEN_WIDTH 128 // Largura do display OLED, em pixels # define SCREEN_HEIGHT 32 // Altura do display OLED, em pixels # define OLED_RESET -1 // Reset pin # (ou -1 se estiver compartilhando o Arduino reset pin) float testFrequency =50; // testar a frequência do sinal (Hz) float windowLength =40.0 / testFrequency; // por quanto tempo calcular a média do sinal, para statististfloat intercept =0; // a ser ajustado com base no teste de calibração declive do flutuador =0,0752; // a ser ajustado com base no teste de calibração // Por favor, verifique o vídeo do tutorial do ACS712 da SurtrTech para ver como obtê-los porque depende do seu sensor, ou veja abaixo do flutuador Amps_TRMS; float ACS_Value; não assinado longo printPeriod =1000; unsigned long previousMillis =0; Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Declarando o nome de exibição (display) void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Inicia o display OLED display.clearDisplay (); display.display ();} void loop () {RunningStatistics inputStats; // cria estatísticas para ver o sinal de teste bruto inputStats.setWindowSecs (windowLength); enquanto (verdadeiro) {ACS_Value =analogRead (ACS_Pin); // leia o valor analógico:inputStats.input (ACS_Value); // logar na função Estatísticas if ((unsigned long) (millis () - previousMillis)> =printPeriod) {// Faça os cálculos a cada 1s previousMillis =millis (); // tempo de atualização Amps_TRMS =intercept + slope * inputStats.sigma (); display.clearDisplay (); display.setTextSize (3); display.setTextColor (WHITE); display.setCursor (15,10); display.print (Amps_TRMS); display.println ("A"); display.display (); }}} / * Sobre a inclinação e interceptação * Primeiro você precisa saber que todos os cálculos TRMS são feitos por funções da biblioteca, é o valor "inputStats.sigma ()" * A princípio você pode exibir aquele "inputStats.sigma () "como seu valor TRMS, então tente medir usando-o quando a entrada for 0,00A * Se o valor medido for 0 como eu obtive, você pode manter a interceptação como 0, caso contrário, você precisará adicionar ou subtrair para fazer isso valor igual a 0 * Em outras palavras "remova o deslocamento" * Em seguida, ligue a alimentação para um valor conhecido, por exemplo, use uma lâmpada ou um led que ou saiba a sua potência e você já conhece a sua tensão, então um pouco de matemática você ' vou obter os amperes teóricos * você divide esse valor teórico pelo valor medido e aqui você tem a inclinação, agora coloque-os ou modifique-os * / 

Esquemas

Fiação usada de testes 1,2 e 3 Use LCD i²c Use OLED 128x32

Processo de manufatura

  1. Como medir a qualidade do ar em OpenSensors
  2. Monitoramento de CO2 com Sensor K30
  3. Comunicação para surdos-cegos com 1Sheeld / Arduino
  4. Aceitar moeda de controle com Arduino
  5. Arduino com Bluetooth para controlar um LED!
  6. Sensor capacitivo de impressão digital com um Arduino ou ESP8266
  7. Brincando com Nextion Display
  8. Braço robótico controlado por Nunchuk (com Arduino)
  9. Anime uma boca de Billy Bass com qualquer fonte de áudio
  10. Medindo a radiação solar com Arduino