mon ARDUINO Uno avec le I2C partagé
5 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
mon ARDUINO Uno avec le I2C partagé
Bonjour
Oui j'ai continué mes achats chez Saint Quentin Radio, et maintenant (bien que tant mieux) je me retrouve
sur les mêmes pins de mon UNo (pins 4 & 5 , SCL SDA) avec :
capteur pression BMP180
accéléromètre triaxes MPU6050
horloge temps réel DS3231
Comment faire pour utiliser 'tout le monde' ?
Oui j'ai continué mes achats chez Saint Quentin Radio, et maintenant (bien que tant mieux) je me retrouve
sur les mêmes pins de mon UNo (pins 4 & 5 , SCL SDA) avec :
capteur pression BMP180
accéléromètre triaxes MPU6050
horloge temps réel DS3231
Comment faire pour utiliser 'tout le monde' ?
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Le protocole I2C (SCL SDA) est un bus qui permet aux équipements d'être branchés 'ensemble'.
(I2C sur Wikipedia)). Dans certains cas d'utilisation, il faut prendre la précaution d'ajouter une résistance sur les lignes du bas.
Dans le début du code du code, tu dois déclarer tes composants et les librairies associées
Exemple :
et ensuite les lancer :
Et cela pour tous tes capteurs.
(I2C sur Wikipedia)). Dans certains cas d'utilisation, il faut prendre la précaution d'ajouter une résistance sur les lignes du bas.
Dans le début du code du code, tu dois déclarer tes composants et les librairies associées
Exemple :
- Code:
#include <Wire.h> //I2C library
#include "SparkFunMPL3115A2.h"
//capteur de pression
MPL3115A2 myPressure;
et ensuite les lancer :
- Code:
void setup()
{
Wire.begin(); // Init port I2C
Serial.begin(9600); // Init port série
myPressure.begin(); // capteur de pression actif
...
}
Et cela pour tous tes capteurs.
Antoine- Messages : 1068
Date d'inscription : 13/01/2019
Age : 48
Localisation : Chateau Thierry
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Je viens de copier coller, je te remercie antoine
Je viens de copier coller, je te remercie antoine
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
je suis intéressé PATRICK ,dès que tu as fait tes tests de bon fonctionnement je suis preneur et a mon tour de faire des montages avec l'arduino
@+RJC
@+RJC
runfola jean claude- Messages : 656
Date d'inscription : 01/04/2016
Age : 80
Localisation : missillac
Re: mon ARDUINO Uno avec le I2C partagé
Ensuite, il faut dans la boucle "loop" faire appel aux fonctions dédiées pour récupérer les données utiles.
Sur le site d'adafruit qui vend ce type de capteurs, tu trouveras des exemples bien documentés de codes pour les utiliser.
Sur le site d'adafruit qui vend ce type de capteurs, tu trouveras des exemples bien documentés de codes pour les utiliser.
Antoine- Messages : 1068
Date d'inscription : 13/01/2019
Age : 48
Localisation : Chateau Thierry
Re: mon ARDUINO Uno avec le I2C partagé
fais juste un programme simple qui affiche l'altitude ou la pression sur le port serie.
Ensuite tu regcouvre avec une paille le capeur de pression et tu aspires pour simuler un changement d'altitude
Ensuite tu regcouvre avec une paille le capeur de pression et tu aspires pour simuler un changement d'altitude
Re: mon ARDUINO Uno avec le I2C partagé
Bonsoir
Merci
Je vais faire les choses dans l'ordre pour répondre à tous
Voici déjà mon programme d'essai pour le BMP180 :
#include
#include
SFE_BMP180 bmp180;
float Po = 1013.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
bool success = bmp180.begin();
if (success) {
Serial.println("BMP180 init success");
}
}
void loop() {
// put your main code here, to run repeatedly:
char status;
//int entier;
double T, P, alt;
bool success = false;
status = bmp180.startTemperature();
if (status != 0) {
// entier = status; // 5 pratiquement
http://Serial.println(entier);
delay(1000); // 1000 d'origine 100 voire 50 fonctionne encore
status = bmp180.getTemperature(T);
if (status != 0) {
// entier = status; // 1 pratiquement
http://Serial.println(entier);
status = bmp180.startPressure(3);
if (status != 0) {
//entier = status; // 26 pratiquement
http://Serial.println(entier);
delay(status);
status = bmp180.getPressure(P, T);
if (status != 0) {
//entier = status; // 1 pratiquement
http://Serial.println(entier);
alt = bmp180.altitude(P, Po);
Serial.print("Altitude: ");
Serial.print(alt);
Serial.println(" Meters");
}
}
}
}
}
je les compare avec ce que m'a répondu antoine :
#include //I2C library
#include "SparkFunMPL3115A2.h"
//capteur de pression
MPL3115A2 myPressure;
void setup()
{
Wire.begin(); // Init port I2C
Serial.begin(9600); // Init port série
myPressure.begin(); // capteur de pression actif
A première vue, il faudrait que je trouve puis examine le fichier SFE_BMP180.h
Merci
Je vais faire les choses dans l'ordre pour répondre à tous
Voici déjà mon programme d'essai pour le BMP180 :
#include
#include
SFE_BMP180 bmp180;
float Po = 1013.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
bool success = bmp180.begin();
if (success) {
Serial.println("BMP180 init success");
}
}
void loop() {
// put your main code here, to run repeatedly:
char status;
//int entier;
double T, P, alt;
bool success = false;
status = bmp180.startTemperature();
if (status != 0) {
// entier = status; // 5 pratiquement
http://Serial.println(entier);
delay(1000); // 1000 d'origine 100 voire 50 fonctionne encore
status = bmp180.getTemperature(T);
if (status != 0) {
// entier = status; // 1 pratiquement
http://Serial.println(entier);
status = bmp180.startPressure(3);
if (status != 0) {
//entier = status; // 26 pratiquement
http://Serial.println(entier);
delay(status);
status = bmp180.getPressure(P, T);
if (status != 0) {
//entier = status; // 1 pratiquement
http://Serial.println(entier);
alt = bmp180.altitude(P, Po);
Serial.print("Altitude: ");
Serial.print(alt);
Serial.println(" Meters");
}
}
}
}
}
je les compare avec ce que m'a répondu antoine :
#include //I2C library
#include "SparkFunMPL3115A2.h"
//capteur de pression
MPL3115A2 myPressure;
void setup()
{
Wire.begin(); // Init port I2C
Serial.begin(9600); // Init port série
myPressure.begin(); // capteur de pression actif
A première vue, il faudrait que je trouve puis examine le fichier SFE_BMP180.h
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
#include
#include
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
#include Wire.h
#include SFE_BMP180.h
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
http://Serial.println(entier); ???????? je doute que ça fonctionne
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Oui c'est comme la 2CV de Bourvil après sa 'rencontre' avec louis de Funès
En fait c'est l'éditeur du forum ('câblé' si je puis dire pour le langage html) qui interprète autrement (à sa façon)
les < > après include et les // des commentaires
Le programme que je vous ai plaçé a des instructions endormies suite à mes essais, mais qui fonctionnent très bien
avec le moniteur série
Pour les essais du capteur de pression, j'ai des idées, je vous montrerais cela quand je vous verrais tous
Sinon voilà mon programme net d'origine :
#include Wire.h
#include SFE_BMP180.h
SFE_BMP180 bmp180;
float Po = 1013.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
bool success = bmp180.begin();
if (success) {
Serial.println("BMP180 init success");
}
}
void loop() {
// put your main code here, to run repeatedly:
char status;
//int entier;
double T, P, alt;
bool success = false;
status = bmp180.startTemperature();
if (status != 0) {
// entier = status; // 5 pratiquement
;Serial.println(entier);
delay(1000); // 1000 d'origine 100 voire 50 fonctionne encore
status = bmp180.getTemperature(T);
if (status != 0) {
// entier = status; // 1 pratiquement
;Serial.println(entier);
status = bmp180.startPressure(3);
if (status != 0) {
//entier = status; // 26 pratiquement
;Serial.println(entier);
delay(status);
status = bmp180.getPressure(P, T);
if (status != 0) {
//entier = status; // 1 pratiquement
;Serial.println(entier);
alt = bmp180.altitude(P, Po);
Serial.print("Altitude: ");
Serial.print(alt);
Serial.println(" Meters");
}
}
}
}
}
Oui c'est comme la 2CV de Bourvil après sa 'rencontre' avec louis de Funès
En fait c'est l'éditeur du forum ('câblé' si je puis dire pour le langage html) qui interprète autrement (à sa façon)
les < > après include et les // des commentaires
Le programme que je vous ai plaçé a des instructions endormies suite à mes essais, mais qui fonctionnent très bien
avec le moniteur série
Pour les essais du capteur de pression, j'ai des idées, je vous montrerais cela quand je vous verrais tous
Sinon voilà mon programme net d'origine :
#include Wire.h
#include SFE_BMP180.h
SFE_BMP180 bmp180;
float Po = 1013.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
bool success = bmp180.begin();
if (success) {
Serial.println("BMP180 init success");
}
}
void loop() {
// put your main code here, to run repeatedly:
char status;
//int entier;
double T, P, alt;
bool success = false;
status = bmp180.startTemperature();
if (status != 0) {
// entier = status; // 5 pratiquement
;Serial.println(entier);
delay(1000); // 1000 d'origine 100 voire 50 fonctionne encore
status = bmp180.getTemperature(T);
if (status != 0) {
// entier = status; // 1 pratiquement
;Serial.println(entier);
status = bmp180.startPressure(3);
if (status != 0) {
//entier = status; // 26 pratiquement
;Serial.println(entier);
delay(status);
status = bmp180.getPressure(P, T);
if (status != 0) {
//entier = status; // 1 pratiquement
;Serial.println(entier);
alt = bmp180.altitude(P, Po);
Serial.print("Altitude: ");
Serial.print(alt);
Serial.println(" Meters");
}
}
}
}
}
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Avec un programme simple sur mon ARDUINO Uno, j'ai pu déterminer les adresses I2C pour chacun des éléments
Cela m'a donné
capteur BMP180, adresse 119 (77h)
capteur MPU6050, adresse 104 (68h)
interface PCF8591, adresse 72 (48h)
horloge temps réel, adresses 87 & 104 (57h & 68h)
Il y a une collision pour l'horloge temps réel et le capteur MPU6050, sinon pour les capteurs entre eux, ça va
Voici le programme utilisé :
include
int index;
int reponse;
void setup() {
Serial.begin(9600);
Serial.println("Initialize 1");
Wire.begin(); join i2c bus (address optional for master)
Serial.println("Initialize 2");
delay(1000);
for (index=0; index<128; index++)
{
Serial.print("Envoyé ");
Wire.beginTransmission(index);
Serial.print(index);
delay(100);
Serial.print(" Répondu ");
reponse = Wire.endTransmission();
Serial.println(reponse);
delay(100);
}
}
void loop() { }
0:success
1:data too long to fit in transmit buffer
2:received NACK on transmit of address
3:received NACK on transmit of data
4:other error
Avec un programme simple sur mon ARDUINO Uno, j'ai pu déterminer les adresses I2C pour chacun des éléments
Cela m'a donné
capteur BMP180, adresse 119 (77h)
capteur MPU6050, adresse 104 (68h)
interface PCF8591, adresse 72 (48h)
horloge temps réel, adresses 87 & 104 (57h & 68h)
Il y a une collision pour l'horloge temps réel et le capteur MPU6050, sinon pour les capteurs entre eux, ça va
Voici le programme utilisé :
include
int index;
int reponse;
void setup() {
Serial.begin(9600);
Serial.println("Initialize 1");
Wire.begin(); join i2c bus (address optional for master)
Serial.println("Initialize 2");
delay(1000);
for (index=0; index<128; index++)
{
Serial.print("Envoyé ");
Wire.beginTransmission(index);
Serial.print(index);
delay(100);
Serial.print(" Répondu ");
reponse = Wire.endTransmission();
Serial.println(reponse);
delay(100);
}
}
void loop() { }
0:success
1:data too long to fit in transmit buffer
2:received NACK on transmit of address
3:received NACK on transmit of data
4:other error
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Antoine aime ce message
Re: mon ARDUINO Uno avec le I2C partagé
Qu'est ce que tu entend par collision? Ils sont à la même adresse ?
Re: mon ARDUINO Uno avec le I2C partagé
parfois un cavalier permet de changer l'adresse
Antoine- Messages : 1068
Date d'inscription : 13/01/2019
Age : 48
Localisation : Chateau Thierry
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Oui Boris, nous avons @68h pour MPU6050 et R T C
J'ai téléchargé les datasheets pour les c i DS3231 et MPU6050
Pour antoine :
"un cavalier dans la nuit (qui s'appelle Z..)"
Oui sur le c i RTC il y a trois straps CMS nommés A0 A1 A2
Mais il y a aussi la bibli téléchargée avec
J'ai une idée, je verrais ça mais d'abord lire ces deux pdf datasheet
Oui Boris, nous avons @68h pour MPU6050 et R T C
J'ai téléchargé les datasheets pour les c i DS3231 et MPU6050
Pour antoine :
"un cavalier dans la nuit (qui s'appelle Z..)"
Oui sur le c i RTC il y a trois straps CMS nommés A0 A1 A2
Mais il y a aussi la bibli téléchargée avec
J'ai une idée, je verrais ça mais d'abord lire ces deux pdf datasheet
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Pour mon ARDUINO Uno, la taille mémoire programme est de 32256 octets
et suite aux compilations, j'ai obtenu :
programme bmp180, 7810 octets
programme mpu6050, 12214 octets
programme DHT11, 4464 octets
programme PCF8591, 3734 octets
programme DS3231, 5580 octets
Ils devraient donc être tous 'accueillis'
J'ai aussi fait une compilation avec leurs bibliothèques (include)
wire.h
SFE_BMP180.h
Adafruit_MPU6050.h
Adafruit_Sensor.h
dht11.h
DS3231.h
SPI.h
SD.h
Cela donne 5594 octets occupés
Pour mon ARDUINO Uno, la taille mémoire programme est de 32256 octets
et suite aux compilations, j'ai obtenu :
programme bmp180, 7810 octets
programme mpu6050, 12214 octets
programme DHT11, 4464 octets
programme PCF8591, 3734 octets
programme DS3231, 5580 octets
Ils devraient donc être tous 'accueillis'
J'ai aussi fait une compilation avec leurs bibliothèques (include)
wire.h
SFE_BMP180.h
Adafruit_MPU6050.h
Adafruit_Sensor.h
dht11.h
DS3231.h
SPI.h
SD.h
Cela donne 5594 octets occupés
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Je suis cetain qu'en cherchant sur Google tu trouvera, sinon essaye le forum Arduinolem75pat a écrit:Bonjour
J'ai une idée, je verrais ça mais d'abord lire ces deux pdf datasheet
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
J'ai lu hier les quatre datasheets que je garde précieusement
Je vais en fait aiguiller le SDA sur quatre directions avec un ci CD4066 (quadruple switch)
tout en laissant SCK commun
J'ai lu hier les quatre datasheets que je garde précieusement
Je vais en fait aiguiller le SDA sur quatre directions avec un ci CD4066 (quadruple switch)
tout en laissant SCK commun
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
J'ai mesuré hier sur le ARDUINO Uno (non connecté au P C via U S B) et alimenté par une pile 9 volts (pp3)
une intensité de 50mA
En rajoutant interface S D card et R T C, cela monte à 65mA
Voici des données sur les piles (elles ne se rechargent pas, elles sont One Time Life) :
AAA r03 1.5v 11grs 1ah
AA r6 1.5v 23grs 2.7ah
C r14 1.5v 67grs 7.7ah
D r20 1.5v 144grs 18ah
N r1 1.5v 0.83ah
PP3 6lr61 9v 45grs 0.55ah (voire 750mAh)
et sur les accumulateurs (on ne dit pas 'piles rechargeables')
9v PP3 175mAh
1.2v AA 1300--2000maH
1.2V AAA 600--1000mAh
1.2v C 2000--4500mAh
1.2v D 4000--10000mAh 155grs 500cycles
J'ai mesuré hier sur le ARDUINO Uno (non connecté au P C via U S B) et alimenté par une pile 9 volts (pp3)
une intensité de 50mA
En rajoutant interface S D card et R T C, cela monte à 65mA
Voici des données sur les piles (elles ne se rechargent pas, elles sont One Time Life) :
AAA r03 1.5v 11grs 1ah
AA r6 1.5v 23grs 2.7ah
C r14 1.5v 67grs 7.7ah
D r20 1.5v 144grs 18ah
N r1 1.5v 0.83ah
PP3 6lr61 9v 45grs 0.55ah (voire 750mAh)
et sur les accumulateurs (on ne dit pas 'piles rechargeables')
9v PP3 175mAh
1.2v AA 1300--2000maH
1.2V AAA 600--1000mAh
1.2v C 2000--4500mAh
1.2v D 4000--10000mAh 155grs 500cycles
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
pour les piles 9V je prends celles qui font 8,4 volt car c'est en fait une batterie 2S à l'interieur.
Je deconseille les batteries 1,5V que l'on met dans des coupleurs car elles sortent du coupleur lors du vol.
Le mieux aujourd'hui c'est vraiment les batteries 1S ou 2S. ou encore les batteries 18650 si le poids n'est pas un probleme que l'on assemble en pack. A ce propos j'ai acheté une machine que m'avait conseillé Antoine pour faire des packs batterie
Je deconseille les batteries 1,5V que l'on met dans des coupleurs car elles sortent du coupleur lors du vol.
Le mieux aujourd'hui c'est vraiment les batteries 1S ou 2S. ou encore les batteries 18650 si le poids n'est pas un probleme que l'on assemble en pack. A ce propos j'ai acheté une machine que m'avait conseillé Antoine pour faire des packs batterie
Antoine aime ce message
Re: mon ARDUINO Uno avec le I2C partagé
Ah tu es là et je suis là aussi à cet instant
Oui pour PP3, 'pile' donne 9V car 6*1.5 et 'accu' donne 8.4V car 7*1.2
Je suis d'accord pour les types bien connus AAA AA C D, il faut le coupleur
et avec l'accélération, ça se 'barre'
En prime, le type PP3 est plus léger que l'assemblage des autres types
et contient une énergie suffisante pour le temps du vol et retombée
J'ai voulu donner leur capacité à titre d'information
Précision pour le couple électrochimique de l'élément de base : 1.5V pour pile, 1.2V pour accumulateur
Pour ma part, j'utiliserais le type PP3 ou les accus 1S 2S 18650 que tu conseilles
A la prochaine qui arrive, je ferais fonctionner mon montage au sol et en voiture, et je crois que je vais utiliser
les PP3 pile 9V; Bon c'est moi, je n'ai pas de chargeur ici chez moi
Calculs 750 mAh / 65mA = 11 heures et demi
Oui pour PP3, 'pile' donne 9V car 6*1.5 et 'accu' donne 8.4V car 7*1.2
Je suis d'accord pour les types bien connus AAA AA C D, il faut le coupleur
et avec l'accélération, ça se 'barre'
En prime, le type PP3 est plus léger que l'assemblage des autres types
et contient une énergie suffisante pour le temps du vol et retombée
J'ai voulu donner leur capacité à titre d'information
Précision pour le couple électrochimique de l'élément de base : 1.5V pour pile, 1.2V pour accumulateur
Pour ma part, j'utiliserais le type PP3 ou les accus 1S 2S 18650 que tu conseilles
A la prochaine qui arrive, je ferais fonctionner mon montage au sol et en voiture, et je crois que je vais utiliser
les PP3 pile 9V; Bon c'est moi, je n'ai pas de chargeur ici chez moi
Calculs 750 mAh / 65mA = 11 heures et demi
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
Les accus/ batteries ou piles utilisé c'est important. Il faut prendre en compte que nos fusée restent parfois en rampe plusieurs minutes avec l'electronique allumé et un buzzer qui bip. D'autre part le pic de courant demandé par les ematches peu faire s'ecrouler la tension de la pile si la resitance interne de celle ci est trop elevé. C'est ce que nous avons pu constater avec Philippe en faisant des tests. Cela avait pour concequence un reboot de l'alti
Re: mon ARDUINO Uno avec le I2C partagé
Derniere chose pour ceux qui utilisent la telemetrie il faut des accu costaux!!!
Re: mon ARDUINO Uno avec le I2C partagé
Bonjour
Moi pour ma part, je mesure l'intensité de consommation (multimètre en A tout simplement)
'quelques minutes', je prévois 15' (un quart d'heure)
Oui pour la télémétrie, cela peut monter jsq 100mA
Moi pour ma part, je mesure l'intensité de consommation (multimètre en A tout simplement)
'quelques minutes', je prévois 15' (un quart d'heure)
Oui pour la télémétrie, cela peut monter jsq 100mA
lem75pat- Messages : 781
Date d'inscription : 08/04/2016
Localisation : Paris
Re: mon ARDUINO Uno avec le I2C partagé
lem75pat a écrit:Bonjour
Moi pour ma part, je mesure l'intensité de consommation (multimètre en A tout simplement)
'quelques minutes', je prévois 15' (un quart d'heure)
Oui pour la télémétrie, cela peut monter jsq 100mA
Bonne question pour la telemetrie, je n'ai jamais mesuré mais il va falloir que je le fasse de maniere à pouvoir preconiser les bonnes batteries
Page 1 sur 2 • 1, 2
Sujets similaires
» Des avançées avec mon ARDUINO Uno
» étude du MPU6050 avec mon ARDUINO Uno
» étude du DHT11 avec mon ARDUINO Uno
» étude du PCF8591 avec mon ARDUINO Uno
» étude du DS3231 avec mon ARDUINO Uno
» étude du MPU6050 avec mon ARDUINO Uno
» étude du DHT11 avec mon ARDUINO Uno
» étude du PCF8591 avec mon ARDUINO Uno
» étude du DS3231 avec mon ARDUINO Uno
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|