- Akku Tests und Balkonkraftwerk Speicher         
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
    76
    Beiträge
    2.180

    Sensor für Rückenlage

    hallo allerseits,

    mit welcher art von sensor könnte ich (ausgewertet durch einen arduino) mit einer genauigkeit von +/- 10° feststellen ob eine testperson in rückenlage liegt?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    also ich selbst könnte mir vorstellen das mit dem gyro MPU6050 zu messen, das kästchen mit der MPU und einem wemos D1 (mit BT) müsste die testperson quasi mit einem breiten klettband um den bauch gebunden haben. Die wemos node MCU müsste die rückenlage einem gerät in form eine smartwatch per BT melden, das gerät würde dann anfangen zu vibrieren um die testperson dazu zu bewegen aus der rückenlage rauszugehen....
    Möglich?
    Vielleicht auch mit anderen methoden?
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.199
    Soll der Messaufbau an der Person oder an der Liege sein?

    Deine Idee müsste eigentlich funktionieren, wenn er an der Person befestigt ist.
    An der Liege könnte man druckempfindliche Sensoren in der Gegend der Schulterblätter anbringen, denke ich- Wägesensoren, oder sowas.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    es geht um schlafapnoe, die tritt meistens beim schlafen auf dem rücken auf. Ich denke dass es sinnvoller ist die Sensoren für die rückenlage "am man" zu haben, die kann man dann einfacher mitnehmen...

    ich teste es mal mit dem gyro ob das überhaupt denkbar wäre...

    ein zusätzliches problem ist der vibrator am handgelenk. Ich dachte da an sowas ähnliches wie ein fitnessstracker. Ein leeres gehäuse bekommt man günstig beim chinesen, durchmesser 44mm, höhe ca. 10mm. Und da muss der BT-empfänger, microcontroler, akku, ladebuchse und der vibrator rein. Das grösste problem wird wohl der controler sein, sowas kleines gibts glaube ich garnicht...
    gruß inka

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    183
    Eine Banglejs könnte das..

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    ich hab mir die möglichkeiten die auf der webseite beschrieben sind nur ganz flüchtig angeschaut: Hast Du erfahrung mit der uhr?
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.199
    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..

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    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

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    .. 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

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. 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
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad