collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: [Tutorial] Arduino + Balança  (Lida 13851 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
[Tutorial] Arduino + Balança
« em: 24 de Agosto de 2011, 13:27 »
No meu projecto Automatic Cat Feeder, precisei de criar uma interface entre uma balança digital e o arduino para controlar a quantidade de comida que era despejada na tigela do gato.

Como precisava de medir massas entre as 40 a 150 gramas utilizei uma balança de joalharia que se vende no ebay a um preço bastante aceitável. Eu decidi utilizar uma balança que mede entre [ 0g ; 500g ], mas existem outras  [ 0g ; 1000g ], [ 0g ; 100g ], ou mesmo para pesos maiores.



Estas balanças funcionam baseadas no principio strain gauge. Encontrei uma aula online do prof. Alok Barua, em que explica com bastante detalhe o seu funcionamento.

Depois de desmontar a balança, identifiquei que a minha balança tem um strain gauge de 4 fios, dois são de alimentação os outros dois são os de saída.



Normalmente a configuração é a seguinte :

    * Red (+) Vs +
    * Black (-) Vs -
    * Green (+) Sensing
    * White (-) Sensing


Antes de aplicar uma tensão ao terminais da balança, medi que tensão era aplicada no circuito original. Essa tensão era de 2,5 [V], então medi a resistência entre os terminais Vs+ e Vs-, como essa resistência era de 1 k[Ohm] utilizei uma resistência do mesmo valor num divisor de tensão para obter 2,5 [V]  tal como no circuito inicial.

Quando aplicamos os 2,5 [V] aos terminais de alimentação e colocamos um peso em cima da balança, podemos observar que a tensão nos terminais de saída é muito reduzida e nem sequer se altera, no meu caso o multimetro marcava 0.7 m[V]
Como sabem o arduino tem uma resolução de ~5m[V] por step (5 [V] / 1024 steps), por isso nunca conseguiremos medir as variações a não ser que amplifiquemos a tensão diferencial entre os terminais de saida.
 
Para amplificar o sinal utilizei o IC INA126P (podem pedir samples à texas!). Aqui fica o esquema que utilizei.



O ganho deste amplificador é dado pela seguinte expressão:

G = 5 + ( 80000 / RG ) = 9761.1

Agora finalmente poderemos começar ler alguma coisa no arduino!

Como uma load cell é linear, a tensão de saída do amplificador é proporcional ao peso colocados na balança. Um método simples de calibrar a balança é o seguinte:
 
- Sempre que faço uma medição, retorno a média de 40 leituras separadas por 50 milissegundos entre leituras.
- Primeiro temos de registar a posição zero, isto é a tensão sem qualquer carga.
- Colocar um peso conhecido me cima da balança e medir a tensão de saida.
- Agora calculamos os steps/grama através de uma regra de 3 simples :
    No meu caso apliquei uma massa de 150g e registei a diferença entre a posição zero e a tensão com a massa
      steps = ( (output_voltage_for150g) - (zero position voltage) ) = 64,5
     
    Se 150g é equivalente a  64,5 steps, então 1g é 64.5/150 = 0.43 steps. Este valor é a constante de proporcionalidade kp = 0.43, Agora sabemos que uma grama é equivalente a 0.43 steps.
   
    Para converter de steps para gramas:
       grams =  [ (output_steps_forYourWeight) - (zero position steps) ] / kp

Existe outro método possível, consiste em utilizar dois pesos conhecidos, medir os steps de cada um deles e utilizar a função map() do arduino. Atenção que a função map() que referi utiliza número inteiros, mas para obter um valor mais próximo o possível devem utilizar floats.

Código: [Seleccione]
/**************************************************
***************************************************
***** ARDUINO LOAD CELL INTERFACE *****************
***** by Vitor Rosa *******************************
***** [url]https://sites.google.com/site/vitorrosamd/[/url] **
***** http://http://lusorobotica.com/ *************
***************************************************
***************************************************/

//balance pin
const int balancePin=1;

//zero point holds the output voltage without weight
float zero_point=0;

//proportional constant
float kp=0.42;

//number of readings
int average=40;

//delay
int time=50;

float peso=0;

void setup() {
 
 Serial.begin(9600);

 float  zero[3] = { 0 } ;
 
  for( int i = 0 ; i < 3 ; i++) {
    zero[i] = read_weigh();
    Serial.print("Zero (STEPS) = "); Serial.println(zero[i]);
    delay(300);
  }
 
  zero_point = ( zero[0] + zero[1] + zero[2] ) / 3 ;

 
 }

float voltage_to_weigh(int voltage) {
  return (voltage-zero_point)/kp;
}

float read_weigh() {

  float read_v = 0;
 
  for (int i=0; i<=average ; i++) {
    read_v = read_v + analogRead( balancePin );
    delay(time);
  }
  return read_v/average;
}


void loop() {
 
  delay(500);
 
  Serial.println("---------------");
 
  float steps = read_weigh();
  Serial.print("Zero point (STEPS) = "); Serial.println(zero_point);
  Serial.print("Peso (STEPS) = "); Serial.println(steps);
 
  peso = voltage_to_weigh(steps);
  Serial.print("Peso (g) = ");
  Serial.println(peso); 
}
« Última modificação: 12 de Julho de 2012, 00:12 por vdr »

Offline rspaes

  • Mini Robot
  • *
  • Mensagens: 1
Re: [Tutorial] Arduino + Balança
« Responder #1 em: 22 de Agosto de 2012, 21:30 »
Ola vdr, teria como postar novamente as fotos do esquema do INA126, não estou conseguindo visualizar.

Obrigado desde já :D

Abrass.

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
Re: [Tutorial] Arduino + Balança
« Responder #2 em: 23 de Agosto de 2012, 11:02 »
Já não encontro as imagens nem sei o que lhe aconteceu :S
Vou tentar arranjar um solução, pois já nem tenho para aqui esse material.

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: [Tutorial] Arduino + Balança
« Responder #3 em: 23 de Agosto de 2012, 13:02 »
Posta isso sff que também me dava muito jeito.

Estou a fazer algo muito parecido e precisava de alguma informação sobre o INA126.
Os electrões são nossos amigos !!! :D

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
Re: [Tutorial] Arduino + Balança
« Responder #4 em: 23 de Agosto de 2012, 13:21 »
Está aqui um esquema que na altura, espero que ajude.

http://postimage.org/image/5f2dz8kk3/