-         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Sensor für Rückenlage

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    Anzeige

    ich hatte mir bei philips was bestellt ( https://www.philips.de/c-e/smartslee...ontent_advisor )

    habe es nach einer woche wieder zurückgeschickt. Schön verarbeitet, noch schöner verpackt, manual auf hochglanzpapier, allerdings war die bedienung miserabel und eine auswertungsmöglichkeit auch - nämlich keine. Der preis jenseits von gut und böse...

    hab jetzt was selbst gebastelt, es funktioniert, statt der LED kann man natürlich auch ein buzzer schalten. Oder leichte stromschläge

    ein breadboard model ist fertig:

    https://youtu.be/5zvhXQoEOpg

    jetzt muss ich es nur noch in ein gehäuse packen...
    gruß inka

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    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

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    52
    Beiträge
    1.850
    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..

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.378
    .. 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. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.519
    Blog-Einträge
    29
    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

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    Die idee mit dem display ist ganz net, aber nachts ist es ja dunkel...
    ich dachte an eine DUO-led, rot/grün, die ist direkt neben dem schiebeschalter eingebaut, leuchtet grün ca 3 sec. nach dem einschalten als "OK" auf, dann erlischt sie. Das gerät soll ja täglich benutzt werden, wenn es sinn machen soll, man muss auch beobachten können, ob sich was ändert, also ob man zum seitenschläfer "umprogrammiert" wird
    beim abschalten morgens kann man noch einmal einschalten, grün bedeutet - eine nacht reichts noch, rot würde bedeuten - vor der nächsten nacht laden. man könnte auch mit PWM verschiedene farbtöne zaubern, aber das ist dann wirklich schon spielerei...

    Was mich jetzt mehr beschäftigt ist das abspeichern von einstellungen der beiden slider z.b. im SPIFFS, die einstellung soll man zwar immer wieder über die webseite neu machen können, aber nicht machen müssen, wenn also eine kombination aus power und frequenz stimmt, soll sie automatisch beim start geladen werden...

    Ich hab jetzt ein paar infos über speichern von dateien im SPIFFS gefunden, das auslesen geht auch (beispielhaft), aber wie ich z.b. die daten richtig in der datei speichern und die richtigen daten wieder auslesen soll - da bin ich noch nicht dahintergestiegen...

    Funktioniert es z.b. mit der schlichten anweisung - String sliderValue_power = "532"; - die im setup aus der datei im SPIFFS ausgelesen wird??? Und wie lese ich den einzelnen wert aus der gespeicherten datei aus??? Hat das schon mal jemand gemacht?
    gruß inka

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.519
    Blog-Einträge
    29
    Vielleicht mal das hier, unter diesem Link versuchen! Praktikabel, für so einfache Dinge. Und ausreichend. SPIFFs wird nicht mehr unterstützt und soll nicht mehr verwendet werden.

    MfG

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    es sieht so aus, als wäre "preferences.h" nur für ESP32 und nicht für ESP8266...
    gruß inka

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.519
    Blog-Einträge
    29
    Nimmst Du keinen ESP32?

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.043
    nein. der 8266 schien mir für diese anwendung gut genug, es ist der D1 mini... Also doch SPIFFS. Egal ob "man" es nehmen soll oder nicht...
    gruß inka

Seite 2 von 3 ErsteErste 123 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
  •