Hallo, ich habe mit einem Arduino UNO und einem Ultraschall-Sensor ein Entfernungsmessgerät gebaut, welches dann per Knopfdruck die Entfernung auf einem LC-Display anzeigt. Jetzt hab ich mir gedacht es wäre doch nett wenn ich irgendwie auch noch eine Sprachausgabe bekommen könnte. Nach Benutzung der Suchfunktion und Google sieht es so aus als müsste ich noch zusätzlich ein Board haben das mit dem Audio umgeht. Ich will nicht wirklich was fertiges kaufen, dehalb hab ich mir gedacht ich könnte vielleicht den Arduino an meinen Raspberry Pi hängen und es darüber ausgeben lassen, das schränkt die Mobilität natürlich stark ein, aber die Sprachausgabe ist eher als Lernprojekt gedacht als eine dauerhafte Erweiterung. Hat jemand Ansätze/Ideen? Henrik
Henrik S. schrieb: > Jetzt hab ich mir gedacht es wäre doch nett wenn ich irgendwie auch noch > eine Sprachausgabe bekommen könnte. Ist im Prinzip überhaupt kein Problem, PWM-Ausgänge hat der Atmel genug. Alles, was du an Hardware brauchst, ist ein Filter und ein Verstärker, wobei das beides natürlich auch eine Einheit bilden kann, da NF-Verstärker heutzutage ja sowieso fast alles OVs sind und mit entsprechender Beschaltung des Rückkopplungszweiges problemlos gleichzeitig als Filter dienen können. Ein Problem bleibt allerdings: Die Samples brauchen recht viel Platz. Zwar reichen für Sprachausgabe 8 Bit Auflösung mit 11kHz Samplefrequenz völlig aus, aber auch das sind eben 11KByte/s. Da paßt nicht allzu viel von in einen AVR, in die größten gerade mal ca. 20 Sekunden. Du brauchst also höchstwahrscheinlich externen Speicher, z.B. eine SD-Card.
Also für eine Variante die nur mit dem AVR funktioniert dachte ich mir folgendes: Wenn ich eine Entfernung von z.B. 1,23 cm habe liest der code die erste Zahl (1), sagt "eins", liest das Komma, sagt "Komma" etc... Die zahlen von 0 - 9 und das Wort "Komma" kann ich in 1 sec packen, es muss ja nicht gut klingen. Wie würde ich das denn Code-Technisch realisieren? Also wie sag ich dem Controller, dass er die erste Ziffer der Zahl lesen soll und wie gebe ich dann das wort "eins" aus? Henrik
>Also wie sag ich dem >Controller, dass er die erste Ziffer der Zahl lesen soll und wie gebe >ich dann das wort "eins" aus? Vergiss dein Projekt einfach. Das ist drei Zehnerpotenzen zu hoch für dich.
>>Also wie sag ich dem >>Controller, dass er die erste Ziffer der Zahl lesen soll und wie gebe >>ich dann das wort "eins" aus? > > Vergiss dein Projekt einfach. Das ist drei Zehnerpotenzen zu hoch > für dich. Also meine erste Frage ziehe ich erstmal zurück, ich bleibe einfach bei ganzen Zahlen, d.h. ich brauche "nur" einen Weg, das Wort "eins" über einen Lautsprecher auszugeben. Wie gehe ich das an? Henrik
Einfachste und flexibelste Variante dürfte das abspielen einzelner wav-Files von einer SD-Karte sein. Für Arduino gibt es einige Beispiele für wav-Player. Vom Prinzip her habe ich das auch so für die Ausgabe von Telemetriedaten gemacht, allerdings in BASCOM, mit entsprechenden Dateien: 1.wav, 2.wav, 100.wav, Komma.wav, Spannung.wav...., die dann aufgrund der aufbereiteten Daten nacheinander aufgerufen werden.
Ist das WAV Format dazu nicht unnötig komplex? Ich würde es mit Rohdaten versuchen, die einfach nur noch richtig getaktet in den D/A Wandler übertragen müssen. Da fällt mir gerade ein: Es gibt doch MP3 Player Chips mit SD Interface, die man über eine serielle Schnittstelle dazu anweisen kann, eine Datei abzuspielen. Damit wäre es sicher am einfachsten - wenn man an so einen Chip heran kommen kann.
Danke erstmal für die ganzen Antworten! Ich würde das Ganze, wenn möglich, ohne zusätzliche Hardware (also zusätzliche Chips) realisieren. Ist das denn möglich? Henrik
Hi >Ich würde das Ganze, wenn möglich, ohne zusätzliche Hardware (also >zusätzliche Chips) realisieren. Ist das denn möglich? Ganz ohne wird es nicht gehen. Du willst ja schließlich auch etwas hören. Vielleicht kannst du hierauf aufbauen: http://www.atmel.com/Images/doc1456.pdf http://www.atmel.com/Images/avr335.zip MfG Spess
Das generelle Problem ist ja die Größe der Audiodaten. Spiel doch ein bisschen mit Audacity oder einem ähnlichen Programm rum um zu ermitteln, bis zu welcher Sampelrate die Sprachausgabe noch erträglich ist. Passen dann die Audiodaten und das Programm in das Flash ist das Problem gelöst. Die alten analogen Telefone waren von der Bandbreite auch bescheiden und dennoch konnten wir uns verständigen. Grüsse
Stefan Frings schrieb: > Ist das WAV Format dazu nicht unnötig komplex? Der Overhead von PCM-Wav ist kaum der Rede wert, das bissel IFF-Struktur-Gerümpel und der kleine Header fallen im Vergleich zu den Nutzdaten kaum in's Gewicht, selbst bei relativ kleinen Dateien, wie sie hier in der Anwendung benötigt werden würden. Gegen die geringe Platzersparnis steht der Vorteil, daß sich die WAV-Dateien sehr leicht mit jedem beliebigen Audioprogramm erzeugen und ggf. auch nochmal bearbeiten lassen. Also ich persönlich würde hier zwar sicher auch drüber nachdenken, RAW-Daten zu verwenden, aber mich letztlich wohl doch lieber für in einen WAV-Container verpackte entscheiden. Wenn's wirklich eng werden sollte im Speicher, würde ich eher darüber nachdenken, einen einfachen Dekompressor (z.B. für ADPCM) zu implementieren. Sowas kann man nämlich auch in einen WAV-Container packen und dabei ca. 25..50% des Platzes bei kaum merklichen Qualitätsverlust sparen.
Hallo, wenn zur Ausgabe eine Roboterstimme ausreichend verständlich ist, gibt es schon seit Urzeiten Lösungen, die ca. 8..16 Kilobyte groß sind. Zwei Probleme tun sich auf: * Es handelt sich um Abandonware, herrenlose Software ohne Quelltext * Kann nur englisch, beim Versuch der Deutschanpassung klingt's immer noch englisch Jemand bei Github hat sich dem Problem mit dem fehlenden Quelltext zum Glück angenommen, allerdings für eine Portierung auf 32 Bit - das ist ja keine Kunst! Er/sie hat die Binärdateien disassembliert und decompiliert, es handelt sich nunmehr um C-Quelltext. Ich habe seinen/ihren Quelltext weiter entschlackt und das Programm in 4 (Windows-)Teilprogramme von < 8 KByte Größe aufgeteilt, von denen man für eine Ausgabe von Zahlen nur das 3. Teilprogramm für den Arduino aka AVR compilieren muss: Es rechnet Phoneme in PCM-Waveform um. Eine Sampletabelle von reichlich 1 KByte ist drin v.a. für die Zischlaute, während 3 Sinusgeneratoren per DDS für den Ton (der Vokale) sorgen. So kommt man ohne externen Speicher aus. Die Phoneme sind nur wenig länger als geschriebener UTF-16-Text. Das erspart es, menschenlesbaren Text auf dem AVR in Phoneme übersetzen zu müssen, das kann man mit dem Windows-PC tun. Siehe http://www.tu-chemnitz.de/~heha/Mikrocontroller/Sprache/#2
:
Bearbeitet durch User
Aha, wieder was gelernt, danke! Gibt's schon lange, nur zu finden war's für mich nicht, weil's eben kein Text-To-Speech ist (was hier auch gar nicht nötig erscheint) sondern LPC: https://de.wikipedia.org/wiki/Linear_Predictive_Coding Da muss jemand die Wörter (am PC) einsprechen, und mit etwas Glück kling's dann akzentfrei deutsch, bis auf die Kompressionsartefakte natürlich. Oder man nimmt die vorgesprochenen (englischen) Fragmente, die Teil der o.a. Software ist. Was ich aus der angegebenen Quelle nicht erfassen konnte: Wie sieht es hierbei mit dem Flash-Speicherbedarf aus? Also wieviel Kilobyte fix für den Dekompressor und wieviel Byte/Kilobyte im Mittel pro Silbe? Das könnte man in der readme.md des Github-Projekts angeben. Auch die Abkürzung LPC auftrieseln, meist ist's Local Procedure Call.
>Aha, wieder was gelernt, danke! >Gibt's schon lange, nur zu finden war's für mich nicht, weil's eben >kein Text-To-Speech ist (was hier auch gar nicht nötig erscheint) >sondern LPC: https://de.wikipedia.org/wiki/Linear_Predictive_Coding Die Umsetzung des Projekts ist eine enorme Leistung. Kaum einer würde glauben, dass man eine LPC-Dekoder mit den ganzen notwendigen Muliplikationen auf einem AVR umsetzen kann. Umso erstaunlicher ist, dass der ursprüngliche Code von "Text and Speech" 1978 stammt. https://de.wikipedia.org/wiki/Texas_Instruments_LPC-Sprachchips
Henrik S. schrieb: > Hat jemand Ansätze/Ideen? SD-Karte + PWM-Ausgang Beitrag "Re: Arduino Nano, SD Card, PCM" Wenn es relativ wenige Samples sind, könnte man die direkt in den Flash eines ArduinoMEGA packen, der hat 256kB. Allerdings muss man zur Ausnutzung der vollen 256 kB tricksen und ggf. ein neues Linkerscript erstellen, denn die originalen im Arduino ermöglichen maximal 64kB Daten und 128kB Programmspeicher! https://www.mikrocontroller.net/articles/Kategorie:AVR-GCC-Tutorial#Flash_mit_PROGMEM_und_pgm_read
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.