π ΠΠΈΠ½ΠΈΠ°ΡΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π΄Π°Π½Π½ΡΡ
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΡ ΡΠΎΠ±Π΅ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ Π²ΠΎΠ»ΡΡΠΌΠ΅ΡΡ Π½Π° Π±Π°Π·Π΅ Arduino Nano ΠΈ OLED-Π΄ΠΈΡΠΏΠ»Π΅Ρ (128×32 ΠΏΠΈΠΊΡΠ΅Π»Ρ) ΠΈ (128×64 ΠΏΠΈΠΊΡΠ΅Π»Ρ) Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ I2C. Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠΌΠ΅Π΅Ρ ΠΈΠ·ΠΌΠ΅ΡΡΡΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Π΄ΠΎ 5 Π½Π°ΠΏΡΡΠΌΡΡ ΠΈ Π΄ΠΎ 25 Π²ΠΎΠ»ΡΡ Ρ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠ΅Π·ΠΈΡΡΠΎΡΠ°Ρ . Π ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΠ² ΡΠ΅Π·ΠΈΡΡΠΎΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ
Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ³Π»Π°ΡΠ°Ρ Π²ΡΠ΅Ρ
Π½Π° ΠΎΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΡΠΉ Telegram ΠΊΠ°Π½Π°Π» ΠΈ ΡΠ°Ρ:
βοΈ Telegram ΠΠ°Π½Π°Π» —-
π§° Π§ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ:
- Arduino Nano ΠΈΠ»ΠΈ Uno
- OLED-Π΄ΠΈΡΠΏΠ»Π΅ΠΉ 0.91″ 128×32 I2C (SSD1306)
- Π Π΅Π·ΠΈΡΡΠΎΡΡ Π΄Π»Ρ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ 5Π)
- ΠΠ°ΠΊΠ΅ΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ° ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄Π°
- ΠΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ (Π±Π°ΡΠ°ΡΠ΅ΠΉΠΊΠ°, ΠΠ ΠΈ Ρ.Π΄.)
βοΈ Π‘Ρ Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ

OLED ΠΊΠΎΠ½ΡΠ°ΠΊΡ | ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ Arduino |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
β οΈ ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, ΡΡΠΎΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ I2C-Π²ΡΠ²ΠΎΠ΄Ρ!
π‘ ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ
Arduino ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ
ΠΎΠ΄Π° A0
, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΡΠΈΡΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΎΡ 0 Π΄ΠΎ 1023) ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π² Π²ΠΎΠ»ΡΡΡ. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° OLED-Π΄ΠΈΡΠΏΠ»Π΅Π΅.
π₯ ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Adafruit_SSD1306
ΠΈ Adafruit_GFX
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Arduino IDE.
#include <Wire.h> // ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ I2C #include <Adafruit_GFX.h> // ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ Adafruit #include <Adafruit_SSD1306.h> // ΠΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ SSD1306 #define SCREEN_WIDTH 128 // Π¨ΠΈΡΠΈΠ½Π° Π΄ΠΈΡΠΏΠ»Π΅Ρ #define SCREEN_HEIGHT 64 // ΠΡΡΠΎΡΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ #define OLED_RESET -1 // ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ RESET Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define ANALOG_PIN A0 // ΠΠΈΠ½, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ // ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ (Π² ΠΎΠΌΠ°Ρ ) const float R1 = 100000.0; // ΠΠ΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π·ΠΈΡΡΠΎΡ (100 ΠΊΠΠΌ) const float R2 = 10000.0; // ΠΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π·ΠΈΡΡΠΎΡ (10 ΠΊΠΠΌ) const float VREF = 5.0; // ΠΠΏΠΎΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Arduino (ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠ½ΠΈΡΡ) float voltage = 0.0; // ΠΠ·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ float maxVoltage = 0.0; // ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ void setup() { Serial.begin(9600); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x3C display.clearDisplay(); // ΠΡΠΈΡΡΠΊΠ° ΡΠΊΡΠ°Π½Π° splashScreen(); // ΠΠΎΠΊΠ°Π· ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° } void loop() { int analogValue = analogRead(ANALOG_PIN); // Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (0-1023) // ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΡΡΡΠΎΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ: voltage = (analogValue * VREF / 1023.0) * ((R1 + R2) / R2); // ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ if (voltage > maxVoltage) { maxVoltage = voltage; } display.clearDisplay(); // ΠΡΠΈΡΡΠΊΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΎΠ²ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ drawVoltage(voltage, maxVoltage); // ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ display.display(); // ΠΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ delay(500); // ΠΠ°ΡΠ·Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ } // ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π·Π°ΡΡΠ°Π²ΠΊΡ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ void splashScreen() { display.clearDisplay(); display.setTextSize(2); // ΠΡΡΠΏΠ½ΡΠΉ ΡΡΠΈΡΡ display.setTextColor(SSD1306_WHITE); // ΠΠ΅Π»ΡΠΉ ΡΠ²Π΅Ρ display.setCursor(10, 10); // Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° display.print("V-Meter"); // ΠΠ°Π΄ΠΏΠΈΡΡ display.display(); delay(2000); // ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π·Π°ΡΡΠ°Π²ΠΊΡ 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ } // Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π»Ρ void drawVoltage(float v, float vmax) { display.setTextSize(3); display.setCursor(0, 0); display.print("V:"); display.print(v, 2); // Π’Π΅ΠΊΡΡΠ΅Π΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ 2 Π·Π½Π°ΠΊΠ°ΠΌΠΈ display.setTextSize(2); display.setCursor(0, 45); display.print("Max: "); display.print(vmax, 1); // ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ 1 Π·Π½Π°ΠΊΠΎΠΌ // ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π»ΠΈΠ½Ρ ΠΏΠΎΠ»ΠΎΡΡ ΠΎΡ 0 Π΄ΠΎ 128 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ int barLength = map(v * 10, 0, 250, 0, 128); // (0...25.0Π *10 = 250) display.fillRect(0, 30, barLength, 10, SSD1306_WHITE); // Π ΠΈΡΡΠ΅ΠΌ ΡΠΊΠ°Π»Ρ }
π ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ
- π ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ΅Π·ΠΈΡΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅ΡΡΡΡ Π΄ΠΎ 12Π, 24Π ΠΈ Π²ΡΡΠ΅.
- π Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
- πΎ ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² EEPROM ΠΈΠ»ΠΈ Π½Π° SD-ΠΊΠ°ΡΡΡ.
- β οΈ ΠΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠ³Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΈΠ³Π°ΡΡΠΈΠΉ Π΄ΠΈΡΠΏΠ»Π΅ΠΉ).
π ΠΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ
Π‘ ΡΡΠΈΠΌ Π²ΠΎΠ»ΡΡΠΌΠ΅ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅:
- Π‘ΠΎΠ±ΡΠ°ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ΠΎΠΌ.
- ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π°ΡΡΠΈΠΊ ΡΠΎΠΊΠ°, ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ² Π΅Π³ΠΎ Π² Π°ΠΌΠΏΠ΅ΡΠΌΠ΅ΡΡ.
- ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Ρ RTC ΠΈ Π²Π΅ΡΡΠΈ Π»ΠΎΠ³ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ BLE ΠΈΠ»ΠΈ Wi-Fi ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΡΠΌΠ°ΡΡΡΠΎΠ½.
π§ͺ Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΎΠ΅ΠΊΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ Wokwi. Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ Π²Π΅ΡΡΠΈΡ ΡΡ Π΅ΠΌΡ ΠΈ ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΏΠ°ΠΉΠΊΠΈ β Π±ΡΡΡΡΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ!
π Β ΠΠ±Π½ΠΎΠ²Π»ΡΠ½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ Ρ ΡΡΡΠ΅Π΄Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
Π ΡΠ°ΠΊΠΆΠ΅ Ρ Π½ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ
π§ Π§Π΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΠΠ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄:
- π§ Π‘ΡΡΡΠΊΡΡΡΠ° β ΠΊΠΎΠ΄ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ (Π΄ΠΈΡΠΏΠ»Π΅ΠΉ, ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Ρ.Π΄.)
- π ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ β Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, BLE-ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ)
- πΆ ΠΠΎΠ½ΡΡΠ½ΠΎΡΡΡ β Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉ Π±ΡΡΡΡΠ΅Π΅ ΠΏΠΎΠΉΠΌΡΡ, Π·Π° ΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΡΡΡ
- π ΠΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π°ΠΌ β Π²Ρ ΡΡΠΈΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
#include <Wire.h> // ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ I2C #include <Adafruit_GFX.h> // ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡ Adafruit #include <Adafruit_SSD1306.h> // ΠΡΠ°ΠΉΠ²Π΅Ρ Π΄ΠΈΡΠΏΠ»Π΅Ρ SSD1306 #define SCREEN_WIDTH 128 // Π¨ΠΈΡΠΈΠ½Π° Π΄ΠΈΡΠΏΠ»Π΅Ρ #define SCREEN_HEIGHT 64 // ΠΡΡΠΎΡΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ #define OLED_RESET -1 // ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ RESET Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define ANALOG_PIN A0 // ΠΠΈΠ½, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ // ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ (Π² ΠΎΠΌΠ°Ρ ) const float R1 = 100000.0; // ΠΠ΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π·ΠΈΡΡΠΎΡ (100 ΠΊΠΠΌ) const float R2 = 10000.0; // ΠΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π·ΠΈΡΡΠΎΡ (10 ΠΊΠΠΌ) const float VREF = 5.0; // ΠΠΏΠΎΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Arduino (ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠ½ΠΈΡΡ) float voltage = 0.0; // ΠΠ·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ float voltage_Sr = 0.0; // ΠΠ°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΡΠ΅Π΄Π½Π΅Π½ΠΈΡ float maxVoltage = 0.0; // ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ void setup() { Serial.begin(9600); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x3C display.clearDisplay(); // ΠΡΠΈΡΡΠΊΠ° ΡΠΊΡΠ°Π½Π° splashScreen(); // ΠΠΎΠΊΠ°Π· ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° } void loop() { for(int i=0; i<10; i++){ int analogValue = analogRead(ANALOG_PIN); // Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (0-1023) // ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π² Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΡΡΡΠΎΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ: // voltage = (analogValue * VREF / 1023.0) * ((R1 + R2) / R2); // Π‘ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ voltage = (analogValue * VREF / 1023.0); // ΠΠ΅Π· Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ voltage_Sr = voltage_Sr + voltage; // ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ if (voltage > maxVoltage) { maxVoltage = voltage; } delay(50); } voltage = voltage_Sr / 10; // Π£ΡΡΠ΅Π΄Π½ΡΠ΅ΠΌ voltage_Sr = 0.0; // ΠΠ±Π½ΡΠ»ΡΠ΅ΠΌ display.clearDisplay(); // ΠΡΠΈΡΡΠΊΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΎΠ²ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ drawVoltage(voltage, maxVoltage); // ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ display.display(); // ΠΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ // delay(500); // ΠΠ°ΡΠ·Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ } // ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π·Π°ΡΡΠ°Π²ΠΊΡ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ void splashScreen() { display.clearDisplay(); display.setTextSize(2); // ΠΡΡΠΏΠ½ΡΠΉ ΡΡΠΈΡΡ display.setTextColor(SSD1306_WHITE); // ΠΠ΅Π»ΡΠΉ ΡΠ²Π΅Ρ display.setCursor(10, 10); // Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° display.print("V-Meter"); // ΠΠ°Π΄ΠΏΠΈΡΡ display.display(); delay(2000); // ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π·Π°ΡΡΠ°Π²ΠΊΡ 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ } // Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π»Ρ void drawVoltage(float v, float vmax) { display.setTextSize(3); display.setCursor(0, 0); display.print("V:"); display.print(v, 2); // Π’Π΅ΠΊΡΡΠ΅Π΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ 2 Π·Π½Π°ΠΊΠ°ΠΌΠΈ display.setTextSize(2); display.setCursor(0, 45); display.print("Max: "); display.print(vmax, 1); // ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ 1 Π·Π½Π°ΠΊΠΎΠΌ // ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π»ΠΈΠ½Ρ ΠΏΠΎΠ»ΠΎΡΡ ΠΎΡ 0 Π΄ΠΎ 128 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ int barLength = map(v * 10, 0, 250, 0, 128); // (0...25.0Π *10 = 250) display.fillRect(0, 30, barLength, 10, SSD1306_WHITE); // Π ΠΈΡΡΠ΅ΠΌ ΡΠΊΠ°Π»Ρ }
π ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π°ΠΊΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±:
- Π½Π°ΡΠ°ΡΡ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ Arduino,
- Π½Π°ΡΡΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄ΠΈΡΠΏΠ»Π΅ΡΠΌΠΈ,
- ΠΎΡΠ²ΠΎΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² ΡΠΈΡΡΠΎΠ²ΡΡ ΡΠΎΡΠΌΡ.
ΠΠ½ ΠΏΡΠΎΡΡ Π² ΡΠ±ΠΎΡΠΊΠ΅, ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²Π°Ρ Β«ΠΏΠΎΠ»Π΅Π·Π½Π°ΡΒ» ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΠΊΠ°.
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² EEPROM ΠΈΠ»ΠΈ Π½Π° SD-ΠΊΠ°ΡΡΡ. ΠΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΊΠ΅ΡΡ?
Π£ ΠΌΠ΅Π½Ρ ΠΊ ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΠ΅ Π΅ΡΡΡ Π΅ΡΡ ΡΡΠΈ ΡΠΊΠ΅ΡΡΠ°. ΠΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΊΠ°Π»Ρ Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠ»ΠΎΡΡΠ΅ΡΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎ Π²Π°ΡΠ° ΠΈΠ΄Π΅Ρ ΡΠΎΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Ρ ΠΎ Π½Π΅ΠΉ ΠΏΠΎΠ΄ΡΠΌΠ°Ρ. Π Π°ΡΠΏΠΈΡΠΈΡΠ΅ Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ Π²ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ. Π ΠΊΠ°ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΌΡΡΠ» Π² ΡΡΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ