Tensometr i arduino

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
andrzej
Młodszy majsterkowicz
Posty: 22
Rejestracja: 3 lut 2016, 22:16

Re: Tensometr i arduino

Post autor: andrzej » 20 lut 2016, 23:44

proszę o pomoc w napisaniu kodu

chodzi o to by wybierając np. 400g na klawiaturze program zmieniał by wartość przy której ważenie kończyło by się .

/*
* lcd
* VCC - > 5 V
* GND - GND
* SCL -> A5
* SDA -> A4
*/
/*
*wzmacniacz
*VCC - 3,3V
*GND - GND
*SCK - A0
*DT - A1
*/

#include <hx711.h>
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //adres i zdefiniowane piny lcd
Hx711 scale(A1, A0); //zdefiniowane piny tensometru
const byte ROWS = 4; //cztery wiersze
const byte COLS = 3; //trzy kolumny
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {13,12,11,10}; //piny wierszy
byte colPins[COLS] = {9,8,7}; //piny kolumn

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//pin 2 = stop ważenie
//pin 3 = stop zgrubne start precyzja
int stop_waga = 2; //deklaracja pinu
int precyzyjne = 3; //deklaracja pinu

boolean ust;
int wartosc;
char key;
byte w1, w2, w3, w4;

void setup() { //co będzie użyte w programie

lcd.begin(16, 2);

pinMode(stop_waga ,OUTPUT);
pinMode(precyzyjne ,OUTPUT);

lcd.backlight(); // zalaczenie podwietlenia
lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)

lcd.print(" DOZOWNIK");

lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
lcd.print(" MAX 5 KG");
delay(5000);

}
void loop() { //główny program

key = keypad.getKey();
if (key == '0') // tarowanie
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" TAROWANIE ");
double odczyt = scale.averageValue(5);
scale.setOffset(odczyt);
lcd.setCursor(0,1);
lcd.print(" ");
delay(1000);
}

if(scale.getGram() >= 500){ //zadana waga w gramach
digitalWrite(stop_waga ,HIGH); //jak uzyskasz zadaną wysteruj 2
}
else{
digitalWrite(stop_waga ,LOW); //jak nie ma zadanej wygaś 2
}

if(scale.getGram() <= 400){
digitalWrite(precyzyjne ,HIGH);
}
else{
digitalWrite (precyzyjne ,LOW);
}
lcd.clear();
lcd.setCursor(0, 0); //ustawienie kursora

lcd.print(" AKTUALNA ");

lcd.setCursor(6, 1);
lcd.print(scale.getGram(),0); //ile miejsc po przecinku skala wagi
lcd.println(" G ");
delay(400);

if (key == '#')
{
ust = 1;
lcd.clear();
w1 = 10; w2 = 10; w3 = 10; w4 = 10;
while(ust == 1)
{
key = keypad.getKey();
if(key == '#') ust = 0;
lcd.setCursor(0, 0);
lcd.print("Wazenie do: ");
lcd.print(wartosc);

lcd.setCursor(0, 1);
lcd.print("Ustawianie: ");
if(key != NO_KEY && key != '#' && key != '*')
{
if(w1 > 9)
{
w1 = key - 48;
lcd.print(w1);
}
else if(w2 > 9)
{
w2 = key - 48;
lcd.print(w2);
}
else if(w3 > 9)
{
w3 = key - 48;
lcd.print(w3);
}
else if(w4 > 9)
{
w4 = key - 48;
lcd.print(w4);
}
}
}
if(w1 < 10) wartosc = 0;

if(w4 < 10) wartosc = w4 + w3*10 + w2*100 + w1*1000;
else if(w3 < 10) wartosc = w3 + w2*10 + w1*100;
else if(w2 < 10) wartosc = w2 + w1*10;
else if(w1 < 10) wartosc = w1;
}

}
podziękowania dla stivena
jego rady były bardzo cenne i pchnęły projekt do przodu
szkoda że odpuścił

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Tensometr i arduino

Post autor: stiven » 21 lut 2016, 09:22

Wrzucaj kod w znaczniki, żeby to jakoś wyglądało, źle się czyta taki kod bez wcięć.

Kod: Zaznacz cały

[code]
  kod
[/code]
a najlepiej w

Kod: Zaznacz cały

[spoiler][code]
  kod
[/spoiler]
[/code]

Kompiluje się już? Działa to ustawianie wartości? Jeśli waga będzie większa niż ta wartość, to waga ma być nie wyświetlana na wyświetlaczu tylko jakiś komunikat? To wystarczy ifa napisać porównującego wagę i tą wartość.
andrzej
Młodszy majsterkowicz
Posty: 22
Rejestracja: 3 lut 2016, 22:16

Re: Tensometr i arduino

Post autor: andrzej » 21 lut 2016, 11:52

siema
dzięki że się odezwałeś
kod się kompiluje
wygląda to tak :
po załączeniu wyświetla mi się aktualna waga jak wcisnę # wchodzę w ustawienia .
jak w ustawieniach wprowadzam załóżmy liczbę 100 to to nie pojawia się 100 tylko wskakuje 1 znika 1 i wskakuje 0 znika 0 i wskakuje 0
obok tekstu ważenie do pojawia się liczba 100 w całości no i # wychodzę z ustawień.
sęk w tym że przestawienie ustawienia nie zmienia mi wartości do której waga ma ważyć.

chciałbym żeby wyglądało tak:
-Po włączeniu w pierwszej linii wyświetla aktualną wagę a w drugiej wartość do której waga ma ważyć .
-Chciałbym żeby wartość w drugiej linii po naciśnięciu np.# można było zmienić i żeby waga zaczęła stosować się do zmiany i po osiągnięciu nowej zadanej uruchomiła komendę (stop_waga ,HIGH)
-Po wciśnięciu * chciałbym żeby wyświetliło tekst "doważanie" i zmienną po której zmianie waga zmieniła by moment zadziałanie tej komendy (precyzyjne ,HIGH)

Kod: Zaznacz cały

/*
* lcd
* VCC - > 5 V
* GND - GND
* SCL -> A5
* SDA -> A4
*/
/*
*wzmacniacz
*VCC - 3,3V
*GND - GND
*SCK - A0
*DT - A1
*/

#include <hx711.h>
#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //adres i zdefiniowane piny lcd
Hx711 scale(A1, A0); //zdefiniowane piny tensometru
const byte ROWS = 4; //cztery wiersze
const byte COLS = 3; //trzy kolumny
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {13,12,11,10}; //piny wierszy
byte colPins[COLS] = {9,8,7}; //piny kolumn

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//pin 2 = stop ważenie
//pin 3 = stop zgrubne start precyzja
int stop_waga = 2; //deklaracja pinu 
int precyzyjne = 3; //deklaracja pinu

boolean ust;
int wartosc;
char key;
byte w1, w2, w3, w4;

void setup() { //co będzie użyte w programie

lcd.begin(16, 2);

pinMode(stop_waga ,OUTPUT); 
pinMode(precyzyjne ,OUTPUT);

lcd.backlight(); // zalaczenie podwietlenia 
lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)

lcd.print("    DOZOWNIK");

lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
lcd.print("    MAX 5 KG");
delay(5000);

}
void loop() { //główny program

  key = keypad.getKey();
  if (key == '0') // tarowanie 
  { 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   TAROWANIE ");
    double odczyt = scale.averageValue(5);
    scale.setOffset(odczyt);
    lcd.setCursor(0,1);
    lcd.print(" ");
    delay(1000);
  }
  
  if(scale.getGram() >= 500){ //zadana waga w gramach
    digitalWrite(stop_waga ,HIGH); //jak uzyskasz zadaną wysteruj 2
  }
  else{
    digitalWrite(stop_waga ,LOW); //jak nie ma zadanej wygaś 2
  }
  
  if(scale.getGram() <= 400){
    digitalWrite(precyzyjne ,HIGH);
  }
  else{
    digitalWrite (precyzyjne ,LOW);
  }
  lcd.clear();
  lcd.setCursor(0, 0); //ustawienie kursora
 
  lcd.print("    AKTUALNA     ");
  
   lcd.setCursor(6, 1);
 lcd.print(scale.getGram(),0); //ile miejsc po przecinku skala wagi
  lcd.println(" G       "); 
   delay(400);

if (key == '#')
  {
    ust = 1;
   lcd.clear();
   w1 = 10; w2 = 10; w3 = 10; w4 = 10;
    while(ust == 1)
   {
     key = keypad.getKey();
     if(key == '#') ust = 0;
     lcd.setCursor(0, 0);
     lcd.print("Wazenie do: ");
     lcd.print(wartosc);
     
     lcd.setCursor(0, 1);
     lcd.print("Ustawianie: ");
     if(key != NO_KEY && key != '#' && key != '*')
   {
       if(w1 > 9)
      {
        w1 = key - 48;
        lcd.print(w1);
      }
      else if(w2 > 9) 
      {
        w2 = key - 48;
        lcd.print(w2);
      }
      else if(w3 > 9)
      {
        w3 = key - 48;
        lcd.print(w3);
      }
      else if(w4 > 9) 
      {
        w4 = key - 48;
        lcd.print(w4);
      }
   }
   }
    if(w1 < 10) wartosc = 0;
  
    if(w4 < 10) wartosc = w4 + w3*10 + w2*100 + w1*1000;
    else if(w3 < 10) wartosc = w3 + w2*10 + w1*100;
    else if(w2 < 10) wartosc = w2 + w1*10;
    else if(w1 < 10) wartosc = w1;
  }

  }
andrzej
Młodszy majsterkowicz
Posty: 22
Rejestracja: 3 lut 2016, 22:16

Re: Tensometr i arduino

Post autor: andrzej » 21 lut 2016, 15:38

witam
chciałbym podziękować za pomoc przy projekcie zwłaszcza użytkownikowi stiven bez niego projekt by leżał ":)
udało się uzyskać zamierzony efekt oto kompletny kod:

Kod: Zaznacz cały

/*
* lcd
* VCC - > 5 V
* GND - GND
* SCL -> A5
* SDA -> A4
*/
/*
*wzmacniacz
*VCC - 3,3V
*GND - GND
*SCK - A0
*DT - A1
*/

#include <hx711.h>
#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //adres i zdefiniowane piny lcd
Hx711 scale(A1, A0); //zdefiniowane piny tensometru
const byte ROWS = 4; //cztery wiersze
const byte COLS = 3; //trzy kolumny
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {13,12,11,10}; //piny wierszy
byte colPins[COLS] = {9,8,7}; //piny kolumn

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//pin 2 = stop ważenie
//pin 3 = stop zgrubne start precyzja
int stop_waga = 2; //deklaracja pinu 
int precyzyjne = 3; //deklaracja pinu

boolean ust;
int wartosc;
char key;
byte w1, w2, w3, w4;
int wartosc_2;
void setup() { //co będzie użyte w programie

lcd.begin(16, 2);
lcd.clear();
lcd.backlight(); // zalaczenie podwietlenia 

lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)

lcd.print("    DOZOWNIK");

lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
lcd.print("    MAX 5 KG");
delay(3000);
pinMode(stop_waga ,OUTPUT); 
pinMode(precyzyjne ,OUTPUT);
}
void loop() { //główny program

  key = keypad.getKey();
  if (key == '0') // tarowanie 
  { 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("   TAROWANIE ");
    double odczyt = scale.averageValue(5);
    scale.setOffset(odczyt);
    lcd.setCursor(0,1);
    lcd.print(" ");
    delay(1000);
  }
  
  if(scale.getGram() >= wartosc){ //zadana waga w gramach
    digitalWrite(stop_waga ,HIGH); //jak uzyskasz zadaną wysteruj 2
  }
  else{
    digitalWrite(stop_waga ,LOW); //jak nie ma zadanej wygaś 2
  }
  
  if(scale.getGram() <= wartosc_2){
    digitalWrite(precyzyjne ,HIGH);
  }
  else{
    digitalWrite (precyzyjne ,LOW);
  }
  lcd.setCursor(0, 0); //ustawienie kursora
 lcd.print("AKTUALNA  ");
  lcd.print(scale.getGram(),0); //ile miejsc po przecinku skala wagi
  lcd.println(" G       "); 
  lcd.setCursor(0, 1);
   lcd.print("ZADANA    ");
   lcd.print(wartosc);
   lcd.print(" G ");
    delay(400);

if (key == '#')                                   //zmiana wagi końcowej
  {
    ust = 1;
   lcd.clear();
   w1 = 10; w2 = 10; w3 = 10; w4 = 10;
    while(ust == 1)
   {
     key = keypad.getKey();
     if(key == '#') ust = 0;
     lcd.setCursor(0, 0);
     lcd.print("ZADANA : ");
     lcd.print(wartosc);
     lcd.print(" G");
     
lcd.setCursor(0, 1);
lcd.print("USTAW  : ");
    
     if(key != NO_KEY && key != '#' && key != '*')
   {
       if(w1 > 9)
      {
        w1 = key - 48;
        lcd.print(w1);  
      }
      else if(w2 > 9) 
      {
        w2 = key - 48;
        lcd.setCursor(10, 1);
        lcd.print(w2);
      }
      else if(w3 > 9)
      {
        w3 = key - 48;
        lcd.setCursor(11, 1);
        lcd.print(w3);
      }
      else if(w4 > 9) 
      {
        w4 = key - 48;
        lcd.setCursor(12, 1);
        lcd.print(w4);
        lcd.print(" G  "); 
      }
   }
   }
    if(w1 < 10) wartosc = 0;
  
    if(w4 < 10) wartosc = w4 + w3*10 + w2*100 + w1*1000;
    else if(w3 < 10) wartosc = w3 + w2*10 + w1*100;
    else if(w2 < 10) wartosc = w2 + w1*10;
    else if(w1 < 10) wartosc = w1;
  }
if (key == '*')                             //zmiana przełączenia dozowania precyzyjnego
  {
    ust = 1;
   lcd.clear();
   w1 = 10; w2 = 10; w3 = 10; w4 = 10;
    while(ust == 1)
   {
     key = keypad.getKey();
     if(key == '*') ust = 0;
     lcd.setCursor(0, 0);
     lcd.print("PRECYZYJNE ");
     lcd.print(wartosc_2);
     lcd.print("G");
     
     lcd.setCursor(0, 1);
     lcd.print("USTAW :  ");
     if(key != NO_KEY && key != '*' && key != '#') 
   {
       if(w1 > 9)
      {
        w1 = key - 48;
        lcd.print(w1);
      }
      else if(w2 > 9) 
      {
        w2 = key - 48;
        lcd.setCursor(10, 1);
        lcd.print(w2);
      }
      else if(w3 > 9)
      {
        w3 = key - 48;
        lcd.setCursor(11, 1);
        lcd.print(w3);
      }
      else if(w4 > 9) 
      {
        w4 = key - 48;
        lcd.setCursor(12, 1);
        lcd.print(w4);
        lcd.print(" G  "); 
      }
   }
   }
    if(w1 < 10) wartosc_2 = 0;
  
    if(w4 < 10) wartosc_2 = w4 + w3*10 + w2*100 + w1*1000;
    else if(w3 < 10) wartosc_2 = w3 + w2*10 + w1*100;
    else if(w2 < 10) wartosc_2 = w2 + w1*10;
    else if(w1 < 10) wartosc_2 = w1;
  }
  }
temat uważam za zamknięty jeszcze raz dzięki Panowie
a tutaj efekt końcowy ":)
(https://youtu.be/GZJVU616d1Y)
czuynick
Młodszy majsterkowicz
Posty: 1
Rejestracja: 21 lut 2019, 14:04

Re: Tensometr i arduino

Post autor: czuynick » 21 lut 2019, 20:11

Cos podobnego chce wykorzystać u siebie w pracy.

Nigdzie nie widze na ilu jest to oparte tensometrach.

Chce u siebie wykorzystac 3-4 tensometry na jedna wage, czy istnieje mozliwosc takiego polaczenia? do tego chcialbym podlaczyc maly silnik ze slimakiem aby dozowal okreslona ilosc towaru.
ODPOWIEDZ

Strony partnerskie: