MPS20N0040D
Pressure sensor

ultimo aggiornamento 14 ottobre 2018


 

Indice

Descrizione

Il piccolo modulo illustrato in questa pagina è un sensore di pressione MPS20N0040D-D, con un intervallo di misurazione di 0-5,8 psi (0-40kPa). L'unità psi è una misura imperiale che corrisponde a libbre per pollice quadrato.

homotix

PCBA

OurPCB

MPS20N0040D-S Pressure Sensor
Piedinatura Datasheet Foto

L'unità creata per l'uso nella misurazione del peso delle merci (solidi), è tuttavia applicata anche per la misura di pressione sia di gas che di liquido.
L'unità psi può comunque convertita in un'unità del sistema SI come il Pascal, per cui avremmo

1 psi (libbra per pollice quadrato) uguale a circa 6894,76 Pascal

Internamente il sensore è formato da un ponte di Wheatstone, concepito da uno scienziato e ingegnere britannico - Samuel Hunter Christie nel 1833 e migliorato da Sir Charles Wheatstone che lo rese famoso.
La pressione applicata modifica il valore delle resistenze per cui applicando una tensione di 5V in uscita avremo un segnale pari a 0-25 mV.
Questo segnale è molto piccolo e misurandolo direttamente per esempio tramite un ingresso analogico di un microcontrollore non misureremmo molto a meno che la pressione fosse a fondo scala, ma anche in questo caso non darebbe valori accettabili.

Per questo motivo è necessario amplificare l'uscita del sensore di pressione per registrare correttamente il segnale del sensore. In questo modo otteniamo più sensibilità e risoluzione - in breve un dispositivo di misurazione migliore.
Per questo motivo sul modulo viene utilizzato un convertitore analogico-digitale (ADC) tipo HX710B brevettato da Avia Semiconductor, con una precisione a 24 bit, l'integrato è stato progettato per bilance e controllo industriale in cui sia richiesto di interfacciarsi direttamente con un sensore bridge.

É possibile trovare il modulo presso

 

ESEMPIO DI COLLEGAMENTO DEL CIRCUITO

L'amplificatore a basso rumore (PGA) in ingresso ha un guadagno fisso di 128, corrispondente a fondo scala, la tensione d'ingresso differenziale e di ± 20mV, quando 5V di tensione di riferimento è collegata al pin VREF, comunque il convertitore funziona nel campo di alimentazione 2.6 ~ 5.5V.

 

HX710B - 24-Bit ADC with (DVDD-AVDD) Voltage Difference Detection
Piedinatura Datasheet (Cinese) - Datasheet (Inglese) Foto

L'oscillatore su chip fornisce il clock di sistema senza alcun componente esterno. I circuiti On-chip power on-reset semplifica l'interfaccia digitale. Non c'è bisogno di programmazione per i registri interni.

Specifiche tecniche

Foto del modulo

 

 

 

Libreria di gestione

Per l'utilizzo del sensore è possibile utilizzare una libreria realizzata per l'integrato HX711 che è simile al modello HX710 condividendo il sistema d'interfacciamento. La libreria può essere scaricata ricercandola con l'apposita funzione dell'IDE.
Con l'utilizzo della libreria, il pin SCK deve essere collegato al pin #A0, mentre il pin OUT al pin #A1

Esempio di collegamento

Per testare il,sensore occorre predisporre il circuito visibile sotto.

Per creare una fonte di pressione sul sensore si sono utilizzati alcuni componenti LEGO TECNIC in particolare : 1 Technic Pneumatic Cylinder, 1 Technic Pneumatic Switch e due spezzoni lunghi 7cm di Technic Pneumatic Tubing.

 

Per la visualizzazione dei valori letti dal sensore si è utilizzato un display OLED che ha una diagonale di 0.95", una risoluzione di 96x64 pixel, 65536 Colori ed è basato sul driver SSD1331 è dotato di interfaccia di comando SPI e può essere alimentato con una tensione compresa tra i 3.3V - 5V.
Per atre informazioni vedere questa pagina.

Ora si dovrà collegare la scheda Arduino UNO al PC e compilare il programma (scaricabile da questo link) nella memoria dell'Arduino che lo eseguirà.
Il programma fornisce per il momento dei valori non corretti in quanto deve essere tarato mediante valori campione, ha il solo compito di verificare la funzionalità.
I valori positivi rappresentano valori di pressione positivi, quelli negativi una depressione sul sensore.

/*####################################################################
  FILE: test_modulo_MPS20N0040D.ino
  VERSION: 1.0
  Descrizione: Programma per test modulo
  sensore di pressione tipo MPS20N0040D 

  Creato il 14/10/2018 da Adriano Gandolfo
  Sito web http://www.adrirobot.it
  Blog http://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
  #################################################################### */

// Definizione dei pin di collegamento display OLED
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8

#include "HX711.h" // libreria gestione convertitore analogico-digitale

// Definizione dei colori
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>

Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);
HX711 scale;

void setup() {
  Serial.begin(9600);
  display.begin();

  // Messaggio iniziale
  display.fillScreen(BLACK);
  display.setTextSize(1);
  display.setTextColor(BLUE);
  display.setCursor(0, 0);
  display.println(" ADRIROBOT");
  display.setTextColor(GREEN);
  display.println("   TEST  ");
  display.println(" PRESSURE ");
  display.println("  SENSOR  ");
  delay(2000);
  display.setTextColor(MAGENTA);

  Serial.println("HX711 Demo");

  Serial.println("Inizializzazione della scala");
  scale.begin(A1, A0);

  Serial.println("Prima si impostare la scala:");
  Serial.print("Lettura: \t\t");
  Serial.println(scale.read());			// stampa della lettura non elaborata dall'ADC

  Serial.print("Lettura della media \t\t");
  Serial.println(scale.read_average(20));  	// stampa la media di 20 letture dall'ADC

  Serial.print("Ottiene il valore: \t\t");
  Serial.println(scale.get_value(5));
 // stampa la media di 5 letture dall'ADC meno il peso della tara (non ancora impostato)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);
// print the average of 5 readings from the ADC minus tare weight (not set) divided
// by the SCALE parameter (not set yet)

  scale.set_scale(2280.f);
// this value is obtained by calibrating the scale with
// known weights; see the README for details
  scale.tare(); // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());
// print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));
// print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));
// print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);
// print the average of 5 readings from the ADC minus tare weight, divided
  // by the SCALE parameter set with set_scale

  Serial.println("Lettura:");
}

void loop() {
  display.fillRect(0, 35, 64, 15, BLACK);
  display.setCursor(0, 35);
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  display.print(scale.get_units(), 1);
  scale.power_down();	// mette l'ADC in modalità sleep
  delay(500);
  scale.power_up();
}

 
Elenco revisioni:

14/10/2018

Inserimento programma di test

02/09/2018

Inserimento riferimento libreria Arduino

30/08/2018

Emissione preliminare

Private Policy Cookie Policy Termini e Condizioni