πŸ“— Π”Π²ΡƒΡ…ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ шкалой Π½Π° Arduino

Π’ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€-2-ΠΊΠ°Π½Π°Π»Π°

🧾 ОписаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ прСдставляСт собой Π΄Π²ΡƒΡ…ΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€ Π½Π° Π±Π°Π·Π΅ Arduino, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ измСрСния Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ напряТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ отобраТСния максимального зафиксированного значСния ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° измСнСния напряТСния Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚:

  • 🟒 Π’Ρ…ΠΎΠ΄Π½ΠΎΠ΅ напряТСниС (V In)
  • πŸ”΅ Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ напряТСниС (V Out)
  • πŸ”Ί МаксимальноС Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ напряТСниС (V Max)
  • πŸ“‰ Π“Ρ€Π°Ρ„ΠΈΠΊ измСнСния Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ напряТСния
  • πŸ“Š Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΊΠ°Π»Ρƒ напряТСния справа

Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π΄ΠΈΠΎΠ»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² питания: ΠΎΠ½ наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ стабилизаторов, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ напряТСния ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ позволяСт ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ процСссов.


πŸ”§ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠšΠΎΠ»-Π²ΠΎΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅Π“Π΄Π΅ ΠšΡƒΠΏΠΈΡ‚ΡŒ
Arduino Nano / Uno1Основной ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠšΡƒΠΏΠΈΡ‚ΡŒ
OLED-дисплСй 128×64 I2C1АдрСс 0x3C, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° AdafruitΠšΡƒΠΏΠΈΡ‚ΡŒ
Кнопка1Для сброса ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌΠ°ΠšΡƒΠΏΠΈΡ‚ΡŒ
РСзисторы для Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ4Π‘ΠΌ. Π½ΠΈΠΆΠ΅, для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡΠšΡƒΠΏΠΈΡ‚ΡŒ
ΠŸΡ€ΠΎΠ²ΠΎΠ΄Π°, макСтная ΠΏΠ»Π°Ρ‚Π°ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²ΠšΡƒΠΏΠΈΡ‚ΡŒ

βš™οΈ Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€-2-ΠΊΠ°Π½Π°Π»Π°

πŸ”Œ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

πŸ–₯️ OLED-дисплСй:

  • GND β†’ GND
  • VCC β†’ 5V
  • SCL β†’ A5
  • SDA β†’ A4

πŸŽ›οΈ Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ напряТСний:

Arduino измСряСт напряТСния Ρ‡Π΅Ρ€Π΅Π· Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹ A0 ΠΈ A1. Но Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ 5 Π’ опасно. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ рСзистивныС Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ напряТСния.

πŸ“₯ Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ для Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ напряТСния (V In β†’ A0):
  • Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ рСзистор: 40 кОм
  • НиТний рСзистор: 10 кОм
  • Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ сигнал подаётся Π½Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСзистор
  • БрСдняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ A0
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎ 25 Π’
πŸ“€ Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ для Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ напряТСния (V Out β†’ A1):
  • Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ рСзистор: 40 кОм
  • НиТний рСзистор: 10 кОм
  • БрСдняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ A1
  • Π’Π°ΠΊΠΎΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π°Ρ‘Ρ‚ коэффициСнт β‰ˆ 1/5, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎ 25 Π’

⚠️ ΠŸΠΎΠ΄Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ рСзисторы с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ рассчитана Π½Π° Π²Ρ…ΠΎΠ΄ 0–5 Π’, поэтому ΠΏΡ€ΠΈ использовании Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ расчёта напряТСния.


βš™οΈ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° построСна Π½Π° основС Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса VoltMeter, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ напряТСния ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π²Ρ…ΠΎΠ΄ΠΎΠ².

А Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса Oscilloscope (осциллограф)

πŸ“¦ Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ€Π°Π·Π΄Π΅Π» "Π‘ΠΊΠ΅Ρ‚Ρ‡ Arduino"

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ этапы Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ напряТСний:
    • ВыполняСтся analogRead() Π½Π° ΠΏΠΈΠ½Π°Ρ… A0 ΠΈ A1.
    • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² Π²ΠΎΠ»ΡŒΡ‚Ρ‹: voltage = raw * (5.0 / 1023.0);
    • ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° коэффициСнт дСлитСля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ voltage *= 2.0;
  2. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…:
    • ВсС показания (V In, V Out, V Max) ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части дисплСя ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ тСкстом.
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡˆΡ€ΠΈΡ„Ρ‚ TextSize(1) для чёткости ΠΈ экономии мСста.
  3. Ѐиксация максимума:
    • Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сравниваСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ максимумом.
    • ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡƒΡŽ ΠΊ D2) максимум сбрасываСтся.
  4. Π“Ρ€Π°Ρ„ΠΈΠΊ напряТСния:
    • ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс Oscilloscope сохраняСт послСдниС измСрСния Π² Π±ΡƒΡ„Π΅Ρ€Π΅.
    • Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части дисплСя рисуСтся линия, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ напряТСния Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
    • Π“Ρ€Π°Ρ„ΠΈΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 110 пиксСлСй ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π½Π΅ Π½Π°Π΅Π·ΠΆΠ°Π΅Ρ‚ Π½Π° ΡˆΠΊΠ°Π»Ρƒ.
  5. Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ шкала справа:
    • БСгмСнтная шкала (10 Π΄Π΅Π»Π΅Π½ΠΈΠΉ) ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ напряТСния.
    • ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ измСрСния.

🧠 ДисплСй

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ основных Π±Π»ΠΎΠΊΠΎΠ² отобраТСния Π½Π° экранС OLED дисплСя

Π’ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€-2-ΠΊΠ°Π½Π°Π»Π°

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° дисплСС

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° строит интСрфСйс Π² нСсколько этапов:

  • ВСрхняя Ρ‡Π°ΡΡ‚ΡŒ дисплСя β€” ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния напряТСния
  • БрСдняя Ρ‡Π°ΡΡ‚ΡŒ β€”  Π½Π°ΠΏΡ€ΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±Π»ΠΎΠΊΠ° питания.
  • НиТняя Ρ‡Π°ΡΡ‚ΡŒ β€” Π³Ρ€Π°Ρ„ΠΈΠΊ напряТСния Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, построСнный с использованиСм массива graphBuffer[], Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся послСдниС 128 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ массив сдвигаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΈ отобраТаСтся ΠΊΠ°ΠΊ ломаная линия, повторяя Ρ„ΠΎΡ€ΠΌΡƒ измСнСния напряТСния.
  • ΠŸΡ€Π°Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ β€” Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ напряТСния Π² Π²ΠΈΠ΄Π΅ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСгмСнт Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π² зависимости ΠΎΡ‚ уровня сигнала.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ OLED-дисплСй максимально эффСктивно: ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ ΠΈ красиво.


πŸ“œ Π‘ΠΊΠ΅Ρ‚Ρ‡ Arduino

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET     -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const int inputPin = A0;  // Π’Ρ…ΠΎΠ΄Π½ΠΎΠ΅ напряТСниС
const int outputPin = A1; // Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ напряТСниС
const int resetButtonPin = 2; // Кнопка сброса максимума

#define GRAPH_HEIGHT 20
#define GRAPH_WIDTH  110 // ΠžΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ мСсто справа ΠΏΠΎΠ΄ ΡˆΠΊΠ°Π»Ρƒ
uint8_t graphBuffer[GRAPH_WIDTH];

// Класс Π²ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€Π°
class VoltMeter {
  private:
    int pin;
    float voltage;
    float maxVoltage;

  public:
    VoltMeter(int analogInputPin) {     // ΠšΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса
      pin = analogInputPin;
      voltage = 0.0;
      maxVoltage = 0.0;
    }

    void measure() {      // ΠœΠ΅Ρ‚ΠΎΠ΄ -ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅
      int raw = analogRead(pin);
      voltage = raw * (5.0 / 1023.0);
      if (voltage > maxVoltage) {
        maxVoltage = voltage;
      }
    }

    void resetMax() {      // ΠœΠ΅Ρ‚ΠΎΠ΄ - сброс максимального значСния
      maxVoltage = voltage;
    }

    float getVoltage() {      // ΠœΠ΅Ρ‚ΠΎΠ΄ - ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ напряТСниС
      return voltage;
    }

    float getMax() {      // ΠœΠ΅Ρ‚ΠΎΠ΄ - ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ максимальноС напряТСниС
      return maxVoltage;
    }
};

// Класс осциллограф
class Oscilloscope {
  
  public:
    Oscilloscope() {     // ΠšΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса
    //  pin = analogInputPin;
    }
  

  void updateGraph(float voltage) {
    for (int i = 0; i < GRAPH_WIDTH - 1; i++) {
      graphBuffer[i] = graphBuffer[i + 1];
    }
    uint8_t newY = map(voltage * 100, 0, 500, 0, GRAPH_HEIGHT);
    graphBuffer[GRAPH_WIDTH - 1] = newY;
  }

  void drawGraph() {
    int baseY = SCREEN_HEIGHT - 1;
    for (int x = 0; x < GRAPH_WIDTH - 1; x++) {
      display.drawLine(x, baseY - graphBuffer[x], x + 1, baseY - graphBuffer[x + 1], SSD1306_WHITE);
    }
  }

  void drawScale(float value) {
    const int segments = 10;
    const int startX = SCREEN_WIDTH - 10; // ΠŸΡ€Π°Π²Π°Ρ сторона экрана
    const int startY = 58;
    const int segWidth = 8;
    const int segHeight = 4;
    const int gap = 2;

    int activeSegments = map(value * 100, 0, 500, 0, segments);

    for (int i = 0; i < segments; i++) {
      int y = startY - i * (segHeight + gap);
      if (i < activeSegments) {
        display.fillRect(startX, y, segWidth, segHeight, SSD1306_WHITE);
      } else {
        display.drawRect(startX, y, segWidth, segHeight, SSD1306_WHITE);
      }
    }
  }
};

VoltMeter vinMeter(inputPin);   //ЭкзСмпляр класса Π²ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€ V In
VoltMeter voutMeter(outputPin);   // ЭкзСмпляр класса Π²ΠΎΠ»ΡŒΡ‚ΠΌΠ΅Ρ‚Ρ€ V Out
Oscilloscope oscill;   //ЭкзСмпляр класса осциллограф

void setup() {
  pinMode(resetButtonPin, INPUT_PULLUP);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(10, 28);
  display.println("Digital Voltmeter");
  display.display();
  delay(1500);
}

void loop() {
  vinMeter.measure();
  voutMeter.measure();

  if (digitalRead(resetButtonPin) == LOW) {
    vinMeter.resetMax();
    voutMeter.resetMax();
    delay(300);
  }

  float vin = vinMeter.getVoltage();
  float vout = voutMeter.getVoltage();
  float vmax = voutMeter.getMax();

  oscill.updateGraph(vout);
  display.clearDisplay();

  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("V In:  ");
  display.print(vin, 2);
  display.println(" V");

  display.setCursor(0, 10);
  display.print("V Max: ");
  display.print(vmax, 2);
  display.println(" V");

  display.setCursor(0, 20);
  display.print("V Out: ");
  display.print(vout, 2);
  display.println(" V");

  oscill.drawGraph();
  oscill.drawScale(vout);

  display.display();
  delay(200);
}

🧠 Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΈ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ

  • βœ… Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ коэффициСнт дСлитСля прямо Π² класс VoltMeter, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
  • πŸ’Ύ Π‘ΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ максимум Π² EEPROM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ сбрасывался ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.
  • 🧲 Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ строку: Ρ‚ΠΎΠΊ ΠΈΠ»ΠΈ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ, Ссли Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΡˆΡƒΠ½Ρ‚.
  • πŸ“ˆ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π± Π³Ρ€Π°Ρ„ΠΈΠΊΠ° для отобраТСния высокого напряТСния.

⚑ ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

  • Настройка ΠΈ тСстированиС Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² питания.
  • Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ напряТСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Arduino.
  • ДСмонстрация Ρ€Π°Π±ΠΎΡ‚Ρ‹ стабилизаторов напряТСния.
  • Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ ΠΈ дСмонстрационныС стСнды.

Author: admin

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *