Hallo Volker,
-
Genau, es reicht, den JST Stecker des SolarCharges in einen der I2C Ports der senseBox zu stecken.
-
Aktuell kann der SolarCharger noch nicht über Blockly programmiert werden (ist in Arbeit), sondern nur über die Arduino IDE.
-
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