Salve a tutti, come da nickname e dalla presentazione al forum mi chiamo Igor e scrivo per un problema che sto riscontrando con il sensore barometrico bmp280 della bosh.
L’ho acquistato su amazon qui:
Non c’è verso di farlo funzionare. Sto utilizzando un arduino nano compatibile tramite il driver ch340, utilizzo questi dispositivi da molto tempo e vanno benone.
Nella descrizione di amazon c’è scritto che il sensore va alimentato tra un range di 1,8 e 3,6V.
La board sulla quale è montato il sensore offre 6 pin di connessione: Vcc, gnd, scl, sda, csb e sdo.
Io ho connesso il vcc ai 5v di arduino perchè sui 3.3v il sensore non da segni di vita, il gnd al gnd, poi sda al pin a4 e scl al pin a5.
Con lo sketch i2c scanner trovato in rete mi individua il dispositivo sull’indirizzo x76.
Da qui in poi iniziano le stranezze:
Se alimento il dispositivo con i 3.3V come indicato nel datasheet, lo scanner i2c non vede nulla, se invece gli do i 5V lo scanner lo trova come già detto sull’indirizzo x76.
Lo sketch di Gregor Christandl che incollerò di seguito ha la seguente linea di comando che imposta il canale i2c: #define I2C_ADDRESS 0x77
Caricato lo sketch su arduino il monitor seriale mi restituisce i valori 0.00 per la pressione e per la temperatura.
Come ho già detto lo scanner i2C mi vede il dispositivo sull’indirizzo x76, allora ho provato a modificare la riga di comando inserendo 76 come valore.
Aprendo il monitor seriale ora non vedo proprio nulla, non viene neanche stampata la scritta pressure e temperature. Con l’indirizzo sbagliato invece stampa le parole ma i valori a 0.00
Ho fatto anche delle altre prove, siccome ho letto che il pin sdo del sensore può mutare l’indirizzo a seconda che sia connesso a gnd o a vcc, ho tentato di connetterlo in entrambe le combinazioni, anche modificando la riga di comando dell’indirizzo, ma non ho ottenuto nessun risultato, il monitor seriale rimane vuoto, tranne nel caso in cui da valore 0.00 come descritto sopra.
Non capisco se è danneggiato il sensore o se sbaglio io qualcosa.
Ho letto anche da qualche parte che il pin csb abilita il canale i2c se connesso a 5V, ma anche questo tentativo non è servito a nulla.
avete suggerimenti in merito? non so più cosa fare.
Incollo di seguito lo sketch originale con tutti i suoi commenti.
// BMx280_I2C.ino
//
// shows how to use the BMP280 / BMx280 library with the sensor connected using I2C.
//
// Copyright (c) 2018 Gregor Christandl
//
// connect the AS3935 to the Arduino like this:
//
// Arduino - BMP280 / BME280
// 3.3V ---- VCC
// GND ----- GND
// SDA ----- SDA
// SCL ----- SCL
// some BMP280/BME280 modules break out the CSB and SDO pins as well:
// 5V ------ CSB (enables the I2C interface)
// GND ----- SDO (I2C Address 0x76)
// 5V ------ SDO (I2C Address 0x77)
// other pins can be left unconnected.
#include <Wire.h>
#include <BMx280I2C.h>
#define I2C_ADDRESS 0x77
BMx280I2C bmx280 ( I2C_ADDRESS );
void setup() {
Serial.begin ( 9600 );
Wire.begin();
bmx280.begin();
bmx280.resetToDefaults();
//by default sensing is disabled and must be enabled by setting a non-zero
//oversampling setting.
//set an oversampling setting for pressure and temperature measurements.
bmx280.writeOversamplingPressure ( BMx280MI::OSRS_P_x16 );
bmx280.writeOversamplingTemperature ( BMx280MI::OSRS_T_x16 );
//if sensor is a BME280, set an oversampling setting for humidity measurements.
if ( bmx280.isBME280() ) bmx280.writeOversamplingHumidity ( BMx280MI::OSRS_H_x16 );
}
void loop() {
//start a measurement
bmx280.measure();
do {
delay ( 100 );
} while ( !bmx280.hasValue() );
Serial.print ( "Pressure: " ); Serial.println ( bmx280.getPressure() );
Serial.print ( "Temperature: " ); Serial.println ( bmx280.getTemperature() );
if ( bmx280.isBME280() ) {
Serial.print ( "Humidity: " );
Serial.println ( bmx280.getHumidity() );
}
delay ( 1000 );
}
@igorzz1978 : in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.
Inoltre, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmdT su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto.
Ciao Guglielmo, grazie per la risposta, sono riuscito a fare ciò che mi hai richiesto con il codice tra i simboli di minore e maggiore, ma essendo non vedente non riesco a formattare con indentatura giusta, abbiate pazienza. Grazie
Allora, ti consiglio di usare la libreria di Adafruit (la si installa dal Library manager) e gli esempi che sono a corredo ...
... con quella libreria non ho mai avuto problemi, prova e facci sapere.
Temo che non tolleri 5.0V, almeno da quello che vedo dal link al prodotto risulta molto differente da quella prodotta da adafruit la quale ha un regolatore a bordo e adattari di livello e può lavorare a scela con 3.3V o 5.0V. La tua può lavorare solo con 3.3V ma per connetterla alla arduino UNO servono degli adattatori di livello.
Spero di sbagliarmi ma potresti pure averla guastata alimentandola a 5.0V.
ho provato anche con le librerie di adafruit ma nulla. a questo punto credo sia danneggiato il sensore. Si sapevo che andava alimentato a 3.3V, ma la cosa stranissima è che a 3.3v lo sketch i2c scanner, sul monitor seriale non individua nulla, mentre se lo alimento a 5V mi individua un dispositivo i2c sull'indirizzo 0x76, ma poi caricando lo sketch che fa funzionare il sensore non da segni di vita.. Ho fatto mille prove anche cambiando l'indirizzo, ho provato anche a cambiare l'arduino con un'altro nano ma nulla.. Penso che forse mi convenga acquistarne un'altro magari su break out board, magari proprio di adafruit per andare sul sicuro. Grazie.
... probabilmente c'è qualche parte interna, come quella relativa all'I2C che non si è ancora danneggiata, mentre il sensore vero e proprio è probabilmente bello che andato.
Se usi un Arduino a 5V devi prendere sensori adatti a lavorare a 5V oppure devi usare dei convertitore di livello per i segnali come QUESTO, adatto per il bus I2C, che ti permette di usare sensori digitali che lavorano a 3.3V con MCU che lavorano a 5V (... e viceversa).
grazie guglielmo, io comunque mi sono permesso di dargli 5v solo dopo aver fatto mille prove a 3.3v come da specifiche, è stata solo un'ultima prova folle. Mi venne il dubio che potevano esser sbagliate le specifiche dato che a 3.3v non funzionava.. A proposito degli adattatori di livello, non so se sono fuori topic, non avendo mai avuto necessità di utilizzarli, mi chiedevo come andassero connessi. Devo fornire al circuito entrambe le tensioni da 3.3v e 5v che partano da arduino e poi avrò immagino le connessioni in ingresso del sensore che va all'adattatore di livello e da questo all'arduino giusto?
HV High Voltage - nel tuo caso tra HV e GND 5.0 da arduino uno.
LV Low Voltage - nel tuo caso il sensore alimentato a 3.3V
B1, B2 ai pin SDA SCL di arduino uno
A1, A2 ai pin SDA SCL del sensore.
Riguardo la gli altri due pin del sensore non saprei, so solo che oltre ad I2C si può connettere a SPI ma come si configura per l'uno o l'altro non lo so.
Ciao, vorrei chiedervi un consiglio, ho preso un'altro sensore uguale, un bmp280. Avendo bruciato l'altro vi chiedo questo, secondo voi essendo un sensore che chiede i 3.3v ci sono problemi se lo connetto ai 3.3v e gnd per l'alimentazione ma utilizzo il bus i2c senza adattatore di livello? Non so se i pin a5 ed a4 di arduino per la comunicazione i2c danneggiano comunque il sensore che richiede i 3.3v. Grazie..
Certamente servono gli adattatori di livello tra il sensore e i pin SDA SCL di arduino. Vuoi per caso verificare se si guasta il sensore senza adattatori di livello?
In verita è solo sulla MEGA in cui hanno avuto la pessima idea di montare, direttamente sulla scheda, le resistenze di pull-up verso i +5V. Su altri Arduino, tra cui Arduino UNO, NON ci sono le resistenze di pull-up e quindi ... decidi tu, con le resistenze esterne, a cosa collegarle (es. ai 3.3V).
Resta comunque il fatto che, anche se così non si danneggia nulla, si è comunque al limite per il livello HIGH e quindi ... gli adattatori di livello sono senz'altro auspicabili per non avere possibili problemi.