LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: vdr em 24 de Agosto de 2011, 13:27

Título: [Tutorial] Arduino + Balança
Enviado por: vdr em 24 de Agosto de 2011, 13:27
No meu projecto Automatic Cat Feeder (http://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.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F6446227%2Fmypage%2F%25231%2520straing_gauge%2Fbalance1.png&hash=d2eed07a54c23696758f99793dc843852929900d)

Estas balanças funcionam baseadas no principio strain gauge. Encontrei uma aula online (http://www.ustudy.in/node/3775) 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.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F6446227%2Fmypage%2F%25231%2520straing_gauge%2Fwires.png&hash=f75145c98ad6bab8e8be561eb4729d63f1284e40)

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.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fdl.dropbox.com%2Fu%2F6446227%2Fmypage%2F%25231%2520straing_gauge%2Famplifyer_circuit.PNG&hash=eb0b4f03044c9de7bd2d8fbef613d33980db5ac6)

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); 
}
Título: Re: [Tutorial] Arduino + Balança
Enviado por: rspaes 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.
Título: Re: [Tutorial] Arduino + Balança
Enviado por: vdr 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.
Título: Re: [Tutorial] Arduino + Balança
Enviado por: kast 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.
Título: Re: [Tutorial] Arduino + Balança
Enviado por: vdr em 23 de Agosto de 2012, 13:21
Está aqui um esquema que na altura, espero que ajude.

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