Usporný provoz čidel vs. I2C

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Usporný provoz čidel vs. I2C

Příspěvek od cz_marek » 31 led 2018, 09:34

Ahoj,
mohl by mi prosím někdo poradit - mám problém s kodem pro usporné napájení čidel.

Jde mi o to že chci pomocí přerušení napájení snížit spotřebu čidel komunikujíccíh pres I2C. Princip není nic nového - digitálním pinem chci spínat tranzistor - tranzistorem chci spinat konvertor 5V -> 3,3V který napají čidlo (BME280).

Problém je že pokud použiju čidlo (s příslušným kodem) DS18B20 tak mi to funguje presne jak chci. Pokud tam dam BME280 nebo jakekoliv které komunikuje pres I2C tak to přestane fungovat. Tipuju tedy na problem v programu... Jednoduchou metodou jsem se dopracoval k tomu že pokud zakomentuju

if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}

tak mi to začne fungovat - teda funguje mi spínání digitálního pinu (poznám podle LEDky na konvertoru napětí).

Můžete mi někdo poradit co s tím?
Díky

Celý kod je tady:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME280_ADRESA (0x76)
Adafruit_BME280 bme;
int vystup = 12;

void setup() {
pinMode(vystup, OUTPUT);
Serial.begin(9600);
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}
}

void loop() {
digitalWrite(vystup, HIGH);
Serial.print("Teplota: ");
Serial.print(bme.readTemperature());
Serial.println(" stupnu Celsia.");
Serial.print("Relativni vlhkost: ");
Serial.println(" %");
Serial.print("Tlak: ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa.");
Serial.println();
delay(2000);
digitalWrite(vystup, LOW);
delay(10000);
}

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Usporný provoz čidel vs. I2C

Příspěvek od ohruska » 31 led 2018, 10:19

Zdravím.
Zdá se mě to divné řešení.
Nebylo by lepší uspávat přímo čip BME280. V režimu spánku má spotřebu 0.3µA.

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: Usporný provoz čidel vs. I2C

Příspěvek od Axamith » 31 led 2018, 10:21

V první řadě, ten tranzistor je na proudy, které potřebují čidla zcela zbytečný. Pin Arduina zvládne proud až 40 mA, takže to můžeš napájet přímo z pinu. Před měřením pinu nastavíš hodnotu HIGH, po změření ho vypneš LOW.
Píšeš, že chceš jet v úsporném režimu, ale neděláš tam vlastně nic, co by mělo spořit energii, žádný režim spánku, prostě jedeš pořád na plný výkon procesoru.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Usporný provoz čidel vs. I2C

Příspěvek od cz_marek » 31 led 2018, 10:35

Pokud je možné uspavat čidlo tak super. Krome BME tam bude i čidlo na osvětlení BH1750 tak si nejsem jisty jestli je možné uspat i to.
Jen teda nevim jak na to - pokud by byl tip tak bych byl rad. JInak si to samozrejme zkusim pohledat na netu.

Chci to provozovat na ESP-07 a ve finale tam bude vic cidel tak proto ten tranzistor - prevodnik na 3,3V pak dam pryč. To zapojeni mam jen pro testovani...

Problem je to nespinani digitalniho pinu...

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: Usporný provoz čidel vs. I2C

Příspěvek od Axamith » 31 led 2018, 10:47

Budeš to řídit přes Arduino a výsledná data posílat přes ESP, nebo budeš mít jen samotné ESPčko?
Oboje má režimy spánku, v různých úrovních úsporu energie.
I tak tam ten tranzistor být nemusí, každé čidlo může ovládat jeden PIN a postupně je můžeš ovládat. I kdyby to živil jeden pin, než by jsi ho zatížil 40 mA, to by bylo čidel.
problém nevidím ani tak v úspoře napájení čidel, ale úspoře napájení celé sestavy, čidla jsou v tomto případě to poslední, co baští cenné mA.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Usporný provoz čidel vs. I2C

Příspěvek od cz_marek » 31 led 2018, 10:55

Bude tam jen ESP - uspani ESP jsem mel v planu od začatku.
Ten kod co jsem tady dal je "nejjednodušší" varianta toho kdy mi to nefunguje.

Dobrá ten tranzistor vynechám - je to fakt ze kdybych se dostal na hranu tak to muzu ovladat vice pinama...

I když to budu uspavat pres "sleep mod" tak se stejně mužu dostat do situace kdy budu chtít ovladat digitalni pin - stve mě ze taková jednoduchá věc nefunguje :-)

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Usporný provoz čidel vs. I2C

Příspěvek od ohruska » 31 led 2018, 10:59

Místo BH1750 který má spotřebu asi 7 mA bych použil raději chip MAX44009 má nižší spotřebu 1.6 µA a měří vyšší světenost 188000 Lux, BH1750 měří jenom 65535 Lux.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Usporný provoz čidel vs. I2C

Příspěvek od cz_marek » 31 led 2018, 11:05

ohruska píše:
31 led 2018, 10:59
Místo BH1750 který má spotřebu asi 7 mA bych použil raději chip MAX44009 má nižší spotřebu 1.6 µA a měří vyšší světenost 188000 Lux, BH1750 měří jenom 65535 Lux.
Diky za radu - ten rozdil je fakt velky.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Usporný provoz čidel vs. I2C

Příspěvek od pavel1tu » 31 led 2018, 13:05

Souhlas ty Bosch čidla mám doma asi 3 druhy.

Jak ve forced modu (kdy vyčítám tak jednou za 5 min a déle) se sama uspí po vyčtení
tak při nastavení pravidelných automatických měření (teď nevím jestli je maximální čas 1s nebo více), se po odeslání uspí,
stejně ale při měření žerou jen 10mikroA maximálně .... nebo tak nějak.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

afilip
Příspěvky: 116
Registrován: 26 črc 2017, 16:34
Reputation: 0
Kontaktovat uživatele:

Re: Usporný provoz čidel vs. I2C

Příspěvek od afilip » 01 úno 2018, 19:52

Problém je v tom, že ty "zakomentované řádky" kontrolují, jestli je připojené čidlo BME. A vy to testujete s vypnutým napájením, tekže ten test BME nenajde, protože má vypnuté napájení a neodpovídá.

Muselo by to být takto:
digitalWrite(vystup, HIGH);
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
digitalWrite(vystup, LOW);

Ale souhlasím s předchozími komentáři, že je to celé blbost. Prostě ta čidla nevypínat. ;)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů