Project Arduino
Voici le listing d’un petit logiciel qui m’occupe ces derniers jours… A la base c’etait pour tester un capteur de pression atmosphérique/température BMP280 et un petit écran OLED sur un microcontrôleur PIC en langage BASIC (sous ProtonIDE). Comme il existe des bibliothèques toutes prêtes sur Arduino j’ai utilisé un Arduino UNO et quelques fils sur une plaque d’essai pour mon montage. J’ai remarqué que la température était plus élevée de deux degrés que la valeur lue de mon thermomètre , j’ai aussi utilisé un capteur DS18B20 qui semble plus précis. Voici le listing du code et quelques photos du montage…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
/* * Arduino with SSD1306 OLED display (128x64 Pixel) and * BMP280 barometric pressure & temperature sensor. * Ajout capteur ds18B20 par Carlos Pires Serra */ #include <Wire.h> // include Arduino wire library (required for I2C devices) #include <Adafruit_SSD1306.h> // include Adafruit SSD1306 OLED display driver #include <Adafruit_BMP280.h> // include Adafruit BMP280 sensor library #include <OneWire.h> // bibliotheque OneWire #include <DS18B20.h> // bibliotheque DS18B20 #define OLED_RESET 4 // define display reset pin Adafruit_SSD1306 display(OLED_RESET); // initialize Adafruit display library // define device I2C address: 0x76 or 0x77 (0x77 is library default address) #define BMP280_I2C_ADDRESS 0x76 #define ONE_WIRE_BUS 2 // Pin D2 pour le bus onewire OneWire oneWire(ONE_WIRE_BUS); // initialisation des DS18B20 sensor(&oneWire); // bibliotheques Adafruit_BMP280 bmp280; // initialize Adafruit BMP280 library void setup(void) { delay(1000); // wait a second sensor.begin(); // Demarrage capteur ds18B20 // initialize the SSD1306 OLED display with I2C address = 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // clear the display buffer. display.clearDisplay(); display.setTextSize(1); // text size = 1 display.setTextColor(WHITE, BLACK); // set text color to white and black background display.setCursor(0, 0); // move cursor to position (15, 0) pixel // display.println("BMP280 SENSOR"); display.display(); // update the display // initialize the BMP280 sensor if( bmp280.begin(BMP280_I2C_ADDRESS) == 0 ) { // connection error or device address wrong! display.setTextSize(1); // text size = 1 display.setCursor(0, 0); display.println("Connection"); display.print("Error"); display.display(); // update the display while(1); // stay here } display.display(); // update the display } char _buffer[9]; void loop() { display.clearDisplay(); display.setCursor(0, 0); sensor.requestTemperatures(); while (!sensor.isConversionComplete()); // wait until sensor is ready // get temperature and pressure from library float temp = bmp280.readTemperature(); // get temperature float pressure = bmp280.readPressure(); // get pressure // print data on the LCD // 1: print temperature if(temp < 0) sprintf(_buffer, "-%02u.%02u C", (int)abs(temp), (int)(abs(temp) * 100) % 100 ); else sprintf(_buffer, " %02u.%02u C", (int)temp, (int)(temp * 100) % 100 ); display.print("Temperature:"); display.println(_buffer); // 2: print pressure sprintf(_buffer, "%04u.%02u", (int)(pressure/100), (int)((uint32_t)pressure % 100)); display.print("Pression: "); display.print(_buffer); display.println(" hPa"); display.println(); display.print("Temp_18B20 : "); // Affichage Temperature du DS18B20 display.print(sensor.getTempC()); display.println(" C"); // update the display display.display(); delay(2500); // Attente 2.5 secondes pour la prochaine lecture } |