Unimik: Unterschied zwischen den Versionen
Sysd0b (Diskussion | Beiträge) |
Martin (Diskussion | Beiträge) |
||
(19 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 10: | Zeile 10: | ||
* Sensoren | * Sensoren | ||
** 7x Temperatursensoren Getriebe | ** 7x Temperatursensoren Getriebe | ||
− | |||
** 1x Temperatursensor Motor | ** 1x Temperatursensor Motor | ||
− | |||
** 1x Temperatursensor Kühlwasser | ** 1x Temperatursensor Kühlwasser | ||
** 1x Temperatursensor Aussen | ** 1x Temperatursensor Aussen | ||
** 1x Hygrometer Aussen | ** 1x Hygrometer Aussen | ||
− | ** 1x GPS Einheit | + | ** 1x GPS Einheit |
** 1x Durchflussmesser Benzin | ** 1x Durchflussmesser Benzin | ||
− | |||
** 1x Neigungssensor (x,y,z) | ** 1x Neigungssensor (x,y,z) | ||
− | |||
* Funktionen | * Funktionen | ||
Zeile 29: | Zeile 25: | ||
** Motor- & Kofferbatterieanzeige? | ** Motor- & Kofferbatterieanzeige? | ||
+ | Erstmal informieren & Bauteile suchen =) | ||
+ | |||
+ | * Bauteile | ||
+ | ** Temperatursensoren | ||
+ | *** [http://www.conrad.de/ce/de/product/172430/Platin-Temperatursensor-im-Edelstahlgehaeuse-Heraeus-W-EYK-6-Heraeus-Nr-31-500-989-40-500-C-Edelstahlgehaeuse/;jsessionid=9C4B7B88BE48C845CC7EF80A6C32BF9F.ASTPCEN05?ref=category&rt=category&rb=1 Conrad 14,37€] | ||
+ | *** [http://www.sensorshop24.de/index.php? Oberflächenfühler bis 200°C PT1000 , 1.0 Meter , 2-Leiter] | ||
+ | *** [http://www.temperaturgeber.de/vdo_temperaturgeber_daten.html VDO Temperaturgeber] | ||
+ | ** Durchflussmengen | ||
+ | *** *** [http://www.conrad.de/ce/de/product/150392/Durchflussmesser-Flow-Meter-FCH-m-POM-LC-003-30-lmin-BIO-TECH-eK-FCH-M-POM-LC-AD-6-MM-mit-Duese-16-mm-003- Conrad - 22,50] | ||
+ | ** GPS | ||
+ | *** [https://www.mikrocontroller.net/articles/GPS_Logger] | ||
+ | ** Neigungssensor | ||
+ | *** [http://www.hy-line.de/firmengruppe/hy-line-sensor-tec/hersteller/vti/neigungssensoren/sca100t/] , | ||
Als Grundlage dient der bereits vorhandene [https://de.wikipedia.org/wiki/Arduino-Plattform Arduino Mega 2560] sowie ein [https://de.wikipedia.org/wiki/Steckplatine Breadboard] und diverse Kleinteile zum basteln. Ich werde mir jetzt im Internet | Als Grundlage dient der bereits vorhandene [https://de.wikipedia.org/wiki/Arduino-Plattform Arduino Mega 2560] sowie ein [https://de.wikipedia.org/wiki/Steckplatine Breadboard] und diverse Kleinteile zum basteln. Ich werde mir jetzt im Internet | ||
die dafür notwendigen Bauteile besorgen und dann geht es weiter! | die dafür notwendigen Bauteile besorgen und dann geht es weiter! | ||
+ | * Links | ||
+ | * [http://playground.arduino.cc/Tutorials/GPS GPS +Arduino Tutorial] | ||
+ | |||
+ | Digital mit dem DS18S20 via [http://www.bastelitis.de/temperaturen-messen-mit-linux/ 1-Wire] oder Analog? Wie fasse in ich den Sensor gut ein...hmmmm [http://fluuux.de/2012/09/arduino-adressen-aller-ds1820-ermitteln/] [http://fluuux.de/2012/09/arduino-gezielt-einen-ds1820-temperatur-sensor-auslesen/] | ||
+ | |||
+ | Erster Einkauf: | ||
+ | * 2x Heissleiter B57703m103g40 10k - Conrad - 3,69€ - 7,38€ | ||
+ | * 2x Temperatur-Sensor Pt1000 DIN 1/3 W-Eyk 6 - Conrad - 14,73€ - 29,46€ | ||
+ | * 2x DS18S20 (Digital One wire) | ||
+ | |||
+ | == Erster Versuch == | ||
+ | Ich fang mit den DS18S20 als Temperatursensor an welcher mit [https://de.wikipedia.org/wiki/1-Wire One-Wire] arbeitet, dafür muss ich die Arduino IDE um Library`s [http://arduino.cc/de/Guide/Libraries erweitern]. Das heisst [http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip One-Wire] & [http://download.milesburton.com/Arduino/MaximTemperature/DallasTemperature_372Beta.zip DallasTemperature] Library herunterladen und in das Arbeitsverzeichnis von Arduino entpacken. Dann bin ich auf fertige Sketche gestossen, das [http://fluuux.de/2012/09/arduino-adressen-aller-ds1820-ermitteln/ erste] ermittelt die angeschlossenen DS18S20, das [http://fluuux.de/2012/09/arduino-gezielt-einen-ds1820-temperatur-sensor-auslesen/ zweite] kann diese dann auslesen. Danke an fluuux.de =) | ||
+ | |||
+ | Also los gehts, Breadboard ist wie folgt bestückt: | ||
+ | * 2x DS18S20 + 1x 4,7kOhm (Data an Pin2) | ||
+ | * 2x Led`s + 2x 220 Ohm (LED an Pin3,4) | ||
+ | Der folgende Entwurf soll die grüne LED solange leuchten lassen, solange die Temperatur 25°C überschreitet, wenn das der Fall ist soll die grüne ausgehen und die rote LED leuchten. | ||
+ | <pre> | ||
+ | #include <OneWire.h> | ||
+ | #include <DallasTemperature.h> | ||
+ | |||
+ | // Pin Belegung | ||
+ | OneWire ds(2); // Datenpin für DS18S20 | ||
+ | int led1 = 3; // grün | ||
+ | int led2 = 4; // gelb | ||
+ | |||
+ | //DeviceAdressen | ||
+ | DeviceAddress sensor1 = { 0x10, 0x0, 0x74, 0xB3, 0x2, 0x8, 0x0, 0xA9 }; | ||
+ | DeviceAddress sensor2 = { 0x10, 0x19, 0xBD, 0xB4, 0x2, 0x8, 0x0, 0x33 }; | ||
+ | |||
+ | // Sensor NBame für die Ausgabe auf dem Serial Monitor | ||
+ | char sensor1Name[] = "Sensor1: "; | ||
+ | char sensor2Name[] = "Sensor2: "; | ||
+ | |||
+ | |||
+ | void setup(void) | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | pinMode(led1, OUTPUT); | ||
+ | pinMode(led2, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void writeTimeToScratchpad(byte* address) | ||
+ | { | ||
+ | //reset the bus | ||
+ | ds.reset(); | ||
+ | //select our sensor | ||
+ | ds.select(address); | ||
+ | //CONVERT T function call (44h) which puts the temperature into the scratchpad | ||
+ | ds.write(0x44,1); | ||
+ | //sleep a second for the write to take place | ||
+ | delay(1000); | ||
+ | } | ||
+ | |||
+ | void readTimeFromScratchpad(byte* address, byte* data) | ||
+ | { | ||
+ | //reset the bus | ||
+ | ds.reset(); | ||
+ | //select our sensor | ||
+ | ds.select(address); | ||
+ | //read the scratchpad (BEh) | ||
+ | ds.write(0xBE); | ||
+ | for (byte i=0;i<9;i++){ | ||
+ | data[i] = ds.read(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | float getTemperature(byte* address) | ||
+ | { | ||
+ | int tr; | ||
+ | byte data[12]; | ||
+ | |||
+ | writeTimeToScratchpad(address); | ||
+ | |||
+ | readTimeFromScratchpad(address,data); | ||
+ | |||
+ | //put in temp all the 8 bits of LSB (least significant byte) | ||
+ | tr = data[0]; | ||
+ | |||
+ | //check for negative temperature | ||
+ | if (data[1] > 0x80) | ||
+ | { | ||
+ | tr = !tr + 1; //two's complement adjustment | ||
+ | tr = tr * -1; //flip value negative. | ||
+ | } | ||
+ | |||
+ | //COUNT PER Celsius degree (10h) | ||
+ | int cpc = data[7]; | ||
+ | //COUNT REMAIN (0Ch) | ||
+ | int cr = data[6]; | ||
+ | |||
+ | //drop bit 0 | ||
+ | tr = tr >> 1; | ||
+ | |||
+ | return tr - (float)0.25 + (cpc - cr)/(float)cpc; | ||
+ | } | ||
+ | |||
+ | void loop(void) | ||
+ | { | ||
+ | float temp1 = getTemperature(sensor1); | ||
+ | float temp2 = getTemperature(sensor2); | ||
+ | |||
+ | int temp1_int = getTemperature(sensor1); | ||
+ | |||
+ | Serial.print(sensor1Name); | ||
+ | Serial.print(temp1); | ||
+ | Serial.println(" Celsius"); | ||
+ | |||
+ | |||
+ | // Temperaturüberwachung led | ||
+ | if (temp1_int > 25){ | ||
+ | digitalWrite(led2, HIGH); | ||
+ | digitalWrite(led1, LOW); | ||
+ | } | ||
+ | else{ | ||
+ | digitalWrite(led2, LOW); | ||
+ | digitalWrite(led1, HIGH); | ||
+ | } | ||
+ | |||
+ | // 2.Temp nur als Referenz ohne LED auf Serial ausgeben | ||
+ | Serial.print(sensor2Name); | ||
+ | Serial.print(temp2); | ||
+ | Serial.println(" Celsius"); | ||
+ | |||
+ | Serial.println(); | ||
+ | delay(1000); | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | Das ging schnell, jetzt noch die anderen Sensoren kaufen und weiter gehts, bin mir noch unschlüssig wie groß das display werden soll :/ | ||
+ | |||
+ | == Einkauf == | ||
+ | |||
+ | Weiter geht es mit dem Einkauf der verschiednen Bauteile. | ||
+ | |||
+ | * GPS-Modul | ||
+ | **Die Wahl viel schnell auf dieses Modell, da es bereits gekapselt ist und sich leicht montieren lässt. | ||
+ | **https://www.amazon.de/MOD-GPS-Wasserdichte-Magnetische-GPS-Modul-Glonass/dp/B01CRFBL0S/ref=sr_1_11?ie=UTF8&qid=1471369589&sr=8-11&keywords=arduino+gps+modul | ||
+ | |||
+ | * Gear Flow Sensor | ||
+ | **Einfach gehaltener Durchflussmesser zur Überwachung des Benzinverbrauchs. Dieser gibt für jeden Milliliter der durch ihn fließt einen Impuls aus. | ||
+ | **https://www.amazon.de/dp/B01DDNYRRM/ref=pe_386171_146209001_TE_3p_dp_1 | ||
+ | |||
+ | *Öl-Temperatur Fühler | ||
+ | **Der Rohranlegefühler soll die Temperatur direkt an der Ölleitung messen. Letztendlich handelt es sich um einen einfachen PT-100. | ||
+ | **https://www.sensorshop24.de/temperaturfuehler/rohranlegefuehler/rohranlegefuehler-mit-messinghuelse/rohranlegefuehler-mit-messinghuelse-bis-200-c-15df65d/a-29947/ | ||
+ | |||
+ | *3 Axis Gyroscope + Accelerometer SainSmart MPU-6050 | ||
+ | **https://www.amazon.de/dp/B009C4TR0E/ref=pe_386171_146208751_TE_dp_1 | ||
+ | |||
+ | *Einfaches LCD Display (16,2) | ||
+ | **https://www.amazon.de/SainSmart-Keypad-Shield-Arduino-Duemilanove/dp/B00760RLRM | ||
+ | |||
+ | == Implementierung == | ||
+ | |||
+ | Um das Projekt später einfach erweitern zu können, habe ich -sofern nötig- für jeden Sensor eine kleine Library geschrieben. | ||
+ | |||
+ | *FlowSensor.h | ||
+ | Um den Flowsensor betreiben zu können muss in SoftwareSerial.cpp Zeile 229-231 auskommentiert werden. | ||
+ | <pre> | ||
+ | //#if defined(PCINT2_vect) | ||
+ | //ISR(PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); | ||
+ | //#endif | ||
+ | </pre> | ||
+ | |||
+ | **(GIT-HUB Link) | ||
+ | **Anwendung: | ||
+ | ***Die Signalleitung kann an die Pin's A8-A15 angeschlossen werden | ||
+ | ***Rote Leitung an +5V | ||
+ | ***Schwarze Leitung an GND | ||
+ | ***Erstellen eines FlowSensor Objekts mittels "FlowSensor BenzinFluss(Hier den verwendeten Pin angeben Bsp: 8)" | ||
+ | ***Nun kann über BenzinFluss.getFlow() der gemittelte Durchfluss pro Stunde seit dem letzten Funktionsaufruf abgefragt werden | ||
== Links == | == Links == | ||
+ | * [http://fluuux.de/2012/08/arduino-temperatur-auslesen-und-auf-display-ausgeben/ Arduino Temperatur + Display] | ||
* [http://www.wateb.com/arduino-gps-shield-lcd-16x2/ Arduino + GPS + LCD 2x16] | * [http://www.wateb.com/arduino-gps-shield-lcd-16x2/ Arduino + GPS + LCD 2x16] |
Aktuelle Version vom 26. September 2016, 17:52 Uhr
Unimik steht für Unimog-Mikrocontroller, er soll Informationen über ein Fahrzeug messen, auswerten und ausgeben können.
Der Ideengeber des Unimik war Thomas mit seinen Getriebewächter, super Idee und Umsetzung!
Inhaltsverzeichnis
Vorplanung
- Sensoren
- 7x Temperatursensoren Getriebe
- 1x Temperatursensor Motor
- 1x Temperatursensor Kühlwasser
- 1x Temperatursensor Aussen
- 1x Hygrometer Aussen
- 1x GPS Einheit
- 1x Durchflussmesser Benzin
- 1x Neigungssensor (x,y,z)
- Funktionen
- Anzeige schaltbar für Aussen-, Motor- und Getriebetemperaturen (LCD)
- Warnen bei kritischen Aussen-, Motor- und Getriebetemperaturen (LCD, LED Schema)
- GPS Daten aufzeichnen und evtl. anzeigen (LCD)
- Spritverbrauch & Reichweite anzeigen (LCD)
- Motor- & Kofferbatterieanzeige?
Erstmal informieren & Bauteile suchen =)
- Bauteile
- Temperatursensoren
- Durchflussmengen
- *** Conrad - 22,50
- GPS
- Neigungssensor
- [2] ,
Als Grundlage dient der bereits vorhandene Arduino Mega 2560 sowie ein Breadboard und diverse Kleinteile zum basteln. Ich werde mir jetzt im Internet die dafür notwendigen Bauteile besorgen und dann geht es weiter!
- Links
- GPS +Arduino Tutorial
Digital mit dem DS18S20 via 1-Wire oder Analog? Wie fasse in ich den Sensor gut ein...hmmmm [3] [4]
Erster Einkauf:
- 2x Heissleiter B57703m103g40 10k - Conrad - 3,69€ - 7,38€
- 2x Temperatur-Sensor Pt1000 DIN 1/3 W-Eyk 6 - Conrad - 14,73€ - 29,46€
- 2x DS18S20 (Digital One wire)
Erster Versuch
Ich fang mit den DS18S20 als Temperatursensor an welcher mit One-Wire arbeitet, dafür muss ich die Arduino IDE um Library`s erweitern. Das heisst One-Wire & DallasTemperature Library herunterladen und in das Arbeitsverzeichnis von Arduino entpacken. Dann bin ich auf fertige Sketche gestossen, das erste ermittelt die angeschlossenen DS18S20, das zweite kann diese dann auslesen. Danke an fluuux.de =)
Also los gehts, Breadboard ist wie folgt bestückt:
- 2x DS18S20 + 1x 4,7kOhm (Data an Pin2)
- 2x Led`s + 2x 220 Ohm (LED an Pin3,4)
Der folgende Entwurf soll die grüne LED solange leuchten lassen, solange die Temperatur 25°C überschreitet, wenn das der Fall ist soll die grüne ausgehen und die rote LED leuchten.
#include <OneWire.h> #include <DallasTemperature.h> // Pin Belegung OneWire ds(2); // Datenpin für DS18S20 int led1 = 3; // grün int led2 = 4; // gelb //DeviceAdressen DeviceAddress sensor1 = { 0x10, 0x0, 0x74, 0xB3, 0x2, 0x8, 0x0, 0xA9 }; DeviceAddress sensor2 = { 0x10, 0x19, 0xBD, 0xB4, 0x2, 0x8, 0x0, 0x33 }; // Sensor NBame für die Ausgabe auf dem Serial Monitor char sensor1Name[] = "Sensor1: "; char sensor2Name[] = "Sensor2: "; void setup(void) { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void writeTimeToScratchpad(byte* address) { //reset the bus ds.reset(); //select our sensor ds.select(address); //CONVERT T function call (44h) which puts the temperature into the scratchpad ds.write(0x44,1); //sleep a second for the write to take place delay(1000); } void readTimeFromScratchpad(byte* address, byte* data) { //reset the bus ds.reset(); //select our sensor ds.select(address); //read the scratchpad (BEh) ds.write(0xBE); for (byte i=0;i<9;i++){ data[i] = ds.read(); } } float getTemperature(byte* address) { int tr; byte data[12]; writeTimeToScratchpad(address); readTimeFromScratchpad(address,data); //put in temp all the 8 bits of LSB (least significant byte) tr = data[0]; //check for negative temperature if (data[1] > 0x80) { tr = !tr + 1; //two's complement adjustment tr = tr * -1; //flip value negative. } //COUNT PER Celsius degree (10h) int cpc = data[7]; //COUNT REMAIN (0Ch) int cr = data[6]; //drop bit 0 tr = tr >> 1; return tr - (float)0.25 + (cpc - cr)/(float)cpc; } void loop(void) { float temp1 = getTemperature(sensor1); float temp2 = getTemperature(sensor2); int temp1_int = getTemperature(sensor1); Serial.print(sensor1Name); Serial.print(temp1); Serial.println(" Celsius"); // Temperaturüberwachung led if (temp1_int > 25){ digitalWrite(led2, HIGH); digitalWrite(led1, LOW); } else{ digitalWrite(led2, LOW); digitalWrite(led1, HIGH); } // 2.Temp nur als Referenz ohne LED auf Serial ausgeben Serial.print(sensor2Name); Serial.print(temp2); Serial.println(" Celsius"); Serial.println(); delay(1000); }
Das ging schnell, jetzt noch die anderen Sensoren kaufen und weiter gehts, bin mir noch unschlüssig wie groß das display werden soll :/
Einkauf
Weiter geht es mit dem Einkauf der verschiednen Bauteile.
- GPS-Modul
- Die Wahl viel schnell auf dieses Modell, da es bereits gekapselt ist und sich leicht montieren lässt.
- https://www.amazon.de/MOD-GPS-Wasserdichte-Magnetische-GPS-Modul-Glonass/dp/B01CRFBL0S/ref=sr_1_11?ie=UTF8&qid=1471369589&sr=8-11&keywords=arduino+gps+modul
- Gear Flow Sensor
- Einfach gehaltener Durchflussmesser zur Überwachung des Benzinverbrauchs. Dieser gibt für jeden Milliliter der durch ihn fließt einen Impuls aus.
- https://www.amazon.de/dp/B01DDNYRRM/ref=pe_386171_146209001_TE_3p_dp_1
- Öl-Temperatur Fühler
- Der Rohranlegefühler soll die Temperatur direkt an der Ölleitung messen. Letztendlich handelt es sich um einen einfachen PT-100.
- https://www.sensorshop24.de/temperaturfuehler/rohranlegefuehler/rohranlegefuehler-mit-messinghuelse/rohranlegefuehler-mit-messinghuelse-bis-200-c-15df65d/a-29947/
- 3 Axis Gyroscope + Accelerometer SainSmart MPU-6050
- Einfaches LCD Display (16,2)
Implementierung
Um das Projekt später einfach erweitern zu können, habe ich -sofern nötig- für jeden Sensor eine kleine Library geschrieben.
- FlowSensor.h
Um den Flowsensor betreiben zu können muss in SoftwareSerial.cpp Zeile 229-231 auskommentiert werden.
//#if defined(PCINT2_vect) //ISR(PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); //#endif
- (GIT-HUB Link)
- Anwendung:
- Die Signalleitung kann an die Pin's A8-A15 angeschlossen werden
- Rote Leitung an +5V
- Schwarze Leitung an GND
- Erstellen eines FlowSensor Objekts mittels "FlowSensor BenzinFluss(Hier den verwendeten Pin angeben Bsp: 8)"
- Nun kann über BenzinFluss.getFlow() der gemittelte Durchfluss pro Stunde seit dem letzten Funktionsaufruf abgefragt werden