México - Marcar México

Términos internacionales de comercio (Incoterms):DDP
Todos los precios incluyen los costos de aranceles y aduana para los métodos de envío seleccionados.

Confirme su elección de moneda:

Dólares estadounidenses
Envío sin cargo para la mayoría de los pedidos superiores a $100 (USD)

Bench Talk for Design Engineers

Mouser German Blog

rss

Mouser Electronics, Inc german language blogs


Mouser MINT-Sommerserie: Teil 3 Mike Parks

Für uns hier auf der Nordhalbkugel sind die Hundstage des Sommers fast vorbei. Während dieser unbeschwerten und schönen Jahreszeit strahlte die Sonne an den meisten Tagen vom fast wolkenlosen Himmel – und damit auch die potenziell schädliche ultraviolette (UV) Strahlung. In diesem letzten Artikel unserer Serie bauen wir unseren Schaltkreis auf und programmieren den Arduino MKR1000 so, dass er die Funktionen erfüllt, die wir zuvor festgelegt haben. Lesen Sie deshalb auch unbedingt den zweiten Blogbeitrag dieser Serie, um den wissenschaftlichen Hintergrund der Sonnenstrahlung besser zu verstehen.

Zur kurzen Wiederholung: Unser „Projekt zur Überwachung der UV-Strahlungsbelastung und Alarmausgabe“ sollte folgende Aspekte erfüllen:

  • Die Höhe der UV-Strahlungsbelastung im Zeitverlauf ermitteln.
  • Feststellen, ob eine Strahlungsbelastung einen vordefinierten Grenzwert überschritten hat.
  • Einen auffälligen und gut hörbaren Alarm auslösen, der den Benutzer benachrichtigt, wenn ein UV-Belastungsgrenzwert überschritten wird.
  • Den Wert der UV-Strahlungsbelastung zurücksetzen.
  • Sicherstellen, dass das Gerät batteriebetrieben ist
  • Die Daten der UV-Strahlungsbelastung zur weiteren Analyse an die Cloud senden. (Hinweis: Dieser Schritt ist sinnvoll, um Kindern das Lesen von Diagrammen und Grafiken beizubringen!)

Das Ziel dieses Projekts ist es, ein Gerät zu bauen, das unsere UV-Strahlungsbelastung überwacht und uns mit einem Alarm darauf aufmerksam macht, wann wir entweder eine Schattenpause im Haus einlegen oder erneut Sonnenschutzmittel auftragen sollten. Falls Sie unsere Stückliste aus dem vorigen Blog nicht mehr präsent haben, finden Sie hier nochmal die benötigten Bauelemente in einem vorbereiteten Einkaufswagen. Fangen wir also an!

Zusammensetzen und Anschließen der Hardware

Sie erinnern sich aus Teil 2 dieser Serie vielleicht daran, dass wir zur Überwachung der Sonneneinstrahlung den Sensor Si1145 von Silicon Labs verwenden wollen. Die Daten des Sensors werden wir über eine serielle I2C-Schnittstelle an das eingebettete Entwicklungsboard Arduino MKR1000 weiterleiten. Die Stromversorgung dieses Boards kann auch bequem über eine Lithium-Polymer-Batterie (Li-Po) erfolgen, sodass wir unser Gerät mit nach draußen nehmen können, wenn wir die Sonne genießen.

Hier ist eine kurze Zusammenfassung der Schritte, die Sie mit Ihrem jungen Nachwuchsingenieur durchlaufen werden, um diese Schaltung zu bauen (Im Hardware-Schaltplan in Abbildung 1 und im Stromlaufplan in Abbildung 2 sind dazu auch die entsprechenden Verbindungen dargestellt):

 

  1. Setzen Sie das MKR1000 an den Rand des Breadboards (das ist die Lochrasterplatine) und achten Sie darauf, dass der Mikro-USB-Anschluss über das Ende des Breadboards hinausragt. Verwenden Sie zur Kennzeichnung des einzigen Pins am MKR1000 einen weißen Streifen, da dies der Masse-Pin ist.
  2. Setzen Sie den Si1145-UV-Sensor (mit den Kontakt-Pins) auf der gleichen Seite des Breadboards wie den Masse-Pin des MKR1000.
  3. Verbinden Sie den Masse-Pin des MKR1000 und den Masse-Pin des UV-Sensors Si1145 mit der (blauen) Masseschiene des Breadboards.
  4. Verbinden Sie den Vcc-Pin des MKR1000 und den Vin-Pin des UV-Sensors Si1145 mit der Stromschiene (rot) des Breadboards.
  5. Verbinden Sie die I2C-Ports des Mikrocontrollers und des Sensors miteinander. Verbinden Sie den D12 (SCL) Pin mit dem SCL-Pin am UV-Sensor Si1145. Dies ist das gemeinsame Zeitsignal. Verbinden Sie dann den D11 (SDA)-Pin mit dem SDA-Pin des UV-Sensors Si1145. Dies ist der gemeinsame Datenbus zwischen den beiden Bauelementen.
  6. Überprüfen Sie die bis jetzt hergestellten Verbindungen, um sicherzustellen, dass Sie alles korrekt verdrahtet haben. Gehen Sie dazu auf die GitHub-Website von Mouser und laden Sie die Datei Arduino STEAMYSummer2018_MRK1000.ino und die Datei Wifi_Info.h herunter. Nachdem Sie den Code erfolgreich geladen haben, starten Sie den seriellen Monitor für die integrierte Entwicklungsumgebung (IDE) von Arduino und stellen Sie sicher, dass Sie Sensormesswerte im sichtbaren, infraroten (IR) und UV-Bereich erhalten. Wenn Sie keine grüne Leuchtdiode (LED) auf dem MKR1000 sehen oder die Fehlermeldung "Cannot find the Si1145" auf dem seriellen Monitor erhalten, überprüfen Sie unbedingt noch einmal den Stromlaufplan (Abbildung 2).

Abbildung 1: Dieses Hardwareschema zeigt die Pinbelegung (Quelle: Autor)

 

Abbildung 2: Dieser Stromlaufplan zeigt das Breadboard-Layout (Quelle: Autor)

 

Der erste Teil des Hardware-Aufbaus ist nun abgeschlossen. Kommen wir nun zu den Komponenten der Benutzerschnittstelle. Für den Alarm verwenden wir einen piezoelektrischen Summer, der ein gut hörbares Alarmsignal ausgeben soll. Wir haben den Summer PS1240P02BT von TDK Corporation ausgewählt, weil dieses Bauelement mit einer Spannung von 3V betrieben werden kann. Außerdem nehmen wir einen Widerstand und einen Transistor hinzu, um sicherzustellen, dass der Summer mit genügend Strom versorgt wird und das Alarmsignal deutlich hörbar ist. Der Strom von den General-Purpose Input/Output (GPIO)-Pins ist auf 7 mA begrenzt. Der GPIO-Pin des Mikrocontrollers ("D6"-Pin) sollte den Transistor einschalten. Gehen Sie nun weiter wie folgt vor:

 

  1. Setzen Sie den NPN-Transistor auf das Breadboard.
  2. Verbinden Sie den roten Draht des Summers mit der Stromschiene (rot).
  3. Verbinden Sie den schwarzen Draht des Summers mit dem Kollektor-Anschluss des Transistors.
  4. Platzieren Sie einen 1kΩ-Widerstand auf dem Breadboard und verbinden Sie einen Anschluss des Widerstands mit dem Basis-Anschluss des NPN-Transistors und den anderen Widerstandsanschluss mit dem D6-Pin des MKR1000.
  5. Verbinden Sie den Emitter-Anschluss des NPN-Transistors mit der (blauen) Masseschiene des Breadboards.

 

Wir müssen daran denken, dass wir eine Möglichkeit brauchen, das Gerät zurückzusetzen, sobald ein Alarm ausgelöst wird. Dazu verwenden wir einen Schließtaster. Der Taster wird über einen 10kΩ-Pulldown-Widerstand geerdet, der mit dem GPIO-Pin des Mikrocontrollers verbunden ist, um potenzialfreie Eingänge zu verhindern. Beginnen wir also mit der Verdrahtung (Abbildung 3):

 

  1. Verdrahten Sie nun den Schließtaster, indem Sie einen Anschluss des Schalters an die Stromschiene (rot) anschließen.
  2. Verbinden Sie einen Anschluss des 10kΩ Widerstandes mit der anderen Seite des Tasters.
  3. Verbinden Sie den verbleibenden Anschluss des Widerstandes mit Masse.
  4. Verbinden Sie den D7-Pin des MKR1000 mit der Verbindungsstelle von Widerstand und Taster.

Abbildung 3: Layout der Leiterplatte (PCB) (Quelle: Autor)

 

Der Widerstand dient als Pulldown-Widerstand und stellt sicher, dass der GPIO-Pin am MKR1000 immer zuverlässig geerdet ist, wenn der Taster nicht gedrückt ist. Ohne den Widerstand ist der Pin anfällig für Rauschen, was dazu führen kann, dass der Mikrocontroller fälschlicherweise einen Tasterdruck erkennt.

 

Verwendung der Software

Bibliotheken

Die offenen Bibliotheken von Mouser für dieses Projekt umfassen folgende Tools, Ressourcen und Funktionen:

 

#include <Wire.h>

Liefert den für die Verwendung des seriellen Kommunikationsprotokolls I2C erforderlichen Code.

 

#include "Adafruit_SI1145.h"

Enthält eine Reihe einfach zu verwendender Funktionen für die Interaktion mit dem Umgebungslichtsensor.

 

#include <WiFi101.h>

#include <WiFiSSLClient.h>

Ermöglicht sichere WLAN-Kommunikation.

 

#include "Wifi_Info.h"

Speichert den SSID (Service Set Identifier), das WPA2-Passwort (Wi-Fi Protected Access II) und den IFTTT-Schlüssel (ein Tool, das wir später in diesem Artikel besprechen werden) der Anwendungsprogrammschnittstelle (API). Es empfiehlt sich, diese sicherheitsrelevanten Elemente in einer separaten Datei abzulegen, so dass Sie, wenn Sie Ihren Code freigeben, nicht jedes Mal daran denken müssen, diese sensiblen Informationen zu entfernen, wenn Sie eine Änderung teilen möchten.

 

Abbildung 4 zeigt ein Beispiel für den Quellcode in der Arduino IDE.

Abbildung 4: Quellcode, der in der Arduino-IDE geschrieben wurde (Quelle: Autor)

 

Wichtige Variablen

 

static const int DELAY_AMT = 60000;

Diese Variable entspricht 60.000 Millisekunden oder 60 Sekunden. Damit können wir die Anzahl der Sensormessungen auf eine Messung pro Minute begrenzen.

 

 

static const int AVG_ARRAY_SIZE = 60;

Da es uns um den durchschnittlichen UV-Messwert der letzten Stunde geht und wir jede Minute einen Messwert erfassen, können wir mit dieser Variablen den Mittelwert der letzten 60 Messwerte ermitteln und daraus den aktuellen durchschnittlichen UV-Index der letzten Stunde zu ermitteln.

 

 

static const int BUZZER_PIN = 6;

Der Summer wird vom GPIO D6-Pin des MKR1000 angesteuert.

 

 

static const int RESET_BUTTON_PIN = 7;

Der Reset-Taster wird an den GPIO D7-Pin des MKR1000 angeschlossen.

 

 

static const float UV_THRESHOLD = 3.0;

Wenn der durchschnittliche UV-Indexwert der letzten Stunde 3,0 oder mehr beträgt, wird ein Alarm ausgelöst.

 

static const int TONE_FREQ = 2500;

Der ausgelöste Alarm wird über den Summer mit einer Tonfrequenz von 2.500 Hz ausgegeben.

 

char ssid[] = "MY_SSID_HERE";

Ersetzen Sie in der Datei WiFI_Info.h diesen Standardwert durch Ihre lokale WLAN-SSID ersetzen. Achten Sie darauf, die Anführungszeichen beizubehalten.

 

char password[] = "MY_WPA2_KEY_HERE";

Ersetzen Sie in der Datei WiFI_Info.h diesen Standardwert durch Ihr WLAN-Passwort. Achten Sie darauf, die Anführungszeichen beizubehalten.

 

char IFTTT_APP_KEY[] = "YOUR_IFTTT_APP_KEY_HERE";

Ersetzen Sie in der Datei WiFI_Info.h diesen Standardwert durch Ihren persönlichen IFTTT-API-Schlüssel, den Sie generieren, wenn Sie einen entsprechenden Webhook für dieses Projekt erstellen. Achten Sie darauf, die Anführungszeichen beizubehalten.

 

Funktionen

 

void setup()

Die void setup()-Funktion ist eine Funktion, mit der die gesamte Initialisierung durchgeführt wird. Diese Initialisierung umfasst die Einrichtung eines seriellen Debug-Kommunikationskanals, die Einrichtung des WLAN-Moduls und des Umgebungslichtsensors Si1145 sowie die Sicherstellung, dass die GPIO-Pin-Konfigurationen für die Ein- oder Ausgänge geeignet sind.

 

 

void loop() {

  float currentUVindexReading = takeReading();

  float avgUVindexReading = runningAverage(currentUVindexReading);

  sendDataToCloud(currentUVindexReading);

  alertCheck(avgUVindexReading);

  delay(DELAY_AMT);

}

 

Die main loop()-Funktion (Hauptschleife) wird hier umfassend dargestellt, um auf ein wichtiges Programmier-Muster hinzuweisen. Diese Hauptschleife sollte so wenig Code wie möglich enthalten. Es sollte eigentlich das Ziel sein, den Code so weit aufzuschlüsseln, dass jede Funktion nur eine Sache tut. Nutzen Sie Funktionsaufrufe, um den Code lesbarer zu machen und die Fehlersuche zu erleichtern. Ausgehend vom obigen void loop()-Muster ist es einfach, eine Zusammenfassung der Vorgänge zu erstellen, die stattfinden werden, nachdem das MKR1000-Board die in der setup()-Funktion vorgeschriebenen Aufgaben abgeschlossen hat.

 

Die Zusammenfassung sollte wie folgt ablaufen: Zunächst ist ein Sensormesswert erforderlich, der in der Variable currentUVindexReading gespeichert werden muss. Dieser Wert wird an eine andere Funktion übergeben, die den neuen UV-Messwert aufzeichnet und den laufenden Mittelwert zurückgibt. Der aktualisierte laufende Mittelwert wird dann an die Funktion übergeben, die ihn an die IFTTT sendet und an eine Google-Sheet-Tabelle anhängt. Als Nächstes erfolgt ein Vergleich des Mittelwerts mit dem Schwellenwert, und die Ergebnisse lösen gegebenenfalls eine Alarmmeldung aus. Schließlich muss das System eine Minute lang pausieren, und dann wiederholt sich diese Funktion.

 

Hier ist eine Aufschlüsselung des Codes für jeden Funktionsschritt in der Hauptschleife:

 

float takeReading()

Diese Funktion arbeitet mit dem Umgebungslichtsensor Si1145 zusammen. Sie empfängt einen Messwert und gibt die Ergebnisse an die serielle Schnittstelle aus, bevor sie den UV-Indexwert als Gleitkommazahl zurückgibt.

 

float runningAverage(float newReading)

Diese Funktion behält ein statisches Array bei (d. h. die Werte bleiben nach der Rückkehr des Funktionsaufrufs erhalten), um den laufenden Mittelwert des UV-Index über das letzte Jahr zu verfolgen. Sie gibt den aktuellen durchschnittlichen UV-Index als Gleitkommazahl zurück.

 

void alertCheck(float avgUVindexReading)

Diese Funktion vergleicht den aktuellen durchschnittlichen UV-Index mit dem vordefinierten Schwellenwert und löst gegebenenfalls einen Alarm aus.

 

void generateAlert()

Diese Funktion verwendet die in die Arduino-IDE integrierte Funktion tone(), um über den Summer einen Ton zu erzeugen. Sie dauert bis zum Betätigen des Reset-Tasters an, dann wird der durchschnittliche UV-Index zurückgesetzt und das Gerät kehrt in den Überwachungsmodus zurück.

 

Diese Funktion nutzt die Webhook-API von IFTTT.com, um den aktuellen UV-Indexwert an eine Google Sheets-Tabelle weiterzuleiten, so dass Sie die Daten auch aus der Ferne einsehen können.

 

Wir bringen alles zusammen

Wir nutzen einen Webdienst namens IFTTT (kurz für „If This Then That“), damit das MKR1000-Board mit Google Sheets kommunizieren kann (Abbildung 5). Der IFTTT-Dienst wird auch als „Maker Webhooks“ bezeichnet. IFTTT stellt auf seiner Website eine großartige Anleitung zur Nutzung seines Dienstes zur Verfügung. Als Ergebnis erhalten Sie ein Datenprotokoll und ein schönes Diagramm zur Visualisierung der Daten. Wir empfehlen Ihnen, den Dokumentationsabschnitt für Webhooks auf der IFTTT-Webseite aufmerksam zu lesen, denn Sie werden aufgefordert, einen für Ihr IFTTT-Konto spezifischen Schlüssel in die Datei Wifi_info.h einzufügen.

Abbildung 5: Das MKR1000 sendet seine Daten per IFTTT an Google Sheets. (Autor)

 

Wenn Sie das Projekt vom Breadboard nehmen und im Freien auf Herz und Nieren prüfen möchten, stehen Ihnen ein EagleCAD-Schaltplan und ein Leiterplatten-Layout zur Verfügung. Außerdem stellen wir eine 3D-druckerfähige STL-Datei für ein Hardwaregehäuse zur Verfügung (Abbildung 6 und Abbildung 7).

Abbildung 6: Dies ist eine 3D-Darstellung der Leiterplattenabschirmung (Quelle: Autor)

 

Abbildung 7: Dieses Gehäuse für die Hardware kann mit einem 3D-Drucker selbst gedruckt werden (Quelle: Autor)

 

Die Design-Dateien und der Quellcode stehen schließlich auf der GitHub-Website von Mouser zur Verfügung. 



« Zurück


Michael Parks, P.E. ist der Eigentümer von Green Shoe Garage, einem Entwicklungsstudio für kundenspezifische Elektronik und Technologieberatung im Süden von Maryland. Er produziert den S.T.E.A.M. Power-Podcast (ein Podcast über MINT-Themen), mit dem er die Öffentlichkeit für technische und wissenschaftliche Fragen sensibilisieren möchte. Michael ist außerdem zugelassener Ingenieur im Bundesstaat Maryland und hat einen Master-Abschluss in Systemtechnik von der Johns Hopkins University.


Alle Autoren

Alle anzeigen Alle anzeigen
Blog nach Datum anzeigen