Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Real-time Arduino Weerklok: OLED-display voor tijd, datum & temperatuur

Onderdelen en benodigdheden

Arduino UNO 1
Adafruit DS3231 RTC 1
Digilent Pmod OLED 1
Texas Instruments LM35 Temperatuursensor 1
Jumper-draden (generiek) 1
Breadboard (generiek) 1

Over dit project

We gaan een Arduino-weerklok bouwen die ons de tijd, datum en temperatuur vertelt. De LM35-sensor geeft de temperatuur, de DS3231 vertelt de datum en tijd, en we gebruiken de OLED om de temperatuur, datum en tijd weer te geven.

Benodigde componenten

De benodigde componenten voor dit project zijn:

  • Arduino
  • DS3231 (Real-time clock-module)
  • OLED-display (hier een SSD1306 gebruikt)
  • SSD1306.pdf (datasheet)
  • LM35
  • Verbindingsdraden
  • Breadboard
Real-time Arduino Weerklok: OLED-display voor tijd, datum & temperatuur

Je kunt een volledig schema hier vinden

Schakelingsschema

Allereerst verbind de OLED met de Arduino. De OLED werkt met de Arduino via SPI- en I2C-communicatie, maar we hebben hem via SPI aangesloten. De SPI-pinnen op de Arduino zijn pin 8, 9, 10, 11 en 13. De verbindingen van de OLED met de Arduino zijn als volgt:

  • CS van de OLED aan pin 10 van de Arduino
  • DC van de OLED aan pin 9 van de Arduino
  • RES van de OLED aan pin 8 van de Arduino
  • D1 van de OLED aan pin 11 van de Arduino
  • D0 van de OLED aan pin 13 van de Arduino
  • VCC van de OLED aan 5V-pin van de Arduino
  • GND van de OLED aan GND-pin van de Arduino

Daarna verbind de DS3231-module met de Arduino. De DS3231 werkt via I2C-communicatie. De I2C-pinnen op de Arduino zijn SDA en SCL. Verbindingen:

  • GND van DS3231 aan GND-pin van Arduino
  • VCC van DS3231 aan 5V-pin van Arduino
  • SDA van DS3231 aan A4 op de Arduino
  • SCL van DS3231 aan A5-pin op de Arduino

Tot slot, verbind de LM35-sensor met de Arduino. Verbind de linkerpin van LM35 met 5V op de Arduino, de middelste pin met A0 op de Arduino en de rechterpin met ground op de Arduino.

Code-uitleg

Eerst voegen we de bibliotheken toe voor de DS3231-module en de OLED. De Adafruit-bibliotheek voor de OLED heeft meer functies dan andere OLED-bibliotheken.

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>

Vervolgens definiëren we de pinnen waar we de DS3231-module en de OLED hebben aangesloten. De DS3231 werkt via I2C, dus we gebruiken de SDA- en SCL-pinnen van de Arduino. De OLED werkt via SPI-communicatie. Daardoor initialiseren we pinnen 8, 9, 10, 11, 13 voor SPI-communicatie. Daarna initialiseren we de LM35-sensorpin en andere variabelen.

DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;

In de setup-functie declareren we de LM35-sensorpin als input omdat de Arduino de input van de sensor leest. Vervolgens geven we de opdracht aan DS3231 en OLED om te communiceren met de Arduino.

pinMode(sensor_pin, INPUT);
rtc.begin();
display.begin(SSD1306_SWITCHCAPVCC);

De onderstaande regels zijn in de code uitkommentarierd, maar als je de DS3231-module voor de eerste keer gebruikt en de dag, datum en tijd wilt instellen, haal dan de commentaartekens weg en stel ze in.


// rtc.setDOW(WEDNESDAY); // Dag-van-de-week instellen op ZONDAG
// rtc.setTime(19, 02, 0); // Tijd instellen op 12:00:00 (24-uurs formaat)
// rtc.setDate(7, 12, 2017); // Datum instellen op 6 juni 2017

Vervolgens printen we „weather clock” 5 seconden lang op de OLED.

display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);

In de loop-functie lezen we de LM35 uit en berekenen de temperatuur. Daarna halen we de tijd en datum op en printen het op de OLED.

output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());

Complete Arduino-code

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>

DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;

void setup() {
  pinMode(sensor_pin, INPUT);
  rtc.begin();
  display.begin(SSD1306_SWITCHCAPVCC);
  // rtc.setDOW(WEDNESDAY);
  // rtc.setTime(19, 02, 0);
  // rtc.setDate(7, 12, 2017);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.print(" Weather ");
  display.setCursor(0,17);
  display.print(" Clock ");
  display.display();
  delay(5000);
}

void loop() {
  output = analogRead(sensor_pin);
  temp = (output * 500) / 1023;
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(20,0);
  display.print(rtc.getTimeStr());
  display.setTextSize(1);
  display.setCursor(0,15);
  display.print(rtc.getDateStr());
  display.setTextSize(1);
  display.setCursor(70,15);
  display.print(rtc.getDOWStr());
  display.setTextSize(1);
  display.setCursor(20,25);
  display.print("Temp: ");
  display.print(temp);
  display.print("C");
  display.display();
  delay(1000);
}

Code

Code snippet #4

display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print(" Weather ");
display.setCursor(0,17);
display.print(" Clock ");
display.display();
delay(5000);

Code snippet #5

output = analogRead(sensor_pin);
temp = (output * 500) / 1023;
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print(rtc.getTimeStr());
display.setTextSize(1);
display.setCursor(0,15);
display.print(rtc.getDateStr());
display.setTextSize(1);
display.setCursor(70,15);
display.print(rtc.getDOWStr());

Code snippet #6 (Complete code)

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DS3231.h>

DS3231 rtc(SDA, SCL);
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const int sensor_pin = A0;
float temp;
float output;

void setup() {
  pinMode(sensor_pin, INPUT);
  rtc.begin();
  display.begin(SSD1306_SWITCHCAPVCC);
  // rtc.setDOW(WEDNESDAY);
  // rtc.setTime(19, 02, 0);
  // rtc.setDate(7, 12, 2017);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.print(" Weather ");
  display.setCursor(0,17);
  display.print(" Clock ");
  display.display();
  delay(5000);
}

void loop() {
  output = analogRead(sensor_pin);
  temp = (output * 500) / 1023;
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(20,0);
  display.print(rtc.getTimeStr());
  display.setTextSize(1);
  display.setCursor(0,15);
  display.print(rtc.getDateStr());
  display.setTextSize(1);
  display.setCursor(70,15);
  display.print(rtc.getDOWStr());
  display.setTextSize(1);
  display.setCursor(20,25);
  display.print("Temp: ");
  display.print(temp);
  display.print("C");
  display.display();
  delay(1000);
}

Schema's

Real-time Arduino Weerklok: OLED-display voor tijd, datum & temperatuur

Productieproces

  1. Sensor-gestuurde Audio-effecten Bouwen met de Satellite CCRMA Kit
  2. Bouw een retro Numitron-klok met Arduino: Eenvoudig, betrouwbaar en energiezuinig
  3. Bouw een Arduino Real-Time Clock voor Islamitische Gebedstijden
  4. Bouw een Klassiek Pong-spel op Arduino UNO met OLED-display – Stap-voor-stap Tutorial
  5. Precisie Woordklok: Minuutnauwkeurige Tijdweergave in Woorden
  6. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  7. Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
  8. Bouw een Berlijnse Klok met Arduino UNO – DIY LED-matrix klok
  9. Interactief Nextion HMI-weerstation met Arduino Mega en sensoren
  10. TM1637 Digitale Klok met Tijdinstelling & Alarm – Arduino Nano Prototype
  11. Bouw een betrouwbare wekker met DS1302 RTC en Arduino UNO