Skocz do zawartości

Wagoworkownica do ziemniaków


Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Na zwalnianie dołożyć drugi przekaźnik zwierajacy jakiś rezystor i ustawić tam 50% prędkości na falownik. Przez wejście 0-10V np. Jak ktoś ręcznie sypał ziemniaki do worków... wie co to znaczy;)

Link to post
Share on other sites

Jeżeli weźmiesz 2 rezystory. Pierwszy rezystor do +10V falownika a drugi jego koniec do wejścia napięcia sterującego w falowniku. Potem bierzesz rezystor nr 2 i łączysz jego jeden koniec z wejściem napięcia sterującego w falowniku, a drugi koniec z przekaźnikiem. Potem wolny koniec styku przekaźnika do masy falownika.

 

Czyli na zwartym tworzy się dzielnik napięcia i podaje napięcie zgodne z stosunkiem rezystorków na wejście napięcia sterującego. Jeżeli przekaźnik jest rozwarty to na wejściu sterującym będzie 10V gdyż nie będzie podawana masa na dolny rezystor.

2020-11-16.png

Edytowano przez Ogyb
  • Lubię! 1
Link to post
Share on other sites

@Ogyb Przetestowałem już wage przy przebieraniu dwóch skrzyń, wszystko działa jak należy. To zwalnianie raczej nic nie da poniważ, odważa dobrze jedynie dosypuje czasem zbyt dużo ziemnaików (poprostu są 4 na taśmie i zlecą 4, a potrzeba jednego). Lepszym rozwiązaniem była by druga wąska taśma z boku, tak aby dosypywało pod koniec po jednym ziemniaku, jednak nie mam już tego jak przerobić raczej, a taki efekt jaki jest mi wystarczy.

Link to post
Share on other sites

Bardzo dobry przykład jak ułatwić ciężką pracę fizyczną wykorzystując technologię. Super pomysł jako pierwszy krok.

  • W tej sytuacji nasuwa się pytanie - jakie jest finalne idealne rozwiązanie ? (IFR - Ideal Final Result), które jest integralnym elementem procesu TRIZ (skrót z rosyjskiego : техника решения инновационных задач) w/g Altszullera.

W/g mnie to jest maszyna pakująca Ishida (Japonia) - składająca się z 16 indywidualnych sekcji ważących ziemniaki umieszczonych na okręgu. W trakcie pakowania realizowana jest funkcja optymalizacji, polegająca na realizacji otwarcia 4-6 sekcji jednocześnie sterowanego przez przez komputer, tak aby uzyskać wagę jednostkowego opakowania zbliżoną do zadanej. Widziałem takie maszyny 20lat temu, pracujące z wydajnością 1 worek na  3-5 sekund.  Zadana waga była 2.2 funty UK (1 kg), a dokładność wynosiła 50g. Maszyna pracowała w zakresie do 20kg opakowania jednostkowego. Identyczne maszyny służą do pakowania produktów sypkich przemysłu spożywczego (np. czipsów).    

Szczegóły można obejrzeć: https://youtu.be/m6wOonjT9KE?t=103

  • Lubię! 1
Link to post
Share on other sites

Tak wygląda mój kod. oczywiście skopiowany z innej wagi ale jako jeden z nielicznych działa

 

/*
   -------------------------------------------------------------------------------------
   HX711_ADC
   Arduino library for HX711 24-Bit Analog-to-Digital Converter for Weight Scales
   Olav Kallhovd sept2017
   -------------------------------------------------------------------------------------
*/

/*
   This example file shows how to calibrate the load cell and optionally store the calibration
   value in EEPROM, and also how to change the value manually.
   The result value can then later be included in your project sketch or fetched from EEPROM.

   To implement calibration in your project sketch the simplified procedure is as follow:
       LoadCell.tare();
       //place known mass
       LoadCell.refreshDataSet();
       float newCalibrationValue = LoadCell.getNewCalibration(known_mass);
*/

#include <HX711_ADC.h>
#include <EEPROM.h>

//pins:
const int HX711_dout = 4; //mcu > HX711 dout pin
const int HX711_sck = 5; //mcu > HX711 sck pin
int ledPin = 2;
float odczytWagi = Serial.read(); // Twój odczyt masy z wagi (wyrażony w gramach!!!!!!!)
float minMasaPojemnika = 325; // 1g
float minMasaDoZamkniecia = 1325; // 100g

//HX711 constructor:
HX711_ADC LoadCell(HX711_dout, HX711_sck);

const int calVal_eepromAdress = 0;
unsigned long t = 0;

void setup() {
  Serial.begin(57600); delay(1000);
  Serial.println();
  Serial.println("Starting...");
  pinMode(ledPin, OUTPUT);

  LoadCell.begin();
  unsigned long stabilizingtime = 2000; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time
  boolean _tare = false; //set this to false if you don't want tare to be performed in the next step
  LoadCell.start(stabilizingtime, _tare);
  if (LoadCell.getTareTimeoutFlag() || LoadCell.getSignalTimeoutFlag()) {
    Serial.println("Timeout, check MCU>HX711 wiring and pin designations");
    while (1);
  }
  else {
    LoadCell.setCalFactor(1.0); // user set calibration value (float), initial value 1.0 may be used for this sketch
    Serial.println("Startup is complete");
  }
  while (!LoadCell.update());
  calibrate(); //start calibration procedure

  
  float odczytWagi = Serial.read(); // Twój odczyt masy z wagi (wyrażony w gramach!!!!!!!)
  float minMasaPojemnika = 325; // 1g
  float minMasaDoZamkniecia = 1325; // 100g
}

void loop() {
  static boolean newDataReady = 0;
  const int serialPrintInterval = 0; //increase value to slow down serial print activity

  // check for new data/start next conversion:
  if (LoadCell.update()) newDataReady = true;

  // get smoothed value from the dataset:
  if (newDataReady) {
    if (millis() > t + serialPrintInterval) {
      float i = LoadCell.getData();
      Serial.print("Load_cell output val: ");
      Serial.println(i);
      newDataReady = 0;
      t = millis();
    }
  }

  // receive command from serial terminal
  if (Serial.available() > 0) {
    char inByte = Serial.read();
    if (inByte == 't') LoadCell.tareNoDelay(); //tare
    else if (inByte == 'r') calibrate(); //calibrate
    else if (inByte == 'c') changeSavedCalFactor(); //edit calibration value manually
  }

  // check if last tare operation is complete
  if (LoadCell.getTareStatus() == true) {
    Serial.println("Tare complete");

if(odczytWagi >= minMasaDoZamkniecia)
{
digitalWrite(ledPin, LOW); // Zamknij zawór
}
else if(odczytWagi >= minMasaPojemnika)
{
digitalWrite(ledPin, HIGH); // Otwórz zawór 
}
else if (odczytWagi = 0)
{
digitalWrite(ledPin, LOW);  // (Stan krytyczny - brak pojemnika na wadze, natychmiast zamknij zawór)
  // Zamknij zawór
}
  
}

}

void calibrate() {
  Serial.println("***");
  Serial.println("Start calibration:");
  Serial.println("Place the load cell an a level stable surface.");
  Serial.println("Remove any load applied to the load cell.");
  Serial.println("Send 't' from serial monitor to set the tare offset.");

  boolean _resume = false;
  while (_resume == false) {
    LoadCell.update();
    if (Serial.available() > 0) {
      if (Serial.available() > 0) {
        char inByte = Serial.read();
        if (inByte == 't') LoadCell.tareNoDelay();
      }
    }
    if (LoadCell.getTareStatus() == true) {
      Serial.println("Tare complete");
      _resume = true;
    }
  }

  Serial.println("Now, place your known mass on the loadcell.");
  Serial.println("Then send the weight of this mass (i.e. 100.0) from serial monitor.");

  float known_mass = 0;
  _resume = false;
  while (_resume == false) {
    LoadCell.update();
    if (Serial.available() > 0) {
      known_mass = Serial.parseFloat();
      if (known_mass != 0) {
        Serial.print("Known mass is: ");
        Serial.println(known_mass);
        _resume = true;
      }
    }
  }

  LoadCell.refreshDataSet(); //refresh the dataset to be sure that the known mass is measured correct
  float newCalibrationValue = LoadCell.getNewCalibration(known_mass); //get the new calibration value

  Serial.print("New calibration value has been set to: ");
  Serial.print(newCalibrationValue);
  Serial.println(", use this as calibration value (calFactor) in your project sketch.");
  Serial.print("Save this value to EEPROM adress ");
  Serial.print(calVal_eepromAdress);
  Serial.println("? y/n");

  _resume = false;
  while (_resume == false) {
    if (Serial.available() > 0) {
      char inByte = Serial.read();
      if (inByte == 'y') {
#if defined(ESP8266)|| defined(ESP32)
        EEPROM.begin(512);
#endif
        EEPROM.put(calVal_eepromAdress, newCalibrationValue);
#if defined(ESP8266)|| defined(ESP32)
        EEPROM.commit();
#endif
        EEPROM.get(calVal_eepromAdress, newCalibrationValue);
        Serial.print("Value ");
        Serial.print(newCalibrationValue);
        Serial.print(" saved to EEPROM address: ");
        Serial.println(calVal_eepromAdress);
        _resume = true;

      }
      else if (inByte == 'n') {
        Serial.println("Value not saved to EEPROM");
        _resume = true;
      }
    }
  }

  Serial.println("End calibration");
  Serial.println("***");
  Serial.println("To re-calibrate, send 'r' from serial monitor.");
  Serial.println("For manual edit of the calibration value, send 'c' from serial monitor.");
  Serial.println("***");
}

void changeSavedCalFactor() {
  float oldCalibrationValue = LoadCell.getCalFactor();
  boolean _resume = false;
  Serial.println("***");
  Serial.print("Current value is: ");
  Serial.println(oldCalibrationValue);
  Serial.println("Now, send the new value from serial monitor, i.e. 696.0");
  float newCalibrationValue;
  while (_resume == false) {
    if (Serial.available() > 0) {
      newCalibrationValue = Serial.parseFloat();
      if (newCalibrationValue != 0) {
        Serial.print("New calibration value is: ");
        Serial.println(newCalibrationValue);
        LoadCell.setCalFactor(newCalibrationValue);
        _resume = true;
      }
    }
  }
  _resume = false;
  Serial.print("Save this value to EEPROM adress ");
  Serial.print(calVal_eepromAdress);
  Serial.println("? y/n");
  while (_resume == false) {
    if (Serial.available() > 0) {
      char inByte = Serial.read();
      if (inByte == 'y') {
#if defined(ESP8266)|| defined(ESP32)
        EEPROM.begin(512);
#endif
        EEPROM.put(calVal_eepromAdress, newCalibrationValue);
#if defined(ESP8266)|| defined(ESP32)
        EEPROM.commit();
#endif
        EEPROM.get(calVal_eepromAdress, newCalibrationValue);
        Serial.print("Value ");
        Serial.print(newCalibrationValue);
        Serial.print(" saved to EEPROM address: ");
        Serial.println(calVal_eepromAdress);
        _resume = true;
      }
      else if (inByte == 'n') {
        Serial.println("Value not saved to EEPROM");
        _resume = true;
      }
    }
  }
  Serial.println("End change calibration value");
  Serial.println("***");

}

 

  • Lubię! 1
Link to post
Share on other sites
(edytowany)

Możesz podać model falownika, ciekawi mnie czy dałoby się to zrobić na nim samym, bo pewnie ma w środku PID. Na pewno ciekawy byłby tutaj falownik TECO, bo ma w sobie proste PLC.

Edytowano przez BlackJack
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.