PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Messwerte per Funk übertragen



evolvente
07.01.2006, 18:48
Hallo,
ich möchte ein paar Messwerte (Spannung, Strom, Temperatur; el. Signale sind vorhanden) per Funk an einen PC übertragen, um sie dort weiter zu verarbeiten (z.B. el. Leistung berechnen).

Da ich in diesem Gebiet bisher keine Erfahrungen habe (studiere Energietechnik), würde ich gerne wissen, mit welchem Aufwand dies verbunden ist und wo ich mich diesbezüglich schlau machen kann.
Ich würde mich riesig freuen, wenn mir jemand ein paar Tipps oder sogar eine Bauanleitung geben könnte.

Gruß,
evolvente

ruediw
07.01.2006, 19:37
Schau mal hier ...
https://www.roboternetz.de/phpBB2/search.php?mode=results

kalledom
07.01.2006, 21:32
@ruediw
vielleicht korrigierst Du den Link mal, ich kann dort nichts Informatives sehen.
Danke.

chr-mt
07.01.2006, 21:46
Hi,
ein Mega32 AVR Controller hat 32 zB. IOs.
Es können also zB. 8 Analoge Werte und 22 digitale Werte "gleichzeitig" verarbeitet werden.
(Wenn man die analogen Werte und die Schnittstelle wegläßt sind's eben 32).
Mit der internen seriellen Schnittstelle (UART) und einem Pegelwandler kann man dann prima Daten zum PC senden.

Kommt drauf an, wie die Signale vorhanden sind.
Für die jeweiligen Eingangsgrößen müssten dann noch Anpassungen gemacht werden um die Eingangssignale auf die für den AVR zulässigen und sinnvollen Pegel zu bringen.

Das Programm für den Mikrocontroller kann man dann zB. in Basic schreiben.
BASCOM-AVR hat sich als Basic-Compiler durchgesetzt und ist in einer Demoversion (auf 4K Code beschränkt) erhältlich. (www.mcselec.com)

Für deine Zwecke dürfte die Demo sogar komplett ausreichen.
Kommt halt immer drauf an, wie kompliziert das ganze werden soll.
Einfach 3 Analogwerte an den PC zu übertragen ist in BASCOM mit wenigen Code-Zeilen erledigt.

Wenn's dann über Funk gehen soll, wird's eventuell etwas komplizierter.
Kannst ja mal nach "Manchester Code" suchen.
Oder du verwendest komplette Funkmodule mit integriertem Protokoll, wie zB. die Easy Radio Module.
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=76&products_id=70
Damit sparst du dir das schreiben eines funktauglichen Protokolls und bleibst bei wenigen Codezeilen.
Ein LCD Display am Controller zu integrieren ist auch kein Problem.
Mit ein paar Codezeilen mehr kannst du dir die Messwerte dann auch vor Ort angucken.
Ist auch ganz nett um sein Programm zu debuggen.
LCD Displays gibt's unter 10 Euro.
Die Ansteuerung ist meist problemlos mit Bascom zu machen.

Es kommt auch drauf an, wie weit die Signale übertragen werden müssen.
Wenn's weiter als 200-300 Meter sein soll, dann wird's teurer.



Gruß
Christopher

evolvente
07.01.2006, 22:38
Die elektrischen Signale Möchte ich von vorhandenen Messgeräten (Dreheisen- und Drehspulmessgeräte) abgreifen. Dass die Pegel noch angepasst werden müssen dachte ich mir schon, aber das ist ja weniger das Problem. Weiter als 200m sollen die Signale auch nicht gesendet werden.

Protokolle wollte ich nicht erst definieren, bzw. programmieren. Ich dachte da an eine simple Lösung wie: Controller (Eingang der Signale) -> Funkmodul -> Empfänger -> PC
Mit der Programmierung müsste ich mich dann auch nochmal beschäftigen (habe nur sehr spartanische JAVA Grundkenntnisse)
Wie gesagt, ich habe da fast keinen Plan von, aber ich bin bereit, mich da reinzuarbeiten.

chr-mt
07.01.2006, 23:41
Hi,
hier mal ein schnell in ein paar Minuten geschriebener Code, der AD/Werte ausliest und über die serielle Schnittstelle sendet (ohne Schönheitsgarantie ;) ) :


$regfile = "M32DEF.DAT" 'Controller ist ein Mega32

$crystal = 16000000 'mit 16 MHz

Baud = 9600 'serielle Schnittstelle initialisieren mit 9600,n,8,1

Config Adc = Single , Prescaler = Auto 'AD Wandler Konfigurieren

Dim Temperatur As Integer 'Werte dimensionieren
Dim Spannung As Integer
Dim Strom As Integer
Dim Ausgabe As String * 5
Dim Sendestring As String * 40

Start Adc 'AD-Wandler starten

Do
Temperatur = Getadc(0) 'Werte vom AD-Wandler holen
Spannung = Getadc(1)
Strom = Getadc(2)
Gosub Werte_berechnen
Gosub Werte_ausgeben
Loop
End

Werte_ausgeben:
Ausgabe = Str(temperatur) 'Wert in String umwandeln
Ausgabe = Format(ausgabe , "+0000") 'String formatieren inkl. Vorzeichen
Sendestring = "Temperatur = " + Ausgabe + " Grad" 'Beschreibung dazu
Print Sendestring 'senden und cr/lf anhängen

Ausgabe = Str(spannung)
Ausgabe = Format(ausgabe , "+0000")
Sendestring = "Spannung = " + Ausgabe + " Volt"
Print Sendestring

Ausgabe = Str(strom)
Ausgabe = Format(ausgabe , "+0000")
Sendestring = "Strom = " + Ausgabe + " Ampere"
Print Sendestring
Return

Werte_berechnen:

'Hier kann man dann noch die Werte "mundgerecht aufarbeiten"

Return







Bascom hat übrigens auch einen eigenen Simulator.
Da kann man sowas prima testen ;)
Das Prog. beötigt übrigens 3% des Programmspeichers im Chip :D
Kleiner uns hübscher geht's auch, aber ist eben schnell zusammengefummelt..

Wenn du dann noch ein LCD Display dranhängen willst, sind's nochmal etwa 10 Zeilen mehr.


Also alles nicht so schwer und kompliziert..
Ist halt ein riesen Vorteil von Basic.
Hier mal ein Codevergleich von verschiedenen Programmiersprachen für die AVRs :
https://www.roboternetz.de/wissen/index.php/Sourcevergleich

Gruß
Christopher

kalledom
07.01.2006, 23:49
Wenn Du Assembler kannst / magst, gibt es auch für PIC-Controller Beispiele, wo ebenfalls der AD-Wandler ausgelesen wird und wo eine Kommunikation mit einer RS232-Schnittstelle mit Ringpuffer für senden und empfangen zu Verfügung steht (und natürlich noch mehr). Das Ganze befindet sich unter: http://www.domnick-elektronik.de/picasm.htm.
Dann gibt es bei sprut.de noch viele Informationen zu Hard- und Software von PIC's.

RedBaron
08.01.2006, 00:31
Hallo evolvente,

wie liegen denn deine Daten überhaupt vor? Drehspulmessgeräte liefern eine Zeigerauschlag, also ein mechanisches Ergebnis. Willst du die Zeigerstellung optisch erfassen? ( :cheesy: kleiner Scherz!)

Willst du direkt Spannungen o.ä. messen? Haben deine Messgeräte vielleicht schon einen digitalen Ausgang? Vielleicht sogar RS232C?

Mit welcher Datenrate rechnest du? Wie hoch soll die Genauigkeit sein?

Wenn du bereits weißt, wie du Daten auf einen uC bekommst, ist es am einfachsten, du benutzt zur Übertragung ein Funkmodul mit seriellem Interface (aber nicht die billigen von 'C' für ca. 15€).

Gruß Red Baron

evolvente
08.01.2006, 14:21
Hmm, optische Erfassung mit einer Kamera, auch ne Idee...
Nein, ich wollte die analogen Signale direkt von den Messgeräten abgreifen. Für jeden Messwert steht ein Spannung bereit (schon gemessen). Nur die Pegel müsste man noch angleichen (wie gesagt, das ist weniger das Problem).
Ich verstehe jetzt nur noch nicht, wie ich die Werte vom Controller zum Funkmodul bekomme. Das Programmbeispiel von chr-mt scheint ja nur die Werte im Terminalclient auszuspucken.

So langsam wird alles aber ein bißchen klarer.

chr-mt
08.01.2006, 14:27
Hi,

Ich verstehe jetzt nur noch nicht, wie ich die Werte vom Controller zum Funkmodul bekomme
wenn du ein Funkmodul mit integriertem Protokoll nimmst, brauchst du den TXD Ausgang des Controllers nur an den Eingangspin des Funkmoduls anzuschließen.
Am PC schließt du dann den Empfänger über einen RS232 Pegelwandler (zB. MAX232) an. Das war's dann auch schon.
Die ankommenden Daten kannst du am PC natürlich noch aufbereiten.

Wenn du das Ganze bidirektional machen willst, wird es natürlich wieder etwas aufwändiger.

Gruß
Christopher

evolvente
08.01.2006, 14:35
Danke an alle für die Tipps, ich werde mich jetzt erstmal durch den Wust von Dokumentationen wühlen und versuchen, die Schaltung aufzubauen.
Nur noch eine Frage: Was muss ich an dem Beispielprogramm ändern, damit die Übermittlung zum Funkmodul klappt?
An Bidirektionale Übertragung habe ich auch schon gedacht, ist mir aber für meinen Verwendungszweck erstmal zu unsicher. Ich habe Angst, dass sich unbeabsichtigt irgendwelche Servomotoren verstellen könnten.

RedBaron
08.01.2006, 14:41
Hallo

schau einmal hier: https://www.roboternetz.de/wissen/index.php/Funkmodule

Dort findest du auch Datenblätter. Wenn du nur in eine Richtung übertragen willst, reicht es, einen Sender und einen Empfänger zu nehmen. Wenn du bidirektional übertragen willst, brauchts du zwei Transceiver.

Gruß Red Baron

chr-mt
08.01.2006, 14:43
Hi,
da musst du nix ändern. ;)
Das Funkmodul ersetzt einfach nur die direkte Verbindung zum PC.
Du kannst das also einfach als "Kabel" ansehen.
Mit den Easy Radio Modulen habe ich allerdings keine Erfahrungen.
Sollte aber so gehen, denke ich.
Vielleicht kann ja jemand was dazu sagen, der die Dinger schon verwendet hat.
Im Beispiel werden ja nur die AD Werte direkt gesendet.
Also würde bei einer Referenz von 5 Volt und bei einer Eingangsspannung von
5 Volt der Wert 1023 gesendet.
Das kannst du im Programm dann noch entsprechend umrechnen, damit du die Werte gleich richtig angezeigt bekommst.
Die Berechnung habe ich mir mal gespart ;)
Kannst du natürlich auch auf dem PC umrechnen.

Gruß
Christopher