Archiv verlassen und diese Seite im Standarddesign anzeigen : Aquarien Technick?
Ratman2000
08.07.2006, 23:13
Hallo,
ich möchte mich in der Elektronik einarbeiten und habe mir daher ein kleines bzw. doch recht grosses Projekt ausgedacht...
Und zwar habe ich als Hobby ca 30 Aquarien...
Nun habe ich mir gedacht, das es recht sinlos wäre, ohne ein Ziel was einem auch was bringt und was man immer weiter entwickeln kann (und damit auch immer weiter lernt) anzufangen...
Deswegen habe ich mir gedacht, dass ich doch meine 30 Aquarien mit der Elektronik vereinfachen könnte und wollte bei Temperatursensoren anfangen...
Mein Problem ist nun das ich ALLES von einem Port des PCs aus betreiben möchte das heist, das ich Temperatur Sensoren, Leitwert so wie PH Elektroden und evtl später mal Magnetventile und Mondlicht (also Dim Module für die Lampen) über einen einzigen Port steuern möchte.
Es werden also mehr als 100 Komponenten angesprochen werden wenn es irgend wann mal funktioniert
Nur da ich gerade erst damit anfange, wollte ich euch fragen ob ihr mir helfen könnt, 2 Temperatursensoren mit möglichst genauer Auflösung an eine Schnittstelle des PCs zu bekommen und über C++ von beiden einzeln die Temperatur abzufragen...
Wie gesagt leider ist mein Wissen in der Elektronik nicht sehr gut so das ich auf eure Hilfe angewiesen bin!
Ich danke jedem der versucht mir zu helfen!
MFG
Michael
kalledom
09.07.2006, 00:00
Hallo Michael,
einen Temperatur-Sensor an einer PC-Schnittstelle einzulesen, dürfte ohne Hardware nicht gehen, da der Sensor-Wert analog ist, in einen binären Wert gewandelt und dann parallel oder seriell an den PC übertragen werden muß.
Bei ca. 100 Komponenten wird es noch schwieriger.
Hardware aus TTL-Bausteinen aufzubauen, einschließlich AD-Wandler, dürfte wohl zu umfangreich werden.
Da leistet ein AVR oder PIC gute Dienste. Die haben beide neben digitalen Ein- oder Ausgängen mehrere Analog-Eingänge und eine serielle Schnittstelle.
Die Schnittstelle würde ich als RS485 empfehlen, was es auch für den PC gibt, und ein Daten-Protokoll vorsehen, bei dem von mehreren 'Stellen' immer nur der antwortet, der auch gefragt wurde.
Wäre das schon mal ein 'überlegenswerter Grundgedanke' ?
Hallöle,
Dein Vorsatz, an einem Projekt zu wachsen ehrt Dich :) Du hast ein entscheidendes Problem ja schon erkannt: um frustfrei erweitern zu können musst Du ein Bussystem o.ä. haben, an das Du Module anstöpseln kannst, die dann jeweils mehrere Sensoren oder Aktoren steuern können. Ich verwende für sowas RS485, ein bidirektionales Halbduplex-Protokoll über ein symmetrisches Aderpaar. Man muss anfangs natürlich ein Protokoll definieren und sich dann auch dran halten. Du könntest auf der Softwareseite zB so vorgehen:
Master (PC) schickt sowas wie "17 3A <CR>" auf den Bus. Die Vereinbarung hierzu könnte lauten: erstes Hexzahlenpaar Adresse, zweite Sensornummer, alles bis zum CR ignorieren.
Alle Slaves (Deine Module) hören das, ignorieren es aber bis auf das Modul, in dessen Software Du die Adresse 17 verankert hast. Dieses fragt daraufhin seinen Sensor mit der Nummer 3A ab und sendet "17 3A 1E <CR>". Der PC hört die Antwort und weiss: Modul 17 antwortet, Sensor 3A weiss zu berichten 1E=30, also misst da wohl was 30 Grad.
Wenn die Antwort nicht kommt (Modul kaputt, falsche Adresse abgefragt) sollte nach kurzer Zeit (länger als die maximale Messdauer natürlich) ein Timeout eintreten, heisst: nach Ablauf der definierten Zeit darf auch ein angesprochenes Modul nicht mehr senden und der PC darf das nächste abfragen. Wie Du das Protokoll definierst, liegt natürlich an Deinen Sensoren und Bedürfnissen, es lohnt sich, von vornherein intenstiv darüber nachzudenken!
Nun die elektronische Seite: für die PC-Seite kannst Du einen fertigen RS232-nach-RS485-Wandler benutzen, meistens wird die Senderichtung bei den Dingern mit den Handshakeleitungen gesteuert, aber die solltest Du unter C++ ja ansprechen könnnen (unter Linux hatte ich damit nie Probleme, ich wüsste also nicht, warum es nicht auch unter Windows gehen sollte).
Auf Deinen Modulen müsstest Du dann jeweils einen RS485-Transceiver-Chip (LTC1487 habe ich zuletzt benutzt) einbauen, dessen Datenleitungen verbindest Du direkt mit den UART-Anschlüssen RxD und TxD Deines Controllers. Ich plädiere hier wie üblich für einen ATmega. Mit einer Portleitung steuerst Du dann die Sende-/Empfangsumschaltung des LTC1487. Den ATmega kannst Du auch in C programmieren, so dass die Eingewöhnung nicht so schwer fallen dürfte, nur die Eigenarten der hardwarenahen Programmierung könnten Dich anfangs etwas verwirren. Nun haben wir also einen RS485-Baustein, einen ATmega. Der braucht jetzt noch einen Quarz für genauen Takt, falls Du mal irgendwelche Timings erzeugen musst und einen Programmierstecker, das ist einfach nur eine 10polige Pfostenleiste, an die Du einen Programmieradapter (wurde hier desöfteren vorgestellt, im Grossen und Ganzen ein 74HC244, der am Parallelport des PC hängt) stecken und den ATmega in Deiner Schaltung programmieren kannst.
Messen kann er so natürlich noch nichts. Aber die Controller dieser Familie haben (fast?) alle einen 10-bit-A/D-Umsetzer mit max. 8 Kanälen eingebaut, den Du verwenden könntest. Als Temperatursensor bietet sich dann etwas an, was bereits eine zur Temperatur linear proportionale Ausgangsspannung liefert (zB. LM35) und nicht etwa ein NTC, der erstmal wild linearisiert werden will. Ein anderer Weg wäre ein I2C-Temperatursensor, der mit dem Dreidrahtbus I2C mit dem ATmega verbunden wird. Jeder Baustein an diesem Bus bekommt eine Adresse verpasst, die zum Teil im Chip codiert ist, zum Teil von aussen durch Beschaltung bestimmter Pins festgelegt werden kann. Ein typischer Baustein dieser Art ist der LM75, allerdings ist der I2C-Bus vorrangig für die Verwendung innerhalb von Geräten gedacht, wenn Du also mehrere Temperaturfühler mit Kabeln an Dein Modul anschliessen möchtest, ist das nicht ganz optimal, dann würde ich doch eher was Analoges (zB den LM35 am A/D-Wandler) nehmen oder auf den 1-Wire-Bus von Dallas/Maxim umsteigen. Die Bausteine, zB der DS1820, brauchen wirklich nur eine Leitung plus Masse und die Bustopologie ist relativ willkürlich wählbar. Der Haken hier ist, dass die Chips zwar alle eine eindeutige und einmalige Adresse haben, die deutlich mehr Spielraum als die 8 möglichen LM75 an einem I2C-Bus bieten, aber leider auch nicht auf den ICs draufstehen, wenn Du also IC und Adresse eindeutig zuordnen willst, musst Du die vorher irgendwie auslesen oder eine Arbitrierungsroutine schreiben; Letztere hat Dallas zwar mal veröffentlicht, aber anfreunden konnte ich mich damit nie wirklich.
Zusammenfassung: am PC einen Wandler von RS232 auf RS485, auf den Modulen jeweils einen ATmega mit Programmierstecker, Quarz und LTC1487. An einen A/D-Eingang des ATmega kannst Du einen Analog-Temperatursensor anschliessen. Ein paar passive Bauteile, etwas Kabel und ein C-Programm, das Du mit WinAVR (frei, basiert auf dem Gnu C-Compiler gcc) programmierst und mit Ponyprog (ebenfalls frei) in den ATmega "flasht" und schon kannst Du mit einem Terminalprogramm vom PC aus Steuerbefehle an Dein Modul senden und die Antworten angucken. Wenn das funktioniert schreibst Du Dir ein Auswertungsprogramm nach Maß und Wunsch am PC und dann kann's weitergehen mit neuen Sensoren, Aktoren und weiteren Modulen. Ohne großartige weitere Hardware (weitere Wandler) kannst Du mindestens 8 analoge Sensoren, einige I2C-Bausteine, diverse digitale Ein- und Ausgänge (Meldekontakte, LEDs, Relais....) an jeden ATmega und damit an jedes Modul anschliessen.
Eine Beispielschaltung mit LTC1487 und die entsprechenden Stellen C-Code für den AVR kann ich Dir bei Bedarf mal extrahieren.
edit: kalledom hatte anscheinend die gleiche Idee, ich hab aber schon angefangen zu schreiben, bevor sein Posting hier stand. Ehrlich :)
Ratman2000
09.07.2006, 13:39
Hallo,
vielen Dank für eure Antworten!!!
Könntet ihr mir vieleicht dabei helfen einen kleinen Schaltplan für 2 Sensoren zu entwerfen, so dass ich damit experimentieren kann?
Ich würde gerne die 2-Draht variante nutzen!
Das hier habe ich nicht ganz verstanden:
den Modulen jeweils einen ATmega mit Programmierstecker, Quarz und LTC1487.
Soll ich vor jeden Sensor einen ATmega klemmen? O_o
Oder für jeweils (ich glaube 40 pins hat der ATmega32) einen ATmega?
Ich hoffe ihr unterstützt mich!
Natürlich werde ich auch wenn ich es hin bekomme alles mit bildern versuchen zu dokumentieren so dass auch andere in der lage sein werden soetwas nachzubauen!!
Vielen Dank!!!
MFG
Michael
Hi,
nee, natürlich die ATmegas so gut wie möglich ausnutzen. Einige haben 8, andere 16 A/D-Kanäle, die kannst Du für analoge Sensoren (Temperatur, PH, ...) benutzen, an die sonstigen Pins kannst Du wie gesagt digitale I/O anschliessen (Kontakte, LEDs, Optokoppler...) oder weitere A/D-Wandler an den I2C- oder SPI-Bus. Mit einem ATmega16 oder größer sollten sich theoretisch ein paar hundert Sensoren und Aktoren bedienen lassen, nur wird es dann sowohl in der Software als auch im Kabelgewirr unübersichtlich. Ich poste demnächst mal einen Link auf Teile meiner Schaltung+Software, in der ein ATmega16 über RS485 angesprochen und "ausgefragt" wird, u.a. wird ein A/D-Kanal dort zur Messung der Versorgungsspannung benutzt, den entsprechenden Code-Schnipsel lasse ich dann auch mit drin. Allerdings ist mein RS485-Timing etwas sehr relaxed geworden, weil der RS485-Bus nicht direkt am PC klemmt, sondern an einem weiteren Gerät mit einem ATmega64, der über Ethernet mit Labview kommuniziert.
wenn ein Atmega beispielweise 2 Temperatursensoren angeschlossen hat,
legst du halt zwei Bytes auf die Leitung, das erste bestimmt den controller, das zweite den sensor
der Controller dessen nummer ausgewählt wurde liest dann einfach das zweite Byte auch noch, und schickt dir die Daten von dem Sensor
Aber bei 30 Aquarien musst du aufpassen, die Abdämpfung von normalen seriellen Kabeln ist da nicht ohne Belang,
da wirst du wohl mehrere Repeater brauchen
Ratman2000
09.07.2006, 14:50
Hallo,
Danke für die Antworten!
Leider weiss ich noch nicht so genau, wo ich welchen Wiederstand usw anlegen muss, deswegen wollte ich euch fragen, ob mir jemand einen kleine Skizze erstellen könnte wo ich sehen kann, wie genau ich einen ATmega mit 2 Sensoren an die RS232 Schnittstelle verbinden kann?
Ich denke irgendwo muss ich ja auch eine Spannung anlegen um die Sensoren / den ATmega zu betreiben oder geht das alles vom Port aus?
Ich hoffe ihr könnt mir solch eine (ich hoffe) kleine Skizze anfertigen?
Wäre super!!!
MFG
Michael
kalledom
09.07.2006, 15:13
Hallo Michael,
eine kleine Skizze ist gut; weist Du eigentlich, auf was Du Dich da einlassen willst ?
Eine 'Skizze' mit einem PIC gibt es unter http://www.domnick-elektronik.de/aktuell.htm, gleich am Anfang der Seite. Die OpAmps können mehr oder weniger entfallen. Stattdessen mußt Du die 8 Analog-Eingänge des µC benutzen.
Wenn Du mit einem AVR arbeiten möchtest, muß die Pinbelegung auf diesen umgeändert werden, für eine andere Gehäuseform ebenfalls. Ein Datenblatt für den µC brauchst Du sowieso.
Vielleicht gibt es so einen kleinen Schaltplan auch für den AVR ?
Grrr, ich hab doch schon gesagt, dass ich einen Link zu einem Schaltungsteil poste, etwas Geduld bitte. Natürlich brauchst Du auch noch eine Stromversorgung, und da Du von Anfang an für mehrere Module planen solltest, beschränke Dich bitte nicht auf RS232, diese Schnittstelle ist nicht für den Anschluss von mehreren Endpunkten gedacht. Ich weiss, dass sowas hier gelegentlich vorgeschlagen wird, aber es ist eine Bastellösung und keiner kann sagen, ob sie mit dem nächsten PC, der vielleicht keine saubere RS232-Implementierung mehr hat, noch funktioniert. Bei eBay findest Du zB unter der Nr. 9734164557 einen Bausatz für einen RS232-RS485-Wandler, der automatisch zwischen Senden und Empfangen umschaltet, heisst: sobald der PC als Master was sagt, wird gesendet, danach dauert es je nach Baudrate 2-20ms bis der Bus frei wird und dann darf das angesprochene Modul antworten. Das entspricht weitestgehend dem Protokoll, das ich gestern vorgeschlagen habe, nur mit klaren Angaben: wenn das Modul "sich" erkannt hat, muss es 20ms warten, dann darf es losplappern. Der PC muss dann, sobald er fertig gesendet hat, auf die Antwort warten.
Für eine analoge Temperaturmessung könntest Du den LM35 mit einem der 8 ADC-Eingänge des ATmega verbinden und die interne 2,56V-Referenz benutzen. Der LM35 kann dann von +2..+150 Grad C messen und liefert am Ausgang eine Spannung von 20mV...1,5V. Der Wandler löst diese mit 1/4 Grad C Genauigkeit auf und liefert entsprechend eine Zahl zwischen 8 und 600, die teilst Du durch 4 und schon hast Du Deine Temperatur. Wie das genau aussieht mit dem Auslesen des ADC kannst Du dann meinem Programmschnipsel entnehmen, ich sehe mal zu, dass ich ihn heute noch online stelle. Die absolute Genauigkeit ist übrigens schlechter als 0,25 Grad, für bessere Werte kannst Du eine externe Referenzspannung an den ATmega anschliessen, so richtig genau und verlässliche Auflösungen von 0,1 Grad, die die digitalen Billigthermometer häufig suggerieren kannst Du mit Hobbymitteln eigentlich fast vergessen, dazu braucht man Thermoelemente oder besser PT-Sensoren, letztere gehen aber gut ins Geld und erfordern einigem Schaltungsaufwand auf der Analogseite oder aber mit Kalibrierung - aber wie willst Du genug Stützpunkte mit einer Genauigkeit <<0,1 Grad C erzeugen um damit zu linearisieren? Kurz gesagt: für eine Tendenzanzeige taugt die Viertelgradstelle noch, verlassen würde ich mich aber nur auf die ganzen Grade.
Ratman2000
09.07.2006, 16:09
Hallo,
ja 1/4 grad würde mir fürs Aquarium reichen...
Ob ich nun 24,25 grad oder 24 oder 24,5 grad habe ist schon optimal :)
Das langt vollkommen!
Dann warte ich mal gespannt auf deine Skizze und lese mich solange weiter in die materie ein!
Vielen Dank!!!!
MFG
Michael
Ratman2000
09.07.2006, 16:16
Hallo,
ist es eigentlich schwer, sich einen Adapter von RS232 auf RS485 selbst zu basteln?
Gibt es dazu evtl gute Tutorials?
Vielen Dank!!!
MFG
Michael
Beide Systeme verstehen reicht schon. Ich habe bewusst den Bausatz vorgeschlagen, weil Du mit selberbasteln auch schnell bei 20 Euro bist. Du wirst mit den Messmodulen noch einiges zu tun haben, und ohne Deine Lernwilligkeit in Frage zu stellen würde ich Dir raten, den Wandler fertig oder als Bausatz zu kaufen, dann haben wir für zukünftige Diskussionen eine Basis, ab der wir anfangen können, die Probleme zu lösen. Ich frage mich gerade, was Du unter Tutorial verstehst, ich lese diesen Begriff in veschiedenen Zusammenhängen immer wieder, mal ist es eine halbe Doktorarbeit, mal die Zusammenlötanleitung eines Bausatzes. Um wirklich zu verstehen, was man da tut, muss man halt von beiden Systemen die Eigenschaften, Pegel und Timings kennen, die Datenblätter der eingesetzten ICs verstehen und das Drumherum dimensionieren und ggf troubleshooten können. Wenn Du mit dem Messmodul fertig bist hast Du vermutlich genug gelernt, um auch den Adapter zu entwickeln, nur: es gibt IMHO nichts Schlimmeres, als ein System aus mehreren Modulen, die alle untereinander wechselwirken, zu bauen, wenn man keinen Anfang funktionsfähig in der Hand hält. Denn wie willst Du Deinen eigenen RS485-Adapter testen, wenn Du kein Gegenstück hast, von dem Du weisst, dass es funktioniert?
Ratman2000
09.07.2006, 17:02
Hallo,
da hast du recht!
Wenn ich mir also diesen Adapter jetz bestelle,
dann würde ich schon einmal eine Fehlerquelle ausschliessen!
Ich werde mir den Adapter dann wohl mal bestellen!
Ich hoffe das ich damit ans ziel kommen werde :)
MFG
Michael
So, versprochen ist versprochen, und jeder kann sich ja mal versprechen ;)
Eigentlich hatte ich für diesen Abend was anderes geplant, aber nun habe ich mich doch noch mal ne Stunde hingesetzt und aus einem anderen Projekt von mir die Schaltung um den ATmega extrahiert, mit einem LM35 versehen und den C-Code etwas abgespeckt (sprich: fast alles gelöscht und ein paar Kleinigkeiten angepasst). Ob es so 100%ig funktioniert weiss ich natürlich nicht, aber im Grossen und Ganzen sollte es erstmal klappen. Die Doku findest Du unter
http://www.engcyclopedia.de
dort unter Projekte->Diverse der unterste Eintrag.
Viel Spaß damit!
Hat Dich meine kleine Doku so erschlagen, dass Du Dich nicht mehr hertraust? Komm, mach mal, ist doch ein nettes Projekt. Wollte nur kurz anmerken, dass Reichelt nun auch RS232-RS485-Adapter hat - 25,75 EUR, im aktuellen Katalog erstmalig aufgetaucht.
Ratman2000
12.07.2006, 18:07
Hallo,
nein ist super deine Doku!
Ich habe heute auch den Adapter bekommen (den der oben steht aus Ebay bestellt)
Nu muss ich nur damit kämpfen, was ich wo aufzulöten habe...
Ist auf jeden fall nicht idioten sicher :P
Wurde heute leider am Zeh operiert, so das ich im mom nur liegen darf aber ich denke ich melde mich die Tage auf jeden fall wieder bei euch wenn ich den Adapter zusammen gebastelt habe :P
Vielen Dank schon einmal!!!
MFG
Michael
(Sorry für die Rechtschreibfehler! Kann vor Schmerzen kaum denken)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.