Cu ceva timp in urma, am cumparat de pe ebay un modul GY-68 cu senzor de presiunea BMP180, despre care trebuie sa stim, in primul rand ca tensiunea de alimentare maxima este de 3,6V, deci putem sa-l alimentam de la placa Arduino din pinul notat 3.3V sau 3V (depinde de producatorul placii); mai trebuie sa stim ca modulul se conecteaza prin 2 fire (comunicare i2c).
Pe langa informatii despre presiune, senzorul masoara si temperatura cu o precizie de +10C.
Schema de conectare este simpla, cum este prezentat in articolul BMP180 Barometric Pressure Sensor Hookup:
Schema de conexiuni realizata de mine este:
Pentru a-l putea folosi, am folosit libraria Adafruit-BMP085, obtinand pe ecranul de monitorizare seriala:
Am modificat sketch-ul pentru informatii in romana si a-mi da si alte date:
Sketch-ul modificat este:
Am realizat un mic filmulet numit senzorul BMP180 si Arduino://
http://nicuflorica.blogspot.ro & http://arduinotehniq.blogspot.com
// https://github.com/adafruit/Adafruit-BMP085-Library #include <Wire.h> #include <Adafruit_BMP085.h> /*************************************************** This is an example for the BMP085 Barometric Pressure & Temp Sensor Designed specifically to work with the Adafruit BMP085 Breakout ----> https://www.adafruit.com/products/391 These displays use I2C to communicate, 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ // Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!) // Connect GND to Ground // Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5 // Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4 // EOC is not used, it signifies an end of conversion // XCLR is a reset pin, also not used here Adafruit_BMP085 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("nu exita senzor compatibil BMP085 sau BMP180"); while (1) {} } } void loop() { Serial.print("Temperatura = "); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print("Presiune = "); Serial.print(bmp.readPressure()); Serial.print(" Pa / "); // Serial.print("Presiune = "); float presiune1 = bmp.readPressure()/101.325; presiune1 = presiune1 * 0.760; Serial.print(presiune1); Serial.println(" mmHg"); // Calculate altitude assuming 'standard' barometric // pressure of 1013.25 millibar = 101325 Pascal Serial.print("Altitudine = "); Serial.print(bmp.readAltitude()); Serial.println(" m"); Serial.print("Presiune la nivelul marii (calculata) = "); Serial.print(bmp.readSealevelPressure()); Serial.print(" Pa / "); // http://en.wikipedia.org/wiki/Atmospheric_pressure#Mean_sea_level_pressure // Serial.print("Presiure la nivelul marii (calculata) = "); float presiune = bmp.readSealevelPressure()/101.325; presiune = presiune * 0.760; Serial.print(presiune); Serial.println(" mmHg"); // you can get a more precise measurement of altitude // if you know the current sea level pressure which will // vary with weather and such. If it is 1015 millibars // that is equal to 101500 Pascals. Serial.print("Altitudine reala = "); Serial.print(bmp.readAltitude(101500)); Serial.println(" m"); Serial.println(); delay(2500); }
asa ca am facut un filmulet numit senzorul BMP180 si Arduino (2)
// adapted sketch by niq_ro from http://nicuflorica.blogspot.ro/ & http://arduinotehniq.blogspot.com/
// https://github.com/adafruit/Adafruit-BMP085-Library
#include <Wire.h>
#include <Adafruit_BMP085.h>
/***************************************************
This is an example for the BMP085 Barometric Pressure & Temp Sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> https://www.adafruit.com/products/391
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
/* -------------------
| LCD | Arduino |
-------------------
LCD RS pin to digital pin 7 | RS | D7 |
LCD Enable pin to digital pin 6 | E | D6 |
LCD D4 pin to digital pin 5 | D4 | D6 |
LCD D5 pin to digital pin 4 | D5 | D4 |
LCD D6 pin to digital pin 3 | D6 | D3 |
LCD D7 pin to digital pin 2 | D7 | D2 |
LCD R/W pin to ground | R/W | GND |
-------------------
*/
Adafruit_BMP085 bmp;
void setup() {
lcd.begin(16, 2);
// Print a logo message to the LCD.
lcd.print("www.tehnic.go.ro");
lcd.setCursor(0, 1);
lcd.print("creat de niq_ro");
delay (2500);
lcd.clear();
// Print another message to the LCD.
lcd.setCursor(2, 0);
lcd.print("termometru -");
lcd.setCursor(0, 1);
lcd.print("barometru ver1.0");
delay (2500);
lcd.clear();
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("nu exita senzor compatibil BMP085 sau BMP180");
while (1) {}
}
}
void loop() {
Serial.print("Temperatura = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Presiune = ");
Serial.print(bmp.readPressure());
Serial.print(" Pa / ");
// Serial.print("Presiune = ");
float presiune1 = bmp.readPressure()/101.325;
presiune1 = presiune1 * 0.760;
Serial.print(presiune1);
Serial.println(" mmHg");
// Calculate altitude assuming 'standard' barometric
// pressure of 1013.25 millibar = 101325 Pascal
Serial.print("Altitudine = ");
Serial.print(bmp.readAltitude());
Serial.println(" m");
Serial.print("Presiune la nivelul marii (calculata) = ");
Serial.print(bmp.readSealevelPressure());
Serial.print(" Pa / ");
// http://en.wikipedia.org/wiki/Atmospheric_pressure#Mean_sea_level_pressure
// Serial.print("Presiure la nivelul marii (calculata) = ");
float presiune = bmp.readSealevelPressure()/101.325;
presiune = presiune * 0.760;
Serial.print(presiune);
Serial.println(" mmHg");
// you can get a more precise measurement of altitude
// if you know the current sea level pressure which will
// vary with weather and such. If it is 1015 millibars
// that is equal to 101500 Pascals.
Serial.print("Altitudine reala = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" m");
Serial.println();
lcd.setCursor(1, 0);
lcd.print("temp.= ");
if ( bmp.readTemperature() < 10)
{
lcd.print(" ");
lcd.print(bmp.readTemperature());
}
else
{
lcd.print(bmp.readTemperature(),1);
}
lcd.write(0b11011111);
lcd.print("C ");
lcd.setCursor(1, 1);
lcd.print("pres.= p");
lcd.print(presiune,0);
lcd.print("mmHg ");
delay(2500);
}
iar schema este:24.11.2014
In weak-end am primit 3 poze de la Dave, un radioamator foarte cunoscut din West Cumbria, care are blog-ul http://g4rvh.wordpress.com/.
Dave si-a facut un shield facut la CNC prin frezare, dupa schema de mai sus.
Sketch-ul l-am modificat sa-i prezinte temperatura in grade Fahrenheit in loc de Celsius, dupa informatiile din articolul Conversion of Temperature:
si eu am testat un senzor de presiune 3,3 V si arduino alimentat la 5 V
RăspundețiȘtergeredar atentie conexiune I2C de 3,3 V ?
este ok arduino detecteaza automat nivelul de semnal pentru I2C dar daca mai adaugi un LCD alimentat la 5V nivelul I2C devine I2C de 5 V si prajesti senzorul de presiune
am testat cu rezistente de 330 ohmi sau 10K ohmi nu merge
din prudenta am folosit un Logic Level Convertor dar atentie la conexiuni am folosit doua tx -uri
cate ai prajit? asa de curiozitate?
ȘtergereSalut, care e sursa acestei scheme ? Are baterie sau e conectat la calculator ?
RăspundețiȘtergerenu foloesc baterii, era alimentat la experimente din usb, dar merge f. f. bine din alimentator sau baterie.... e vreo problema?
ȘtergereSalut, am cumparat toate piesele ,cu tot cu ecran 16x2, dar am o problema la incarcarcarea sketch-ului. Cand dau verify imi da urmatoarele erori:
RăspundețiȘtergereThis report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Uno"
sketch_dec07a:47: error: 'Adafruit_BMP085' does not name a type
sketch_dec07a.ino: In function 'void setup()':
sketch_dec07a:67: error: 'bmp' was not declared in this scope
sketch_dec07a.ino: In function 'void loop()':
sketch_dec07a:75: error: 'bmp' was not declared in this scope
Poti sa ma ajuti cu rezolvarea lor , te rog !?
Multumesc!
lipseste libraria pt senzoril BMP, se descarca din link-ul din linia a doua a sketch-ului
RăspundețiȘtergereStima
ȘtergereNu inteleg cum sa conectez LCD-ul la arduiono. LCD-ul achizitionat de mine are doar cei 16 pini, fara adaptor i2c. Dispun doar de fire.. Pot conecta acesata doar conectand pinii la arduino,fara adaptor i2c si fara placuta dinaia alba? Am incercat sa ma uit atent cum pleaca firele din arduino si unde intra mai exact la LCD-ul tau,dar nu se vede.. Schema cu siguranta e buna doar ca nu am destule cunostiinte sa o pun in praactica momentan. Stima
RăspundețiȘtergerein ultima schema ste exact un afisaj cu 16 fire, fara interfata i2c... nu se folosesc toti pinii, doar ce-i desenati acolo.. iti arat linkul direct al schemei: http://1.bp.blogspot.com/-eygUwqVy3h8/VD5xs5T2Q0I/AAAAAAAAMRA/Pim8Q5by-sI/s1600/arduino_bmp180_lcd1602_schematic.bmp
RăspundețiȘtergerePentru realizarea acestei scheme am nevoie obligatoriu de breadboard si cele 2 rezistente? Nu se poate lega direct firele din arduino la pinii ecranului, fara breadboard si fara rezistente ?
RăspundețiȘtergererezistenta R1 este pentru limitarea curentului, iar semirglabilul pentru contrast.. sunt obligatorii.. fire, cum sunt cele din cablul de retea, le poti lipi la afisaj si infigi in mufele de la placa Arduino, dar e de preferat breadboardul si fire ca la mine, ca se modfica usor schema...
Ștergeresalut ! se poate folosii adaptor I2C si BMP280 in locul lui BMP180 ?
RăspundețiȘtergeremultumesc !
dupa cum prezinta la https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout?view=all se poate lega direct si la i2c...
Ștergeresalut! dupa multa munca cu ajutorul colegului meu Catalin am reusit sa finalizez acest montaj cu bmp180 (initial am vrut sa-l fac cu bmp280 dar am reusit sa-l ,,prajesc"),l-am luat si l-am ,,amestecat" cu acesta : https://nicuflorica.blogspot.ro/2016/06/radio-fm-cu-tea5767-si-arduino-iii.html?showComment=1519120472828#c7352378451444097972 ...si a rezultat un radio cu o mini statie meteo totul afisat pe un LCD 20x4 !
RăspundețiȘtergereAcum ramane de vazut cat de precis arata datele(presiune,altitudine,temperatura),urmand sa vad daca le mai pot ajusta.
Multumiri domnului Nicu Florica pt programe !
salut! am realizat un montaj senzor de presiune cu MPX10DP si un amplificator de instrumentatie . cum se procedeaza pentru a primi semnal pozitiv pe vacum la iesirea amplificatorului (adica sa fie pozitiv si pe tras si pe impins). Va multumesc. costel1voicu@yahoo.com
RăspundețiȘtergereBuna seara! Am o problema, am facut montajul exact ca in scheme si cand bag sketch-ul nu-mi trece de partea cu recunoastrea senzorului. Nu-mi afiseaza temperatura, presiunea. Nu-mi dau seama unde este problema. Ma puteti ajuta?
RăspundețiȘtergereMultumesc!