Hinzufügen der Temperatur bei Pulsssensor

Einen schönen guten Tag! Ich bin mit meinem ersten kleinen Projekt fast fertig, nur fehlen mir noch 2 Punkte auf meiner Liste, einmal muss ich Parameter anpassen (ich greife zunächst Puls und Sauerstoffwert am Finger ab, nun möchte ich die Parameter umstellen um auch am Handgelenk zuverlässig zu messen, ich denke dies geht die LED- Stromstärke, diese hab ich mal auf MAX gedreht, werde später dann Referenzmessungen durchführen). Der zweite Punkt ist, dass der Pulssensor wohl auch Temperatur kann, nur leider finde ich nirgends wie ich diese in mein Programm lade. In meiner Libary scheint die Temp nicht erfasst zu werden. Ich hab einmal in das Datenblatt geschaut, aber besonders schlau bin ich leider noch nicht geworden. Vielleicht kann mir jemand weiterhelfen? Ev wäre es einen Versuch wert über eine andere Libary den Sensor anzusteuern, ev Max3010X. Beim 30105 finde ich jedenfalls die Temp. Hab den 30102. :slight_smile:

Für jeden Tipp wäre ich sehr dankbar.

LG

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Sry da hatte ich mich bei den Kategorien vertan, danke für das Verschieben!

Das stimmt nicht ganz.
Dein geheimes Programm kennt bereits das Element dieTemp.
[Nachtrag]
Es gibt sogar die Funktion bereits um den Wert in °C oder °F zu bekommen.

1 Like

Ich hab jetzt nochmal nachgeschaut, scheinbar hast du Recht, ich finde hier:

  float readTemperatureC();

Als ich aber vorhin particleSensor.getTemperature() versucht hatte, hatte er mir das nicht kompiliert? Verstehe ich das richtig, dass ich Temperatur = readTemperatureC() schreiben müsste? (Ich versuche das mal, meine IDE/PC ist aber arg langsam was das kompilieren betrifft)

Der Teil ist member der Classse:
float DFRobot_MAX30102::readTemperatureC()

Leider hälst Du nicht nur Deinen Code sondern auch die Fehlermeldung geheim.
Was erwartest Du?

Das ist der Code den ich angepasst habe: DFRobot_MAX30102/basicRead.ino at master · DFRobot/DFRobot_MAX30102 (github.com)

Ich kompiliere gerade mal, hatte die Fehlermeldung nicht gespeichert und sie mir leider nicht gemerkt, der Nachtrag kommt, sobald ich die Meldung kopieren kann. :slight_smile:

Nachtrag: Ich hatte das mit den Klassen wohl übersehen, hab mit Klassen noch nie gearbeitet, das kommt jetzt dann dran. :slight_smile:

Den Fehler hatte ich, als ich die Funktion wie vorhin beschrieben ausführen wollte:

C:\Users....u\Desktop\Influx DB PI and Temp\Influx DB PI and Temp.ino:204:28: error: 'readTemperatureC' cannot be used as a function
TempC = readTemperatureC();

Da readTemperature() ein Member von MAX30102 ist, musst Du den Einstiegspunkt schon mitbringen.

kompiliert - wenngleich nicht Warnungsfrei und ich mir nicht sicher bin, ob das wirklich so gewollt ist, was mir der Compiler ausspuckt:

/home/user1/arduino-1.8.19/portable/sketchbook/libraries/DFRobot_MAX30102-master/src/PBA/heartRate.cpp: In function 'bool checkForBeat(int32_t)':
/home/user1/arduino-1.8.19/portable/sketchbook/libraries/DFRobot_MAX30102-master/src/PBA/heartRate.cpp:108:33: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
     if ((IR_AC_Max - IR_AC_Min) > 20 & (IR_AC_Max - IR_AC_Min) < 1000)
         ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
Erweitertes Example
/*!
   @file basicRead.ino
   @brief Output readings of red light and IR
   @n This library supports mainboards: ESP8266, FireBeetle-M0, UNO, ESP32, Leonardo, Mega2560
   @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
   @licence     The MIT License (MIT)
   @author [YeHangYu](hangyu.ye@dfrobot.com)
   @version  V0.1
   @date  2020-05-29
   @url https://github.com/DFRobot/DFRobot_MAX30102
*/

#include <DFRobot_MAX30102.h>

DFRobot_MAX30102 particleSensor;

/*
  Macro definition opions in sensor configuration
  sampleAverage: SAMPLEAVG_1 SAMPLEAVG_2 SAMPLEAVG_4
               SAMPLEAVG_8 SAMPLEAVG_16 SAMPLEAVG_32
  ledMode:       MODE_REDONLY  MODE_RED_IR  MODE_MULTILED
  sampleRate:    PULSEWIDTH_69 PULSEWIDTH_118 PULSEWIDTH_215 PULSEWIDTH_411
  pulseWidth:    SAMPLERATE_50 SAMPLERATE_100 SAMPLERATE_200 SAMPLERATE_400
               SAMPLERATE_800 SAMPLERATE_1000 SAMPLERATE_1600 SAMPLERATE_3200
  adcRange:      ADCRANGE_2048 ADCRANGE_4096 ADCRANGE_8192 ADCRANGE_16384
*/
void setup()
{
  //Init serial
  Serial.begin(115200);
  /*!
    @brief Init sensor
    @param pWire IIC bus pointer object and construction device, can both pass or not pass parameters (Wire in default)
    @param i2cAddr Chip IIC address (0x57 in default)
    @return true or false
  */
  while (!particleSensor.begin())
  {
    Serial.println("MAX30102 was not found");
    delay(1000);
  }
  /*!
    @brief Use macro definition to configure sensor
    @param ledBrightness LED brightness, default value: 0x1F(6.4mA), Range: 0~255(0=Off, 255=50mA)
    @param sampleAverage Average multiple samples then draw once, reduce data throughput, default 4 samples average
    @param ledMode LED mode, default to use red light and IR at the same time
    @param sampleRate Sampling rate, default 400 samples every second
    @param pulseWidth Pulse width: the longer the pulse width, the wider the detection range. Default to be Max range
    @param adcRange Measurement Range, default 4096 (nA), 15.63(pA) per LSB
  */
  particleSensor.sensorConfiguration(/*ledBrightness=*/0x1F, /*sampleAverage=*/SAMPLEAVG_4, \
      /*ledMode=*/MODE_MULTILED, /*sampleRate=*/SAMPLERATE_400, \
      /*pulseWidth=*/PULSEWIDTH_411, /*adcRange=*/ADCRANGE_4096);
}

void loop()
{
  //Print result
  Serial.print("R=");
  /*!
    @brief Get red value
    @return Red light reading
  */
  Serial.print(particleSensor.getRed());
  Serial.print(" IR=");
  /*!
    @brief Get IR value
    @return IR reading
  */
  Serial.print(particleSensor.getIR());
  Serial.println();
  Serial.println(particleSensor.readTemperatureC());
  Serial.println();
  delay(100);
}
1 Like

Danke, ich hatte es parallel auch so geschrieben und kompiliert, ging bei mir ohne Fehler. Testen kann ich leider erst später, da mir ein Kabel abgerissen ist und ich das erst anlöten muss, ich werde dann berichten, ob alles geklappt hat, ich vermute aber mal schon. :slight_smile:

Du hast sicher zumindest Serial.print schonmal gesehen. Da arbeitest du mit Klassen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.