Начнем с алгоритма работы нашей программы!

1. Подключим в схеме регулируемый блок питания 0-15В к ESP32.

2. Настроим АЦП ESP32, для измерения напряжения на ножке D4.

3. Задаем ослабление входного напряжения.

4. В бесконечном цикле считываем данные на ножке D4 с помощью функции read в диапазоне (0-4095) и пересчитаем в реальное напряжение.

5. Выводим измеренное напряжение в терминал, с задержкой в 300

6. Подключим oled дисплей к ESP32.

7. Настроим I2C, на ножках D21, D22.

8. Зададим разрешение дисплея.

9. В бесконечном цикле выводим напряжение и текст на экран.

И так схема у нас есть, на ней обозначены микроконтроллер, ножки gnd и питания 3,3В, регулируемый источник напряжения 0-15В подключен к порту D4, через делитель напряжения на резисторах R1, R2, пин D21, D22 - к которым подключен oled (ssd1306) дисплей.

Практически к каждому материалу есть видеоролик на  YouTube  и  RUTUBE каналах, теорию можно прочитать в статье, а как работает устройство в железе, посмотреть в видеоролике!

 

Вернемся к программе.

Регулируемый источник напряжения 0-15В у нас подключен к порту D4, через делитель напряжения на резисторах R1 = 100кОм, R2 = 27кОм, настроим в программе ножки порта D4 на измерение АЦП, допишем в программе voltmetr = ADC(Pin(4)) - переменная voltmetr равна значению полученному на ножке D4 ,voltmetr.atten(ADC.ATTN_11DB - чтобы считать напряжение выше опорного, применим входное ослабление с помощью аргумента atten  из документации Vref = (150mv-2450mv). Дисплей у нас подключен к портам D21(sda), D22(scl) и ножкам питания 3.3В, gnd, настроим в программе ножки портов D21(sda), D22(scl) как шину I2C - i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=10000) и укажем частоту freq=10000, далее создаем переменные ширины (display_width = 128) и высоты (display_height = 64) дисплея, затем опишем разрешение экрана строкой display = ssd1306.SSD1306_I2C(display_width, display_height, i2c).С настройкой портов закончили, далее чтобы наша программа работала добавим в нее модуль import machine, который содержит необходимые функции, для работы платы, строкой from machine import Pin, I2C, ADC укажем чтобы нам постоянно не повторять machine в коде, модуль, который служит нам для формирования задержек  import time, а также подключим библиотеку для работы с oled дисплеями import ssd1306, библиотеку можно скачать по ссылке которая закреплена под видео на канале.

Давайте немного поговорим о строчке кода опорного напряжения, откуда мы ее взяли.

ClassADC(pin*atten), MicroPython предлагает нам на выбор несколько вариантов ослабления входного напряжения, зависит от задачи в программе:

  • ADC.ATTN_0DB: No attenuation (100mV - 950mV)

  • ADC.ATTN_2_5DB: 2.5dB attenuation (100mV - 1250mV)

  • ADC.ATTN_6DB: 6dB attenuation (150mV - 1750mV)

  • ADC.ATTN_11DB: 11dB attenuation (150mV - 2450mV) 

Так как, мы измеряем диапазон напряжения от 0-15В, поэтому выбираем максимально возможный вариант, описанный выше.

В бесконечном цикле while True, командой display.fill(0) заполняем весь экран цветом, считываем АЦП на ножке D4 с помощью функции read в диапазоне (0-4095) - для 12-битного разрешения, преобразуем его в напряжение voltage = voltmetr.read() / 4095 * 15 * 1.1, строкой power = (round(voltage, 1)) округляем полученный результат, до 1 символа после точки и выводим измеренное напряжение в терминал, с задержкой в 300ms. Затем выводим измеренное напряжение на дисплей display.text( str (power),  40, 30) и текстовую строку VOLT с заданными координатами размещения на дисплее display.text('VOLT', 75, 30), записываем содержимое в буфер памяти display.show() с задержкой в одну секунду.

Исходный код программы Скачать архив

 

Понравился проект? Не забудь поделиться им с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube и RUTUBE !

  • СПАСИБО ЗА ПРОСМОТР.
  • С уважением.
  • Электроника и Робототехника!