Bonjour,
Je souhaiterai utiliser un capteur bmp280 pour contrôler la pression dans un petit gonflable.
L'idée est relativement simple si le capteur détecte une pression trop faible, un ventilateur s'allume jusqu'à une pression limite.
Bon principale problème c'est que je sais pas comment utiliser les données i2C provenant du capteur
Je vous envoie un essaye de code. Peu etre que vous comprendrez plus rapidement mon problème.
J'ai chercher sur le forum sans trouver de projet similaire.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
int fan[2] = {2, 13};
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 Sensor event test"));
if (!bmp.begin(0X76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1) delay(10);
}
/* Default settings from datasheet. /
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, / Operating Mode. /
Adafruit_BMP280::SAMPLING_X2, / Temp. oversampling /
Adafruit_BMP280::SAMPLING_X16, / Pressure oversampling /
Adafruit_BMP280::FILTER_X16, / Filtering. /
Adafruit_BMP280::STANDBY_MS_500); / Standby time. */
bmp_temp->printSensorDetails();
pinMode(fan[1], OUTPUT);
}
void loop() {
sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pressure_event);
Serial.print(F("Temperature = "));
Serial.print(temp_event.temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure_event.pressure);
Serial.println(" hPa");
Serial.println();
delay(2000);
while (analogRead(pressure_event.pressure) <= 103700 ) {
digitalWrite(fan[1], HIGH);
delay(3000);
}
while (analogRead(pressure_event.pressure) >= 103800 ) {
digitalWrite(fan[1], LOW);
delay(1000);
}
}
Bonjour,
- Tu n'as pas lu les messages épinglés qui expliquent le fonctionnement de ce forum. Le code n'est pas entre balise code. Il est très difficile à lire, Il y aura-t-il des candidats pour tenter la lecture ?
Le mieux est d'éditer ton message pour placer entre balises (symbole </> ).
Et avant de copier le code dans l'éditeur de l'IDE faire un control T pour bien l'indenter, les erreurs seront plus faciles à trouver.
On doit voir quelque chose comme :
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
-
Le BMP 280 peut-il donner des mesures suffisamment précises dans le domaine de pression que tu envisages ?
Ce n'est pas une mise en cause du choix, c'est une interrogation.
La datasheet du BMP280 donne comme gamme de fonctionnement 300-1100 hPa. La pression atmosphérique moyenne est de 1013 hPa au niveau de la mer. -
En ce qui concerne l'usage du BMP280 tu as trouvé une bibliothèque et dans cette bibliothèque il y a un répertoire "Example". As-tu réalisé un exemple proche de tes conditions de fonctionnement ?
C'est toujours par là qu'il faut commencer : le code est certifié bon, si cela ne fonctionne pas c'est un problème de câblage ou très, très, rarement un composant défectueux.
Serial.begin(9600);
Passes en 115200, dans un programme simple il n'y aura aucune différence mais dans des programmes plus complexes il peut y avoir des risques de ralentissement. Un débit de 115200 est un bon compromis même si on peut aller encore plus vite.
Merci de tas patience 68tjs!
1/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
int fan[2] = {2, 13};
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 Sensor event test"));
if (!bmp.begin(0X76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1) delay(10);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
bmp_temp->printSensorDetails();
pinMode(fan[1], OUTPUT);
}
void loop() {
sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pressure_event);
Serial.print(F("Temperature = "));
Serial.print(temp_event.temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure_event.pressure);
Serial.println(" hPa");
Serial.println();
delay(2000);
if ( pressure_event.pressure < 1038.00 ) {
digitalWrite(fan[1], LOW);
}
else
{
digitalWrite(fan[1], HIGH);
}
}
J'ai apporté des modifications et le code fonctionne donc le problème est résolu en fin de compte
2/ Pour le champs de mesure du capteur normalement c'est bon! Il faut au max une 20hpa pour gonfler la forme.
3/ En dehors des 4 dernières ligne tout est tirée de l'exemple de la bibliothèque qui fonctionne très bien
4/ J'ai essayer de changer, et de mettre
Serial.begin(115200);
Le code semble fonctionner mais le moniteur pas du tout.
Mon seul problème maintenant c'est que la lenteur de réponse!
Je peux évidement y répondre mécaniquement en diminuant l'entrée d'air mais comme tu m'as lancé sur cette piste
Es ce qu'on peut accéléré le processus au niveau du code aussi?
5/ 68Tjs Merci!
Pour le moniteur il faut aussi changer la vitesse dans la liste déroulante en bas à droite dans la fenêtre du moniteur pour l'adapter à celle déclarée dans le code.
Tu as un délai de 2s dans loop() ce qui pourrait expliquer la lenteur de la réaction du système.
Bonjour
C'est quoi comme "gonflable" ?
Un "Zodiac" par exemple est gonflé à ~ 0.2 bar
Pas sur que le bmp280 soit le meilleur candidat
Pour compléter la réponse de fdufnews la liaison série ne peut fonctionner que si le récepteur connait la vitesse d'émission de l'émetteur.
C'est l'inconvénient de l'avantage de la simplicité.
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.