- Máquina de pesagem Arduino em funcionamento
- Componentes necessários para máquina de pesagem baseada em Arduino
- Máquina de pesagem baseada em Arduino - Diagrama de circuito
- Fazendo o circuito em um perfboard pontilhado
- Construindo um gabinete para máquina de pesagem baseada em Arduino
- Máquina de pesagem Arduino - Código
Balanças de carga digitais são outro milagre da engenharia e design modernos. Sim, estamos falando sobre a balança que costumamos ver na maioria dos supermercados e outros lugares, mas você já se perguntou como funciona uma balança? Para responder a essa pergunta, neste projeto, vamos dar uma olhada na célula de carga e seu funcionamento. Finalmente, estaremos construindo uma balança de carga portátil baseada em Arduino com o Sensor de Peso HX711, que pode medir pesos de até 10kg.
Esta balança é perfeita para lojas locais, onde eles embalam itens em grandes quantidades. Como produtos comerciais, nossa balança de peso terá um botão zero que zera a balança. Além disso, possui a opção de definir o peso para medição, quando o peso de medição atinge o peso definido, uma campainha soa rápido e para quando o peso definido é igual ao peso de medição. Dessa forma, o usuário pode embalá-lo apenas ouvindo o som e não precisará olhar para o display. Como este é um projeto muito simples, iremos construí-lo muito facilmente usando componentes como Arduino e célula de carga extensômetro. Então, sem mais demora, vamos direto ao assunto.
Em um artigo anterior, fizemos projetos como Raspberry Pi Based Weight Sensor e IoT Smart Container com Email Alert e Web Monitoring usando o popular módulo amplificador de célula de carga HX711. Portanto, verifique se essa é sua exigência.
Máquina de pesagem Arduino em funcionamento
O principal componente deste projeto é uma célula de carga e um módulo amplificador de célula de carga HX711. Como você pode ver, um lado está marcado com dez quilos. Além disso, você pode notar algum tipo de cola protetora branca sobre a célula de carga e quatro cores diferentes de fios que estão saindo, irão desvendar o segredo por trás da cola protetora branca e a função desses fios de quatro cores mais adiante no artigo.
Uma célula de carga é um transdutor que transforma força ou pressão em saída elétrica. Tem dois lados, digamos o lado direito e o lado esquerdo, e é feito de blocos de alumínio. Como você pode ver no meio do material é diluído colocando um grande buraco. É por isso que esse é o ponto que sofre deformação quando uma carga é colocada no lado do suporte. Agora imagine que a célula do lado direito está montada na base e o lado esquerdo é onde a carga é colocada. Essa configuração deforma a célula de carga do extensômetro por causa do buraco gigante no meio.
Quando uma carga é colocada no lado da carga da célula de carga, a parte superior sofrerá tensão e a parte inferior sofrerá compressão. É por isso que a barra de alumínio se curva para baixo no lado esquerdo. Se medirmos essa deformação, podemos medir a força que foi aplicada ao bloco de alumínio e é exatamente o que faremos.
Agora, a questão permanece: o que está dentro da cola protetora branca? Dentro desta cola protetora, encontraremos um componente elástico muito fino que é chamado de medidor de tensão. Um medidor de tensão é um componente usado para medir a tensão. Se olharmos mais de perto este componente, podemos ver duas almofadas de conexão e, em seguida, temos um padrão de fio condutor com deflexões repetitivas. Este fio condutor tem uma resistência definida. Quando o dobramos, o valor da resistência muda? Então, um lado do extensômetro é montado e fixado em um lugar, se colocarmos um peso do outro lado da barra de alumínio, isso forçará o extensômetro a dobrar, o que causará uma mudança na resistência. Como isso realmente acontece? O padrão condutor do extensômetro é feito de cobre, este fio terá uma determinada área e comprimento, então essas duas unidades darão a resistência do fio. A resistência de um fio se opõe ao fluxo de corrente. Agora é óbvio que, se a área deste fio ficar menor,menos elétrons poderiam passar, o que significa uma corrente mais baixa. Agora, se aumentarmos a área, isso aumentará a resistência de um condutor. Se alguma força for aplicada a este fio, isso vai esticar a área e ficar menor ao mesmo tempo, a resistência aumenta. Mas essa variação de resistência é muito baixa. Se esticarmos o medidor de tensão, a resistência aumentará e se o comprimirmos, a resistência diminuirá. Para medir a força, precisamos medir a resistência. Medir a resistência diretamente nem sempre é prático, porque a variação é muito pequena. Portanto, em vez de medir a resistência, podemos medir as tensões facilmente. Portanto, neste caso, precisamos converter a saída do medidor de valores de resistência para valores de tensão.Se alguma força for aplicada a este fio, isso vai esticar a área e ficar menor ao mesmo tempo, a resistência aumenta. Mas essa variação de resistência é muito baixa. Se esticarmos o medidor de tensão, a resistência aumentará e se o comprimirmos, a resistência diminuirá. Para medir a força, precisamos medir a resistência. Medir a resistência diretamente nem sempre é prático, porque a variação é muito pequena. Portanto, em vez de medir a resistência, podemos medir as tensões facilmente. Portanto, neste caso, precisamos converter a saída do medidor de valores de resistência para valores de tensão.Se alguma força for aplicada a este fio, isso esticará a área e ficará menor ao mesmo tempo, a resistência aumenta. Mas essa variação de resistência é muito baixa. Se esticarmos o medidor de tensão, a resistência aumentará e se o comprimirmos, a resistência diminuirá. Para medir a força, precisamos medir a resistência. Medir a resistência diretamente nem sempre é prático, porque a variação é muito pequena. Portanto, em vez de medir a resistência, podemos medir as tensões facilmente. Portanto, neste caso, precisamos converter a saída do medidor de valores de resistência para valores de tensão.a resistência diminuirá. Para medir a força, precisamos medir a resistência. Medir a resistência diretamente nem sempre é prático, porque a variação é muito pequena. Portanto, em vez de medir a resistência, podemos medir as tensões facilmente. Portanto, neste caso, precisamos converter a saída do medidor de valores de resistência para valores de tensão.a resistência ficará menor. Para medir a força, precisamos medir a resistência. Medir a resistência diretamente nem sempre é prático, porque a variação é muito pequena. Portanto, em vez de medir a resistência, podemos medir as tensões facilmente. Portanto, neste caso, precisamos converter a saída do medidor de valores de resistência para valores de tensão.
Podemos fazer isso com a ajuda da ponte Wheatstone. Colocamos o medidor de tensão na ponte de Wheatstone se a ponte estiver balanceada, a tensão no ponto do meio deve ser zero (anteriormente, construímos um projeto onde descrevemos como uma ponte de Wheatstone funciona, você pode verificar isso se quiser saber mais sobre o assunto). Quando o medidor de tensão muda sua resistência, ele desequilibra a ponte e a tensão também muda. Então, é assim que a ponte de Wheatstone converte as variações de resistência em valores de tensão.
Mas essa variação de tensão ainda é muito pequena, então para aumentá-la, precisamos usar o módulo HX711. O HX711 é um ADC Diferencial de 24 bits, dessa forma, podemos medir mudanças de tensão muito pequenas. ele dará valores de 0 a 2 exponencial 24.
Componentes necessários para máquina de pesagem baseada em Arduino
Para tornar este projeto o mais simples possível, usamos componentes muito genéricos que você pode encontrar em qualquer loja local de hobby. A imagem abaixo dá uma ideia dos componentes. Além disso, temos a Lista de Materiais (BOM) listada abaixo.
- Célula de carga (estamos usando uma célula de carga de 10 kg)
- Módulo amplificador HX 711
- Arduino Nano
- I2C LCD 16X2 - Compatível com I2C
- 1k resistor -2 Nos
- LEDs -2Nos
- Buzzer
- PCB comum
- Bateria de 7,4 V (se você quiser portátil)
- Regulador de tensão LM7805
Máquina de pesagem baseada em Arduino - Diagrama de circuito
A célula de carga possui quatro fios que são vermelho, preto, verde e branco. Esta cor pode variar de acordo com os fabricantes, por isso é melhor consultar a ficha técnica. Conecte o vermelho ao E + da placa HX711, conecte o preto ao E-, conecte o branco ao A + e conecte o verde ao A-, Dout e o relógio da placa ao D4 e D5 respectivamente. Conecte uma extremidade dos botões de pressão a D3, D8, D9 e as outras extremidades ao solo. Temos LCD I2C, então conecte SDA a A4 e SCL a A5. Conecte o aterramento do LCD, HX711 e Arduino ao aterramento, conecte também os VCCs ao pino 5 do Arduino. Todos os módulos funcionam em 5V, então adicionamos um regulador de tensão LM7805. Se você não quiser que seja tão portátil, pode ligar o Arduino diretamente usando um cabo USB.
Fazendo o circuito em um perfboard pontilhado
Soldamos todos os componentes em um perfboard pontilhado comum. Usamos conectores fêmeas para soldar o Arduino e ADC com a placa de circuito, também usamos fios para conectar todos os botões e LEDs. Depois que todo o processo de soldagem for concluído, nos certificamos de que o 5V adequado está saindo do LM7805. Finalmente, colocamos um botão para ligar / desligar o circuito. Assim que terminamos, parecia a imagem abaixo.
Construindo um gabinete para máquina de pesagem baseada em Arduino
Como você pode ver, a célula de carga tem algumas roscas de parafuso, portanto, podemos montá-la em uma placa de base. Estaremos usando uma placa de PVC como base de nossa escala, para isso, primeiro cortamos 20 * 20 cm quadrados e quatro retângulos de 20 * 5 da placa de PVC. Em seguida, usando cola dura, colamos cada peça e fizemos um pequeno invólucro.
Lembre-se, não corrigimos um lado, porque precisamos colocar os botões, LEDs e o LCD nele. Em seguida, usamos uma placa de plástico para o topo da escala. Antes de tornar esta configuração permanente, precisamos nos certificar de que temos espaço suficiente do solo até a célula de carga, para que possa dobrar, então colocamos parafusos e porcas entre a célula de carga e a base, também adicionamos alguns espaçadores de plástico entre a célula de carga e a parte superior. usamos uma folha de plástico redonda como o melhor equilíbrio.
Em seguida, colocamos o LCD, LEDs e botões de pressão no painel frontal, e tudo conectado com um longo fio isolado. Após finalizarmos o processo de fiação, colamos o painel frontal na base principal com alguma inclinação, para que possamos ler os valores do LCD com muita facilidade. finalmente, colocamos a chave principal na lateral da balança e é isso. Foi assim que fizemos o corpo para a nossa balança.
Você pode projetar com suas ideias, mas lembre-se de colocar a célula de carga como na imagem.
Máquina de pesagem Arduino - Código
Como agora concluímos o processo de construção para nossa escala digital, podemos passar para a parte de programação. Para facilitar a programação, usaremos a biblioteca HX711, a biblioteca EEPROM e a biblioteca LiquidCrystal. Você pode baixar a biblioteca HX711 do repositório oficial do GitHub ou ir para ferramentas > incluir biblioteca > gerenciar biblioteca e, em seguida , pesquisar a biblioteca usando a palavra-chave HX711, depois de baixar a biblioteca, instale-a no Arduino ide.
Primeiro, precisamos calibrar a célula de carga e armazenar esse valor na EEPROM, para isso, vá em arquivo> exemplos> HX 711_ADC e selecione o código de calibração. Antes de enviar o código, coloque a balança em uma superfície plana estável. Em seguida, carregue o código para o Arduino e abra o monitor serial. Em seguida, altere a taxa de transmissão para 572600. Agora o monitor pede para tirar o peso, para isso precisamos pressionar t e entrar.
Agora, precisamos colocar o peso conhecido na balança, no meu caso, é 194g. Depois de colocar o peso conhecido, digite o peso no monitor serial e pressione Enter.
Agora, o monitor serial pergunta se você deseja salvar o valor na EEPROM ou não, então digite Y para escolher sim. Agora podemos ver o peso no monitor serial.
O código principal deste projeto, que desenvolvemos a partir do esboço de exemplo da biblioteca HX711. Você pode baixar o código deste projeto abaixo.
Na seção de codificação, primeiro, adicionamos todas as três bibliotecas. A biblioteca HX711 serve para obter os valores da célula de carga. EEPROM é a biblioteca embutida do Arduino ide, que é usada para armazenar valores em EEPROM e a biblioteca LiquidCrystal é para o Módulo LCD l2C.
#incluir
Em seguida, números inteiros definidos para diferentes pinos e valores atribuídos. A função loadcell HX711_ADC é para configurar o pino Dout e clock.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; long t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
Na seção de configuração, primeiro, iniciamos o monitor serial, apenas para depuração. Em seguida, definimos os modos de pino, todos os botões são definidos como entrada. Com a ajuda da função PULL UP do Arduino, configuramos os pinos para um nível lógico alto normalmente. Portanto, não queremos usar resistores externos para isso.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
As linhas de código a seguir são para configurar o LCD I2C. Primeiro, exibimos o texto de boas-vindas usando a função LCD.print () , depois de dois segundos, limpamos a tela usando lcd.clear () . Ou seja, no início o display mostrará ARDUINO BALANCE como texto de boas-vindas, e após dois segundos apagará e mostrará os pesos de medição.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("vamos medir"); atraso (2000); lcd.clear ();
Em seguida, começamos a ler os valores do loadcell usando a função loadCell.begin () , depois disso, lemos a EEPROM para os valores calibrados, fazemos isso usando a função EEPROM.get () . Ou seja, já armazenamos o valor usando o esboço de calibração no endereço da EEPROM, apenas retomamos esse valor.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibraçãoValue);
Na seção de loop, primeiro, verificamos se algum dado da célula de carga está disponível usando LoadCell.update (), se disponível, lemos e armazenamos esses dados, para isso, estamos usando LoadCell.getData () . Em seguida, precisamos exibir o valor armazenado no LCD. Para fazer isso, usamos a função LCD.print () . além disso, imprimimos o peso definido. O peso definido é definido com a ajuda do contador do botão. Isso foi explicado na última seção.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("definir wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print ("GM"); lcd.setCursor (0, 1); lcd.print ("peso:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
Em seguida, definimos o valor da tara, para isso, primeiro, lemos o estado do botão de tara usando a função digitalRead () , se o estado for baixo, tara esse peso para zero. A função de tara desta escala de peso é trazer as leituras a zero. Por exemplo, se tivermos uma tigela na qual as coisas são carregadas, o peso líquido será o peso da tigela + o peso das coisas. Se pressionarmos o botão de tara com a tigela na célula de carga antes de carregar as coisas, o peso da cesta será anulado e podemos medir o peso das coisas sozinhos.
if (digitalRead (tpin) == LOW) { LoadCell.tareNoDelay ();
Agora, precisamos definir as condições para diferentes indicações, como definir o atraso da campainha e o status do led. Fizemos isso usando condições if , temos um total de três condições. Primeiro, calculamos a diferença entre o peso definido e o peso de medição e, em seguida, armazenamos esse valor na variável k.
float k = buttonPushCounter-i;
1. Se a diferença entre o peso definido e o peso medido for maior ou igual a 50gms, a campainha emite um bipe com um atraso de 200 milissegundos (lentamente).
if (k> = 50) { digitalWrite (6, HIGH); atraso (200); digitalWrite (6, LOW); atraso (200); }
2. Se a diferença entre o peso definido e o peso de medição for inferior a 50 e superior a 1 grama, a campainha emitirá um bipe com um atraso de 50 milissegundos (mais rápido).
if (k <50 && k> 1) { digitalWrite (6, HIGH); atraso (50); digitalWrite (6, LOW); atraso (50); }
3. Quando o peso de medição for igual ou maior que o valor definido, isso acenderá o led verde e desligará a campainha e o led vermelho.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, ALTO); }
Temos mais duas funções void () para definir o peso definido (para contar o pressionamento do botão).
A função aumenta o valor definido em 10gms para cada pressão. Isso é feito usando a função digitalRead do Arduino se o pino estiver baixo, o que significa que o botão está pressionado e que aumentará o valor em 10gms.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPressione = true; buttonPushCounter = buttonPushCounter + 10; }
Similarmente, a verificação é para diminuir o valor definido em 10gms para cada pressão.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPressione = true; buttonPushCounter = buttonPushCounter - 10; }
Isso marca o fim da parte de programação.
Esta balança eletrônica baseada em Arduino é perfeita para medir pesos de até 10kg (podemos aumentar esse limite usando uma célula de carga nominal mais alta). Isso é 99% preciso em relação às medições originais.
Se você tiver alguma dúvida sobre este circuito da máquina balanceadora de peso com LCD baseado em Arduino, poste na seção de comentários, obrigado!