INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
20.12.2015, 21:15
Beitrag #1
selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Hallo alle zusammen! Big Grin

Ich stelle euch hier mein Projekt eines eigenen Tauchcomputer vor und hoffe ihr habt Spaß daran es gemeinsam mit mir weiter voran zu bringen.
Ansporn dafür war neben meiner Begeisterung für Technik und meinem noch recht frischen Tauchschein die Tatsache das bis auf wenige teure ausnahmen alle erhältlichen Tauchcomputer entweder total peinlich aussehen oder nichts können.
Dazu zählt für mich auch der OSTC(Open Source Tauch Computer) wobei dieser primär kompliziert und hässlich ist.

   
Der "VTX von OCEANIC" vormals "AERIS A300" ist ein gutes Beispiel wie man es besser als alle anderen machen kann und wo ich hin möchte.

Das Projekt habe ich in mehrere Abschnitte unterteilt welche sich zwangsläufig aber auch überschneiden.
1. Erarbeiten der Hardware:
- Hardwareausstattung erarbeiten.
- Kompatibilität von Komponenten prüfen.
- Librarys Zusammenspiel prüfen.
- Hardware individualisieren und optimieren.
- Kommunikationsschnittstellen.
2. Erarbeiten der Software:
- Erstellen unterschiedlicher Anzeigemodi der GUI.
- Erstellen von Grafiken für die GUI.
- Abrufen gespeicherter Grafiken.
- Sensordatenverarbeitung gestalten und optimieren.
- Darstellung von Sensordaten.
- Kommunikationsschnittstellen Programmierung.
- Aufzeichnung von Sensordaten.
- Auswerten von Sensordaten.
- Prüfen auf intuitive Bedienbarkeit.
3. Gehäusegestaltung und 3D-Druck:
- Design grundlegender Gehäusekomponenten.
- Design der Anzeige.
- Design der Bedienoberfläche.
- Prüfen auf Ergonomie und Funktionalität.
4. Feldtest:
- Ab ins Wasser.
- Evtl. nötige Nacharbeiten.

An meinem Profilbild könnt ihr sehen wie meine erste Idee ausgesehen hat, mittlerweile nimmt sie immer klarere Formen an auch wenn es immer noch besser geht.

Hardware -> Controller:
Da die Hardware möglichst Platz und Gewicht sparen soll dachte ich zuerst daran die Xadow Module von seeedstudio zu verwenden. Da der Arduino Uno aber deutlich verbreiteter ist und die meisten Librarys mit ihm funktionieren habe ich die fast kompatiblen Xadow Module erst mal eingemottet und entwickle aktuell mit dem Uno. Später werde ich die Xadow als Vorlage für Individuell angepasste Hardware verwenden und den Code portieren.

Hardware -> Anzeige:
Letzten Endes werde ich einen RGB-OLED-Display verwenden. Derzeit benutze ich einen OLED-Display mit 128x64 Pixel in Weiß weil dieser I2C unterstützt und ohne RGB der Code nicht so komplex ist. Ich möchte nur Komponenten benutzen die I2C verwenden. Da grafische Darstellungen sehr Speicherlastig sind werde ich Grafiken und später auch Logdaten in einen 24FC256 EEPROM Speichern und von dort laden.

Hardware -> Sensoren:
Für einen Tauchcomputer grundlegend sind Sensoren. Neben Sensoren für Tiefe (Umgebungsdruck), Temperatur und verbleibende Atemluft sind auch dinge wie die Dauer unter Wasser, verbleibende Nullzeit und Kompassrichtung nicht unerheblich beim Tauchen. All das muss gemessen, berechnet und bei bedarf Angezeigt werden. Für die Tiefe habe ich noch keinen geeigneten Sensor gefunden, die meisten können nur höhe und keine 40 Meter Tiefe Messen. Ich habe einen MPL115A2 von Adafruit evtl. ist der ja brauchbar. Zumindest für die Anzeige von Temperatur werde ich ihn schon mal verwenden. Die Kompassrichtung bestimme ich derzeit mit einem CMPS03 der kinderleicht zu handhaben ist doch er ist deutlich zu groß und wird bei Neigung ungenau. Als alternative wollte ich einen HDMM01 verwenden doch diesen habe ich noch nicht zum laufen bekommen und ob dessen Abweichungen bei Neigung geringer sind kann ich auch nicht sagen. Um die Tauchdauer, Nulltauchzeit und andere dinge denen eine Uhr zu Grunde liegt zu bestimmen verwende ich einen DS1307. Start des Tauchgang soll der Tauchcomputer durch eine Kombination aus Feuchtigkeitssensor und Druckänderung feststellen können. Der Feuchtigkeitssensor fehlt noch.

Hardware -> weitere Ideen:
Kommunikation über ANT+, Bluetooth, NFC oder ein RFM12B Modul. Ladung des LiPo-Akku über induktive Ladetechnik. Das i-Tüpfelchen soll die Integration von Funksensoren für Pressluftdruck sein.

Software -> Grafiken:
Seht euch mein Profilbild an und das verlinkte Video, dann habt ihr einen kleinen Eindruck wo ich in Sachen Grafik und Gestaltung der Anzeige stehe.
https://youtu.be/QXJ2fq0aXgA

Software -> Quellcode zum Video:
Code:
//---- Start Includes ---------------------------------
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define PI 3.1415926535897932384626433832795
int bearing1, bearing2;
int gui_anzeigemodi = 3; // 1=Kompass 2=Tauchdeteils 3=Uhr mit Standby
int gui_standbycounter = 100;
int gui_temperatur = 2; // 1=kalt(<15grad) 2=normal(15<22grad) 3=warm (>22grad)
int gui_tauchtiefe = 1; // 1=keine 2=normal 3=tief 4=zutief
int gui_akku = 3; // 4=voll 3=normal 2=schwach 1=leer
int gui_netzteil = 0; // 0=keinnetzteil 1=netzteil
int gui_change = 0; // wurde die ansicht geändert? 1=ja / 0=nein
String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete
int sekunde, minute, stunde, tag, wochentag, monat, jahr;
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); // I2C Addresse of Display
#define ADDRESS 0x60 // I2C Addresse of cmps03 compass
#define DS1307_ADRESSE 0x68 // I2C Addresse of RTC

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

//---- Start Includes (icons) ---------------------------------
static const unsigned char PROGMEM grad_bmp [] = { 0x00, 0x10, 0x28, 0x10, 0x00 };
static const unsigned char PROGMEM akku_bmp[] = { 0x00, 0x00, 0x7F, 0xF8, 0x49, 0x2C, 0x49, 0x24, 0x49, 0x24, 0x49, 0x2C, 0x7F, 0xF8, 0x00, 0x00 };
static const unsigned char PROGMEM pfeil_bmp[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00 };
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//---- Initialisation ---------------------------------
void setup() {
  Serial.begin(9600);
  inputString.reserve(16);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)
  display.clearDisplay();
  display.display();
  display.setTextSize(1); // 6x7 Pixel
  display.setTextColor(WHITE);
  Wire.begin(); //conects I2C
}
//---- Mainprogramm ---------------------------------
void loop() {
  // put your main code here, to run repeatedly:
  checkInc(); // prüft ob ein Befehl ansteht
  gui_Update(); // Inhalt anzeigen
  delay(50);
}
//---- Subprogramms ---------------------------------

void setclock() {
  // Setzt die aktuelle Zeit
  Wire.beginTransmission(DS1307_ADRESSE);
  Wire.write(0x00);
  Wire.write(decToBcd(sekunde));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(stunde));
  Wire.write(decToBcd(wochentag));
  Wire.write(decToBcd(tag));
  Wire.write(decToBcd(monat));
  Wire.write(decToBcd(jahr));
  Wire.write(0x00);
  Wire.endTransmission();
}

void showclock(void) {
  if (gui_standbycounter <= 0) {
    display.clearDisplay();
    display.display();
  }
  else {
    gui_standbycounter--;
    // Initialisieren
    Wire.beginTransmission(DS1307_ADRESSE);
    Wire.write(0x00);
    Wire.endTransmission();
    // List den RTC
    Wire.requestFrom(DS1307_ADRESSE, 7);
    sekunde = bcdToDec(Wire.read());
    minute = bcdToDec(Wire.read());
    stunde = bcdToDec(Wire.read() & 0b111111);
    wochentag = bcdToDec(Wire.read());
    tag = bcdToDec(Wire.read());
    monat = bcdToDec(Wire.read());
    jahr = bcdToDec(Wire.read());
    // zeigt die aktuelle Zeit (Stunde:Minute)
    display.setCursor(27,20);
    display.fillRect(27, 20, 58, 14, BLACK);
    display.setCursor(27,20);
    display.setTextSize(2); // 12x14 Pixel
    if (stunde<10){
      display.print("0");
    }
    display.print(stunde);
    display.print(":");
    if (minute<10){
      display.print("0");
    }
    display.print(minute);
    // zeigt die aktuelle Zeit (Sekunde)
    display.setCursor(88,27);
    display.fillRect(88, 27, 11, 7, BLACK);
    display.setCursor(88,27);
    display.setTextSize(1); // 6x7 Pixel
    if (sekunde<10){
      display.print("0");
    }
    display.print(sekunde);
    // zeigt wochentag
    display.setCursor(24,40);
    display.fillRect(24, 40, 11, 7, BLACK);
    display.setCursor(24,40);
    switch (wochentag) {
      case 1:
        display.print("So");
        break;
      case 2:
        display.print("Mo");
        break;
      case 3:
        display.print("Di");
        break;
      case 4:
        display.print("Mi");
        break;
      case 5:
        display.print("Do");
        break;
      case 6:
        display.print("Fr");
        break;
      case 7:
        display.print("Sa");
        break;
    }
    // zeigt datum
    display.setCursor(42,40);
    display.fillRect(42, 40, 59, 7, BLACK);
    display.setCursor(42,40);
    if (tag<10){
      display.print("0");
    }
    display.print(tag);
    display.print(".");
    if (monat<10){
      display.print("0");
    }
    display.print(monat);
    display.print(".20");
    display.print(jahr);
    display.display();
  }
}

void gocompass(void) {
  //go to read and show the CMPS03 Compass Modul
  byte highByte;
  byte lowByte;
  Wire.beginTransmission(ADDRESS);                     //starts communication with cmps03
  Wire.write(2);                                       //Sends the register we wish to read
  Wire.endTransmission();
  Wire.requestFrom(ADDRESS, 2);                        //requests high byte
  while(Wire.available() < 2);                         //while there is a byte to receive
  highByte = Wire.read();                              //reads the byte as an integer
  lowByte = Wire.read();
  bearing1 = (((highByte<<8)+lowByte) / 10);
  bearing2 = ((bearing2 + bearing1) / 2);
  //display.fillRect(54, 54, 23, 7, BLACK);
  display.fillCircle(display.width()/2, 63, 53, BLACK); // x,y,r,color
  display.setCursor(54,54);                            //setzt den cursor
  if (bearing2<100){
    display.print(" ");
    if (bearing2<10){
      display.print(" ");
    }
  }
  display.print(bearing2);                              //sendet den kompass wert an den display
  display.drawBitmap(72, 54, grad_bmp, 5, 7, WHITE);   //sendet das Grad Symbol ° an den Display

  float x1,y1,x2,y2,x3,y3,r1=32,r2=26,r3=47;
  int ks = 8;
  //////Serial.print(bearing2);
  //////Serial.print(" ");
  //zeichnen der kompassrose
  for (int i = 0; i < 24; i++){
    double phi = ((((360 / 24) * i) + bearing2) * PI / 180.0); // Pi durch 180 = 1 Grad
    x1 = (r1 * cos(-phi) + (display.width()/2));
    y1 = (r1 * sin(-phi) + 63);
    x2 = ((r2 + 4) * cos(-phi) + (display.width()/2));
    y2 = ((r2 + 4) * sin(-phi) + 63);
    display.drawLine(x1, y1, x2, y2, WHITE); // Zeiger
  }
  // zeichnen der vier himmelsrichtungen
  for (int i = 0; i < ks; i++){
    double phi = ((((360 / ks) * i) + bearing2) * PI / 180.0); // Pi durch 180 = 1 Grad
    x1 = (r1 * cos(-phi) + (display.width()/2));
    y1 = (r1 * sin(-phi) + 63);
    x2 = (r2 * cos(-phi) + (display.width()/2));
    y2 = (r2 * sin(-phi) + 63);
    x3 = (r3 * cos(-phi) + (display.width()/2));
    y3 = (r3 * sin(-phi) + 63);
    display.drawLine(x1, y1, x2, y2, WHITE); // Zeiger
    display.setCursor(x3,y3);    
    if (i == 0){
      display.print("O"); // Osten
    }
    if (i == 2){
      display.print("N"); // Norden
    }
    if (i == 4){
      display.print("W"); // Westen
    }
    if (i == 6){
      display.print("S"); // Süden
    }
  }
  display.drawCircle(display.width()/2, 63, 36, WHITE);
  display.drawCircle(display.width()/2, 63, 22, WHITE);
  display.drawBitmap((display.width()/2 - 3), 19, pfeil_bmp, 8, 8, WHITE);
  // ende der kompass zeichnung
  display.display(); //bringt die änderungen zur anzeige
}

void gui_Update() {
  if (gui_change == 1) { // clear display
    display.clearDisplay();
    display.display();
    gui_standbycounter = 100;
    gui_change = 0;
  }
  else { // show gui
    if (gui_anzeigemodi == 1) { // 1=Kompass
      gocompass(); // aktualisiert die kompassanzeige
    }
    else if (gui_anzeigemodi == 2) { // 2=Tauchdeteils
      topframe(); // zeichnet den TopFrame
    }
    else { // 3=Uhr mit Standby
      showclock();
    }
  }
}

void topframe(void) {
  // Top-Frame
  display.drawLine(0, 8, display.width()-1, 8, WHITE); // von-x,y -> nach-x,y -> color
  display.drawLine(31, 0, 31, 7, WHITE); // von-x,y -> nach-x,y -> color
  display.setCursor(40,0);
  display.print("00:00:00");
  display.drawLine(95, 0, 95, 7, WHITE); // von-x,y -> nach-x,y -> color
  display.drawBitmap(109, 0, akku_bmp, 16, 8, WHITE);
  display.display();
}

void serialEvent() {
  while (Serial.available() > 0) {
    char iChar = (char)Serial.read();
    inputString += iChar;
    if (iChar == '\n') {
      stringComplete = true;
    }
  }
}

void checkInc() {
  if (stringComplete == true) {
    if (inputString[0] == 'a') {
      char inChar = (char)inputString[1];
      gui_anzeigemodi = (int)inChar - 48;
      gui_change = 1;
    }
    if (inputString[0] == 'b') {
      char inChar = (char)inputString[1];
      gui_temperatur = (int)inChar - 48;
    }
    if (inputString[0] == 'c') {
      char inChar = (char)inputString[1];
      gui_tauchtiefe = (int)inChar - 48;
    }
    if (inputString[0] == 'd') {
      char inChar = (char)inputString[1];
      gui_akku = (int)inChar - 48;
    }
    if (inputString[0] == 'e') {
      char inChar = (char)inputString[1];
      gui_netzteil = (int)inChar - 48;
    }
    if (inputString[0] == 'T') {
      if (inputString[2] <= 0) {
        Serial.println("Hilfe: Stelle die Zeit wie folgt ein.");
        Serial.println("T hhmmss DDMMYY");
      }
      else {
        stunde = inputString.substring(2,4).toInt();
        minute = inputString.substring(4,6).toInt();
        sekunde = inputString.substring(6,8).toInt();
        tag = inputString.substring(9,11).toInt();
        monat = inputString.substring(11,13).toInt();
        jahr = inputString.substring(13,15).toInt();
        setclock();
        showclock();
      }
    }
    inputString = "";
    stringComplete = false;
  }
}

// Hilfsfunktionen
byte decToBcd(byte val) {
  return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
  return ((val/16*10) + (val%16));
}
Die Librarys hänge ich nicht an da diese nicht von mir sind.
Viel spaß auch mit meinem Programmierstiel und mit "T" lässt sich die Uhr stellen wer es im Code überlesen haben sollte.

Gruß,
avoid

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2015, 22:36
Beitrag #2
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Sehr schönes Projekt, vor allem dein Display gefällt mir gut. Aber ich bin mal gespannt ob du das ganze dicht bekommst. 4 Bar ist eine Menge Druck vor allem für 3D Druck Teile. Hast du da schon mal was getestet?

Gruß

Hier könnte ihre Werbung stehen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2015, 01:39 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2015 01:51 von avoid.)
Beitrag #3
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
getestet noch nicht, nein.

Design und Passform werde ich erst mal aus PLA machen. Die üblichen 30% Fülldichte kann ich hierfür aber vergessen. Für solchen Druck werde ich wohl auf 80% oder 95% gehen damit massive Teile entstehen. Natürlich mit Dichtung und verschraubt. Sollte das nicht genügen muss ich auf ein Filament mit Metallpulverzusatz und einen anderen Extruder wechseln. derzeit habe ich dieses kleine Gerät rumstehen http://www.vertex3dprinter.eu/ welches leider für meine begriffe zu laut ist aber fürs Gehäusedesign und zum Test der optimalen Hardwareplazierung ist es mehr als ausreichend.

Habe heute mal meinen MPL115A2 Sensor (Barometer mit Temperatur) angebunden und testhalber in den Code eingebaut. Was diese Werte sollen die er aus gibt verstehe ich aber beim besten willen nicht. Ich werde wohl besser einen anderen verwenden. Auf ca. 370 Höhenmeter soll ich einen druck von 52 Kilo Pascal (ca. 0,5 bar) haben. Genau so unrealistisch wie die Temperatur von 115 Grad Celsius obwohl es tatsächlich 19,8 Grad sind.
   
Wie in einem anderen Beitrag beschrieben, habe ich mir jetzt zumindest für Druck einen anderen Sensor bestellt. Die i2c und Kalibrierungsplatine habe ich mal mit bestellt um sie später in SMD nach zu bauen. Ich hoffe er wird realistischere Werte ausgeben.

Was die Temperatur an geht, schwanke ich gerade noch zwischen einem LM75 und einem DS18S20. Beide müssten hier noch irgendwo rum fliegen, nur wo. Wink Der DS18S20 lässt sich auf jeden fall kinderleicht verwenden, ist aber leider kein SMD und verwendet 1wire anstelle von i2c, mal sehen was ich da mache.

---nachtrag---
Also zumindest für die Temperatur ist der MPL115A2 wohl doch zu gebrauchen. Sobald ich den CMPS03 abstecke zeigt er die richtige Temperatur. Da muss ich wohl die werte der Datenleitungen messen. Irgendwie stören sich die beiden wohl. Aber die nun angezeigten 4500 Höhenmeter sind noch immer nicht richtig.

Gruß,
avoid

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2015, 02:01
Beitrag #4
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
In seltenen Fällen ist sogar das Steckbrett der Störfaktor. Hab schon von Schaltungen mitbekommen die auf dem Steckbrett Probleme machten aber auf der gelöteten Platine funktionierten. Trotzdem achte darauf wie du die einzelnen Datenleitungen verlegst.

Gruß

Hier könnte ihre Werbung stehen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.12.2015, 01:34 (Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2015 01:50 von avoid.)
Beitrag #5
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Habe den Fehler für die falsche Temperatur bei eingestecktem CMPS03 gefunden.
Der MPL115A2 und der CMPS03 haben beide die selbe i2c Adresse 0x60. Leider war das nicht gleich ersichtlich weil die Adresse vom Barometer in der MPL115A2.h steht und nicht über den Programmcode eingestellt wird. Ich habe vorsichtshalber auch mal einen 220pF Keramikkondensator zwischen SDA und SCL gesteckt um die i2c Leitungen zu entstören. Lag also nicht am Steckbrett.

Die Kompassanzeige ist zum glück schon größtenteils ausgearbeitet und braucht nur noch einen feinschliff und optimierten Code und d.h. ich werde mich nun von den CMPS-Modellen verabschieden weil alle Modelle die selbe i2c Adresse haben und sie allgemein zu groß sind. Meinen HDMM01 finde ich leider nicht mehr, der ist wohl in die Tonne gewandert. Um das Adressproblem zu lösen muss ich erst mal den MPL115A2 durch einen LM75 (bei dem man zur Abwechslung mal die Adresse einstellen kann) ersetzen. Damit habe ich dann einen guten Temperatursensor und die Adresse ist frei für einen Xadow-Kompass oder den LSM303 die leider auch beide mit der Adresse 0x60 daher kommen. Als hätten sich die Hersteller abgesprochen. Wink
Hat schon wer mit dem LSM303 etwas gemacht und wie genau ist er?

Bis das Päckchen mit dem LM75 und dem LSM303 da ist, nutze ich die Zeit mich um die beiden Grafiken links und rechts des Kompass zu kümmern. Die linke anzeige ist eig. das Finimeter welches die verbleibende Füllmenge der Pressluftflasche anzeigt. Da ich aber noch lange nicht soweit bin mich um den Flaschendruck (per Funk) zu kümmern werde ich dort erst mal die Tauchtiefe anzeigen. Die rechte Anzeige zeigt die Wassertemperatur an, weil man in dickerem Neopren die Sprungschichten nicht so schnell bemerkt, einem aber wenn's schlecht läuft das Pressluftventil vereisen kann. Davor soll die Anzeige in erster Linie warnen aber auch vor heißem Wasser wie bei Unterwassergeysiren. Sonst gibt's Taucher gut durch zu Abend.

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.12.2015, 14:02
Beitrag #6
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Hallo, tolles Projekt!!
Ist denn nicht die vordergründige Aufgabe eines Tauchcomputers die
Sättigung und Entsättigung des unter Druck geratenen Stickstoffs dynamisch dem Taucher anzuzeigen?
Da bin ich mal sehr interessiert an dem array.
Hast Du denn die Daten der meist verwendeten 7 Gewebearten des
menschlichen Körpers?
Weiterhin viel Erfolg und frohe Weihnachten

Allzeit gute Luft
Olmuk
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.12.2015, 21:14 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2015 21:16 von avoid.)
Beitrag #7
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Danke für den Hinweis, darüber hatte ich schon mal kurz nachgedacht aber es war wieder in Vergessenheit geraten. Derzeit gilt der Hardware meine Hauptaufmerksamkeit. Trotzdem hier schon mal meine Gedanken dazu. Evtl. hast du ja auf dem Gebiet ein par Tipps?

Also 7 Gewebearten muss ich wohl nicht integrieren um brauchbare Daten zu erhalten. Die 5 primären Gewebearten sollten genügen um die kontinuierliche Dekompression zu berechnen. Die anderen 10 die z. b. beim Suunto-RGBM noch verwendet werden kann man später immer noch nachpflegen. Hier noch eine Kleine Auflistung welche Gewebearten ich meine.
Zitat:Stickstoff Aufnahme und Abgabe Halbwertzeiten in den fünf primären Gewebearten:
(2.5 min) Blut
(10 min) Rückenmark
(40 min) Haut
(120 min) Muskeln
(480 min) Gelenke
Das PDF zum RGBM ist eine gute Grundlage um sich in derartige Berechnungsmodelle ein zu arbeiten. Demnach ist nach der angegebenen Zeit eine 50% Sättigung erreicht, es dauert aber Theoretisch weitere fünf Halbwertzeiten eine 100% Sättigung zu erreichen. Die Frage dabei ist natürlich immer Welches Gemisch man Atmet und wie hoch der Umgebungsdruck ist (also wie Tief man Taucht). Da wird mich noch viel Mathematik erwarten. Wink

Die gängigen Rechenmodelle selbst sowie Vorträge und Wikipedia Seiten sind im Internet weit verbreitet und brauchen nur Gelesen, verstanden und übernommen zu werden. Doch damit die Formeln auch gute Ergebnisse liefern brauch ich erst mal Sensordaten. Darum bin ich noch nicht bei Abschnitt 2.

Ich werde aber auf jeden fall ein multidimensionales Array brauchen wenn Arduino das verarbeiten kann, bzw. es wird sich im EEPROM befinden um schneller die dynamische Neuberechnung machen zu können.

Gruß und ebenfalls frohe Weihnachten,
avoid

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 04:27
Beitrag #8
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Wie angekündigt arbeite ich gerade an den Grafiken. Den Code und die Beispielgrafiken findet ihr im Anhang. Diese Grafiken sind noch nicht die endgültigen sondern dienen erst mal zum Test wie man mit ihnen ordentlich arbeitet.
Hier ein kleines Video dazu: https://youtu.be/c0YTi1CcDhQ

Morgen (bzw. heute, wenn ich so auf die Uhr kucke) werde ich mich schlau machen wie man die Grafiken in einen i2c-EEPROM speichert und sie später mit dem Programmcode von dort abruft. Hat da schon jemand Erfahrung mit?

p.s. ich hab meinen HDMM01 doch noch gefunden, abrufen klappt auch aber umrechnen in Grad noch nicht. Da kümmere ich mich auch morgen darum ebenso wie um den DS18B20 Temperatursensor.

Gruß,
avoid


Angehängte Datei(en)
.zip  Graphics_test.zip (Größe: 14,69 KB / Downloads: 53)

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste