Taster Ton Mictrocontroller Schaltung

Hier gibt es wohl eine Led-Anzeige, korrekt? Ich würde hier drei Optokoppler parallel zu den vorhandenen LD5, LD6 und LD7 anschließen. Das stellt - bei richtiger Verschaltung - sicher, dass es keine negativen Rückwirkungen auf den Arduino gibt. Und es hat den Vorteil, dass man keine Synchronisation mit dem Automaten benötigt (damit 1x Beepen auch immer 0,2 l entspricht), da man die Einstellung des Automaten direkt rückliest.

Siehe z.B. hier

https://www.kollino.de/elektronik/optokoppler/

image

Bitte die Code-Tags nicht vergessen, sonst macht das Lesen keine besondere Freude ...

  • Man kann übrigens auch [code] am Anfang vor den Sketch
  • und [/code] am Ende des Sketches schreiben!
const byte taste = 6;
const byte beeper = 8;
const byte maxZaehler = 3;
byte zaehler = 0;
byte lastZaehler = 0;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(taste, INPUT_PULLUP);
}

void loop()
{
  if (!digitalRead(taste)) zaehler++;
  if (zaehler > maxZaehler) zaehler = 0;
  if (zaehler != lastZaehler)
  {
    for (byte b = 1; b <= zaehler; b++)
    {
      Serial.println("beep");
      tone(beeper, 2000, 200);
      delay(350);

    }
    lastZaehler = zaehler;
    while (!digitalRead(taste));
    delay(20);
  }
}

Die Zeilen sind an der richtigen Stelle. Ob delay(20) zum Debouncen genügt, hängt von der Qualität des Tasters ab.

Die Tonlänge ist mit 200 ms u.U. recht lang; hier kann man auf 100 oder 50 ms heruntergehen; dann benötigt man für die Wartezeit auch keine 350 ms mehr, sondern kann ggf. auf 150 heruntergehen. Ausprobieren!

Wenn die Wartzeit gefühlt zu lange ist, kann man den Sketch auch wie folgt abwandeln:

const byte taste = 6;
const byte beeper = 8;
const byte maxZaehler = 3;
byte zaehler = 0;
byte lastZaehler = 0;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(taste, INPUT_PULLUP);
}

void loop()
{
  if (!digitalRead(taste)) zaehler++;
  if (zaehler > maxZaehler) zaehler = 0;
  if (zaehler != lastZaehler)
  {
    for (byte b = 1; b <= zaehler; b++)
    {
      Serial.println("beep");
      if (b > 1) delay(350);   // Abwarten auf Tonende nur bei 2 und 3 Beeps 
      tone(beeper, 2000, 200);
    }
    lastZaehler = zaehler;
    while (!digitalRead(taste));
    delay(20);
  }
}

hier ist das Gerät nur mal als Beispielbild:

das sieht mann die 3 Getränke Grössen LED

Minipom GA 3010 Gebrauchtgerät : Amazon.de: Drogerie & Körperpflege

parallel also 3 IC`s CNY17/4 oder wie meinst du das?
zeichne mal eine Schaltung auf wie du das meinst?

ich probiere gleich mal aus deine andere version mom. (-:

scheint etwas besser aber bei der anderen Version war es besser da wenn die Taste mal länger gedrückt wird nur einmal 1 2 oder 3 mal piept und nicht dauernd pulstöne abgibt.

hab nochmal getestet ist doch gleich wie bei der 1. Version kein unterschied.

es liegt immer daran vom 3 auf den 1. (verzögerung 1 sek.).

wenn eine Verzögerung ist dann Schaltet das Relais nicht synchron und ist schneller bevor der arduino piept. glaube du verstehst was ich meine. vielleicht muss die Schaltung anders integriert werden auf die Getränke platine. hmm?

Vielleicht braucht mann 3 Taster auf dem Arduino Board? und irgendwie jeweils an die led von Getränkeplatine verbinden. Löten usw. kann ich gut

irgenwie müsste mann das doch integrieren zum Automat (-:

ich habe schon oft gesehen an anderen Automaten wo es unterschiedlich piepst wenn mann eine Taste drückt. und habe auch gehört das die mit Arduino auch arbeiten die Hersteller

Genau. Also

  • Alle Sicherheitsmassnahmen bei der Arbeit an geöffneten Geräten mit Netzspannung beachten!
  • Spannung über einer der fraglichen LED im Gerät messen, um ganz sicher zu gehen, was dort zu erwarten ist
  • Rechnungen nach https://www.kollino.de/elektronik/optokoppler/ durchführen und eine entsprechende Schaltung aufbauen

Vielleicht erst einmal zwei Kabel von einer der LED herausführen und auf einem Breadboard prüfen, wie sich die Schaltung verhält. Danach kann man das Ganze z.B. auf einer kleinen Lochrasterplatine zusammenlöten und im Gerät (nahe bei den LED) jedoch gesichert gegen netzspannungsführende Teile anbringen.

Rechnungen? (-:

zeichne mal auf wie du die Schaltung dir vorstellst

Na ja, da steuert der gleiche Automat die Mengenanzeige und die Tonfolge ... Das ist einfach, man lässt keine Änderung zu, bevor die Tonfolge abgespielt wurde.

Hier haben wir es mit zwei nur durch einen Starttrigger synchronisierten Vorgängen zu tun.

Wenn man das synchronisieren will, muss man bei erneutem Tastendruck eine länger Tonfolge abbrechen. Das geht auch, verwirrt aber u.U. den Anwender ...

Alternativ: Verwende für die Füllmengen unterschiedliche Tonhöhen (3000 Hz = 0,2l, 2000 Hz = 0,3l, 0,4l = 1000 Hz), das hört sich so an:

https://wokwi.com/projects/328746032101851731

const byte taste = 6;
const byte beeper = 8;
const byte maxZaehler = 3;
byte zaehler = 0;
byte lastZaehler = 0;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(taste, INPUT_PULLUP);
}

void loop()
{
  if (!digitalRead(taste)) zaehler++;
  if (zaehler > maxZaehler) zaehler = 1;
  if (zaehler != lastZaehler)
  {
    Serial.println("beep");
    tone(beeper,4000-zaehler*1000,100);
    delay(200);
    lastZaehler = zaehler;
 }
}

P.S.: Noch ein kleine Korrektur zum Sketch aus Post 81:

Die Zeile

 if (zaehler > maxZaehler) zaehler = 0;

ändern in

 if (zaehler > maxZaehler) zaehler = 1;

Das könnte schon das abweichende Verhalten beim Übergang von 3xBeep zu 1x Beep erklären.

In etwa so:

Die Spannung U5 kenne ich nicht (vermutlich irgendwo bei 10V / 12V), daher kann ich den Wert für R5 auch nicht vorgeben. Also messen und ein wenig rechnen; ich übernehme keine Haftung. :innocent:

Ab hier solltest Du vielleicht auch ein wenig alleine weiter arbeiten, sonst stellst Du mir die Kiste noch zum Umbau auf den Hof ... :wink:

ja womöglich tauch ich auf (-;
die idee ist nicht schlecht welcher digitalpin meinst du vom PIN CNY17 (Emitter) Nr. 4
den Nr. 6 oder Nr. 8 auf dem Arduino board anschliessen?
ja brauche ich dann 3 x CNY 17? falls ja gibt es ein IC wo 3 Schaltvorgänge (Transistoren) in einem Gehäuse sind?
ich denke dann müsste auch den Sketch geändert werden da ja das Signal nicht mehr vom Taster (Arduino Board) kommt sondern von der anderen Richtung von der LED (Automat) ist das richtig?
Mann könnte es so ändern den Sketch das an der LED/Automat bei 0,2 1 Ton kommt und bei 0,3 2 Töne usw. mit deiner Schaltung am Schaltausgang Transistor oder?

a) Anpassung: Mann (oder Frau) müsste den Sketch natürlich anpassen, wenn man auf Optokoppler umstellt. Das ist korrekt. Es ist jedoch sicherer als einen Taster in zwei verschiedenen Stromkreisen galvanisch gekoppelt zu verwenden. Das sollte kein Problem darstellen, wenn der Arduino von Batterie oder einem potentialfreien Netzteil (oder dem internen des Apparaten) gespeist wird.

b) Optokoppler: Es gibt Optokoppler-IC mit mehreren Kanälen; ein Platzproblem sollte aber nicht vorliegen; Beispiel:
image

Tipp: Eine Suche bei einschlägigen Versandhändlern führt zum Ziel; wenn man sich nicht sicher ist, geht man am Besten in eine Filiale und lässt sich beraten.

Die Optokoppler können so beschaltet werden, dass sie sich wie Taster/Schalter an einem Arduino-Pin auswerten lassen. Letztlich schaltet der Ausgang durch, wenn die zugehörige interne Led mit einer ausreichenden Spannung betrieben wird.

sehr gute ideen hast du bin stolz auf dich! :+1: :grinning:

wie gehen wir das an? mit löten eine Lochplatine usw. kenne ich mich aus kein problem. Mann müsste bei 3 LED`s/Getränke Platine den TLP620-4 nehmen wo du erwähnt hast. Die Beschaffung der Bauteile, Litzen usw. ist für mich 0 Problemo.
Du müsstest eigentlich mir nur den Schaltplan zeichnen wie der TLP620-4 an das Arduino Board angeschlossen wird (Ardoino PINS) und den Sketch so machen:
LD05 (Automat) 1 x piepen, LD06 2 x piepen, LD07 3 x piepen. Ich kann ja je nach Geschmack die Tonhöhe und Lautstärke ändern im Sketch.

Könnte mann das dann so machen das ich die Pieptöne auch abschalten kann wenn ich mag irgendwie?

meinst du so einer:
TLP 620-4 TOS: Optokoppler DIL-16 bei reichelt elektronik

Vorwiderstand R5 rechne ich dann aus an Hand der Spannung. Kenn das Ohmsche Gesetz

würde der Widerstandswert RP reichen 1kOhm? da muss nix geändern werden stimmts? da er ja von den 5V kommt

es würden dann praktisch 3 Emitter Litzen an das Adruino Board gehen richtig?

So, hier einmal ein Sketch der es tun sollte (zumindest in der Theorie/Simulation):

const byte NullZwoPin   = 11;
const byte NullDreiPin  = 12;
const byte NullVierPin  = 13;
const byte BeeperPin    = 8;

enum LiterType {
  NICHTS,
  NULLZWO,
  NULLDREI,
  NULLVIER,
};

byte Value = NICHTS;
byte lastValue = NICHTS;
byte beepCount = 0;
int Frequency = 2000; // [Hz]
int Duration  = 75; // [ms]
int Pause     = 100; // [ms]
unsigned long lastToneTime = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(NullZwoPin,INPUT);
  pinMode(NullDreiPin,INPUT);
  pinMode(NullVierPin,INPUT);
}

void loop()
{
  
  CheckEvery(50);
  Evaluate();
  Play();
  
}

void CheckEvery(unsigned long CheckTime){
  static unsigned long lastCheckTime = 0;
   if (millis()-lastCheckTime >= CheckTime){
     lastCheckTime = millis();
     CheckPins();     
   }
}

void CheckPins(){
    if (digitalRead(NullZwoPin))  Value = NULLZWO;
    if (digitalRead(NullDreiPin)) Value = NULLDREI;
    if (digitalRead(NullVierPin)) Value = NULLVIER;
}

void Evaluate(){
   if (Value == lastValue) return;
   noTone(BeeperPin);
   lastToneTime = 0;
   switch(Value){
     case NULLZWO  :
           Serial.println("0.2l");
           beepCount = 1;
       break;
     case NULLDREI :
           Serial.println("0.3l");
           beepCount = 2;
       break;
     case NULLVIER :
           Serial.println("0.4l");
           beepCount = 3;
       break;
     default: 
       break;
   }
  lastValue = Value;
}

void Play(){
   if (beepCount > 0 && millis()-lastToneTime > Duration + Pause) {
     lastToneTime = millis();
     beepCount--;
     tone(BeeperPin, Frequency, Duration);
    }
}

Schaltung wie folgt:

Zum Ausprobieren hier: https://wokwi.com/projects/328835024040231507

Die Taster verhalten sich natürlich nicht ganz so wie ein Optokoppler, daher abwarten, ob es gleich funktioniert... Der Sketch kommt damit zurecht, dass

a) kein Taster betätigt ist (die LED des Automaten alle nicht leuchten) und
b) einer der Taster dauerhaft betätigt wird (LED am Automaten leuchtet länger/dauerhaft)

Die Tonausgabe ist ohne Delay() ausgeführt, so dass eine Neuwahl die alte Tonfolge abbricht und die neue startet. Wie sich das in der Praxis anhört, wäre zu testen.

Ansonsten sind die Optokoppler-Anschlüsse so mit der Pinseiten und 5V zu verbinden, wie die Taster in dieser Testschaltung. Das sollte kein Problem darstellen.

Was ich tun kann/konnte, ist m.E. getan.

Viel Erfolg und bitte Vorsicht beim Basteln am offenen Gerät sowie der internen Verlegung von Kabeln!

P.S.: Wie man im Sketch sieht, "gewinnt" im Fehlerfall die Ausgabe für die größere Liefermenge ...

danke soweit, wollte noch anmerken:

die LED`s Automat leuchten immer d.h. 0,2 leuchtet solange nicht gedrückt wird immer/also ständig Spannung an der LED; wenn mengen taste gedrückt wird/Gerät spring die LED direkt um auf 0.3 und von 0,3 auf 0,4 es gehen also keine led aus. die schaltung müsst also denke ich eine stromstoss schaltung sein am ein oder ausgang vom 4 fach opto IC. Was meinst du? oder regelt das das arduino board/sketch das ganze?

wie meinst du das mit deinen 3 grünen taster? es ist aber nur 1 taster am automat für getränke menge.

Die Taster bei der Wokwi Simulation sind so angeschlossen, wie die Optokoppler. Leider gibt es bei Wokwi keine Optokoppler als Komponente, so dass ich deren Funktion damit mittelmäßig nachgebildet habe.

Der Sketch sollte aber auch mit den Optokopplern funktionieren und ist genauso ausgelegt, dass er mit ständig leuchtender Anzeige zurecht kommt.

Hier ist ein kleiner Video, der deinen Start sicher erst mal erleichtert.

Da gehts dann weiter, wenn du den ersten Teil durch hast.

Ich sehe du bist schon weiter gekommen. Dann ist das hier nicht mehr wichtig. Ich habe nur deine ersten Beiträge gelesen, wo du die IDE noch nicht auf dem Rechner hattest. :smiley:

Franz

danke sehr informativ

ich habe mal die Schaltung aufgebaut mit einem Taster und mit deinem Sketch laufen lassen. PIN 13 piepst 3 x das ist richtig :+1:
wenn ich aber den Taster loslasse piepst es nochmal kurz nach kann mann das abschalten? oder funkt. das nur wenn alle drei Taster aufgebaut sind in der Versuchsschaltung? ich bestelle mir dann mal das 4 fach opto ic

habe gemessen an U 5 liegen jeweils 5V an und direkt am RNG-A habe ich 3V
braucht mann da einen vorwiderstand eingang optokoppler? Reichen die 3V zum schalten des optos?