Komplexe Steuerung

Hallo Leute,
ich bin neu in der Gruppe!
Habe noch keine Erfahrung im programmieren. Ich möchte meine Geschosse wiegen und entsprechender Vorgabe sortieren.
Dafür benötige ich 3 Förderbänder.:1 Aufgabe, 2 Wiegen und 3 Abgabe je nach Gewicht.
Bereit stehen 5 Boxen. Schieber1 in Box 1 oder 2, Schieber 2 in Box 3 oder 4, Box 5 entspricht keiner der Anforderungen sowohl + auch -.
Frage: Brauche ich für jedes Transportband und fürs Wiegen einen Controller oder reicht einer? Habe ca. 10 Sensoren als Eingang und 5 Motoren/Servo Transitor gesteuert als Ausgang
Habe schon ein paar sketch probiert, mir fehlt jedoch die Grundkenntnis um solch komplexe Steuerungen zu Realisieren. Bauteile: 5V Motorx3(Getriebemotor/amazon, LED Segment Anzeige 3461BS-1,Gewicht, Wiegezelle=.1kgADC HX711, Zahnriemen+Zanräder.

Einer reicht. 1kg Wägezelle … was jagst du, T-Rex?

Moin!

Am Anfang steht eine Idee, dann kommt eine Phase von Versuch und Irrtum, dabei können wir etwas helfen, und am Ende gibst Du verzweifelt auf oder hast ein funktionierendes Projekt. Das liegt ganz alleine an Dir. Du mußt davon ausgehen, daß das Endergebnis anders aussieht als Deine Idee. Traust Du Dir diese emotionale Achterbahn zu?

Ein gewisser Julius Caesar soll gesagt haben1): "Divide et impera!" Auch wenn er das etwas anders gemeint haben dürfte, so ist es eine gute Idee, ein Projekt in kleine Aufgaben zu teilen und dadurch das große Ganze zu beherrschen. Das schafft Übersichtlichkeit und Du kannst Dich immer auf die aktuelle Problematik konzentrieren.

Das Wiegen scheint mir von zentraler Bedeutung, damit könntest Du starten. Eine sekündliche Anzeige des gewogenen Wertes führt Dich zu wesentlichen Programmiertechniken wie Schrittketten (=finite state machine, =endlicher Automat) und Zeitmessung mit millis() anstelle delay(). Bei geschickter Programmierung benötigst Du vermutlich nur einen µC.

Als hilfreiche Bibliothek empfehle ich Dir die MobaTools, die Du über die Arduino-IDE installieren kannst. Servos für Schieber und Schrittmotoren für Förderbänder lassen sich über Rampen beschleunigen und die Verarbeitung findet "im Hintergrund" statt. Eine Beschreibung gibt es in Deutsch und der Autor ist in diesem Forum aktiv.

Es gibt µCs mit 5 V und 3,3 V an den Pins. UNO R3 und Mega2560 arbeiten mit 5 V, der Trend geht aber zu 3,3 V. Vermeide bitte neueste Hardware, da gibt es von Seiten des Forums auch noch keine Erfahrungen. Bei 5 V sind UNO R3, NANO und Mega2560 beispielsweise gut bekannt, bei 3,3 V der ESP32-WROOM2). Alle µCs kann man mit Porterweiterungen versehen, dennoch tendiere ich wegen der vielen Pins ein wenig zum Mega2560, auch wenn der momentan teuer gehandelt wird. Solltest Du die Seite von Fips oder 250+ ESP32 Projects inspirierend finden, käme auch der ESP32-WROOM2) in die engere Wahl.

Bedenke, daß niemand der Aktiven dieses Forums auf Deinen Schreibtisch schauen kann (und will!). Je besser Du Dein Projekt einschließlich der Probleme visualisierst, desto besser kann die Hilfe sein. Auch handgemalte Zeichnungen, mit Scanner oder Händi digitalisiert, sind willkommen. Es geht nicht um hübsch, nur um Infos.

Traust Du Dich noch? Dann los!


Anm:

  1. Ich habe das so aus dem Geschichtsunterricht in Erinnerung, finde es aber bei Wikipedia nicht bestätigt.
  2. "ESP32" bezeichnet inzwischen eine ganze Familie von µCs, die sich im Detail doch recht deutlich unterscheiden. Beim ESP32-WROOM findest Du vermutlich die meiste Unterstützung.

Der Frage schließe ich mich an… Dazu: wie viel verballerst Du dass sich der Aufwand rechtfertigt? OK, wenn das eine “geht das/krieg ich das hin” Übung ist, ist es was anderes…

Ich hatte mir dafür mal eine 20g Präzisionswaage, 3 Nachkommastellen, angeschafft und die vor jeder “Wiegesitzung” neu kalibriert. Das Auswiegen selbst habe ich dann als Konzentrationsübung gesehen…

Hallo herbk,
Es geht mir hauptsächlich ums Tüfteln.
Bei dem was ich schieße lohnt sich der Aufwand eigentlich nicht.

Hallo agmue,
vielen Dank für deine ausführliche Antwort.
Bleibe am Ball ,ein Hobby braucht man halt.

Hallo zwieblum,
ich jage keinen T-Rex​:smiling_face_with_sunglasses:, die 1kg Wägezelle habe ich gewählt weil ich das Transportband komplett mit wiege. Gesamtgewicht-Eigengewicht=Geschossgewicht, so meine Überlegung.

Das ist viel zu ungenau, davon bin ich überzeugt… Der Gewichtsunterschied bei Geschossen liegt üblicherweise bei 0,0xg, lass es 0,xg sein. Die 1 kg Wägezelle hat wahrscheinlich nur eine Genauigkeit von 1-2g

Wenn Du so kleine Unterschiede auswiegen willst funktioniert nur eine Vorgehensweise: Geschoss auf die Waage legen, warten bis sich der angezeigte Wert stabilisiert hat, Messwert auswerten.

Ja, das lässt sich auch mit Band machen, aber dann brauchst Du auch ein Band welches überall exakt gleich schwer ist.

Ersetze da im Video die Kamera mit einer Wägeeinrichtung:

oder einen kleinen Epson SCARA mit Sucction Cup SCARA Robots | #1 Manufacturer Worldwide | Epson US … machen echt Laune die kleinen :)

Wenn Du 10mg genau wiegen willst, dann brauchst Du schon einen Windschutz.
Da ist eine Labor-Feinwaage mit seriellen Schnittstelle besser als eine Wäägezelle mit AD/Wandler.
Beispiel einer Laborwaage mit Windschutz. Soll keine Kaufempfehlung sein aber staunte selbst über den Preis; Hatte teurer im Kopf.
Du kannst ja eine Automatisation dazubauen der das Fenster des Windschutzes aufmacht und die Geschosse ablegt und wieder herausnimmt.

Grüße Uwe

Sollte da noch ein Link sein?

Eventuell ja sowas: Kompakte Kern Laborwaage PCB 200-3 Max 200 g | Ablesbarkeit 0,001 g

Ja, hätte ein Link da sein sollen.
Nachgeliefert:

Grüße UWe

Meine Waage hat noch eine serielle Schnittstelle für den Arduino :wink:

Moin Zusammen,
da bin ich wieder. Erstmal danke für eure Kommentare. Zuerst werde ich mich mal mit C++ intensiver beschäftigen, mir fehlen als Einsteiger die Grundlagen, um "mal eben" so etwas zu realisieren. Anbei ein Bild meiner Vorstellung zum Ablauf "Sortieren".
Gruß Markus

Auf dem Bild ist nichts zu erkennen, Bitte nicht extra Verkleinern die Forum Software macht das für dich.


Danke für die Info. Jetzt sollte es passen.

Bisher habe ich noch keine konkrete Frage gestellt!
Der Ablauf sollte so sei:

  1. Taster drücken
  2. Motor läuft
  3. Teil auflegen
  4. Lichstranke erkennt Teil
  5. Motor stop
  6. Taster drücken
  7. Motor läuft
    dieses möchte ich erstmal progammieren.
    Kann mir Jemand in einfachen Sätzen erklären, wie der Sketch aussehen muss oder ein Beispiel erstellen mit // Kommentaren?
    Foto Zeigt Prototyp "Waage"

Schon mal Dank für eure Mithilfe,
wie geschrieben, fange mit C++ bei null an.
Gruß Markus

Die blanken Drähte und die Metallplatte werden Dir über kurz oder lang Elektronikschrott bringen.

Zum Einlesen in C++ "Der C++ Programmierer", eine Kurzfassung bezogen auf Arduino oder allgemein C++ in die Suchmaschine Deiner Wahl eingeben.

Gruß Tommy

/*
Der Ablauf sollte so sei:

    Taster drücken
    Motor läuft
    Teil auflegen
    Lichstranke erkennt Teil
    Motor stop
    Taster drücken
    Motor läuft bis Zeitlimit
*/
constexpr uint8_t tasterPin { 2 };                    // nach GND tastend
constexpr uint8_t lichtschrankenPin { 3 };            // nach GND schaltend
constexpr uint8_t motorPin { 13 };                    // nicht direkt, sondern über Transistor oder sowas
constexpr uint32_t zeit { 4000 };                     // in ms
uint32_t jetzt;                                       // aktuelle Zeit je Schleife
uint32_t vorhin;                                      // gemerkte Zeit
enum class Ablauf : byte {TASTER_START, MOTOR_STOPP, TASTER_WEITER, ENDE};  // Schritte der Schrittkette
Ablauf schritt = Ablauf::TASTER_START;

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nStart ...");
  pinMode(tasterPin, INPUT_PULLUP);
  pinMode(lichtschrankenPin, INPUT_PULLUP);
  pinMode(motorPin, OUTPUT);
}  // end of setup

void loop() {
  jetzt = millis();
  switch (schritt) {                                  // Schrittkette
    case Ablauf::TASTER_START:
      if (!digitalRead(tasterPin)) {
        digitalWrite(motorPin, HIGH);
        Serial.println("Taste gedrückt, Motor ein");
        schritt = Ablauf::MOTOR_STOPP;
      }
      break;
    case Ablauf::MOTOR_STOPP:
      if (!digitalRead(lichtschrankenPin)) {
        digitalWrite(motorPin, LOW);
        Serial.println("Lichtschranke erreicht, Motor aus");
        schritt = Ablauf::TASTER_WEITER;
      }
      break;
    case Ablauf::TASTER_WEITER:
      if (!digitalRead(tasterPin)) {
        digitalWrite(motorPin, HIGH);
        vorhin = jetzt;
        Serial.println("Taste gedrückt, Motor ein");
        schritt = Ablauf::ENDE;
      }
      break;
    case Ablauf::ENDE:
      if (jetzt - vorhin >= zeit) {
        digitalWrite(motorPin, LOW);
        Serial.println("Zeit abgelaufen, Motor aus");
        schritt = Ablauf::TASTER_START;
      }
      break;
  }
}  // end of loop

Serieller Monitor:

Start ...
Taste gedrückt, Motor ein
Lichtschranke erreicht, Motor aus
Taste gedrückt, Motor ein
Zeit abgelaufen, Motor aus

Bei Fragen bitte fragen :wink:

hm … mir stellt sich hier die Sinnfrage … aber mei, es ist Faschingdienstag … :partying_face: