Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Spracherkennung und -synthese mit Arduino

Komponenten und Verbrauchsmaterialien

Arduino Due
× 1
SparkFun Elektret-Mikrofon Breakout
× 1
SparkFun Mono Audio Amp Breakout
× 1
Lautsprecher:0,25 W, 8 Ohm
× 1
Breadboard (generisch)
× 1
5 mm LED:Rot
× 3
Widerstand 330 Ohm
× 3
Jumper (generisch)
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

BitVoicer Server 1.0

Über dieses Projekt

In meinem vorherigen Projekt habe ich gezeigt, wie man ein paar LEDs mit einem Arduino-Board und BitVoicer Server steuert. In diesem Projekt werde ich die Dinge etwas komplizierter machen. Ich werde auch Sprache mit dem Arduino DUE Digital-Analog-Wandler (DAC) synthetisieren. Wenn Sie kein Arduino DUE haben, können Sie andere Arduino-Boards verwenden, aber Sie benötigen einen externen DAC und etwas zusätzlichen Code, um den DAC zu betreiben (die BVSSpeaker-Bibliothek hilft Ihnen dabei nicht).

Im Video unten sehen Sie, dass ich auch den Arduino dazu bringe, ein kleines Lied zu spielen und die LEDs blinken, als wären sie Klaviertasten. Tut mir leid für meine Klavierkenntnisse, aber das ist das Beste, was ich tun kann :) . Die LEDs blinken tatsächlich in der gleichen Reihenfolge und im gleichen Timing wie echte C-, D- und E-Tasten. Wenn Sie also ein Klavier in der Nähe haben, können Sie den LEDs folgen und denselben Song spielen. Es ist ein Jingle von einem alten Händler (Mappin), den es gar nicht mehr gibt.

Die folgenden Verfahren werden ausgeführt, um Sprachbefehle in LED-Aktivität und synthetisierte Sprache umzuwandeln:

  • 1. Audiowellen werden vom Sparkfun Electret Breakout Board erfasst und verstärkt;
  • 2. Das verstärkte Signal wird digitalisiert und im Arduino mit seinem Analog-Digital-Wandler (ADC) gepuffert;
  • 3. Die Audiobeispiele werden über den seriellen Arduino-Port an den BitVoicer-Server gestreamt;
  • 4. BitVoicer Server verarbeitet den Audiostream und erkennt die darin enthaltene Sprache;
  • 5. Die erkannte Sprache wird vordefinierten Befehlen zugeordnet, die an das Arduino zurückgesendet werden. Wenn einer der Befehle darin besteht, Sprache zu synthetisieren, bereitet BitVoicer Server den Audiostream vor und sendet ihn an den Arduino;
  • 6. Der Arduino identifiziert die Befehle und führt die entsprechende Aktion aus. Wenn ein Audiostream empfangen wird, wird er in die BVSSpeaker-Klasse eingereiht und mit dem DUE DAC und DMA abgespielt.
  • 7. Der SparkFun Mono Audio Amp verstärkt das DAC-Signal, sodass er einen 8-Ohm-Lautsprecher ansteuern kann.

Materialliste:

  • Arduino Fälligkeit:~U$ 50,00
  • Sparkfun Elektret-Mikrofon Breakout:7,95 US-Dollar
  • SparkFun Mono Audio Amp Breakout:7,95 US-Dollar
  • BitVoicer Server 1.0:9,90 US-Dollar
  • 8-Ohm-Lautsprecher:~2,00 USD
  • Breadboard:~10,00 US-Dollar
  • 3 x LEDs:~1,00 USD
  • 3 x 330 Ohm Widerstände:~U$ 0,75
  • Überbrückungskabel:~0,50 US$

SCHRITT 1:Verkabelung

Der erste Schritt besteht darin, das Arduino und das Steckbrett mit den Komponenten zu verdrahten, wie in den Bildern unten gezeigt. Ich musste einen kleinen Gummi unter den Lautsprecher legen, da er stark vibriert und ohne den Gummi die Audioqualität erheblich beeinträchtigt wird.

Hier haben wir einen kleinen, aber wichtigen Unterschied zu meinem vorherigen Projekt. Die meisten Arduino-Boards laufen mit 5 V, aber das DUE läuft mit 3,3 V. Da ich mit dem Sparkfun Electret Breakout bei 3,3 V bessere Ergebnisse erzielt habe, empfehle ich Ihnen, einen Jumper zwischen dem 3,3 V-Pin und dem AREF-Pin hinzuzufügen, wenn Sie 5 V-Arduino-Boards verwenden. Das DUE verwendet bereits eine analoge 3,3-V-Referenz, sodass Sie keinen Jumper zum AREF-Pin benötigen. Tatsächlich ist der AREF-Pin des DUE über eine Widerstandsbrücke mit dem Mikrocontroller verbunden. Um den AREF-Pin zu verwenden, muss der Widerstand BR1 von der Platine abgelötet werden.

SCHRITT 2:Hochladen des Codes auf den Arduino

Jetzt müssen Sie den folgenden Code auf Ihr Arduino hochladen. Der Einfachheit halber ist die Arduino-Skizze auch im Abschnitt Anhänge am Ende dieses Beitrags verfügbar. Bevor Sie den Code hochladen, müssen Sie die BitVoicer Server-Bibliotheken ordnungsgemäß in der Arduino IDE installieren (Importieren einer .zip-Bibliothek).

Arduino-Skizze :BVS_Demo2.ino

Diese Skizze besteht aus sieben Hauptteilen:

  • Bibliotheksreferenzen und Variablendeklaration :Die ersten vier Zeilen enthalten Verweise auf die BVSP-, BVSMic-, BVSSpeaker- und DAC-Bibliotheken. Diese Bibliotheken werden von BitSophia bereitgestellt und befinden sich im BitVoicer Server-Installationsordner. Die DAC-Bibliothek wird automatisch eingebunden, wenn Sie eine Referenz zur BVSSpeaker-Bibliothek hinzufügen. Die anderen Zeilen deklarieren Konstanten und Variablen, die in der gesamten Skizze verwendet werden. Die BVSP-Klasse wird verwendet, um mit BitVoicer Server zu kommunizieren, die BVSMic-Klasse wird verwendet, um Audiosamples aufzunehmen und zu speichern und die BVSSpeaker-Klasse wird verwendet, um Audio mit dem DUE DAC wiederzugeben.
  • Einrichtungsfunktion :Diese Funktion führt die folgenden Aktionen aus:stellt die Pin-Modi und ihren Anfangszustand ein; initialisiert die serielle Kommunikation; und initialisiert die Klassen BVSP, BVSMic und BVSSpeaker. Es setzt auch „Ereignishandler“ (eigentlich sind es Funktionszeiger) für die FrameReceived-, modeChanged- und streamReceived-Ereignisse der BVSP-Klasse.
  • Loop-Funktion :Diese Funktion führt fünf wichtige Aktionen aus:Fordert Statusinformationen an den Server an (Funktion KeepAlive()); prüft, ob der Server Daten gesendet hat und verarbeitet die empfangenen Daten (receive()-Funktion); steuert die Aufnahme und das Senden von Audiostreams (isSREAvailable(), startRecording(), stopRecording() und sendStream() Funktionen); spielt die in die BVSSpeaker-Klasse eingereihten Audio-Samples (play()-Funktion); und ruft die Funktion playNextLEDNote() auf, die steuert, wie die LEDs blinken sollen, nachdem der Befehl playLEDNotes empfangen wurde.
  • BVSP_frameReceived-Funktion :Diese Funktion wird jedes Mal aufgerufen, wenn die Funktion receive() erkennt, dass ein vollständiger Frame empfangen wurde. Hier führe ich die vom BitVoicer Server gesendeten Befehle aus. Befehle, die die LEDs steuern, enthalten 2 Byte. Das erste Byte gibt den Pin und das zweite Byte den Pinwert an. Ich verwende die Funktion analogWrite(), um den entsprechenden Wert für den Pin zu setzen. Ich überprüfe auch, ob der Befehl playLEDNotes vom Typ Byte empfangen wurde. Wenn es empfangen wurde, setze ich playLEDNotes auf true und markieren Sie die aktuelle Uhrzeit. Diese Zeit wird von der Funktion playNextLEDNote verwendet, um die LEDs mit dem Song zu synchronisieren.
  • BVSP_modeGeänderte Funktion :Diese Funktion wird jedes Mal aufgerufen, wenn die Funktion receive() einen Moduswechsel in ausgehender Richtung erkennt (Server --> Arduino). WOW!!! Was ist das?! BitVoicer Server kann gerahmte Daten- oder Audiostreams an das Arduino senden. Bevor die Kommunikation von einem Modus in einen anderen übergeht, sendet BitVoicer Server ein Signal. Die BVSP-Klasse identifiziert dieses Signal und löst das modeChanged-Ereignis aus. Wenn ich in der BVSP_modeChanged-Funktion erkenne, dass die Kommunikation vom Stream-Modus in den Frame-Modus wechselt, weiß ich, dass das Audio beendet ist, sodass ich der BVSSpeaker-Klasse sagen kann, dass sie die Wiedergabe von Audiobeispielen stoppen soll.
  • BVSP_streamReceived-Funktion :Diese Funktion wird jedes Mal aufgerufen, wenn die Funktion receive() erkennt, dass Audiosamples empfangen wurden. Ich rufe einfach die Samples ab und reibe sie in die BVSSpeaker-Klasse ein, damit die Funktion play() sie reproduzieren kann.
  • playNextLEDNote-Funktion :Diese Funktion wird nur ausgeführt, wenn die Funktion BVSP_frameReceived den Befehl playLEDNotes identifiziert. Es steuert und synchronisiert die LEDs mit dem vom BitVoicer Server gesendeten Audio. Um die LEDs mit dem Audio zu synchronisieren und das richtige Timing zu kennen, habe ich Sonic Visualizer verwendet. Mit dieser kostenlosen Software konnte ich die Audiowellen sehen, sodass ich leicht erkennen konnte, wann eine Klaviertaste gedrückt wurde. Es zeigt auch eine Zeitleiste und so habe ich die Millisekunden erhalten, die in dieser Funktion verwendet werden. Klingt nach einem dummen Trick und ist es auch. Ich denke, es wäre möglich, den Audiostream zu analysieren und die entsprechende LED einzuschalten, aber das ist außerhalb meiner Reichweite.

SCHRITT 3:Importieren von BitVoicer Server-Lösungsobjekten

Jetzt müssen Sie BitVoicer Server einrichten, um mit dem Arduino zu arbeiten. BitVoicer Server hat vier Hauptlösungsobjekte:Standorte, Geräte, Binärdaten und Sprachschemas.

Standorte stellen den physischen Standort dar, an dem ein Gerät installiert ist. In meinem Fall habe ich einen Standort namens Home erstellt.

Geräte sind die BitVoicer Server-Clients. Ich habe ein gemischtes Gerät erstellt, es ArduinoDUE genannt und die Kommunikationseinstellungen eingegeben. WICHTIG :Sogar das Arduino DUE hat eine kleine Menge an Speicher, um alle Audiosamples zu speichern, die BitVoicer Server streamen wird. Wenn Sie die Bandbreite nicht begrenzen, benötigen Sie einen viel größeren Puffer, um das Audio zu speichern. Aus diesem Grund hatte ich einige Pufferüberläufe, sodass ich die Datenrate in den Kommunikationseinstellungen auf 8000 Samples pro Sekunde begrenzen musste.

BinaryData ist ein Befehlstyp, den BitVoicer Server an Clientgeräte senden kann. Sie sind eigentlich Byte-Arrays, die Sie mit Befehlen verknüpfen können. Wenn BitVoicer Server Sprache im Zusammenhang mit diesem Befehl erkennt, sendet er das Byte-Array an das Zielgerät. Ich habe für jeden Pin-Wert ein BinaryData-Objekt erstellt und sie ArduinoDUEGreenLedOn, ArduinoDUEGreenLedOff und so weiter genannt. Am Ende hatte ich 18 BinaryData-Objekte in meiner Lösung, daher schlage ich vor, dass Sie die Objekte aus der VoiceSchema.sof . herunterladen und importieren Datei unten.

Bei Voice-Schemas kommt alles zusammen. Sie definieren, welche Sätze erkannt und welche Befehle ausgeführt werden sollen. Für jeden Satz können Sie beliebig viele Befehle und deren Ausführungsreihenfolge definieren. Sie können auch Verzögerungen zwischen Befehlen definieren. So habe ich es geschafft, die im Video gezeigte Abfolge von Aktionen auszuführen.

Einer der Sätze in meinem Voice-Schema ist „Spiel ein kleines Lied“. Dieser Satz enthält zwei Befehle. Der erste Befehl sendet ein Byte, das angibt, dass der folgende Befehl ein Audiostream sein wird. Der Arduino beginnt dann, die LEDs zu „spielen“, während das Audio übertragen wird. Das Audio ist ein kleiner Piano-Jingle, den ich selbst aufgenommen und als Audioquelle des zweiten Befehls eingestellt habe. BitVoicer Server unterstützt nur 8-Bit-Mono-PCM-Audio (8000 Samples pro Sekunde). Wenn Sie also eine Audiodatei in dieses Format konvertieren müssen, empfehle ich das folgende Online-Konvertierungstool:http://audio.online-convert.com/convert -to-wav.

Sie können alle Lösungsobjekte, die ich in diesem Projekt verwendet habe, aus den folgenden Dateien importieren (Importieren von Lösungsobjekten). Einer enthält das DUE-Gerät und der andere enthält das Sprachschema und seine Befehle.

Lösungsobjektdateien :

  • Device.sof
  • VoiceSchema.sof

SCHRITT 4:Fazit

Los geht's! Du kannst alles einschalten und die gleichen Dinge tun, die im Video gezeigt werden.

Wie in meinem vorherigen Projekt habe ich die Spracherkennung gestartet, indem ich das Arduino-Gerät im BitVoicer Server Manager aktiviert habe. Sobald es aktiviert wird, identifiziert das Arduino eine verfügbare Spracherkennungs-Engine und beginnt mit dem Streaming von Audio an den BitVoicer-Server. Jetzt sehen Sie jedoch viel mehr Aktivität in der Arduino RX-LED, während Audio vom BitVoicer-Server zum Arduino gestreamt wird.

Bei meinem nächsten Projekt werde ich etwas ehrgeiziger sein. Ich werde WiFi-Kommunikation zu einem Arduino hinzufügen und zwei andere Arduinos alle zusammen per Sprache steuern. Ich denke an eine Art Spiel zwischen ihnen. Vorschläge sind sehr willkommen!

Code

  • Arduino-Skizze
Arduino-SkizzeArduino
#include #include #include #include // Definiert den Arduino-Pin, der zum Aufnehmen von Audio verwendet wird #define BVSM_AUDIO_INPUT 7// Definiert die LED-Pins#define RED_LED_PIN 6#define YELLOW_LED_PIN 9#define GREEN_LED_PIN 10// Definiert die Konstanten, die als Parameter an // die BVSP.begin-Funktion übergeben werden const unsigned long STATUS_REQUEST_TIMEOUT =3000;const unsigned long STATUS_REQUEST =4000;//INTERVAL =4000;//INTERVAL Definiert die Größe des Mikrofon-Audiopuffers const int MIC_BUFFER_SIZE =64;// Definiert die Größe des Lautsprecher-Audiopuffers const int SPEAKER_BUFFER_SIZE =128;// Definiert die Größe des Empfangspuffers const int RECEIVE_BUFFER_SIZE =2;// Initialisiert eine neue globale Instanz der BVSP-Klasse BVSP bvsp =BVSP();// Initialisiert eine neue globale Instanz der BVSMic-Klasse BVSMic bvsm =BVSMic();// Initialisiert eine neue globale Instanz der BVSSpeaker-Klasse BVSSpeaker bvss =BVSSpeaker();// Erstellt ein Puffer, der verwendet wird, um aufgezeichnete Samples // von t . zu lesen he BVSMic-Klasse byte micBuffer[MIC_BUFFER_SIZE];// Erstellt einen Puffer, der verwendet wird, um Audiosamples // in die BVSSpeaker-Klasse zu schreiben byte speakerBuffer[SPEAKER_BUFFER_SIZE];// Erstellt einen Puffer, der verwendet wird, um die gesendeten Befehle zu lesen // vom BitVoicer-Server.// Byte 0 =Pin-Nummer// Byte 1 =Pin-Wertbyte ReceiveBuffer[RECEIVE_BUFFER_SIZE];// Diese Variablen werden verwendet, um zu steuern, wann gespielt wird// "LED Notes". Diese Noten werden zusammen mit // dem von BitVoicer Server gestreamten Song abgespielt. pinMode (GELB_LED_PIN, AUSGANG); pinMode (GREEN_LED_PIN, AUSGANG); // Setzt den Anfangszustand aller LEDs digitalWrite (RED_LED_PIN, LOW); digitalWrite (GELB_LED_PIN, NIEDRIG); digitalWrite (GRÜN_LED_PIN, NIEDRIG); // Startet die serielle Kommunikation mit 115200 bps Serial.begin(115200); // Legt den seriellen Arduino-Port fest, der für die // Kommunikation verwendet wird, wie lange es dauert, bis eine // Statusanfrage abläuft und wie oft Statusanfragen an // BitVoicer Server gesendet werden sollen. bvsp.begin(Seriell, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Definiert die Funktion, die das Ereignis frameReceived // behandelt bvsp.frameReceived =BVSP_frameReceived; // Setzt die Funktion, die das modeChanged // Ereignis behandelt bvsp.modeChanged =BVSP_modeChanged; // Setzt die Funktion, die das streamReceived // Ereignis behandelt bvsp.streamReceived =BVSP_streamReceived; // Bereitet den BVSMic-Klassen-Timer vor bvsm.begin(); // Setzt den DAC, der von der BVSSpeaker-Klasse verwendet wird bvss.begin(DAC);}void loop() { // Prüft, ob das Statusanfrageintervall abgelaufen ist und // wenn ja, sendet eine Statusanfrage an den BitVoicer Server bvsp.keepAlive(); // Prüft, ob Daten am seriellen Port-Puffer verfügbar sind // und verarbeitet deren Inhalt gemäß den Spezifikationen // des BitVoicer Server Protocol bvsp.receive(); // Prüft, ob eine SRE verfügbar ist. Falls vorhanden, // startet die Aufnahme. if (bvsp.isSREAvailable()) { // Wenn die BVSMic-Klasse nicht aufzeichnet, richtet // den Audioeingang ein und startet die Aufzeichnung if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, DEFAULT); bvsm.startRecording(); } // Prüft, ob die BVSMic-Klasse verfügbare Samples hat if (bvsm.available) { // Stellt sicher, dass der eingehende Modus STREAM_MODE ist, bevor // der Stream übertragen wird if (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Liest die Audio-Samples aus der BVSMic-Klasse int bytesRead =bvsm.read(micBuffer, MIC_BUFFER_SIZE); // Sendet den Audiostream an den BitVoicer Server bvsp.sendStream(micBuffer, bytesRead); } } else { // Es ist kein SRE verfügbar. Wenn die BVSMic-Klasse aufzeichnet, // stoppt sie. if (bvsm.isRecording) bvsm.stopRecording(); } // Spielt alle Audio-Samples ab, die in der BVSSpeaker-Klasse // im internen Puffer verfügbar sind. Diese Beispiele werden in den // BVSP_streamReceived-Ereignishandler geschrieben. Wenn im internen Puffer keine Samples // vorhanden sind, wird nichts abgespielt. bvss.play(); // Wenn playLEDNotes auf true gesetzt wurde, // spielt die "LED-Noten" zusammen mit der Musik ab. if (playLEDNotes) playNextLEDNote();} // Behandelt das frameReceived-Ereignis void BVSP_frameReceived(byte dataType, int payloadSize) { // Prüft, ob der empfangene Frame Binärdaten enthält // 0x07 =Binärdaten (Byte-Array) if (dataType ==DATA_TYPE_BINARY) { // Wenn 2 Bytes empfangen wurden, den Befehl verarbeiten. if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) { analogWrite(receiveBuffer[0], receiveBuffer[1]); } } // Prüft, ob der empfangene Frame den Byte-Datentyp enthält // 0x01 =Byte-Datentyp else if (dataType ==DATA_TYPE_BYTE) { // Wenn der empfangene Byte-Wert 255 ist, setzt playLEDNotes // und markiert die aktuelle Zeit. if (bvsp.getReceivedByte() ==255) { playLEDNotes =true; playStartTime =millis(); } }} // Behandelt das modeChanged-Ereignis void BVSP_modeChanged() { // Wenn der outboundMode (Server --> Device) auf // FRAMED_MODE umgestellt wurde, soll kein Audiostream empfangen werden. // Weist die BVSSpeaker-Klasse an, die Wiedergabe zu beenden, wenn ihr // interner Puffer leer ist. if (bvsp.outboundMode ==FRAMED_MODE) bvss.finishPlaying();} // Behandelt das streamReceived-Ereignis void BVSP_streamReceived(int size) { // Holt den empfangenen Stream von der BVSP-Klasse int bytesRead =bvsp.getReceivedStream(speakerBuffer, SPEAKER_BUFFER_; // Stellt den empfangenen Stream in die Warteschlange, um bvss.enqueue(speakerBuffer, bytesRead);}// Leuchtet die entsprechende LED basierend auf der Zeit // der Befehl zum Starten der Wiedergabe von LED-Noten wurde empfangen.// Die hier verwendeten Timings sind synchronisiert mit the music.void playNextLEDNote(){ // Ruft die verstrichene Zeit zwischen playStartTime und // der aktuellen Zeit ab. ohne Vorzeichen lange verstrichen =millis() - playStartTime; // Schaltet alle LEDs aus allLEDsOff (); // Die letzte Note wurde gespielt. // Schaltet die letzte LED aus und stoppt die Wiedergabe von LED-Noten. wenn (verstrichen>=11500) { analogWrite (RED_LED_PIN, 0); playLEDNotes =false; } else if (abgelaufen>=9900) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (abgelaufen>=9370) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=8900) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=8610) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=8230) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=7970) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (abgelaufen>=7470) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=6760) analogWrite (GREEN_LED_PIN, 255); // E notiere sonst if (abgelaufen>=6350) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=5880) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=5560) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=5180) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=4890) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=4420) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (abgelaufen>=3810) analogWrite (GREEN_LED_PIN, 255); // E notiere sonst if (verstrichen>=3420) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=2930) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (verstrichen>=2560) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (verstrichen>=2200) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (abgelaufen>=1930) analogWrite (YELLOW_LED_PIN, 255); // D notiere sonst if (abgelaufen>=1470) analogWrite (RED_LED_PIN, 255); // C notiere sonst if (abgelaufen>=1000) analogWrite (GREEN_LED_PIN, 255); // E note} // Schaltet alle LEDs aus.void allLEDsOff () { analogWrite (RED_LED_PIN, 0); analogWrite (GELB_LED_PIN, 0); analogWrite(GREEN_LED_PIN, 0);}

Schaltpläne


Herstellungsprozess

  1. Anwesenheitssystem mit Arduino und RFID mit Python
  2. DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
  3. Gyroskop-Spaß mit NeoPixel-Ring
  4. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  5. Steuerung eines Roomba-Roboters mit Arduino und Android-Gerät
  6. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  7. Steuerung des Servomotors mit Arduino und MPU6050
  8. u-blox LEA-6H 02 GPS-Modul mit Arduino und Python
  9. So liest man Temperatur und Luftfeuchtigkeit auf Blynk mit DHT11
  10. 4x4x4 LED-Würfel mit Arduino Uno und 1sheeld