Inhoudsopgave:
Video: Particle Photon - MPL3115A2 Precision Altimeter Sensor Tutorial - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
De MPL3115A2 maakt gebruik van een MEMS-druksensor met een I2C-interface om nauwkeurige druk-/hoogte- en temperatuurgegevens te leveren. De sensoruitgangen worden gedigitaliseerd door een 24-bits ADC met hoge resolutie. Interne verwerking verwijdert compensatietaken van het host-MCU-systeem. Het is in staat om een verandering van slechts 0,05 kPa te detecteren, wat overeenkomt met een hoogteverandering van 0,3 m. Hier is de demonstratie met deeltjesfoton.
Stap 1: Wat je nodig hebt.
1. Deeltjesfoton
2. MPL3115A2
3. I²C-kabel
4. I²C-schild voor deeltjesfoton
Stap 2: Aansluitingen:
Neem een I2C-schild voor deeltjesfoton en duw het voorzichtig over de pinnen van deeltjesfoton.
Sluit vervolgens het ene uiteinde van de I2C-kabel aan op de MPL3115A2-sensor en het andere uiteinde op de I2C-afscherming.
De aansluitingen zijn weergegeven in de afbeelding hierboven.
Stap 3: Coderen:
De deeltjescode voor MPL3115A2 kan worden gedownload van onze Github-repository-DCUBE Store.
Hier is de link.
We hebben twee bibliotheken gebruikt voor deeltjescode, namelijk application.h en spark_wiring_i2c.h. Spark_wiring_i2c-bibliotheek is vereist om de I2C-communicatie met de sensor te vergemakkelijken.
U kunt de code ook hier kopiëren, deze wordt als volgt gegeven:
// Gedistribueerd met een vrije wilslicentie.
// Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken.
// MPL3115A2
// Deze code is ontworpen om te werken met de MPL3115A2_I2CS I2C Mini Module
#erbij betrekken
#erbij betrekken
// MPL3115A2 I2C-adres is 0x60(96)
#define Addr 0x60
float cTemp = 0,0, fTemp = 0,0, druk = 0,0, hoogte = 0,0;
int temp = 0, tHeight = 0;lange druk = 0;
ongeldige setup()
{
// Variabele instellen
Particle.variable("i2cdevice", "MPL3115A2");
Particle.variable("cTemp", cTemp);
Particle.variable ("druk", druk);
Particle.variable ("hoogte", hoogte);
// Initialiseer I2C-communicatie
Draad.begin();
// Initialiseer seriële communicatie, stel baudrate in = 9600
Serieel.begin(9600);
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, hoogtemetermodus
Draad.schrijven (0xB9);
// Stop I2C-transmissie
Wire.endTransmission();
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataconfiguratieregister
Draad.schrijven (0x13);
// Gegevens gereedgebeurtenis ingeschakeld voor hoogte, druk, temperatuur
Draad.schrijven (0x07);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (300);
}
lege lus()
{
niet-ondertekende int-gegevens[6];
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, hoogtemetermodus
Draad.schrijven (0xB9);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (1000);
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataregister
Draad.schrijven (0x00);
// Stop I2C-transmissie
Wire.endTransmission();
// Vraag 6 bytes aan gegevens aan
Wire.requestFrom(Addr, 6);
// Lees 6 bytes aan gegevens van adres 0x00(00)
// status, tHeight msb1, tHeight msb, tHeight lsb, tijdelijke msb, tijdelijke lsb
if(Draad.beschikbaar() == 6)
{
data[0] = Draad.lezen();
data[1] = Draad.lezen();
data[2] = Draad.lezen();
data[3] = Draad.lezen();
data[4] = Draad.lezen();
data[5] = Draad.lezen();
}
// Converteer de gegevens naar 20-bits
tHeight = ((((lange)data[1] * (lange)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16);
temp = ((data[4] * 256) + (data[5] & 0xF0)) / 16;
hoogte = tHoogte / 16.0;
cTemp = (temp / 16.0);
fTemp = cTemp * 1,8 + 32;
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer controleregister
Draad.schrijven (0x26);
// Actieve modus, OSR = 128, barometermodus
Draad.schrijven (0x39);
// Stop I2C-transmissie
Wire.endTransmission();
// Start I2C-transmissie
Wire.beginTransmission (Addr);
// Selecteer dataregister
Draad.schrijven (0x00);
// Stop I2C-transmissie
Wire.endTransmission();
vertraging (1000);
// Vraag 4 bytes aan gegevens aan
Wire.requestFrom(Addr, 4);
// Lees 4 bytes aan gegevens
// status, pres msb1, pres msb, pres lsb
if(Draad.beschikbaar() == 4)
{
data[0] = Draad.lezen();
data[1] = Draad.lezen();
data[2] = Draad.lezen();
data[3] = Draad.lezen();
}
// Converteer de gegevens naar 20-bits
pres = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;
druk = (druk / 4,0) / 1000,0;
// Gegevens uitvoeren naar dashboard
Particle.publish("Hoogte:", String(hoogte));
Particle.publish("Druk:", String(druk));
Particle.publish("Temperatuur in Celsius:", String(cTemp));
Particle.publish("Temperatuur in Fahrenheit:", String(fTemp));
vertraging (1000);
}
Stap 4: Toepassingen:
Verschillende toepassingen van de MPL3115A2 omvatten hoogtemeting met hoge nauwkeurigheid, smartphones/tablets, hoogtemeting voor persoonlijke elektronica, enz. Het kan ook worden opgenomen in GPS-geschatte berekeningen, GPS-verbeteringen voor hulpdiensten, kaartassistentie, navigatie en weerstationapparatuur.
Aanbevolen:
Meting van versnelling met behulp van ADXL345 en Particle Photon: 4 stappen
Meting van versnelling met behulp van ADXL345 en deeltjesfoton: De ADXL345 is een kleine, dunne, ultralaagvermogen, 3-assige versnellingsmeter met hoge resolutie (13-bits) meting tot ±16 g. Digitale uitvoergegevens zijn geformatteerd als 16-bits tweetallen en zijn toegankelijk via de digitale I2 C-interface. Het meet de
Vochtigheidsmeting met HYT939 en Particle Photon: 4 stappen
Vochtigheidsmeting met HYT939 en Particle Photon: HYT939 is een digitale vochtigheidssensor die werkt op I2C-communicatieprotocol. Vochtigheid is een cruciale parameter als het gaat om medische systemen en laboratoria. Om deze doelen te bereiken hebben we geprobeerd HYT939 te koppelen aan Raspberry Pi. L
Meting van versnelling met behulp van H3LIS331DL en Particle Photon: 4 stappen
Meting van versnelling met behulp van H3LIS331DL en Particle Photon: H3LIS331DL, is een low-power high-performance 3-assige lineaire versnellingsmeter die behoort tot de "nano" familie, met digitale I²C seriële interface. H3LIS331DL heeft door de gebruiker selecteerbare volledige schalen van ±100g/±200g/±400g en is in staat om versnellingen te meten met
Temperatuurmeting met MCP9803 en Particle Photon: 4 stappen
Temperatuurmeting met MCP9803 en Particle Photon: MCP9803 is een 2-draads zeer nauwkeurige temperatuursensor. Ze zijn belichaamd met door de gebruiker programmeerbare registers die temperatuurdetectietoepassingen vergemakkelijken. Deze sensor is geschikt voor een zeer geavanceerd multi-zone temperatuurbewakingssysteem.In d
Versnellingsmeting met BMA250 en Particle Photon: 4 stappen
Versnellingsmeting met behulp van BMA250 en Particle Photon: BMA250 is een kleine, dunne, ultralaag vermogen, 3-assige versnellingsmeter met hoge resolutie (13-bits) meting tot ±16 g. Digitale uitvoergegevens zijn geformatteerd als 16-bits tweetallen en zijn toegankelijk via de digitale I2C-interface. Het meet de statische