vineri, 7 noiembrie 2014

Modul de afisare cu 8 cifre LED din 7 segmente fiecare controlate de MAX7219

   Am achizitionat de pe Banggood.com un modul de afisare cu 8 cifre LED din 7 segmente fiecare, care sunt comandate de integratul MAX7219.
   MAX7219 poate controla 64 de LED-uri, cum e cazul acestor 8 cifre din 7 segmente + punctul zecimal la fiecare sau o matrice de 8x8 LED-uri.
   In acel articol sunt prezentate niste scurte exemple, in care se utilizeaza libraria LedControl.h si din comenzile de acolo am facut schema:
   Am incercat si eu sketch-urile din articol si din exemplu, modificand unul pentru a afisa cum vreau sa afisez pentru o viitoare statie meteo cu ceas:
si un anume text:
 
   Sketch-ul folosit de mine este:
// adapted sketch by niq_ro from http://www.tehnic.go.ro
// http://nicuflorica.blogspot.ro/
// http://arduinotehniq.blogspot.com/

// orginal sketch from http://embedded-lab.com/blog/?p=6862
#include "LedControl.h" 
/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,1);

void setup()
{
// Initialize MAX7219 device
lc.shutdown(0,false); // Enable display 
lc.setIntensity(0,15); // Set brightness level (0 is min, 15 is max) 
lc.clearDisplay(0); // Clear display register 
//} 
}

void loop()
{

// test afisare un anumit text
lc.clearDisplay(0); // Clear display register 
lc.setDigit(0,7,2, false); // afisez un 2 pe prima coloana din stanga (coloane 7)
lc.setDigit(0,6,5, true); // afisez un 5 pe coloana 6 si un punct zecimal
lc.setDigit(0,5,4, false); // afisez un 4 pe coloana 5
lc.setRow(0,4,B1001110);
lc.setDigit(0,2,3, false); // afisez un 5 pe coloana 2
lc.setDigit(0,1,7, false); // afisez un 0 pe coloana 1
lc.setRow(0,0,B0110111);

delay(3000);

// fac alt text
lc.clearDisplay(0); // Clear display register 
lc.setDigit(0,7,1, false); // afisez un 1 pe prima coloana din stanga (coloane 7)
lc.setDigit(0,6,2, false); // afisez un 2 pe coloana 6 si un punct zecimal
lc.setRow(0,5,B00000001);
lc.setDigit(0,4,4, false); // afisez un "4" pe coloana 4
lc.setDigit(0,3,2, false); // afisez un "2" pe coloana 3
lc.setRow(0,2,B00000001);
lc.setDigit(0,1,3, false); // afisez un 3 pe coloana 1
lc.setDigit(0,0,6, false); // afisez un 6 pe prima coloana din dreapta, pe coloana 0

delay(3000);

// fac inca un text
lc.clearDisplay(0); // Clear display register 
lc.setRow(0,6,B01100010); // "n" sus 
lc.setRow(0,5,B00100000); // "i" sus 
lc.setRow(0,4,B01110011); // "q" sus 
lc.setRow(0,3,B00000001); // bara la mijloc 
lc.setRow(0,2,B01000010); // "r" sus 
lc.setRow(0,1,B01100011); // "o" sus

delay(3000);
}
   Am facut un film cu testele, numit
test afisaj 8 cifre LED cu 7 segmente fiecare si Arduino, cu un scketch putin modificat:
   Am conectat un senzor DHT11:
   Initial, am lasat sa masoare la 10 secunde:
dar apar variatii bruste de temperaturi: 24, 25 sau 260C, care ma deranjeaza.
    Sketch-ul scris de mine, din combinarea altora, care folosesc librariile LedControl.h si DHT.h este:
// adapted sketch by niq_ro from http://arduinotehniq.blogspot.com
// and http://nicuflorica.blogspot.ro
// version 1.0 in 6.11.2014, Craiova - Romanaia

// source for LEDControl: http://embedded-lab.com/blog/?p=6862
#include "LedControl.h" 
/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,1);

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 7     // what pin we're connected to D7
// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// if is just sensor:
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

// decralaration for type of value
int t, h;

void setup()
{
// Initialize MAX7219 device
lc.shutdown(0,false); // Enable display 
lc.setIntensity(0,11); // Set brightness level (0 is min, 15 is max) 
lc.clearDisplay(0); // Clear display register 
 
// Initialize HTD sensor
dht.begin();
}

void loop()
{
 // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
h = dht.readHumidity();
t = dht.readTemperature();
  
/* test part  
// test humidity value
h = 37;
// test temperature value
t = 19;
*/

// 
temperatura (t);
umiditate (h);
delay(10000);
}


void umiditate (int umidit)
{
int zu = int(umidit/10); // determin cifra zecilor
int uu = umidit - 10*zu; // determin cifra unitatilor
  
lc.setDigit(0,2,zu, false); // afisez un 5 pe coloana 2
lc.setDigit(0,1,uu, false); // afisez un 0 pe coloana 1
lc.setRow(0,0,B0110111);  // afisez litera "H"
}


void temperatura (int temper)
{
int zt = int(temper/10); // determin cifra zecilor
int ut = temper - 10*zt; // determin cifra unitatilor
  
lc.setDigit(0,7,zt, false); // afisez un 5 pe coloana 7
lc.setDigit(0,6,ut, false); // afisez un 0 pe coloana 1
lc.setRow(0,5,B1100011); // afisez un semn de grad pe coloana 5
lc.setRow(0,4,B1001110); // afisez un C pe coloana 4
}
   Apoi am facut o medie de 9 masuratori si a ultimei temperaturi afisate, fiecare masuratoare fiind la 2 secunde, obtinand ceva mai aproape de adevar:

   Sketch-ul adaptat si scris de mine este:
// adapted sketch by niq_ro from http://arduinotehniq.blogspot.com
// and http://nicuflorica.blogspot.ro
// version 1.2 in 6.11.2014, Craiova - Romania

// source for LEDControl: http://embedded-lab.com/blog/?p=6862
#include "LedControl.h" 
/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,11,10,1);

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 7     // what pin we're connected to D7
// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// if is just sensor:
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

// decralaration for type of value
int t, h; 
float tmed;
int tmed1; 

void setup()
{
// Initialize MAX7219 device
lc.shutdown(0,false); // Enable display 
lc.setIntensity(0,11); // Set brightness level (0 is min, 15 is max) 
lc.clearDisplay(0); // Clear display register 
 
// Initialize HTD sensor
dht.begin();

// inital value for tmperature
tmed = 200;
}

void loop()
{
 // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
h = dht.readHumidity();

tmed = tmed/10;
for(int i = 9 ; i >0  ; i--) {
t = dht.readTemperature();
tmed = tmed + t;
delay(2000);
}
tmed1 = tmed;  // valoarea de inmultita cu zere pentru usurinta afisarii

/* test part  
// test humidity value
h = 37;
// test temperature value
t = 19;
*/

// 
temperatura (tmed1);
umiditate (h);
delay(1000);
}


void umiditate (int umidit)
{
int zu = int(umidit/10); // determin cifra zecilor
int uu = umidit - 10*zu; // determin cifra unitatilor
 
lc.setDigit(0,2,zu, false); // afisez un 5 pe coloana 2
lc.setDigit(0,1,uu, false); // afisez un 0 pe coloana 1
lc.setRow(0,0,B0110111);  // afisez litera "H"
}


void temperatura (int temper)
{
int st = int(temper/100); // determin cifra sutelor
temper = temper - 100*st; // restul numarului de la zeci si unitati 
int zt = int(temper/10); // determin cifra zecilor
int ut = temper - 10*zt; // determin cifra unitatilor
  
lc.setDigit(0,7,st, false); // afisez un 5 pe coloana 7
lc.setDigit(0,6,zt, true); // afisez un 0 pe coloana 1 si virgula
lc.setDigit(0,5,ut, false); // afisez un 5 pe coloana 7
//lc.setRow(0,5,B1100011); // afisez un semn de grad pe coloana 5
lc.setRow(0,4,B1001110); // afisez un C pe coloana 4
}
   Am facut si un filmulet cu cele 2 variante de prezentare, numit temperatura si umiditate de la un DHT11 pe afisaj cu 8 cifre din 7 segmente LED:
   Am in plan si alte experimente, cu conectarea unui modul RTC (ceas de timp real), cu senzorul de umiditate si temperatura DHT22, etc...

vineri, 17 octombrie 2014

Ceas RTC cu DS1307 si date mediu cu DHT22 pe afisaj alfanumeric LCD1602 folosind Arduino

   In septembrie, am postat articolul Ceas RTC cu DS1307 si date mediu cu DHT11 pe afisaj alfanumeric LCD1602 folosind Arduino si 
dupa cum spune si titlul, am inlocuit senzorul DHT11 cu DHT22 (AM2302), care este mult mai performant si are domeniul de masura mai larg (precizie +0,50C si +2 unitati umiditate, domeniul de masura este de -40..+800C si 0..100% umiditate).
   Ca si in cazul senzorului DHT11, mai raspandit (fiind mai ieftin), senzorul DHT22 (sau AM2302) se vinde ca modul cu 3 pini, sau ca piesa cu 4 pini, evident ca varianta ca poiesa e mai ieftina, necesitand o rezistenta de 4k7 conectata intre iesire (OUT/DATA) si (VDD/5V).
   Pentru informatii suplimentare recomand articolul DHTxx Sensors postat pe site-ul Adafruit.
DHT11 / DHT22
   Deoarece ministatia meteo cu ceas, varianta propusa de Janos, mi s-a parut ok, am refacut schema partial (practic nu am mai pus cele trei butoane fara retinere pentru reglare ore si minute).
   Daca aveti modulul cu 3 pini, schema de conectare este identica:
iar daca este doar senzorul (inscriptionat AM2302) schema devine:
   Practic, montajul arata asa, iar pe ecran informatiile sunt prezentate astfel (am schimbat 3 afisaje, care cu fundal rosu, albastru si galben):
   Sketch-ul adaptat, pentru a indica si temperaturi negative, este:
// Date and time functions using a DS1307 RTC 
// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/
// add part with SQW=1Hz from http://tronixstuff.wordpress.com/ & http://www.bristolwatch.com/arduino/arduino_ds1307.htm
// DHT library from https://github.com/adafruit/DHT-sensor-library
// adapted sketch by niq_ro from http://nicuflorica.blogspot.ro/
// original article from http://nicuflorica.blogspot.ro/2013/06/ceas-de-timp-real-rtc-cu-ds1307-si.html
// adapted sketch drom http://nicuflorica.blogspot.ro/2014/09/ceas-rtc-cu-ds1307-si-date-mediu-cu.html

#include <Wire.h>
#include "RTClib.h"

// 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   |
                                      -------------------
*/
// http://arduino.cc/en/Reference/LiquidCrystalCreateChar
byte grad[8] = {
  B01100,
  B10010,
  B10010,
  B01100,
  B00000,
  B00000,
  B00000,
};

RTC_DS1307 RTC;

#include <DHT.h>
#define DHTPIN 8     // what pin we're connected DHT11/22
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22

DHT dht(DHTPIN, DHTTYPE);

byte SW0 = A0;
byte SW1 = A1;
byte SW2 = A2;

// use for hexa in zecimal conversion
int zh, uh, ore;
int zm, um, miniti;

// 
float t1;

void setup () {
  // DHT init
  dht.begin();
  // create custom symbol
  lcd.createChar(0, grad);
  // set up the LCD's number of columns and rows: 
  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 a logo message to the LCD.
  lcd.print("ministatie meteo");  
  lcd.setCursor(0, 1);
  lcd.print("cu DHT22 ver.1.0");
  delay (2500);
  lcd.clear();
   // Serial.begin(9600);
    Wire.begin();
  
// part code from http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
// end part code from http://tronixstuff.wordpress.com/

    RTC.begin();
  if (! RTC.isrunning()) {
    //Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  pinMode(SW0, INPUT);  // for this use a slide switch
  pinMode(SW1, INPUT);  // N.O. push button switch
  pinMode(SW2, INPUT);  // N.O. push button switch

  digitalWrite(SW0, HIGH); // pull-ups on
  digitalWrite(SW1, HIGH);
  digitalWrite(SW2, HIGH);

}

void loop () {
   DateTime now = RTC.now();
  int h = dht.readHumidity();

  float t = dht.readTemperature();
// float t = 23.56;
//float t = 7.32;
//float t = 0.01;
//float t = 0;
//float t = -0.02;
//float t = -6.45;
//float t=-13.25;


   lcd.setCursor(4, 0);
   if ( now.hour() < 10)
   {
     lcd.print(" "); 
     lcd.print(now.hour(), DEC);
   }
   else
   {
   lcd.print(now.hour(), DEC);
   }
   lcd.print(":");
   if ( now.minute() < 10)
   {
     lcd.print("0"); 
     lcd.print(now.minute(), DEC);
   }
   else
   {
   lcd.print(now.minute(), DEC);
   }
   lcd.print(":");
   if ( now.second() < 10)
   {
     lcd.print("0"); 
     lcd.print(now.second(), DEC);
   }
   else
   {
   lcd.print(now.second(), DEC);
   }
     lcd.print(" "); 
 
  lcd.setCursor(0, 1);
  // lcd.print("t=");
 if (t < 0) 
 {t1=-t;}
 else t1=t;
  
    if ( t1 < 10)
   {
     lcd.print(" "); 
   }
   if (t>0) lcd.print("+"); 
   if (t==0) lcd.print(" "); 
   if (t<0) lcd.print("-");
   lcd.print(t1,1);
   //lcd.print(",0");
//   lcd.write(0b11011111);
   lcd.write(byte(0));
   lcd.print("C  ");
    

   lcd.setCursor(10, 1);
  // lcd.print("H=");
   lcd.print(h);
   lcd.print("%RH");
 
   if (!(digitalRead(SW0))) set_time(); // hold the switch to set time

 
   delay(500);
}

void set_time()   {
  byte minutes1 = 0;
  byte hours1 = 0;
  byte minutes = 0;
  byte hours = 0;

  while (!digitalRead(SW0))  // set time switch must be released to exit
  {
    minutes1=minutes;
    hours1=hours;
    
     
    while (!digitalRead(SW1)) // set minutes
    { 
     minutes++;  
   // converting hexa in zecimal:
    zh = hours / 16;
    uh = hours - 16 * zh ;
    ore = 10 * zh + uh; 
    zm = minutes / 16;
    um = minutes - 16 * zm ;
    miniti = 10 * zm + um; 
  
  /*  
     for(int i = 20 ; i >0  ; i--) {
     displayNumber01(ore*100+miniti); 
     }
   */
   lcd.setCursor(4, 0);
   if ( ore < 10)
   {
     lcd.print(" "); 
     lcd.print(ore);
   }
   else
   {
   lcd.print(ore);
   }
   lcd.print(":");
   if ( miniti < 10)
   {
     lcd.print("0"); 
     lcd.print(miniti);
   }
   else
   {
   lcd.print(miniti);
   }
   lcd.print(":");
   lcd.print("00"); 
      
      if ((minutes & 0x0f) > 9) minutes = minutes + 6;
      if (minutes > 0x59) minutes = 0;
      Serial.print("Minutes = ");
      if (minutes >= 9) Serial.print("0");
      Serial.println(minutes, HEX);
    delay(150);    
    }

    while (!digitalRead(SW2)) // set hours
    { 
     hours++;          
     
   // converting hexa in zecimal:
    zh = hours / 16;
    uh = hours - 16 * zh ;
    ore = 10 * zh + uh; 
    zm = minutes / 16;
    um = minutes - 16 * zm ;
    miniti = 10 * zm + um; 
    
   /*
     for(int i = 20 ; i >0  ; i--) {
     displayNumber01(ore*100+miniti); 
     }
   */
   lcd.setCursor(4, 0);
   if ( ore < 10)
   {
     lcd.print(" "); 
     lcd.print(ore);
   }
   else
   {
   lcd.print(ore);
   }
   lcd.print(":");
   if ( miniti < 10)
   {
     lcd.print("0"); 
     lcd.print(miniti);
   }
   else
   {
   lcd.print(miniti);
   }
   lcd.print(":");
   lcd.print("00");
      
      if ((hours & 0x0f) > 9) hours =  hours + 6;
      if (hours > 0x23) hours = 0;
      Serial.print("Hours = ");
      if (hours <= 9) Serial.print("0");
      Serial.println(hours, HEX);
    delay(150);
    }

    Wire.beginTransmission(0x68); // activate DS1307
    Wire.write(0); // where to begin
    Wire.write(0x00);          //seconds
    Wire.write(minutes);          //minutes
    Wire.write(0x80 | hours);    //hours (24hr time)
    Wire.write(0x06);  // Day 01-07
    Wire.write(0x01);  // Date 0-31
    Wire.write(0x05);  // month 0-12
    Wire.write(0x09);  // Year 00-99
    Wire.write(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7. 
    Wire.endTransmission();
  
    // converting hexa in zecimal:
    zh = hours / 16;
    uh = hours - 16 * zh ;
    ore = 10 * zh + uh; 
    zm = minutes / 16;
    um = minutes - 16 * zm ;
    miniti = 10 * zm + um; 
    
   /*  for(int i = 20 ; i >0  ; i--) {
     displayNumber01(ore*100+miniti); 
     }
 //  delay(150);
    */

   lcd.setCursor(4, 0);
   if ( ore < 10)
   {
     lcd.print(" "); 
     lcd.print(ore);
   }
   else
   {
   lcd.print(ore);
   }
   lcd.print(":");
   if ( miniti < 10)
   {
     lcd.print("0"); 
     lcd.print(miniti);
   }
   else
   {
   lcd.print(miniti);
   }
   lcd.print(":");
   lcd.print("00");
}
}
   In filmuletul numit ministatie meteo cu DHT22 si ceas cu DS1307 am prezentat aceasta ministatie meteo c senzorul DHT22, partea de ceas este fara butoanele de reglaj:

miercuri, 15 octombrie 2014

Senzorul de presiune BMP180

English version: BMP180 sensor and Arduino

   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:
// 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);
}
   Am realizat un mic filmulet numit senzorul BMP180 si Arduino:
   Am folosit acest senzor intr-un proiect mai amplu, o ministatie meteo cu Arduino Due si un afisaj grafic color de 2,2" cu driver ILI9341. Acest proiect a fost prezentat detaliat in articolul Arduino Due si afisajul QVGA de 2,2" (5,6cm) comandat de ILI9341.
   Revenind la senzor si placa Arduino Uno, am zis ca e mai util sa afisez informatiile pe un ecran alfanumeric 1602, de genul:
asa ca am facut un filmulet numit senzorul BMP180 si Arduino (2)
   Sketch-ul scris de mine, arata asa:
// 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: