SolarCharger in Betrieb nehmen und programmieren

Hallo zusammen,

ich habe für unsere Schule den SolarCharger aus dem SenseBox-Shop im Komplettpaket gekauft. In der Beschreibung in Shop steht drin, dass man diesen programmieren kann. Das würde ich gerne unsere Schüler übernehmen lassen. Dazu nutzen wir in den unteren Klassen die Blockly-Programmierumgebung. Ich habe dazu folgende Fragen:

  1. Ist es richtig, dass ich den JST PHR4 Stecker in die i2c/Wire-Buchsen stecken muss, damit die Sensebox mit Strom versorgt wird und man den SolarCharger programmieren kann?
  2. Mit welchen Bautsteinen aus der blockly-Programmierumgebung kann ich dann den SolarCharger programmieren? Dort finde ich keine passenden Bautsteine. Oder geht das nur mit der Arduino-Umgebung direkt?
  3. Was überhaupt kann ich programmieren? Welche Größen lassen sich auslesen?

Über eine Rückmeldung würde ich mich sehr freuen.

Viele Grüße

Volker

Hallo Volker,

  1. Genau, es reicht, den JST Stecker des SolarCharges in einen der I2C Ports der senseBox zu stecken.

  2. Aktuell kann der SolarCharger noch nicht über Blockly programmiert werden (ist in Arbeit), sondern nur über die Arduino IDE.

  3. Richtig „programmieren“ kann man eigentlich nichts, da der SolarCharger von alleine läuft, bei Sonnenlicht die Akkus lädt und eine konstante Stromversorgung bereitstellt. Der SolarCharger lässt sich lediglich über die I2C-Schnittstelle wie ein Sensor ansteuern um Statuswerte zur Solarspannung, Batteriespannung, Batterielevel (entspricht den 0-4 Status LEDs auf der Platine) und der Batterietemperatur auszulesen.

Im folgenden Code für die Arduino IDE um diese Werte auszulesen:

// battery stuff
float solar_voltage;
float battery_voltage;
int battery_level;
float battery_temp;
String battery_status_info;

void solar_update() {
  /*
   * I2C i/f with following info on address 0x32:
   * - Register 0: cell voltage, 20mV/LSB
   * - Register 1: input voltage, 100mV/LSB
   * - Register 2: status bits: [B,I,L3,L2,L1,L0,F,C]
   *    B=battery present >2.8V
   *    I=Input voltage present >4.5V
   *    L0-L3=battery status LEDs
   *    F=Fast charge enabled
   *    C=Charging
   * - Register 3: temperature in C, signed 8-bit
   * Thresholds: L0: 3.2V, L1: 3.6V, L2: 3.7V, L3: 3.9V <- somewhere the order
   * is wrong
   *
   * i Switch to slow charge at 8*C Switch to fast charge at 12*C
   */
  byte address = 0x32;
  Wire.beginTransmission(address);
  byte error = Wire.endTransmission();
  if (error == 0) {
    Wire.requestFrom((uint8_t)address, (uint8_t)4);
    uint vbat = Wire.read();
    uint vin = Wire.read();
    uint flags = Wire.read();
    int temp = (int8_t)(Wire.read());
    battery_voltage = 0.02 * vbat;
    solar_voltage = 0.1 * vin;
    if (flags & 32)
      battery_level = 4;
    else if (flags & 16)
      battery_level = 3;
    else if (flags & 8)
      battery_level = 2;
    else if (flags & 4)
      battery_level = 1;
    else
      battery_level = 0;
    if (flags & 1)
      battery_status_info = "charging\n" + String(flags);
    else
      battery_status_info = "not charging\n";
    if (flags & 64)
      battery_status_info += "good input voltage\n";
    else
      battery_status_info += "low input voltage\n";
    if (flags & 128)
      battery_status_info += "battery present";
    else
      battery_status_info += "battery missing";
  } else if (error == 2) {
    battery_status_info = "Solar module not connected";
  } else if (error) {
    battery_status_info = "unknown error ";
    battery_status_info += String(error);
  }
}

gehört vor die setup() Funktion. In setup() Funktion selbst muss

Wire.begin();

stehen und im loop()

solar_update();

aufgerufen werden. Die Werte, die ganz oben deklariert wurden, werden dann laufend aktualisiert und können weiterverwendet und ausgegeben werden.

Grüße
Björn