segunda-feira, 18 de julho de 2016

HX711 - Usando dois módulos HX711. Testes iniciais com captura sequencial!

Teste para captura com dois ou mais módulos HX711.


Primeiro código teste para captura com dois ou mais módulos HX711. Foram utilizados no teste dois módulos modificados para se ter um maior Sample Rate!

Este primeiro código trabalha selecionando qual a célula de carga que se deseja o ler valor. No próximo código vou tentar fazer de forma paralela a captura dos valores:

unsigned long tempo = 0;
float saida = 0;
int DOUT[2] = A5,A3;  // Pinos DT placa HX711
int hxSCK[2] = A4,A2;   // Pino SCK placa HX711
unsigned long TARA[2] = 0,0;
 // ALTERAR PARA SUAs CELULAs DE CARGA!!!!!
float kconst[2] = 21097.164, 21097.164; // Fator para Kilograma pequenos pesos

//Cria variaveis para duas
unsigned long CAPTURAcell[2] = 0,0;
unsigned long MEDIAcell[2] = 0,0;


void setup() 
  Serial.begin(9600);
  pinMode(hxSCK[0], OUTPUT);
  pinMode(hxSCK[1], OUTPUT);
  pinMode(DOUT[0], INPUT);
  pinMode(DOUT[1], INPUT);
  Serial.println("Aguarde estou zerando!");
  TARA[0] = setTARA(0);
  TARA[1] = setTARA(1);
  Serial.println("Estou pronto!");


void loop() 
     tempo = millis();
     saida = Peso(0);
     tempo = millis()-tempo;    
     Serial.print("Celula 1= ");
     Serial.print(saida);
     Serial.print(" Kg");
     Serial.print(",   Tempo= ");
     Serial.print(tempo);
     Serial.print(" ms");
     Serial.print(",   SPS= ");
     Serial.print(float(125000/tempo)); // 125 Amostras  
     Serial.println(" Amostras por segundo");

     tempo = millis();
     saida = Peso(1);
     tempo = millis()-tempo;    
     Serial.print("Celula 2= ");
     Serial.print(saida);
     Serial.print(" Kg");
     Serial.print(",   Tempo= ");
     Serial.print(tempo);
     Serial.print(" ms");
     Serial.print(",   SPS= ");
     Serial.print(float(125000/tempo)); // 125 Amostras  
     Serial.println(" Amostras por segundo");
     
     
    // delay (10); //Aguarda 10ms




unsigned long CAPTURA(int cell)
  CAPTURAcell[cell] = 0;
  MEDIAcell[cell] = 0;  
  for (int j=0; j<5; j++)             // loop 5 para media
  CAPTURAcell[cell] = 0;
  digitalWrite(hxSCK[cell], LOW); 
  while (digitalRead(DOUT[cell])==1) ; //Bloqueio!!! Aguarda o coneversor estar pronto para nova aquisição
  for (int i=0; i<24; i++)             // loop 24 pulsos
        digitalWrite(hxSCK[cell], HIGH); 
        CAPTURAcell[cell] = CAPTURAcell[cell]<<1;
        digitalWrite(hxSCK[cell], LOW);
        if(digitalRead(DOUT[cell]) == 1) CAPTURAcell[cell]++;
         
   // pulso extra 25 pulsos proxima leitura canal A ganho 128     
   digitalWrite(hxSCK[cell], HIGH); 
   delayMicroseconds(10); 
   digitalWrite(hxSCK[cell], LOW);
   //-------------------------------------------------------
  CAPTURAcell[cell] ^= 0x00800000; 
  MEDIAcell[cell] += CAPTURAcell[cell];
  
   CAPTURAcell[cell] = MEDIAcell[cell]/5;
 return CAPTURAcell[cell];




unsigned long setTARA(int cell)
  // reseta o conversor HX711
  digitalWrite(hxSCK[cell], 1);  
  delay (200);
  digitalWrite(hxSCK[cell], LOW); 
  delay (1);
  // -------------------------
 return Media(70,cell);
    

float Peso(int cell)

    long peso = (Media(25,cell) - TARA[cell]);
    return (float) peso / kconst[cell];


long Media(byte vezes, int cell)

    long soma = 0;
    for (byte i = 0; i < vezes; i++)
    
        soma += CAPTURA(cell);
    

    return soma / vezes;


Resultado observado pela serial !




Resultado do teste inicial usando dois módulos HX711 modificados!


HX711 - Usando dois módulos HX711. Testes iniciais com captura sequencial!

Nenhum comentário:

Postar um comentário