CO2 Laser Wasser Strömungswächter - Arduino Powered / Windows gesteuert (6 / 7 schritt)

Schritt 6: Die Windows-Software...


Die Windows-Software wurde mit Microsoft Visual Studio 2015 Update 1 geschrieben. Es ist eine systemeigene C++-MFC-Dialogfeld-basierten Anwendung mithilfe des MFC-Dialogfeld-Assistenten erstellt. Die UI - wurde der Dialog mit der Ressourcen-Editor erstellt. Der Körper des Codes wird durch den Assistenten erzeugt. Ich werde nur die Teile hervorheben, die Kommunikation mit dem Arduino zu demonstrieren. Der Rest des Codes ist in Github hier erhältlich:

https://github.com/alsliahona/CO2LaserWaterFlowMonitor/

Suche nach dem Arduino "COM" Serial port

Nun, da wir über die Tage des MODEMs weitgehend verschoben haben, ist es nicht üblich, viele COM-Ports auf Windows-PC im Einsatz haben. Es ist jedoch möglich, dass Sie USB-Geräte wie Ihre Arduino haben können, mit denen eine COM port als serielle Schnittstelle. Wir können alle der verfügbaren COM-Anschlüsse auf dem PC leicht aufzählen, mithilfe einer for-Schleife die QueryDosDevice aufruft. Haben wir eine Liste der COM-Ports können präsentieren wir die Liste dem Benutzer, so dass sie diejenige auswählen, die ihre Wasser-Strömungswächter ist. Wenn nur ein Element in der Liste können wir automatisch öffnen. Dann starten wir einen Container der CCO2WaterFlowDlg Klasse hinzufügen. Dies ist auf Linie 50 der CO2WaterFlowDlg.h, als eine std::map von zwei Zeichenfolgen. Die erste Zeichenfolge (Schlüssel) ist der COM-Port, den wir anzeigen und öffnen wird. Die andere Zeichenfolge ist DOS Gerätenamen, die wir vor allem für die Diagnostik zu halten.

Die Methode in Zeile 54 deklariert wird verwendet, um den Behälter zu füllen. Es wird in CO2WaterFlowDlg.cpp, Linien 70-78 implementiert:

BuildCOMPortMap() wird aufgerufen, wenn die Anwendung wird gestartet und eine Instanz von CCO2WaterFlowDlg konstruiert wird, wie Sie auf Zeile 94 oben sehen können. Unsere Container werden an dieser Stelle keine COM-Geräte auf dem System vorhanden.

Wenn das Dialogfeld zuerst initialisiert wird sie prüfen in OnInitDialog() zu sehen, wenn COM-Anschlüsse zur Verfügung stehen. Wenn dies nicht der Fall ist, wird eine Meldung an den Benutzer, bat sie um Plug-in-Flow Rate Monitor angezeigt werden. Diese Meldung wird wiederholt, bis der Benutzer auf Abbrechen klickt, oder ein COM-Gerät vorhanden ist. Sehen Sie die Schleife auf Linien 146-155 unter:

Die Liste der verfügbaren Geräte werden in der Dropdown-Liste (ComboBox) angezeigt werden. Dies geschieht, wenn in Zeile 161 über RefreshCOMList() aufgerufen wird. Der Code dafür ist ziemlich standard MFC-Code zum Auffüllen einer ComboBox. Es ist nachfolgend dargestellt:

296-Linien durch 301 eindeutige Einträge in das Kombinationsfeld, während Linien 304 durch 309 hinzufügen jedes Element aus dem Behälter in das Kombinationsfeld. Ein weiterer Container, M_COMSelectionMap wird beibehalten, die die Combo-Box-Eintrags-ID mit der COM-Port verbindet. Klickt der Benutzer auf öffnen, wird dies verwendet werden, ziehen Sie den Namen der COM-Port zu öffnen.

Linie 310 ist das letzte Element hinzugefügt, um das Kombinationsfeld ausgewählt.

Wenn nur ein Element in der Liste (Linie 312) enthalten ist, wird das Element automatisch geöffnet, durch die Simulation einer Benutzer-Klick auf die Schaltfläche öffnen (Linie 316).

Öffnen des COM-Anschlusses

Klickt der Benutzer auf die Schaltfläche öffnen, oder wenn OnBnClickedButtonOpen() aufgerufen wird, durch RefreshCOMList() wird das aktuell ausgewählte Element der Combo-Box verwendet, um den Namen der COM-Port (Linien 221 und 222 unten) zu erhalten:

In Zeile 223 beim Versuch gemacht wird, den seriellen Port zu öffnen. Unterlässt es den Benutzer aufgefordert werden, und ein neues Element auswählen dürfen. Wenn aber wir erfolgreich den COM-Port öffnen, Linien 230-232 sperrt die Tasten Open und Scan-Ports und die Schaltfläche "Set Schwelle" ermöglichen. Sobald die COM-Port geöffnet hat, ist einen Timer zu jeder 1/8 Sekunde schießen. Der Timer-Handler verwendet M_SerialPort das neueste Update (falls vorhanden) aus dem Wasser Flow Monitor zu lesen und es aktualisiert den Status des Dialogfelds angezeigt.

Die ScanPorts Taste tut nichts mehr als wieder aufrufen, BuildCOMPortMap() und RefreshCOMList().

Die ArduinoSerial-Klasse

Die ArduinoSerial-Klasse behandelt alles, was mit öffnen, schließen, lesen und schreiben auf dem Arduino über die serielle Schnittstelle. Es richtet sich speziell an Wasser Flow Monitor, aber kann leicht für andere Bedürfnisse angepasst werden. Es ist in ArdSerial.h wie folgt definiert:

Beachten Sie, dass die Klasse selbst initialisieren ist, weil wir nicht versuchen, den COM-Port zu öffnen, bis wir wissen, was Sie wählen wollen. Wenn Close() aufgerufen wird wird der COM-Port geschlossen werden, wie M_hSerial an CloseHandle() übergeben wird, und M_bConnected wird wieder auf False gesetzt. Da dies ein RAII-Klasse ist, es wird automatisch bereinigen (z. B. Schließen Sie den Griff) wenn der Destruktor aufgerufen wird – dies geschieht durch den Aufruf von Close().

Wir haben bereits gesehen, wo die Open() Methode in der CCO2WaterFlowDlg.cpp OnBnClickedButtonOpen() [Zeile 223 CO2WaterFlowDlg.cpp] aufgerufen wird. Sie werden feststellen, dass diese M_SerialPort eine Instanz von ArduinoSerial wie in Zeile 52 der CO2WaterFlowDlg.h erklärt wird:

Parameter "CreateFile" und Einstellung COM

Öffnen des Gerätes, sobald wir wissen, dass den COM-Port ist einfach eine Frage des Anrufers CreateFile gefolgt durch Aufrufe von GetCOMState und SetCOMState, die die Baud-Rate und anderen seriellen Parameter gesetzt. 26 bis 50 Zeilen unterhalb zeigen den Aufruf von CreateFile und die Benutzerführung auf Fehler:

Mit dem offenen Port wir den COM-Zustand erhalten und anzupassen, um eine 9600 Baud-Rate (fühlen Sie sich frei, dies zu ändern, wenn Sie möchte, aber passen die Änderung in Ihrer Arduino-Skizze!) zu verwenden Alle restlichen Aufbau der COM-Port ist unten dargestellt. Obwohl es eine Menge Code aussieht, gibt es nicht viel zu erklären:

Beachten Sie den Aufruf von PurgeComm auf Linie 87 und den Schlaf auf Linie 89. Jedesmal, wenn Sie an den seriellen Port auf dem Arduino verbinden wird das Gerät zurückgesetzt.

Lesen und Schreiben von/nach dem Arduino

Da wir gezielt die Kommunikation mit dem Arduino sehr einfach, die ArduinoSerial lesen und Write-Methoden beschränken sich auf eine vollständige Lesung gehalten haben, Null beendet Textzeile, und ein einzelnes Byte zu schreiben. Sie haben bemerkt die Erklärung unserer lesen Sie Puffer in Zeile 45 der ArdSerial.h als auch die privaten Member-Funktion, die ReadAvailable() in Zeile 47 erklärt. ReadAvailable wird verwendet, um neue Daten von der seriellen Schnittstelle zu unserem Puffer anfügen. Es sieht wie folgt aus:

(Beachten Sie der Kommentar in Zeile 124 ist eine Übertragung aus dem Arduino Seriennummer Beispiel hier:

http://playground.arduino.cc/Interfacing/CPPWindows). In Zeile 122 wird ein temporärer Puffer die Größe, welche Spiele die lesbaren Bytes berichtet, durch den Aufruf von ClearCommError auf Linie 114 zugeordnet. Diese Bytes werden in unserer temporären Puffer (vArray) lesen, on Line 126. Und auf Linien 131 bis 134 sind diese Bytes an M_vBuffer angehängt.

ReadAvailable() wird aufgerufen, jedes Mal, wenn ReadNullZString() aufgerufen wird, und ReadNullZString überträgt nur die erste Null-terminierten String in den Puffer auf die Ausgabe StrRead:

Schreiben auf dem Arduino ist sehr einfach-- und dies ist im großen Teil, weil wir immer nur ein einzelnes Byte verwendet, um den Schwellenwert zu aktualisieren zu senden müssen:

Binden es zurück auf die Benutzeroberfläche

Der Timer, der bereits erwähnt wurde, die jede 1/8 Sekunde feuert m_Serial.ReadNullZString() rufen. Wenn eine Zeichenfolge verfügbar ist wird es dann analysiert die Zeichenfolge und die Benutzeroberfläche aktualisiert. Dies ist teilweise unten dargestellt. (Durchsuchen Sie die Github-Code zu sehen, der Rest des Codes)

Eine wichtige Sache zu beachten... Der "Durchfluss" angezeigt basiert auf den Spezifikationen für den Flow Rate Sensor. Verwenden Sie ein anderes Durchflusssensor Rate, einstellen Sie die Mathematik ab Zeile 275 nach Vorgaben des Sensors.

Festlegen des Schwellenwerts

Das letzte, zu decken ist, wie wir die neue Schwelle an den Arduino senden. Sie haben wahrscheinlich schon basierend auf den oben stehenden Code erraten, nennen wir einfach m_SerialPort.WriteByte() mit der neuen Schwelle. Korrekt wäre. Der Code ist sehr einfach, wie Sie unten sehen können:

Auf Linie 329 ist der Schwellenwert von der Benutzeroberfläche zu lesen und umgewandelt zu einem BYTE auf Linie 330 und Arduino auf Linie 331 an. Sie erinnern von der Arduino-Skizze, damit die Hauptschleife unterbrechen, passen Sie die Alarmschwelle, und starten Sie dann die Hauptschleife.

In Verbindung stehende Artikel

CARduino - Arduino-Powered, LabVIEW-gesteuerte Fahrzeug

CARduino - Arduino-Powered, LabVIEW-gesteuerte Fahrzeug

Die CARduino ist eine ferngesteuerte Fahrzeug, das von einem Controller befestigt an einem Computer unter LabVIEW gesteuert wird. Das Fahrzeug wird von der Arduino angetrieben und kann durch die Zugabe von Sensoren oder anderen Geräten erweitert werd
CO2 Laser-Wasserkühler

CO2 Laser-Wasserkühler

CO2 Laser WasserkühlerCO2 Laserröhren sind durch laufen oder Pumpen von Wasser durch das Rohr gekühlt. Dies ist notwendig, um die Lebensdauer der Röhre die sonst überhitzen und macht schnell verlieren und schließlich nicht funktionieren würde. Teures
Gewusst wie: CO2-Laser-Energie auf eine Laser-Gravur-Maschine und Laserschneidanlage verwenden einen vereinfachte (low-cost) CO2-Laser-Leistungsmesser messen

Gewusst wie: CO2-Laser-Energie auf eine Laser-Gravur-Maschine und Laserschneidanlage verwenden einen vereinfachte (low-cost) CO2-Laser-Leistungsmesser messen

am meisten CO2-Laser-Leistungsmesser sind sehr teuer und sind ausgestattet mit Funktionen weit über das hinaus, was die gemeinsame Laser Maschine Betreiber/Besitzer braucht.  Diese Anleitungen zeigen eine Sub-$ 100 Laser Power Meter Sonde bei der Arb
Acryl-Aquarium mit Arduino Powered Feeder

Acryl-Aquarium mit Arduino Powered Feeder

Wollten Sie schon immer mehr Hände auf Gefühl, wenn ein Fisch? Oder wollte etwas anders als die durchschnittliche Aquarien in den Läden gefunden? Dieses Aquarium ist vollständig angepasst und kann geändert werden, auf Ihre Größe zugeschnitten und hat
CO2-Laser, das Blech schneidet

CO2-Laser, das Blech schneidet

Bitte beachten Sie: Ich bin wirklich nicht im Wettbewerb um den Laser zu gewinnen, ein T-shirt wäre in Ordnung, danke.Ich sah die Konkurrenz und dachte, es wäre lustig, mein System zu zeigen.Einführung. Die Grundidee dieses CO2-Laser Systems ist, das
Wie mit einer Lasersonde macht 200 Watt CO2 CO2-Laser-Energie messen

Wie mit einer Lasersonde macht 200 Watt CO2 CO2-Laser-Energie messen

dieses Video veranschaulicht die Mahoney CO2 Laser Power Probe verwenden.  Die CO2-Laser Power Probe ist eine häufig verwendete und notwendige Gerät:1. Messen Laserleistung für Lasereinstellungen im Laufe der Zeit. Ob Sie ein RF (Radio Frequency) bes
Arduino powered LED Uhr

Arduino powered LED Uhr

Ein Spaß, einfache LED-Uhr, die Ihnen die Zeit auf die nächste halbe Stunde mit einfarbigen LEDs geben wird. Benötigten Teile sind wie folgt:Arduino Nano400 Krawatte-Punkt SteckbrettFlachbandkabelDS1307 RTC IC32,768 kHz Crystal(12) 10mm LEDs(12) 180
Pollutionen: Mein Arduino Powered Internet aktiviert Traum-Generator

Pollutionen: Mein Arduino Powered Internet aktiviert Traum-Generator

wir alle brauchen mehr zu träumen, damit ich diesem Arduino Powered "dream Generator" erstellt haben, Pflanzen Sie die Samen für einige große denken Verrücktheit zu helfen.  Beim nähern Sie sich der Generator eine Maxbotix Ultraschall-Sensor lös
Gewusst wie: ein Arduino Powered Schach spielenden Roboter bauen

Gewusst wie: ein Arduino Powered Schach spielenden Roboter bauen

Beurteilung durch die schiere Anzahl der Schach Verwandte Instructables, ich denke, es ist sicher zu sagen, die Gemeinschaft genießt das Spiel.  Es ist jedoch schwierig, finde jemanden, der Sie spielt auf dem gleichen Niveau.  Um dieses Dilemma zu lö
Wie mithilfe eine CO2-Laser Power Sonde zur Messung der Laserleistung, einen schlechten Spiegel zu finden

Wie mithilfe eine CO2-Laser Power Sonde zur Messung der Laserleistung, einen schlechten Spiegel zu finden

dieses Video veranschaulicht die Mahoney CO2 Laser Power Probe verwenden.  Die CO2-Laser Power Probe ist eine häufig verwendete und notwendige Gerät:1. Messen Laserleistung für Lasereinstellungen im Laufe der Zeit. Ob Sie ein RF (Radio Frequency) bes
Gewusst wie: verwenden Sie eine 500 Watt CO2 Laser Power Meter Sonde

Gewusst wie: verwenden Sie eine 500 Watt CO2 Laser Power Meter Sonde

dieses Video veranschaulicht die Mahoney CO2 Laser Power Probe verwenden.  Die CO2-Laser Power Probe ist eine häufig verwendete und notwendige Gerät:1. Messen Laserleistung für Lasereinstellungen im Laufe der Zeit. Ob Sie ein RF (Radio Frequency) bes
Wie Konvertieren von 220V auf 110V auf eine chinesische CO2 Laser Power Supply

Wie Konvertieren von 220V auf 110V auf eine chinesische CO2 Laser Power Supply

Diese instructable bietet ein schrittweises Vorgehen zum Ändern einer chinesischen CO2-Laser-Stromversorgung aus einer Eingangsspannung von 220V AC auf 110V AC. Ich führe diesen Vorgang regelmäßig so meine Kunden ändern ihre Anforderungen, oder sie e
Wie zu testen und ein Chinese (China) CO2-Laser Power Supply von Ihrem CO2-Laser-Schlauch für Ihre Lasergravur und Laserschneidanlage Maschine zu lange Lebensdauer

Wie zu testen und ein Chinese (China) CO2-Laser Power Supply von Ihrem CO2-Laser-Schlauch für Ihre Lasergravur und Laserschneidanlage Maschine zu lange Lebensdauer

sicher sein, bei der Durchführung dieses Projekts.SICHERHEIT IST AM WICHTIGSTEN.  WENN MAN ES FALSCH MACHEN KÖNNEN SIE EINEN STROMSCHLAG SEIN.  DIE HOHE SPANNUNG UND STROM KOMBINATION KANN TÖDLICH SEIN.  FOLGEN SIE DEN ANWEISUNGEN UNTEN. DIE ANWEISUN
Arduino Powered Infared Sache

Arduino Powered Infared Sache

Hallo, dies ist mein erster instructible. Ich zeige Ihnen, wie man einen Arduino powered Analogsensor Leser (ich werde eine Infared Photodiode mit).Schritt 1: Teilen Braucht man mehrere Dinge zu machen:1. eine Art von Gehäuse oder box(2) ein Adafruit