Kartenmenge (mit Monobetrieb) um 50% reduzieren

Hallo zusammen
Habe gerade den ersten Tonuino gebaut und über 100 Hörspielkassetten digitalisiert. Dabei ist der Antriebsgummi eines Kassettengerätes gerisssen. So konnte ich von diesem Gerät Lautsprecher, Henkel (und auch eine kleine Digitaluhr) für den Tonuino gebrauchen. Nun zu meiner Idee. Ich wollte meine 100 Karten unter den Tonuinoplayer (mit Magneten hängen), aber 100 Karten sind recht schwer. (–> Bild) Da kam mir folgende Idee. Für Hörspiele reicht ein Mono-Ton: Könnte man nicht zwei (etwa gleich lange) Hörspiele in ein mp3-File packen - und je nach Auflegen der Karte wird der Ton rechts oder links abgespielt. Frage: Wie taste ich die Karte ab; z. Bsp. per LDR und Loch in RFID Karte am Rand: Darf man da ein kleines Loch reinbohren oder funktioniert sie nachher nicht mehr?


(fertiger Tonuino mit Digitaluhr oben rechts / unterer Teil = Kartenfach mit 100 Karten)

Wenn man die Antenne nicht beschädigt, ist das kein Problem.

Vielleicht interessiert dich auch dieses Thema

Hallo Fred,

bei deiner Idee musst du beachten, dass der DF-Player nicht wie ein Tonbandgerät „denkt“. Der decodiert das MP3 File immer gleich. Du kannst ihm also nicht sagen: „Nur die linke Spur“.

Daher brauchst du dir nicht die Mühe machen und zwei Höhrspiele in eine Datei zu codieren.

Deine Grundidee kann aber trotzdem Funktionieren. Nur, dass du mit EINER Dateien bzw. Ordner je Seite arbeitest. Z.B. A-Seite sind ungerade Ordner oder Dateien, B-Seite gerade.
Wenn Speicher ein Problem sein sollte, kann man ggf. die MP3 in Mono codieren. Vielleicht bringt das was. Aber speicher kostet ja nichts.

Das spannende wird die Erkennung der Karteorientierung. Vielleicht am Einfachsten, einen formschlüssigen Schacht zu bauen, in die man die Karte einsteckt, und eine mechanische Codierung mit einem, oder zwei Mikrotastern abzufragen. So einen Taster könnte man auch zum Ein/Ausschalten nehmen. Also Tonuino nur an, solange Karte gesteckt.

1 „Gefällt mir“

Ich weiß ja nicht ob dein Gehäuse fertig ist und wie du aufteilen möchtest.
Aber wie wäre es mit 2 Schlitzen und den Reader dazwischen? Der blaue Schlitz für die blaue Seite, der rote Schlitz für die rote Seite.

Edit : oder ein Schlitz oben rechts, in den die Karte nach unten links geschoben wird.
Ein Schlitz oben links, durch den die Karten nach unten rechts geschoben wird.
Reader mittig, Taster unten rechts und unten links

Ist Taster rot betätigt Ordner = Ordner
Ist Taster blau betätigt Ordner = Ordner +1

Ich dachte er feielt einfach ne Kerbe in die Karte. Und je nach dem wie rum man die Karte in den Schacht steckt, wird eben nur der linke, oder rechte Taster gedrückt. Der jeweils andere Taster taucht in die Kerbe ein und wird nicht betätigt.

Die Idee mit dem Microtaster finde ich gut: Frage: Wo/wie programmiere ich ROT = ORDNER; BLAU = ORDNER + 1 ? respektive, da ich im Einzelmodus fahre ROT = ungerade Zahl; z.Bsp. 001.mp3 BLAU = ungerade Zahl 001.mp3 +1

Ich glaube das ist kein großer Aufwand, aber ich kann es trotzdem nicht :smiley:

EDIT: noch ein paar Gedanken dazu:
if rot or blau {
readcard
if rot {
ordner = cardread…
}
else {
ordner = cardread… +1
}

Hallo Nick
Vielen Dank für deine detaillierte Antwort! Du hast recht, die Spuren lassen sich nicht sauber trennen; sie „schlagen“ durch.
Also verfolge ich deinen zweiten Ansatz weiter

Ich versuche es mal, hätte aber gerne noch jemanden der drüber schaut.

1095  // RFID Karte wurde aufgelegt
1096
1097 if (!mfrc522.PICC_ReadCardSerial())
1098    return;
1099
1100  if (readCard(&myCard) == true) {
1101    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
1102      playFolder();
1103    }

zu

  // RFID Karte wurde aufgelegt

  if (buttonrot and buttonblau)    //sind beide nicht betätigt, brauchst du nicht lesen
    return;

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
     if  !buttonblau  {                                             //ist der Blaue gedrückt....
         myfolder->folder = myfolder->folder +1;    // ....rechne einen Ordner höher
      }
      playFolder();
    }

Kann bitte noch einer unabhängig schauen?

Ich bin gerade unsicher, was passiert, wenn die Karte vom Reader erkannt wird, bevor ein Button gedrückt wird. Denn der TonUINO reagiert ja nur einmal auf die Karte, sonst könnte man die Karte ja nicht liegen lassen. Ich befürchte dann kommt man gar nicht zum Abspielen, da die Schleife while (!mfrc522.PICC_IsNewCardPresent()); nur einmal getriggert wird.

Danke für’s Mitdenken. Im Moment verändere ich zuerst die Hardware, d.h. die Taster, respektive mache ich es wohl nur mit einem Taster. Wenn dieser Taster eine 1 hat, sollen die geraden Titel gespielt werden, bei 0 → ungerade Titel. Danach gehe ich an die Software. Hab die Stelle, von der raznz_snasna spricht gefunden…

@Fred_H,

ich denke du wirst zwei mikroschalter brauchen. Denn während man die Karte einschiebt, reagiert der Reader sofort,noch bevor die Karte eine Chance hatte, den Microschalter für die Seitenerkennung (z. B. Seite B) zu erreichen. Daher würde Tonuinio immer die A-Seite spielen, weil der Microschalter immer zu spät kommt.

Daher müssen es zwei Schalter sein. Im ruhezustand offen. Die Kerbe und Schalter so platzieren,daß immer nur einer betätigt wird, sobald die Karte vollständig eingeschoben ist.

In der Software muss man nun konsequent das Auslesen der Karte überspringen, solange beide Taster gleich sind (es darf ja immer nur einer auslösen).
Erst wenn einer betätigt ist und der andere offen, darf die Karte gelesen werden. Dabei wertet man den RFID aus, und entscheidet bei B Seite Ordner +1.

Original.:

    1092 // Ende der Buttons
  } while (!mfrc522.PICC_IsNewCardPresent());

  // RFID Karte wurde aufgelegt

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
      playFolder();
    }

Modifiziert:

    // Ende der Buttons

// Verlasse die Buttonauswertung nur, wenn eine Karte erkannt wurde
// Bei der Kassettenmodifikation ist das immer nur dann der Fall, wenn einer der beiden Miroschalter betätigt ist, also A<>B. 
  } while (digitalRead(switchA) == digitalRead(switchB) );

  // Eintritt in die Karteauswertung. Einer der beiden Taster wurde betätigt. RFID Karte wurde eingesteckt 

//Prüfen, ob neue Karte verfügbar, sonst raus (return) 
If (!mfrc522.PICC_IsNewCardPresent()) 
   return;

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
// Bei B-Seite Ordner Nr+1
     If(digitalRead(switchB)) myfolder->folder = myfolder->folder +1;
      playFolder();
    }

switchA und switchB sind ganz am Anfang per
#define switchA x
Pins zuzuweisen (x=Pinnummer) und z. B. in Zeile 780 als
pinMode(switchA, INPUT_PULLUP) ;
zu deklarieren.

Ich hätte da einen ganz anderen Ansatz.
Wäre es nicht auch möglich eine Seite der Karte mit einer „RFID-Blicking-Folie“ zu bekleben und darauf einen dieser hier im Forum schon so häufig erwähnten RFID-Aufkleber zu packen. Dann müsste doch quasi jede Seite der Karte separat zu programmieren sein :thinking:

Irgendwie laufen wir mit dem

gerade gleichzeitig.

Die Ideen sind leider auch immer in beiden mal aktuell.

Das soll zu Problemen führen.

Ja das mit zwei Mikroschaltern wird schwierig, da mein Tonuino (Bild siehe oben) eigentlich schon fertig ist. Einen habe ich noch reingekriegt, darum meine Frage: Wäre es nicht möglich, die Kartenlese-Subroutine zwei Mal hintereinander ausführen mit einem delay dazwischen und die zweite Runde wird dann (inclusive Schalterstellung) ausgewertet? Noch ein zweiter Hinweis. Ich habe alle Karten für den Einzelmodus konfiguriert. Muss ich dann das Programm anstelle folder +1 auf currentTrack+1 ändern? Vielen Dank für dein Mitdenken!

Hallo @Fred_H,

Hm, kann man bestimmt. Aber zeitbasierte Auswertungen sind immer sch… :face_vomiting:

Insbesondere, wenn die Totzeit nicht 100% reproduzierbar ist. Und Bedienhandlungen sind nicht reproduzierbar.
Der eine steckt die Karte schnell rein, und ist irritiert, daß es so lange dauert bis was passiert. Und ist vielleicht schon im Begriff sie für einen zweiten Anlauf wieder raus zu ziehen.
Der nächste lässt sich Zeit, und hat die Karte noch nicht mal richtig drin, da spielt die ASeite schon los, obwohl es doch eigentlich die BSeite sein soll.
Und der Dritte steckt die Karte immer nur halblebig ein, und ist frustriert, weil jedes zweite Hörspiel gefühlt nie zuverlässig startet.
Und zwischen den dreien liegen gerade mal 500-800 ms.
Ganz ehrlich, sorge für Eindeutigkeit und baue den zweiten Taster ein. Das andere macht am Ende denke ich nicht glücklich.

Falls du es trotzdem testen willst, ist das einfachste, du nimmst den Original Code und schreibst direkt vor das playFolder ein Delay :face_vomiting: zum Warten und machst dann die Schalter Abgrage.

if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
// An der Stelle haben wir eine Karte erkannt und ausgelesen
// Jetzt warten ob der Schalter noch kommt
 Delay(800);
// Jetzt den Schalter abfragen. Bei B-Seite Ordner Nr+1
     If(digitalRead(switchB)) myfolder->folder = myfolder->folder +1;
      playFolder();
    }

Bezüglich der Abspielmodi stecke ich nicht so tief drin. Vielleicht kann @Gute_Laune uns da helfen? Die Frage ist viel mehr, was universeller ist. Bei Titel +1 wirst du dir die ganzen anderen Modi komplett vorenthalten. Bei Ordner +1 scheint mir das universeller.

Wirklich universell wird das nicht gehen. Denn spätesten bei den von-bis Modi braucht man dann ja immer 2 Alben mit der selben Anzahl an Tracks.
Da @Fred_H ja den Einzelmodus verwendet, kann man dann auch einfach diesen verwenden.
Beim Befüllen kann ich mir 2 Tracks in Folge als leichter vorstellen, als 2 Tracks in unterschiedlichen Ordnern.

Man kann doch auch die L und R Spur am DF Player abgreifen.
Dafür braucht es einen separaten Verstärker und eine Umschaltung welche der Seite im Lautsprecher ertönt.

Das war Freds ursprüngliche Idee. Aber diese bedingt erheblichen Hardware Aufwand, weil der DF Player das nativ nicht unterstützt. Und man müsste immer zwei Hörspiele exakt gleicher Länge zusammen coodieren. Sonst wartet derr Player auf das Ende der Stereo Datei, obwohl aif der L Spur schon lange nur noch Rauschen zu hören ist. Das scheint mir unangemessen aufwändig.

Ah ja die Länge ist tatsächlich ein Problem.

Die A/B Seitenerkennung der Karte finde ich aber tatsächlich sehr spannend.

Hier bedarf es aber tatsächlich zwei Informationsgeber.
1.Ist eine Karte vorhanden
2.Welche Seite ist die gewünschte.

Auf Informationen 1 kann man je nach Information 2 die Karte lesen und bewerten.

Das bedarf aber etwas mechanischem Aufwand.
Die zwei Angesprochenen Microtaster oder zwei Lichtschranken (die wären ohne mechanische abnutzung)

Man könnte die zwei Eingaben auch etwas redundant gestalten und sagen
Schalter 1 =Seite A
Schalter 2 = Seite B

Einer muss gedrückt sein damit der Kartenleser ausliest. Wenn keiner oder beide gedrückt sind, ist es eben ungültig.
Oder man macht mit beiden Schaltern eine Seite C.

1 „Gefällt mir“