Sommario:
- Passaggio 1: ciò di cui hai bisogno.
- Passaggio 2: connessioni:
- Passaggio 3: codice:
- Passaggio 4: applicazioni:
Video: Arduino Nano - Tutorial sensore altimetro di precisione MPL3115A2: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
L'MPL3115A2 utilizza un sensore di pressione MEMS con un'interfaccia I2C per fornire dati precisi su pressione/altitudine e temperatura. Le uscite del sensore sono digitalizzate da un ADC a 24 bit ad alta risoluzione. L'elaborazione interna rimuove le attività di compensazione dal sistema MCU host. È in grado di rilevare un cambiamento di soli 0,05 kPa, che equivale a un cambiamento di altitudine di 0,3 m. Ecco la sua dimostrazione con Arduino Nano.
Passaggio 1: ciò di cui hai bisogno.
1. Arduino Nano
2. MPL3115A2
3. Cavo I²C
4. Scudo I²C per Arduino Nano
Passaggio 2: connessioni:
Prendi uno shield I2C per Arduino Nano e spingilo delicatamente sui pin di Nano.
Quindi collegare un'estremità del cavo I2C al sensore MPL3115A2 e l'altra estremità allo schermo I2C.
I collegamenti sono mostrati nell'immagine sopra.
Passaggio 3: codice:
Il codice arduino per MPL3115A2 può essere scaricato dal nostro repository github-DCUBE Store.
Ecco il link per lo stesso:
github.com/DcubeTechVentures/MPL3115A2/blob/master/Arduino/MPL3115A2.ino
Includiamo la libreria Wire.h per facilitare la comunicazione I2c del sensore con la scheda Arduino.
Puoi anche copiare il codice da qui, è fornito come segue:
// Distribuito con una licenza libera.
// Usalo come vuoi, a scopo di lucro o gratuito, a condizione che rientri nelle licenze delle opere associate.
//MPL3115A2
// Questo codice è progettato per funzionare con il Mini Modulo MPL3115A2_I2CS I2C
#includere
// L'indirizzo I2C MPL3115A2 è 0x60(96)
#define Indirizzo 0x60
configurazione nulla()
{
// Inizializza la comunicazione I2C
Wire.begin();
// Inizializza la comunicazione seriale, imposta la velocità di trasmissione = 9600
Serial.begin(9600);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità altimetro
Wire.write(0xB9);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di configurazione dei dati
Wire.write(0x13);
// Evento Data Ready abilitato per altitudine, pressione, temperatura
Wire.write(0x07);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(300);
}
ciclo vuoto()
{
dati int non firmati[6];
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità altimetro
Wire.write(0xB9);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(1000);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona registro dati
Wire.write(0x00);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Richiedi 6 byte di dati
Wire.requestFrom(Addr, 6);
// Legge 6 byte di dati dall'indirizzo 0x00(00)
// stato, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
if (Filo.disponibile() == 6)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
data[4] = Wire.read();
data[5] = Wire.read();
}
// Converti i dati a 20 bit
int tHeight = (((long)(data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16);
int temp = ((data[4] * 256) + (data[5] & 0xF0)) / 16;
altitudine float = tHeight / 16,0;
float cTemp = (temp / 16.0);
float fTemp = cTemp * 1,8 + 32;
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona il registro di controllo
Wire.write(0x26);
// Modalità attiva, OSR = 128, modalità barometro
Wire.write(0x39);
// Interrompe la trasmissione I2C
Wire.endTransmission();
ritardo(1000);
// Avvia la trasmissione I2C
Wire.beginTransmission(Addr);
// Seleziona registro dati
Wire.write(0x00);
// Interrompe la trasmissione I2C
Wire.endTransmission();
// Richiedi 4 byte di dati
Wire.requestFrom(Addr, 4);
// Legge 4 byte di dati
// stato, pres msb1, pres msb, pres lsb
if (Filo.disponibile() == 4)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
}
// Converti i dati a 20 bit
long pres = (((long)data[1] * (long)65536) + (data[2] * 256) + (data[3] & 0xF0)) / 16;
pressione galleggiante = (pres / 4.0) / 1000.0;
// Invia i dati al monitor seriale
Serial.print("Altitudine: ");
Serial.print(altitudine);
Serial.println("m");
Serial.print("Pressione: ");
Serial.print(pressione);
Serial.println("kPa");
Serial.print("Temperatura in gradi Celsius: ");
Serial.print(cTemp);
Serial.println("C");
Serial.print("Temperatura in Fahrenheit: ");
Serial.print(fTemp);
Serial.println("F");
ritardo (500);
}
Passaggio 4: applicazioni:
Varie applicazioni di MPL3115A2 includono altimetria ad alta precisione, smartphone/tablet, altimetria elettronica personale ecc. Può anche essere incorporata in GPS Dead Reckoning, GPS Enhancement per servizi di emergenza, Map Assist, navigazione e apparecchiature per stazioni meteorologiche.
Consigliato:
Pingo: un lanciatore di palline da ping pong con rilevamento del movimento e alta precisione: 8 passaggi
Pingo: un lanciatore di palline da ping pong con rilevamento del movimento e alta precisione: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
DropArt - Collider fotografico di precisione a due gocce: 11 passaggi (con immagini)
DropArt - Collider fotografico di precisione a due gocce: ciao a tutti, in questo tutorial presento il mio progetto per un collisore a due gocce di liquido controllato da computer. Prima di iniziare con i dettagli del design, penso che abbia senso spiegare esattamente qual è lo scopo del design. Un divertente, interessante
Registrazione dati remota ad alta precisione tramite multimetro/Arduino/pfodApp: 10 passaggi (con immagini)
Registrazione dati remota ad alta precisione utilizzando Multimeter/Arduino/pfodApp: aggiornato il 26 aprile 2017 Circuito e scheda revisionati per l'uso con i misuratori USB 4000ZC. Nessuna codifica Android richiesta Questa istruzione mostra come accedere a un'ampia gamma di misurazioni ad alta precisione dal tuo Arduino e anche inviarle in remoto per la registrazione e
Un esperimento di rettifica di precisione: 11 passaggi
Un esperimento di rettifica di precisione: di recente ho fatto un esperimento su un circuito di rettifica di precisione e ho tratto alcune conclusioni approssimative. Considerando che il circuito raddrizzatore di precisione è un circuito comune, i risultati di questo esperimento possono fornire alcune informazioni di riferimento. L'e
Arduino: Lib di precisione per motore passo-passo: 19 passaggi
Arduino: Precision Lib per motore passo-passo: oggi ti mostrerò una libreria per un driver per motore passo-passo completo con finecorsa e movimento del motore con accelerazione e micro passo. Questo Lib, che funziona sia su Arduino Uno che su Arduino Mega, ti consente di spostare i motori in base non solo