PHP Dashboard für HmIP Smartmeter
09.10.2024
Elektronik | Funk | Software
Der Technik-Blog
Zu diesem Artikel gibt es auch ein Video auf Youtube: Arduino Serial Port (COM) zu Visual Basic Software - Windows
Dieser Artikel beschreibt, wie Daten (z.B. Messwerte) von einem Arduino Board über die serielle Schnittstelle (COM-Port) an einen Windows Computer gesendet werden können. Als Software wurde ein kleines Programm in Visual Basic geschrieben, dass drei Parameter von Arduino Board auslesen kann und in Textfeldern anzeigt.
In diesem Beispiel werden Daten vom Arduino zum Computer übertragen. Selbstverständlich ist es auch ohne großen Aufwand möglich, Daten vom Computer an den Arduino zu senden. Die Daten vom Arduino werden mit 9600 Baud gesendet. Dieser Wert ist bei sowohl beim Beispielcode vom Arduino als auch von der Windows Software fest eingestellt und muss immer an beiden Seiten angepasst werden. Der Arduino überträgt drei Parameter. Das ist die Laufzeit in Sekunden, der Wert vom Potentiometer(0 – 1024) und ein statischer Wert (1234). Diese drei Parameter werden gleichzeitig übertragen und mit einem Beistrich getrennt. Die gesamte Zeile hat am Ende ein Semikolon, dass das Ende der Datenreihe kennzeichnet. In unserem Visual Basic Beispiel Code werden dann die Parameter-Pakete in einzelne Werte gesplittet. Dies funktioniert über den Beistrich, der das Ende eines einzelnen Parameters kennzeichnet. Zuletzt werden diese Werte in eine TextBox geladen und bei jedem neuen Datenpaket aktualisiert.
Die in Visual Basic geschriebene Software empfängt die Datenpakte über den COM-Port und zeigt diese in drei Felder an. In der Mitte wird der analoge Wert vom Potentiometer an Pin A5 angezeigt. Das erste Feld zeigt die Laufzeit in Sekunden an. Das letzte Feld zeigt den dritten Wert, der vom Arduino gesendet wird und in diesem Beispiel statisch ist.
long timer; void setup() { Serial.begin(9600); } void loop() { if(millis() > timer+500){ timer = millis(); SendToSerial(); } } void SendToSerial(){ int val = analogRead(A5); Serial.print(millis()/1000); Serial.print(","); Serial.print(val); Serial.print(","); Serial.print("1234"); Serial.println(";"); }
Imports System Imports System.IO.Ports Public Class Form1 Dim SerialPort As String Dim RxData As String = "" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Enabled = False SerialPort = "" For Each sp As String In My.Computer.Ports.SerialPortNames com_port.Items.Add(sp) Next End Sub Private Sub SerialPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles com_port.SelectedIndexChanged If (com_port.SelectedItem & lt;> "") Then SerialPort = com_port.SelectedItem End If End Sub Private Sub connect_BTN_Click(sender As Object, e As ventArgs) Handles connect_btn.Click If (connect_btn.Text = "Connect") Then If (SerialPort & lt;> "") Then SerialPort1.Close() SerialPort1.PortName = SerialPort SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default SerialPort1.ReadTimeout = 10000 SerialPort1.Open() connect_btn.Text = "Disconnect" Timer1.Enabled = True Else MsgBox("Please choose Serial Port") End If Else SerialPort1.Close() connect_btn.Text = "Connect" Timer1.Enabled = False End If End Sub Private Sub Timer1_Tick(sender As Object, e AsEventArgs) Handles Timer1.Tick 'Read Serial Data and split it to text boxes RxData = ReceiveSerialData() Dim rxpacket As String() = RxData.Split(";") Dim rxprams As String() = rxpacket(0).Split(",") TB_P1.Text = rxprams(0) TB_P2.Text = rxprams(1) TB_P3.Text = rxprams(2) End Sub Function ReceiveSerialData() As String Dim Incoming As String Try Incoming = SerialPort1.ReadExisting() If Incoming Is Nothing Then Return "no-data" & vbCrLf Else Return Incoming End If Catch ex As TimeoutException Return "Error: Serial Port timeout." End Try End Function End Class
PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?
WeiterlesenDer PT100 ist ein sehr präziser industrieller Temperatursensor. In diesem Artikel geht es um den Bau eines Messverstärkers zum Einlesen eines PT100 am Arduino
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved