- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Sensor für Rückenlage

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    der prototyp ist fertig
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20210211_101028_6.jpg
Hits:	10
Größe:	73,9 KB
ID:	35437 Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20210211_102224_1.jpg
Hits:	7
Größe:	50,6 KB
ID:	35438
    wurde auch schon paar nächte getestet, funktioniert so weit. Das kästchen wird mit den zwei magneten an einem flexiblen band un der um die brust befestigt. Zwei dinge sollten noch verbessert / korrigiert werden:

    - auf dem ESP8266 läuft eine STA, erreichbar im home-wifi. Schien mir einfacher als das ewige auslogen und in einen eigenständigen AP anmelden. Über das wifi sollen einstellungen wie die stärke und frequenz des "wecksignals" eingestellt werden können, wie auch die anzeige und später eine auswertung von gespeicherten daten stattfinden. Nach längerem suchen, testen und anpassen habe ich nun folgenden code auf dem esp laufen:
    Code:
    #include <Wire.h>
    #include <Arduino.h>
    #include <ESP8266WiFi.h>
    #include <ESPAsyncTCP.h>
    #include <ESPAsyncWebServer.h>
    
    //Spannung auslesen vorbereiten
    ADC_MODE(ADC_VCC);
    String Ubatt = "";
    
    
    //verbinden mit wlan
    const char* ssid = "a-b-c";
    const char* password = "x-y-z";
    
    // Hier wird der aktuelle Status der schalter festgehalten
    String summer_zustand = "off";
    String LED_zustand = "off";
    
    
    //slider power
    String sliderValue_power = "400";//0
    const char* PARAM_INPUT_POWER = "value";
    
    //slider frequency
    String sliderValue_frequency = "2";//0
    const char* PARAM_INPUT_FREQUENCY = "value";
    
    //frequency
    uint8_t frequency = 0;
    
    // Create AsyncWebServer object on port 80
    AsyncWebServer server(80);
    
    //website - slider
    const char index_html[] PROGMEM = R"rawliteral(
    <!DOCTYPE HTML>
    <html>
    <head>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>anti apnoe web</title>
      <style>
        html {font-family: Arial; display: inline-block; text-align: center;}
        h2 {font-size: 2.3rem;}
        p {font-size: 1.9rem;}
        body {max-width: 400px; margin:0px auto; padding-bottom: 25px;}
        .slider { -webkit-appearance: none; margin: 14px; width: 300px; height: 25px; background: #FFD65C;//360px
          outline: none; -webkit-transition: .2s; transition: opacity .2s;}
        .slider::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 35px; height: 35px; background: #003249; cursor: pointer;}
        .slider::-moz-range-thumb { width: 35px; height: 35px; background: #003249; cursor: pointer; } 
      </style>
    </head>
    
    
    <body>
      <h2>vibration power</h2>
      <p><span id="textSliderValue_power">%SLIDERVALUE_POWER%</span></p>
      <p><input type="range" onchange="updateSliderPWM_power(this)" id="pwmSlider_power" min="300" max="1023" value="%SLIDERVALUE_POWER%" step="1" class="slider"></p>
    <script>
    function updateSliderPWM_power(element) 
    {
      var sliderValue_power = document.getElementById("pwmSlider_power").value;
      document.getElementById("textSliderValue_power").innerHTML = sliderValue_power;
      console.log(sliderValue_power);
      var xhr = new XMLHttpRequest();
      xhr.open("GET", "/slider?value="+sliderValue_power, true);
      xhr.send();
    }
    </script>
    
      <h2>vibration frequency</h2>
      <p><span id="textSliderValue_frequency">%SLIDERVALUE_FREQUENCY%</span></p>
      <p><input type="range" onchange="updateSliderPWM_frequency(this)" id="pwmSlider_frequency" min="0" max="10" value="%SLIDERVALUE_FREQUENCY%" step="1" class="slider"></p>
    <script>
    function updateSliderPWM_frequency(element) 
    {
      var sliderValue_frequency = document.getElementById("pwmSlider_frequency").value;
      document.getElementById("textSliderValue_frequency").innerHTML = sliderValue_frequency;
      console.log(sliderValue_frequency);
      var xhr = new XMLHttpRequest();
      xhr.open("GET", "/slider?value="+sliderValue_frequency, true);
      xhr.send();
    }
    </script>
    </body>
    
    
    </html>
    )rawliteral";
    
    // Replaces placeholder with button section in your web page
    String processor(const String& var)
    {
      //Serial.println(var);
      if (var == "SLIDERVALUE_POWER")
      {
        return sliderValue_power;
      }
      return String();
    
      if (var == "SLIDERVALUE_FREQUENCY")
      {
        return sliderValue_frequency;
      }
      return String();
    }
    
    
    //lagezaehler
    uint8_t rueckenlage = 0;
    
    //LED
    #define LED_pin_gruen D1
    int LED_state_gruen = LOW;
    long previousMillis_gruen = 0;
    
    //summer
    #define summer D2 
    
    //timer
    unsigned long aktuelle_timer_millis, vergangene_timer_millis;
    unsigned long halbe_tick, sekunden_tick;
    unsigned long interval_timer = 1000;
    
    
    // MPU6050 Slave Device Address
    const uint8_t MPU6050SlaveAddress = 0x68;
    
    double Ax, Ay, Az, T, Gx, Gy, Gz;
    
    // Select SDA and SCL pins for I2C communication
    const uint8_t scl = D7;
    const uint8_t sda = D6;
    
    // sensitivity scale factor respective to full scale setting provided in datasheet
    const uint16_t AccelScaleFactor = 16384;
    const uint16_t GyroScaleFactor = 131;
    
    // MPU6050 few configuration register addresses
    const uint8_t MPU6050_REGISTER_SMPLRT_DIV   =  0x19;
    const uint8_t MPU6050_REGISTER_USER_CTRL    =  0x6A;
    const uint8_t MPU6050_REGISTER_PWR_MGMT_1   =  0x6B;
    const uint8_t MPU6050_REGISTER_PWR_MGMT_2   =  0x6C;
    const uint8_t MPU6050_REGISTER_CONFIG       =  0x1A;
    const uint8_t MPU6050_REGISTER_GYRO_CONFIG  =  0x1B;
    const uint8_t MPU6050_REGISTER_ACCEL_CONFIG =  0x1C;
    const uint8_t MPU6050_REGISTER_FIFO_EN      =  0x23;
    const uint8_t MPU6050_REGISTER_INT_ENABLE   =  0x38;
    const uint8_t MPU6050_REGISTER_ACCEL_XOUT_H =  0x3B;
    const uint8_t MPU6050_REGISTER_SIGNAL_PATH_RESET  = 0x68;
    
    int16_t AccelX, AccelY, AccelZ, Temperature, GyroX, GyroY, GyroZ;
    
    void setup()
    {
      Serial.begin(115200);
    
      Serial.print("code----/home/georg/Arduino/schlaf_apnoe/anti_apnoe_STA_browser_zwei_slider_zugriff_2");
    
    //MPU
      Wire.begin(sda, scl);
      MPU6050_Init();
    
      //summer
      pinMode(D2, OUTPUT);
    
      //LED
      pinMode(D1, OUTPUT);
    
      //start-meldung summer und LED
      analogWrite(summer, 500);
      delay(500);
      analogWrite(summer, 0);
    
      digitalWrite(LED_pin_gruen, HIGH);
      delay(500);
      digitalWrite(LED_pin_gruen, LOW);
    
      // mit wlan verbinden
      Serial.println();
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
    
      // server starten
      server.begin();
      Serial.println("Server started");
    
      // locale Ip adresse
      Serial.print("Use this URL to connect: ");
      Serial.print("http://");
      Serial.print(WiFi.localIP());
      Serial.println("/");
    
    
    // Route for root / web page
      server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
      {
        request->send_P(200, "text/html", index_html, processor);
      });
    
      // Send a GET request to <ESP_IP>/slider?value=<inputMessage_power>
      server.on("/slider", HTTP_GET, [] (AsyncWebServerRequest *request) 
      {
        String inputMessage_power;
        // GET input1 value on <ESP_IP>/slider?value=<inputMessage_power>
        if (request->hasParam(PARAM_INPUT_POWER)) 
        {
          inputMessage_power = request->getParam(PARAM_INPUT_POWER)->value();
          sliderValue_power = inputMessage_power;
          analogWrite(summer, sliderValue_power.toInt());
        }
        else 
        {
          inputMessage_power = "No message sent";
        }
        Serial.println(inputMessage_power);
        request->send(200, "text/plain", "OK");
      });
    
      // Send a GET request to <ESP_IP>/slider?value=<inputMessage_frequency>
      server.on("/slider", HTTP_GET, [] (AsyncWebServerRequest *request) 
      {
        String inputMessage_frequency;
        // GET input1 value on <ESP_IP>/slider?value=<inputMessage_frequency>
        if (request->hasParam(PARAM_INPUT_FREQUENCY)) 
        {
          inputMessage_frequency = request->getParam(PARAM_INPUT_FREQUENCY)->value();
          sliderValue_frequency = inputMessage_frequency;
          analogWrite(frequency, sliderValue_frequency.toInt());
        }
        else 
        {
          inputMessage_frequency = "No message sent";
        }
        Serial.println(inputMessage_frequency);
        request->send(200, "text/plain", "OK");
      });
    
    }
    
    void loop()
    {
      //timer();
    
      //read_gyro();
    
      // blinken_10_sec ();
    
      //abfrage_lage();
    
      //abfrage_lage_10_sec ();
    
      //lage_zaehler();
    
      //sekunden_aufgaben();
    }
    wie gesagt, so weit fast alles ok, die darstellung auf der webseite ist nicht gut, vermute einen HTML problem

    https://youtu.be/3nwYLq_bsjU

    wie man in dem video sehen kann, "entfaltet" sich der untere schieberegler erst beim draufklicken. Könnte bitte jemand einen blick auf den code werfen, ich find den fehler nicht

    - zweite verbesserung wäre eine anzeige eines zu neige gehenden akkus. Die spannung wird ja schon gemessen, die tests zeigen, dass der akku für 2 nächte reicht. Meine idealvorstellung wäre, dass wenn die spannung der lipoakku unter den wert sinkt bei dem noch der esp betrieben werden kann eine rote LED aufleuchtet. Wie könnte man das realisieren?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.213
    Du kannst doch einfach ne LED aufleuchten lassen-Ausgänge hat der ESP dafür doch genug....allerdings würde ich die angehen lassen, ehe der ESP die Flügel streckt...
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    so sieht die bedienseite am smartphone nun aus:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Screenshot_20210302-172459.jpg
Hits:	7
Größe:	34,6 KB
ID:	35446

    die auswahl der stärke und frequenz der vibration funktioniert schon, die buttons zum lesen und speichern der einstellungen noch nicht ganz...
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.707
    .. Meine idealvorstellung wäre .. lipoakku unter den wert sinkt .. eine rote LED aufleuchtet. Wie könnte man das realisieren?
    Schau doch mal hier nach. Im "Link zur Simulation" gibts ein Schaubild. Dort kann man die Bauteile (Schieberegler, Widerstände) etc anklicken und z.B. den Schieberegler auf (? 8k8 ?) stellen dabei fängt die LED an zu glimmen, ab 8.6k etwa leuchtet die richtig (DezimalPUNKT, nicht Komma!). So ist eine Spannungsänderung möglich. Früher konnte man die Spannung (irgendwie anders) verändern. Hübsch ist bei der gezeigten Schaltung, dass verschiedene Werte mit dem Mauszeiger eingeblendet werden können.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    so sieht es nun aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20210822_161836_3.jpg
Hits:	7
Größe:	47,9 KB
ID:	35567 Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_20210822_162740_9.jpg
Hits:	7
Größe:	31,0 KB
ID:	35568
    ich und meine tochter (25) verwenden es regelmässig, die mehrmonatige erfahrung zeigt, dass die rückenlage und damit die gefahren der schlaf-apnoe recht zuverlässig verhindert werden. Es tritt sogar ein gewisser unbewusster lerneffekt ein - man dreht sich auch im halbschlaf eher auf die seite, um das lästige vibrieren an der brust zu vermeiden

    das problem mit dem akku habe ich ganz einfach gelöst, das gerät wird abwechselnd mit dem smartphone geladen - das eine nachts, das andere tagsüber...

    Meine hausärztin zeigte auch interesse an einem prototyp, wollte es im familienkreis testen...

    Mich beschäftigt jetzt ein ganz anderes problem: Wie kann ich die geschichte publik machen? Nicht falsch zu verstehen, keine patentierung, eher das gegenteil. Dieses ding ist nicht patentwürdig. Es sollte aber jeder der nach irgendwas gegen schlafapnoe sucht die möglichkeit haben es nachzubauen - wie mache ich das?
    gruß inka

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.12.2017
    Beiträge
    169
    Mich beschäftigt jetzt ein ganz anderes problem: Wie kann ich die geschichte publik machen? Nicht falsch zu verstehen, keine patentierung, eher das gegenteil. Dieses ding ist nicht patentwürdig. Es sollte aber jeder der nach irgendwas gegen schlafapnoe sucht die möglichkeit haben es nachzubauen - wie mache ich das?
    Wie wäre es mit einem Artikel in der Make (Make-Magazin)?
    Die Redaktionen freuen sich immer über gute Projekte, die einigermaßen ordentlich dokumentiert sind. Bei den Artikeln sind immer viele Fotos von der Entstehung oder vom aufgeschraubten Gerät, bzw. den Baustufen, wichtig. Wenn Du Tipps zum Artikel schreiben brauchst, lass' es mich wissen. Man hat schnell 20000 Zeichen zusammen.


    VG, Jürgen

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von jmoors Beitrag anzeigen
    Wie wäre es mit einem Artikel in der Make (Make-Magazin)?
    habs jetzt versucht: findest du mein projekt? es ist noch privat, wenn ich den link verschicke, kann es wohl jeder veröffentlichen?

    auch sehe ich dort keine möglichkeit mehrere bilder oder dateien dem artikel zuzuordnen. Das eine bild, was ich da hinzugefügt habe macht eher den eindruck als wäre es als "antwort" hinzugefügt worden - übersehe ich da was?

    EDIT: ich habs jetzt einfach freigegeben...
    Geändert von inka (31.08.2021 um 15:40 Uhr)
    gruß inka

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.12.2017
    Beiträge
    169
    Ich meine in der Zeitung. Ruf mal bei der Redaktion an.
    Das Projekt findet man sofort: https://makeprojects.com/de/project/...ei-schlafapnoe

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ich würde mich über Open Source Lizenzen informieren. Es gibt verschiedene, ich habe mich gerade wegen einem Filamentextruder (damit ich Filament aus Granulat herstellen kann).

    Dort bin ich auf eine DIY-Lösung gestoßen (mit richtiger Extruderschnecke). https://www.artme-3d.de

    Dieser bietet sein Projekt auch unter einer Open Source Lizenz an. Was in welcher Lizenz steht bzw. was die Beste für dich ist musst du für dich entscheiden/finden.


    Vielleicht ist es hilfreich für dich.

    MfG Hannes

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.666
    Zitat Zitat von inka Beitrag anzeigen
    unter den wert sinkt bei dem noch der esp betrieben werden kann eine rote LED aufleuchtet. Wie könnte man das realisieren?
    Der LiPo-Akku muss geladen werden, wenn der eine bestimmte untere Spannung erreicht. Gut geeignet ist der Spannungswert, der auf dem LiPo steht - wenn der unterschritten wird, dann sollte der LiPo geladen werden; meine Empfehlung dazu, für eine lange Lebensdauer.

    Eine Rote LED oder so: kann man machen, wird dann aber irgendwann nicht mehr so oft hingeschaut. Dadurch könnte der LiPo zu tief entladen werden.

    Du kannst eine Spannungsanzeige bauen, mit so einem kleinen 3V-Display beispielsweise, könnte nett aussehen. Dazu einen Testknopf. Wenn der gedrückt wird, kannst Du die Spannung anzeigen lassen (in Prozent, als Balkengrafik oder wie auch immer). Kann man auch mit 1 LED machen: durch Blinkzeichen anzeigen lassen, wie die Spannung ist (Akku voll 6mal Blinken bspw.).


    MfG

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. RS485-Sensor oder doch lieber RS232-Sensor an Laptop andocken?
    Von Cysign im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 23.03.2013, 11:09
  2. Verkaufe Räumung:US-Sensor, IR-Sensor,Displays,MTreiber,Servorboard, Pan&Tilt Köpfe
    Von kellerkind im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 3
    Letzter Beitrag: 18.06.2012, 17:42
  3. UV Sensor
    Von Andal im Forum Sensoren / Sensorik
    Antworten: 9
    Letzter Beitrag: 13.12.2005, 06:54
  4. Sensor=Sensor???
    Von syndrome im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 07.06.2005, 17:02
  5. [ERLEDIGT] Temp-Sensor KT130 (PTC-Sensor) an C-Control
    Von Thomas im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 02.12.2003, 12:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen