Tuesday 24 October 2017

Arduino Durchschnittliche Bibliothek


Intro Eine der Hauptanwendungen für das Arduino-Board ist das Lesen und Protokollieren von Sensordaten. Zum Beispiel überwacht man den Druck jede Sekunde des Tages. Da hohe Abtastraten oft Spikes in den Graphen erzeugen, möchte man auch einen Mittelwert der Messungen haben. Da die Messungen nicht statisch in der Zeit sind, was wir oft brauchen, ist ein laufender Durchschnitt. Dies ist der Durchschnitt einer bestimmten Periode und sehr wertvoll bei der Trendanalyse. Die einfachste Form eines laufenden Durchmessers kann durch einen Code ausgeführt werden, der auf dem vorherigen laufenden Durchschnitt basiert: Wenn man keine Gleitkomma-Mathematik verwenden möchte - da dies Speicherplatz einnimmt und Geschwindigkeit verringert - kann man dies in der Integer-Domäne vollständig durchführen. Die Teilung durch 256 in dem Beispielcode ist ein Schiebe-Recht 8, das schneller ist als eine Teilung durch z. B. 100. Dies gilt für jede Potenz von 2 als Teiler und man muss nur darauf achten, dass die Summe der Gewichte gleich der Potenz von 2 ist. Und natürlich sollte man darauf achten, dass es keinen Zwischenüberlauf gibt (erwägen Sie unsigned long) Eine genauere laufende Durchschnitt, in concreto aus den letzten 10 Messungen, benötigen Sie ein Array (oder verkettete Liste), um sie zu halten. Diese Anordnung wirkt wie ein kreisförmiger Puffer und bei jeder neuen Messung wird die älteste entfernt. Der laufende Durchschnitt wird als die Summe aller Elemente geteilt durch die Anzahl der Elemente in dem Array berechnet. Der Code für den laufenden Durchschnitt wird etwa so aussehen: Nachteil dieses Codes ist, dass das Array, um alle Werte zu halten, ziemlich groß werden kann. Wenn Sie eine Messung pro Sekunde haben und Sie wollen einen laufenden Durchschnitt pro Minute benötigen Sie ein Array von 60 ein durchschnittliches pro Stunde würde ein Array von 3600. Das könnte nicht auf diese Weise auf einem Arduino getan werden, da es nur 2K RAM hat. Allerdings kann durch den Bau eines 2-stufigen Durchschnitts kann es ganz gut angegangen werden (Disclaimer: nicht für alle Messungen). Im psuedo-Code: Da für jede runningAverage-Funktion ein neues internes statisches Array benötigt wird, wird dieses als Klasse implementiert. RunningAverage-Bibliothek Die RunningAverage-Bibliothek bildet eine Klasse der oben genannten Funktion, so dass sie mehrfach in einer Skizze verwendet werden kann. Es entkoppelt die add () - und die avg () - Funktion, um ein wenig flexibler zu sein, z. B. Kann man den Durchschnitt mehrmals nennen, ohne eine Sache hinzuzufügen. Beachten Sie, dass jede Instanz der Klasse ein eigenes Array hinzufügt, um Messungen zu halten, und dass dies die Speicherauslastung addiert. Die Schnittstelle der Klasse wird so klein wie möglich gehalten. Anmerkung: Bei Version 0.2 werden die Namen der Methoden beschreibender. Verwendung Eine kleine Skizze zeigt, wie sie verwendet werden kann. Ein Zufallsgenerator wird verwendet, um einen Sensor nachzuahmen. In setup () wird der myRA gelöscht, so dass wir mit dem Hinzufügen neuer Daten beginnen können. In loop () wird zuerst eine Zufallszahl erzeugt und in einen float umgerechnet, der myRA hinzugefügt wird. Dann wird das runningAverage auf den seriellen Port gedruckt. Man könnte es auch auf einem LCD-Display oder über ethernet etc. Wenn 300 Elemente hinzugefügt myRA ist gelöscht, um neu zu beginnen. Hinweise Um die Bibliothek zu verwenden, müssen Sie einen Ordner in Ihrem SKETCHBOOKPATHlibaries mit dem Namen RunningAverage erstellen und dort die. h - und die. cpp-Datei ablegen. Fügen Sie optional ein Beispielunterverzeichnis hinzu, um die Beispielanwendung zu platzieren. Geschichte 2011-01-30: Anfangsversion 2011-02-28: fester fehlender Zerstörer in der. h Akte 2011-02-28: entfernter Standardkonstruktor 2012--. TrimValue () Yuval Naveh hinzugefügt trimValue (gefunden im Web) 2012-11-21: refactored 2012-12-30: hinzugefügt fillValue () refactored für die Veröffentlichung 2014-07-03: hinzugefügt Speicherschutz-Code - wenn internen Array nicht zugeordnet werden kann Größe Wird 0. Dies ist, um das hier beschriebene Problem zu lösen - forum. arduino. cc/indextopic50473.msg1790086msg1790086 - Todo Test ausführlich. Template-Klasse RunningAverage. h RunningAverage. cppThis ist eine Sammlung von Routinen für die mathematische Analyse von Arrays von Zahlen. Aktuelle Funktionsunterstützung: Alle Funktionen werden vollständig überlastet, um die folgenden Datentypen zu unterstützen: Mit Ausnahme von stddev () geben sie alle denselben Datentyp wie das Array zurück. Ein Array von int-Werten gibt ein einzelnes int zurück. Stddev () gibt immer einen float zurück. Alle Funktionen außer rollingAverage () nehmen zwei Argumente. Das erste ist das Array zu bearbeiten. Die zweite ist die Anzahl der Einträge im Array. RollingAverage () nimmt ein drittes Argument - den neuen Eintrag, der dem Array hinzugefügt werden soll. Rolling average Format: average rollingAverage (historyarray, slicecount, value) Fügt dem Array Historyarray einen Wert hinzu, der alle Werte um eine Stelle verschiebt. Der mittlere Mittelwert wird dann zurückgegeben. Mittleres Mittel (array, slicecount) Berechnet den mittleren Mittelwert der Werte im Array. Slicecount ist die Anzahl der Einträge im Array. Modus-Format: durchschnittlicher Modus (array, slicecount) Findet die häufigste Zahl im Array. Maximales Format: max maximum (array, slicecount) Sucht den größten Wert im Array. Minimum Format: min minimum (array, slicecount) Sucht den kleinsten Wert im Array. Standardabweichung Format: Abweichung stddev (array, slicecount) Die Standardabweichung ist die Quadratwurzel des Mittelwertes der Summe der Quadrate der Differenz zwischen jedem Datenpunkt und dem mittleren Mittelwert des Arrays. Dies ist die einzige Funktion, die nicht denselben Datentyp wie das Array zurückgibt. Die Standardabweichung wird immer als Float zurückgegeben. Beispiel: Share Ich arbeite an einem mobilen Roboter, der über einen drahtlosen 2,4 GHz Link gesteuert wird. Der Empfänger ist mit dem Arduino Uno verbunden, der als Hauptregler an Bord dient. Der kritischste (und Haupt-) Eingangskanal des Empfängers erzeugt ein sehr verrauschtes Signal, was zu vielen kleinen Änderungen am Ausgang der Aktoren führt, obwohl diese nicht benötigt werden. Ich suche Bibliotheken, die effiziente Glättung durchführen können. Gibt es ein Signal Glättung Bibliotheken zur Verfügung für die Arduino (Uno) Ich glaube, ich sehe eine Menge von Single-Probe Rauschspitzen in Ihrem lauten Signal. Der Medianfilter ist besser bei der Beseitigung von Einzelprobenrauschspitzen als bei jedem linearen Filter. (Es ist besser als jedes Tiefpaßfilter, gleitender Durchschnitt, gewichteter gleitender Durchschnitt usw. in Bezug auf seine Ansprechzeit und seine Fähigkeit, solche Einzelproben-Rauschspitzen-Ausreißer zu ignorieren). Es gibt in der Tat viele Signalglättungsbibliotheken für das Arduino, von denen viele einen Medianfilter enthalten. Signalglättungsbibliotheken bei arduino. cc: Signalglättungsbibliotheken bei github: Würde so etwas in Deinem Roboter funktionieren (Der Median-of-3 erfordert sehr wenig CPU-Leistung und damit schnell): Du könntest diese digital mit einem Tief filtern Filter: Ändern Sie die 0,99, um die Grenzfrequenz zu ändern (näher an 1,0 ist die niedrigere Frequenz). Der tatsächliche Ausdruck für diesen Wert ist exp (-2pif / fs) wobei f die Grenzfrequenz ist, die gewünscht wird und fs die Frequenz ist, an der die Daten abgetastet werden. Ein anderer Typ eines digitalen Filters ist ein Ereignisfilter. Es funktioniert gut auf Daten, die Ausreißer, z. B. 9,9,8,10,9,25,9. Ein Ereignisfilter gibt den häufigsten Wert zurück. Statistisch ist dies der Modus. Statistische Mittelwerte wie Mean, Mode etc. können mit Hilfe der Arduino Average Library berechnet werden. Ein Beispiel aus der Arduino Library-Seite, auf die verwiesen wird: Detektieren Sie die menschliche Präsenz und berühren Sie sich von mehreren Millimetern Material oder erkennen Sie die Veränderung der Wasserstände von der Außenseite eines Kunststoffbehälters. Diese Bibliothek soll dazu beitragen, die Änderung der relativen Kapazität aus den obigen Gründen und nicht für die Berechnung der exakten Kapazität zu bestimmen. Die Relativkapazität wird ermittelt, indem man misst, wie lange es dauert, bis ein Arduino-Sendestift einen Empfangspin auf HIGH (in Mikrosekunden) auflädt. Änderungen in dem elektrischen Feld um einen Sensor, der mit dem Empfangsstift verbunden ist (wie ein Mensch, der vorbeifährt oder Wasser füllt, oder ein Motor einschaltet) haben einen messbaren Einfluss auf die Zeitdauer, die zum Aufladen des Empfangsstifts erforderlich ist. Viele dieser Ladungs - und Entladungswerte werden entnommen, dann gemittelt innerhalb der Bibliothek, um die Variabilität zu verringern und eine klarere Antwort darauf zu geben, was der Sensor liest. Dies geschieht ohne Verzögerung, so dass es nur einen kleinen Einfluss auf die Hauptschleife () Leistung hat. Im folgenden Beispiel finden Sie Hilfe zur Verkabelung und Programmierung des Arduino mit dieser Bibliothek. Verbinden Sie den Arduino Digital Pin 2 mit einem 10Meg8486 Widerstand Verbinden Sie das andere Ende des 10Meg8486 Widerstandes mit dem Arduino Digital Pin 3 Verbinden Sie den Arduino Digital Pin 3 mit einem leitfähigen Material (Aluminiumfolie). Bedecken Sie das leitfähige Material mit nicht leitfähigem Material Das Beispiel Skizze auf dem Arduino Öffnen Sie eine serielle Verbindung bei 115200 Baud, um die berichteten Werte zu sehen Berühren oder bewegen Sie Ihre Hand am Sensor Beispiel Skizze Arduino C Empfindlichkeit ist, wie weit entfernt der Sensor Dinge erkennen kann oder wie viel Auflösung Sie ändern müssen In den Sensorablesungen. Erhöhen Sie die Empfindlichkeit, indem Sie entweder mehr Widerstände in Serie bringen (20Meg, 30Meg oder mehr), oder erhöhen Sie die Fläche (Größe) des Aluminiumstücks, das als Sensor verwendet wird. Verringern Sie die Empfindlichkeit, indem Sie entweder die Resonanz verringern (nur 1MEG oder weniger verwenden) oder verringern Sie die Fläche (Größe) des Aluminiumstücks, das als Sensor verwendet wird. Variabilität ist, wie wild die Sensorwerte schwanken. Diese Bibliothek hilft, die Variabilität, indem sie einen gleitenden Durchschnitt von vielen Messungen über die Zeit. Dies geschieht ohne Verzögerung, so dass es wenig Einfluss auf die Hauptschleife () Leistung hat. Weniger Variable Messwerte, die nicht so schnell fluktuieren, können durch Erhöhung der Stichprobengröße erreicht werden: setSampleSize (1000). Mehr Variable Messwerte, die schnell fluktuieren, können durch eine Verringerung der Stichprobengröße erreicht werden: setSampleSize (10). Sie müssen fortwährend update () innerhalb von loop () aufrufen, um die unten aufgeführten Real-Time-Methoden zu verwenden. RBD :: Kapazitätskonstruktor (Sendepin, Empfangspin) Erstellen Sie einen neuen Kapazitätssensor und geben Sie die Arduino-PIN-Nummern für die Sende - und Empfangsstifte ein. Wenn Sie mit der Arduino-Software und den integrierten Funktionen vertraut sind, können Sie sie erweitern Die Fähigkeit Ihres Arduino mit zusätzlichen Bibliotheken. Was sind Bibliotheken Bibliotheken sind eine Sammlung von Code, der es Ihnen leicht macht, eine Verbindung zu einem Sensor, einer Anzeige, einem Modul usw. herzustellen. Zum Beispiel macht die integrierte LiquidCrystal-Bibliothek es einfach, mit Zeichen-LCD-Displays zu sprechen. Es gibt Hunderte von zusätzlichen Bibliotheken im Internet zum Download zur Verfügung. Die eingebauten Bibliotheken und einige dieser zusätzlichen Bibliotheken sind in der Referenz aufgelistet. Um die zusätzlichen Bibliotheken zu verwenden, müssen Sie sie installieren. So installieren Sie eine Bibliothek mit dem Library Manager Um eine neue Library in Ihre Arduino IDE zu installieren, können Sie den Library Manager (verfügbar ab IDE Version 1.6.2) verwenden. Öffnen Sie die IDE und klicken Sie auf das Sketch-Menü und dann Include Library gt Bibliotheken verwalten. Dann öffnet sich der Bibliotheksmanager und Sie finden eine Liste der bereits installierten oder installationsfähigen Bibliotheken. In diesem Beispiel installieren wir die Bridge-Bibliothek. Scrollen Sie die Liste, um sie zu finden, und wählen Sie dann die Version der Bibliothek, die Sie installieren möchten. Manchmal ist nur eine Version der Bibliothek verfügbar. Wenn das Versionsauswahl-Menü nicht angezeigt wird, sorgen Sie sich nicht: es ist normal. Klicken Sie abschließend auf Installieren und warten Sie, bis die IDE die neue Bibliothek installiert hat. Das Herunterladen kann je nach Verbindungsgeschwindigkeit einige Zeit in Anspruch nehmen. Sobald es fertig ist, sollte neben der Bridge-Bibliothek ein Installed-Tag erscheinen. Sie können den Bibliotheksmanager schließen. Sie können nun die neue Bibliothek im Menü Include Library finden. Wenn Sie Ihre eigene Bibliothek hinzufügen möchten, öffnen Sie eine neue Ausgabe auf github. Importieren einer. zip-Bibliothek Bibliotheken werden oft als ZIP-Datei oder Ordner verteilt. Der Name des Ordners ist der Name der Bibliothek. Im Ordner befinden sich eine. cpp-Datei, eine. h-Datei und oftmals eine keywords. txt-Datei, ein Beispielordner und andere Dateien, die von der Bibliothek benötigt werden. Ab Version 1.0.5 können Sie 3rd-Party-Bibliotheken in der IDE installieren. Entpacken Sie die heruntergeladene Bibliothek nicht, lassen Sie sie so wie sie ist. Navigieren Sie in der Arduino IDE zu Sketch gt Include Library. Wählen Sie oben in der Dropdown-Liste die Option ZIP-Bibliothek hinzufügen aus. Sie werden aufgefordert, die Bibliothek auszuwählen, die Sie hinzufügen möchten. Navigieren Sie zum Speicherort der. zip-Datei und öffnen Sie sie. Kehren Sie zum Menü Skizze gt Import Library zurück. Sie sollten nun die Bibliothek am unteren Rand des Dropdown-Menüs sehen. Es ist bereit, in Ihrer Skizze verwendet werden. Die ZIP-Datei wurde im Bibliotheksordner des Arduino-Skizzen-Verzeichnisses erweitert. Hinweis: Die Bibliothek steht in Skizzen zur Verfügung, aber Beispiele für die Bibliothek werden erst nach dem Neustart der IDE in den Datei gt-Beispielen angezeigt. Manuelle Installation Um die Bibliothek zu installieren, beenden Sie zunächst die Arduino-Anwendung. Dann dekomprimieren Sie die ZIP-Datei mit der Bibliothek. Wenn Sie zum Beispiel eine Bibliothek namens ArduinoParty installieren, entpacken Sie ArduinoParty. zip. Es sollte einen Ordner namens ArduinoParty enthalten. Mit Dateien wie ArduinoParty. cpp und ArduinoParty. h innerhalb. (Wenn die Dateien. cpp und. h in einem Ordner arent sind, müssen Sie eine Datei erstellen. In diesem Fall erstellen Sie einen Ordner namens ArduinoParty und verschieben Sie alle Dateien, die sich in der ZIP-Datei befanden, wie ArduinoParty. cpp und ArduinoParty. h.) Ziehen Sie den ArduinoParty-Ordner in diesen Ordner (Ihren Bibliothekenordner). Unter Windows wird es wahrscheinlich My DocumentsArduinolibraries genannt werden. Für Mac-Benutzer wird es wahrscheinlich Dokumente / Arduino / Bibliotheken genannt werden. Unter Linux wird es der Bibliothekenordner in Ihrem Skizzenbuch. Ihr Arduino-Bibliotheksordner sollte jetzt wie folgt aussehen (auf Windows): oder so (auf Mac und Linux): Möglicherweise gibt es mehr Dateien als nur die. cpp - und. h-Dateien, stellen Sie sicher, dass alles dort vorhanden ist. (Die Bibliothek funktioniert nicht, wenn Sie die. cpp - und. h-Dateien direkt in den Bibliotheksordner stecken oder wenn sie in einem zusätzlichen Ordner verschachtelt sind. Zum Beispiel: DocumentsArduinolibraries ArduinoParty. cpp und DocumentsArduinolibraries ArduinoParty ArduinoParty ArduinoParty. cpp funktioniert nicht.) Starten Sie Arduino neu Anwendung. Stellen Sie sicher, dass die neue Bibliothek im Menüpunkt Sketch-gtImport Library der Software angezeigt wird. Thats it Youve installiert eine Bibliothek Dieses Tutorial basierend auf Text von Limor Fried. Der Text des Arduino Einführungsleitfadens ist unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Lizenz. Code-Beispiele in der Anleitung werden in die public domain veröffentlicht. Aktie

No comments:

Post a Comment