DJ Pressure & the Servos

22 Nov

Nächster Schritt im Projekt Mixomat – eigentlich ein Schritt zurück. Oder „Retro“ eben.

Die Anzahl an gewünschten Zutaten hat mittlerweile 13 erreicht, und für jede wäre ein Ventil nötig. Die kleinen Ventile haben (weil der Druck sich nur langsam abbaut wenn sie abkuppeln) deutlichen Nachlauf, das könnte für die Dosierung problematisch werden. Eine Variante mit zwei Ventilen (eines normalerweise offen für die Entlüftung, eines geschlossen in der Zuleitung) hebt den Preis pro Zutat bzw. Flasche auf über 7 Euro. Das wird der Bastel-Kasse nicht so gut vermittelbar sein.

Welche Möglichkeiten haben wir denn dann? Nun, zum Beispiel zwei Servo-Motoren. Einer zeigt mit dem Schlauch von der Luftpumpe auf im Halbkreis angeordnete Flaschen-Schläuche. Und der zweite Servo schiebt den Druck-Schlauch auf den Flaschen-Anschluss. Schon läuft das gewünschte Getränk. Und bei Zurückziehen kann der Druck auch sofort wieder verpuffen.

Erste Iteration. Das wird schon noch.
Erste Iteration. Das wird schon noch.

Das klingt nach einer Lösung.

Also schnell einmal meinen allerersten Servo an einen Mikrocontroller verdrahtet. Mit einem Schutzwiderstand und Kabel und wirklich minimalem Programmieraufwand überzeugt mich die Lösung fürs Erste.

Auch mit dem zweiten Servo dazu zeigt sich nichts, was als Verhinderung gelten könnte.

Nächster Schritt: Schauen wir doch mal, ob/wie sich Servos über MQTT steuern lassen können. Die PubSubLibrary von Arduino darf hier ’ran, auch wenn ihre Art der Datenübergabe aus der eintreffenden Nachricht unerwartet komplex ist … es kommt eine Byte-Liste an, die tatsächlich erst „von Hand“ byteweise umkopiert werden muss in ein Char-Array, bevor ich den Klartext-Wert wieder zu einem Zahlenwert umwandeln kann (oder es geht auch einfacher und ich verstehe nur die Doku nicht …) :

void mqcallback(char* topic, byte* payload, unsigned int length) {
  unsigned int maxlength = sizeof c_payload_buff - 1;
  if ( length < maxlength ) {
    maxlength = length;
  }
  int i = 0;
  int posval = 0;
  for ( i = 0; i < maxlength; i++ ) {
    c_payload_buff[i] = payload[i];
  }
  c_payload_buff[i] = '\0';
  if ( strcmp( topic, c_topic_s1 ) == 0 ) { // 0 = match !!!
    Serial.println("Got S1 command" );
    posval = atoi( c_payload_buff );
    spinner.write( posval );
    sprintf( c_stat_buff, "S1 = %d", posval );
    mqclient.publish( c_topic_stat, c_stat_buff );
  }
  if ( strcmp( topic, c_topic_s2 ) == 0 ) {
    Serial.println( "Got S2 command" );
    posval = atoi( c_payload_buff );
    pusher.write( posval );
    sprintf( c_stat_buff, "S2 = %d", posval );
    mqclient.publish( c_topic_stat, c_stat_buff );
  }

}

Aber mit ein bisschen Node Red obendrauf kann ich nun mit zwei Schiebereglern zwei Servos drahtlos und über Computer steuern. Das könnten Lüfterklappen sein oder sonst was, jedenfalls … Erfolg!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

7 + 16 =