Usporný provoz čidel vs. I2C
Usporný provoz čidel vs. I2C
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);
}
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);
}
Re: Usporný provoz čidel vs. I2C
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.
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.
Re: Usporný provoz čidel vs. I2C
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.
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.
Re: Usporný provoz čidel vs. I2C
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...
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...
Re: Usporný provoz čidel vs. I2C
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.
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.
Re: Usporný provoz čidel vs. I2C
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
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
Re: Usporný provoz čidel vs. I2C
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.
- 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
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.
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Usporný provoz čidel vs. I2C
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.
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů