Inhaltsverzeichnis:

Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex - Gunook
Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex - Gunook

Video: Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex - Gunook

Video: Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex - Gunook
Video: Voice Sound Playback Module Arduino MP3 Player Module UART I/O Trigger 2024, November
Anonim
Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex
Vokalspiel mit Arduino und YX5300 MP3-Modul Catalex

Können Sie diese Frage lesen? Das ist seltsam! Ich habe diese Frage mit Absicht gestellt. Wenn Sie diesen Text lesen können, dann deshalb, weil Sie das ganze Alphabet kennen und natürlich alle Vokale kennengelernt haben.

Vokale sind in allen Wörtern vorhanden. Es ist unmöglich, jedem von ihnen zu entkommen. Lassen Sie mich Ihnen nun eine Frage stellen. Hat das Lernen in Ihrer Kindheit Spaß gemacht und waren technologische Ressourcen involviert?

Ich bin sicher, dass es nur wenige Lernressourcen gab und Sie traditionelle Methoden verwendet haben, um die Vokale und das Alphabet zu lernen.

Ist es schließlich möglich, einige technologische Ressourcen zu verwenden, um Vokale zu lernen?

In diesem Artikel werde ich Ihnen beibringen, wie Sie Ihren Schülern und Kindern Vokale durch ein Spiel beibringen können.

Ich werde Ihnen beibringen, wie Sie ein System mit einer Stimme erstellen, bei dem Ihr Kind/Schüler den Klang des Buchstabens hört und einen Knopf drücken muss, um den richtigen Buchstaben anzuzeigen.

So lernen sie beim Spielen und sind immer motiviert zu lernen.

Jetzt zeige ich Ihnen Schritt für Schritt, wie Sie Ihr eigenes Spiel erstellen und Kindern die Vokale beibringen können.

Lieferungen

JLCPCB-Leiterplatte

Arduino Uno

Druckknopfschalter

10kR Widerstand

Stiftleiste 2, 54mm 1x7

Schritt 1: Entwicklung des Vokalspiels mit Arduino

Entwicklung des Vokalspiels mit Arduino
Entwicklung des Vokalspiels mit Arduino

Das Herzstück des Spiels ist die JLCPCB-Leiterplatte der Vowels. Sie können auf diesen Link zugreifen und die Projektdateien herunterladen. Es hat 5 Tasten. Sie werden jede Taste verwenden, um einen Vokal darzustellen und ihn mit Ihrem Arduino zu verbinden.

Die Leiterplatte ist in Abbildung 1 dargestellt.

Schritt 2:

Bild
Bild

Mit diesem PCB-Projekt können Sie es mit dem Arduino verbinden und Ihr Spiel erstellen. Als nächstes biete ich Ihnen einen elektronischen Schaltplan an, damit Sie das Projekt auf Ihrem Protoboard zusammenbauen oder bauen können.

Schritt 3:

Von diesem Schaltplan aus richten wir das Layout der Elektronikplatine ein. Es wird in Abbildung 2 gezeigt und Sie können die Dateien herunterladen und Ihr Projekt erstellen.

Wählen Sie 5 Pins vom Arduino und verbinden Sie die Jumper auf der Platine mit dem Arduino. Andernfalls können Sie das folgende elektronische Diagramm zusammenstellen.

Schritt 4: Die Projektidee

Die Projektidee
Die Projektidee

Ich werde Ihnen beibringen, wie Sie mit Arduino ein MP3-Soundsystem zusammenbauen. Dieses System ist für die Wiedergabe der Stimme verantwortlich, die den Brief spricht. Der Klang jedes Buchstabens wird mit einem Wert von 1 bis 5 gezeichnet, wobei 1 für A steht und 5 für U steht.

Wenn das Kind den Ton hört, muss es also auf die Tastatur schauen, die Schreibweise des Vokals erkennen und die richtige Taste drücken.

Wenn dies fehlschlägt, blinkt das System die rote LED dreimal. Andernfalls aktiviert das System für 5 Sekunden einen Summer und zeichnet einen neuen Vokal.

Dazu müssen Sie die folgende Schaltung zusammenbauen.

In dieser Schaltung verbinden Sie das MP3-Modul und die Vokalplatine auf dem Arduino. Das Bluetooth-Modul wurde verwendet, um das Catalex MP3-Modul darzustellen.

Der Arduino ist dafür verantwortlich, die 5 Zahlen zu sortieren und dann den Befehl zu senden, um den gezeichneten Vokal zu aktivieren

Schritt 5:

Bild
Bild

Danach warten wir, bis das Kind hört und einen Knopf drückt, wie in der Abbildung oben gezeigt.

Jede Schaltfläche oben steht für einen Vokal des Alphabets. Als Nächstes zeige ich Ihnen, wie Sie die Programmierlogik für dieses Projekt erstellen.

Schritt 6: Erstellen der Programmierlogik des Spiels

Aufbau der Programmierlogik des Spiels
Aufbau der Programmierlogik des Spiels

Das Vokalspielsystem basiert auf der Funktionsweise des YX5300-Moduls. Dieses Modul hat einige Funktionen, wir werden uns jedoch darauf konzentrieren, die Arbeitsstruktur des Spiels durch die Hauptfunktionen des YX5300-Moduls zu präsentieren.

Im Folgenden stelle ich Ihnen die gesamte Programmierlogik des Projekts zur Verfügung.

Schritt 7:

Im Folgenden erkläre ich dir Schritt für Schritt, wie du die Logik dieses lustigen Spiels für Kinder aufbauen kannst.

#enthalten

#define ARDUINO_RX 5 //sollte mit TX des seriellen MP3-Player-Moduls verbinden #define ARDUINO_TX 6 //mit RX des Moduls verbinden SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statisch int8_t Send_buf[8] = {0}; // Puffer für Sendebefehle. // BESSER LOKAL static uint8_t ansbuf[10] = {0}; // Puffer für die Antworten. // BESSER LOCALLY String mp3Answer; // Antwort vom MP3. String-Antwort(ungültig); String sbyte2hex(uint8_tb); /************ Befehlsbyte *************************/ #define CMD_NEXT_SONG 0X01 // Als nächstes abspielen Lied. #define CMD_PREV_SONG 0X02 // Vorherigen Song abspielen. #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Einzelzyklus-Wiedergabe. #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLDER_UP 0X0F // Kontinuierliches Abspielen stoppen. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Einzelzyklus setzen. #define CMD_SET_DAC 0X1A #define DAC_ON 0X00 #define DAC_OFF 0X01 #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43_fine*DEF *** Meinungen **************************/ #define DEV_TF 0X02 /**************** ************************************************* *****/ int numero; Byte-Estado; Bytesummer = 2; Byte-Pin = 0; Byte Sortiernummer = 0; bool-Taste = 0; Void setup () { Serial.begin (9600); mp3.begin(9600); Verzögerung (500); für (Pin = 8; Pin 13) {Pin = 8; } Serial.println ("Varrendo …"); Serial.println (Stift); // Verzögerung (1000); } Während (Schaltfläche ! = 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand (0x03, 0, 6); Verzögerung (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand (0x03, 0, 7); Verzögerung (3000); } // Suche nach der Antwort. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } Verzögerung (100); //Serial.println("Tocando musica…"); } /**************************************************** ******************************/ /*Funktion sendMP3Command: Suche nach einem 'c'-Befehl und sende ihn an MP3 */ /*Parameter: c. Code für den MP3-Befehl, 'h' für Hilfe. */ /*Return: void */ void sendMP3Command(char c) {switch (c) {case '?': case 'h': Serial.println("HELP"); Serial.println("p = Abspielen"); Serial.println("P = Pause"); Serial.println("> = Weiter"); Serial.println(" ': Serial.println("Next"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // nach der Nummer der abgespielten Datei fragen Pause; Fall 'Speicherkarte eingelegt."; Pause; Fall 0x3D: decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // Fragt nach der Nummer der Datei spielt Pause; case 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Daten korrekt empfangen. "; break; case 0x42: decodedMP3Answer += " -> Status Wiedergabe: " + String(ansbuf[6], DEC); break; case 0x48: decodedMP3Answer += " -> Dateianzahl: " + String(ansbuf[6], DEC); break; case 0x4C: decodedMP3Answer += " -> Abspielen: " + String(ansbuf[6], DEC); break; case 0x4E: decodedMP3Answer += " -> Ordnerdateianzahl: " + String(ansbuf[6], DEC); break; case 0x4F: decodedMP3Answer += " -> Ordneranzahl: " + String(ansbuf [6], DEC); break; } decodedMP3Answer zurückgeben; } /************************************ ************ ********************************/ /*Funktion: Befehl an MP3 senden */ /*Parameter: byte Befehl */ /*Parameter: Byte dat1-Parameter für den Befehl */ /*Parameter: Byte dat2-Parameter für den Befehl */ void sendCommand(byte command){ sendCommand(command, 0, 0); aufrechtzuerhalten. Void sendCommand (Byte-Befehl, Byte Dat1, Byte Dat2) { Verzögerung (20); Send_buf[0] = 0x7E; // Send_buf[1] = 0xFF; // Send_buf[2] = 0x06; // Len Send_buf[3] = Befehl; // Send_buf[4] = 0x01; // 0x00 NEIN, 0x01 Rückmeldung Send_buf[5] = dat1; // Datenh Send_buf[6] = dat2; // Daten Send_buf[7] = 0xEF; // Serial.print ("Senden: "); für (uint8_t i = 0; i < 8; i++) { mp3.write (Send_buf); Serial.print (sbyte2hex (Send_buf)); } Serial.println(); } /**************************************************** *****************************/ /*Funktion: sbyte2hex. Gibt Byte-Daten im HEX-Format zurück. */ /*Parameter:- uint8_t b. Byte zum Konvertieren in HEX. */ /*Return: String */ String sbyte2hex(uint8_t b) { String shex; shex = "0X"; wenn (b < 16) shex += "0"; shex += String(b, HEX); shex += " "; zurücksechs; } /**************************************************** *****************************/ /*Funktion: shex2int. Gibt einen int aus einem HEX-String zurück. */ /*Parameter: s. char *s zum Konvertieren in HEX. */ /*Parameter: nr. char *s' Länge. */ /*Return: int */ int shex2int(char *s, int n){ int r = 0; für (int i=0; i='0' && s='A' && s<='F'){ r *= 16; r += (s - 'A') + 10; } } Rückgabe r; } /**************************************************** *****************************/ /*Funktion: Antwort. Gibt eine String-Antwort vom MP3-UART-Modul zurück. */ /*Parameter:- uint8_t b. Leere. */ /*Return: String. Wenn die Antwort gut formatiert ist. */ String sanswer(void) { uint8_t i = 0; Zeichenfolge mp3answer = ""; // Erhalte nur 10 Bytes while (mp3.available() && (i <10)) { uint8_t b = mp3.read(); ansbuf = b; i++; mp3Antwort += sbyte2hex(b); } // wenn das Antwortformat richtig ist. if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } return "???: " + mp3answer; }

Zuerst definieren wir alle Programmvariablen und die Zugriffsregisteradressen des YX5300-Moduls.

#enthalten

#define ARDUINO_RX 5 //sollte mit TX des seriellen MP3-Player-Moduls verbunden werden #define ARDUINO_TX 6 //mit RX des Moduls verbinden SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statisch int8_t Send_buf[8] = {0}; // Puffer für Sendebefehle. // LOKAL BESSER static uint8_t ansbuf[10] = {0}; // Puffer für die Antworten. // BESSER LOCALLY String mp3Answer; // Antwort vom MP3. String-Antwort(ungültig); String sbyte2hex(uint8_tb); /************ Befehlsbyte *************************/ #define CMD_NEXT_SONG 0X01 // Als nächstes abspielen Lied. #define CMD_PREV_SONG 0X02 // Vorherigen Song abspielen. #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Einzelzykluswiedergabe. #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLDER_UP 0X0F // Kontinuierliches Abspielen stoppen. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Einzelzyklus setzen. #define CMD_SET_DAC 0X1A #define DAC_ON 0X00 #define DAC_OFF 0X01 #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43_fine*DEF *** Meinungen **************************/ #define DEV_TF 0X02 /**************** ************************************************* *****/ int numero; Byte-Estado; Bytesummer = 2; Byte-Pin = 0; Byte Sortiernummer = 0; bool-Taste = 0;

Schritt 8:

Diese Registeradressen werden verwendet, um den Betrieb des Moduls zu konfigurieren. Sehen Sie sich beispielsweise diese Registrierungsadresse unten an.

#define CMD_PLAY_W_INDEX 0X03

Adresse 0x03 ist mit dem Namen CMD_PLAY_W_INDEX definiert. Es wird verwendet, um einen Song über seine Nummer auszulösen, dh Sie geben die Nummer des Sounds ein und er wird abgespielt.

Mit diesen Werten werden wir sie verwenden und die Funktionsweise unseres Projekts konfigurieren.

Nachdem Sie die verschiedenen zu verwendenden Adressen definiert haben, gehen wir in die Setup-Funktion und konfigurieren die Pins und die serielle Kommunikation für unser Projekt.

Schritt 9: Die Funktion "Void Setup()"

Sehen Sie sich als Nächstes die Funktion "Void Setup" an. Ich habe alle Einstellungen der Tastenstifte, der seriellen Kommunikation des MP3-Moduls und der Initialisierung des Kartenmoduls im MP3 vorgenommen.

Void-Setup ()

{ Serial.begin (9600); mp3.begin(9600); Verzögerung (500); for (Pin = 8; Pin < 13; Pin ++) { PinMode (Pin, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); Verzögerung (500); }

Ich habe die serielle Kommunikation gestartet, um Daten auf die serielle Schnittstelle des Computers zu drucken, und dann starteten wir die serielle Kommunikation über das mp3-Objekt.

Serial.begin (9600);

mp3.begin(9600); Verzögerung (500);

Das mp3-Modul wird durch Befehle gesteuert, die von der Arduino-Seriell empfangen werden. In diesem Prozess haben wir die SoftwareSerial-Bibliothek verwendet und eine serielle auf den digitalen Arduino-Pins emuliert.

Auf diese Weise können Sie das Arduino verwenden, um das MP3-Modul durch an ihn gesendete Befehle zu steuern.

Außerdem haben wir die Konfiguration der digitalen Pins und die Initialisierung des MP3-Kartenmoduls vorgenommen

for (Pin = 8; Pin < 13; Pin ++) { PinMode (Pin, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); Verzögerung (500);

Nachdem wir die Konfiguration vorgenommen haben, müssen wir zur Hauptlogik in der Funktion void loop gehen.

Schritt 10: Die Hauptfunktion Void Loop ()

Der Code ist sehr einfach und die gesamte logische Struktur wird unten dargestellt. Im Folgenden erkläre ich Ihnen die komplette Logik der Hauptfunktion.

Leere Schleife ()

{Stift = 8; randomSeed (analogRead (A0)); numero = zufällig (8, 12); Sortiernummer = numero; Numero = Numero - 7; Serial.println (numero); sendCommand(0x03, 0, numero); Verzögerung (1000); tun { button = digitalRead (pin); Serial.println (Schaltfläche); Stift++; Wenn (Pin> 13) {Pin = 8; } Serial.println ("Varrendo …"); Serial.println (Stift); // Verzögerung (1000); } Während (Schaltfläche ! = 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand (0x03, 0, 6); Verzögerung (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand (0x03, 0, 7); Verzögerung (3000); } // Suche nach der Antwort. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } Verzögerung (100); //Serial.println("Tocando musica…"); }

Bei jedem Start des Schleifenfunktionszyklus erzeugen wir einen neuen Wert zwischen 8 und 12, um den Klang eines Vokals zu erzeugen. Der Wert von 8 bis 12 bezieht sich auf den digitalen Pin des Vokals.

Der Code zur Generierung des Zufallswerts ist unten dargestellt.

Stift = 8;

randomSeed (analogRead (A0)); numero = zufällig (8, 12); Sortiernummer = numero;

Außerdem ziehen wir 7 von dem gezogenen Betrag zwischen 8 und 12 ab. Dadurch können wir auf die Positionen 1 bis 5 der auf der Speicherkarte aufgezeichneten Songs zeigen.

Numero = Numero - 7;

Danach reproduzierte ich den Klang des Vokals, der auf der Linie unten gezeichnet wurde.

sendCommand(0x03, 0, numero);

Verzögerung (1000);

Jetzt ist die wichtige Zeit gekommen: der Moment, in dem wir den vom Kind gedrückten Knopf lesen werden. Der Codeteil wird unten dargestellt.

tun

{-Taste = digitalRead (Pin); Serial.println (Schaltfläche); Stift++; Wenn (Pin> 13) {Pin = 8; } Serial.println ("Varrendo …"); Serial.println (Stift); // Verzögerung (1000); } Während (Schaltfläche ! = 1);

Diese Schleife wird ausgeführt, bis der Benutzer die Tasten drückt. Mit der Schlaufe können Sie die 5 digitalen Stifte scannen und sobald das Kind einen der Knöpfe drückt, kommt es aus der Schlaufe und überprüft, ob das Kind richtig reagiert hat.

Sie führen die Überprüfung mit dem unten stehenden Code durch.

if(button == 1 && (pin-1) != SortNumber)

{ sendCommand (0x03, 0, 6); Verzögerung (3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand (0x03, 0, 7); Verzögerung (3000); }

Die erste Bedingung wird ausgeführt, wenn der Benutzer einen Fehler macht, weil eine Schaltfläche gedrückt wurde und der ausgelöste Wert des Pins sich vom gezeichneten Pin (SortNumber) unterscheidet.

An dieser Stelle müssen Sie den folgenden Befehl ausführen.

sendCommand (0x03, 0, 6);

Verzögerung (3000);

Dieser Befehl wird verwendet, um den falschen Antwortton auszulösen. Schließlich haben wir die zweite Bedingung, die verwendet wird, um zu überprüfen, ob das Kind Recht hat.

if(button == 1 && (pin-1) == SortNumber)

{ sendCommand (0x03, 0, 7); Verzögerung (3000); }

Schritt 11:

Bild
Bild

Wenn eine Taste gedrückt wurde und der gedrückte digitale Pin mit dem gezogenen Pin übereinstimmt, löst das System einen richtigen Antwortton aus.

Wie ich Ihnen erkläre, ist dieser Code sehr einfach und wird jedem Kind helfen, sein Vokalwissen durch ein Spiel mit Arduino zu entwickeln.

In der Abbildung oben führt die Soundbox den Song aus, der auf der SD-Karte des MP3-Moduls YX5300 gespeichert ist.

Schritt 12: Fazit

Der Unterricht im Klassenzimmer muss ständig geändert werden und der Arduino kann ein großartiger Verbündeter sein, um lustige Aufgaben zu erstellen.

Durch dieses Projekt war es möglich, eine einfache Aktivität zu entwickeln, die die Fähigkeiten von Kindern durch Kenntnis des Klangs und der Schreibweise jedes Vokals fördert.

Im Gegensatz zu traditionellen Lehrmethoden lernen Kinder durch Spaß im Klassenzimmer durch Spiele und Elektronik.

Schritt 13: Bestätigung

Dieses Projekt wurde dank der Unterstützung und Ermutigung der Firma JLCPCB entwickelt. Sie förderten die Bildung und luden uns ein, das Vokalspiel für den Unterricht von Kindern im Klassenzimmer zu entwickeln.

Wenn Sie die elektronischen Platten des Spiels der Vokale kaufen möchten, können Sie auf diesen Link zugreifen und 10 Einheiten für 2 US-Dollar bei JLCPCB erwerben.

Empfohlen: