Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
Компоненты и материалы
| Название | Количество |
|---|---|
| Arduino UNO | 1 |
| LM331 (преобразователь напряжения в частоту) | 1 |
| Оптопара 4N25 | 1 |
| Стабилизатор LM7808 (8 В) | 1 |
| Диоды 1N4001 | 4 |
| Резисторы: 100к (2), 10к, 12к, 6.8к, 3.3к, 330, 270, 220, 47 Ом | по 1 |
| Потенциометр 5 кОм многооборотный | 1 |
| Конденсаторы: 100нФ (2), 10нФ, 1мкФ, 4.7мкФ, 220мкФ | по 1 |
| Трансформатор T1 (для изолированного питания датчика и схемы) | 1 |
Инструменты
- Паяльник
Программное обеспечение
- Arduino IDE
- Библиотека FreqCounter (Martin Nawrath) — ссылка
Зачем нужна гальваническая развязка
Сигналы от полевых датчиков могут быть повреждены импульсными помехами, грозой, EMI и разницей потенциалов земель. Полная изоляция входного цепи от Arduino решает эти проблемы. Для этого нужно изолированное питание для датчика и входного тракта (трансформатор T1), преобразование сигнала в частоту (LM331) и передача через оптопару (4N25).
Принцип работы
- Входное напряжение (20 мВ – 5 В) или ток (4–20 мА, с джампером W1) поступает на LM331.
- LM331 выдаёт импульсы с частотой ~1 кГц/В (настраивается подстроечником P1).
- Импульсы через оптопару 4N25 попадают на Arduino D5 (T1 вход Timer1).
- Arduino измеряет частоту библиотекой FreqCounter (gate time 1000 мс = 50/60 периодов сети → отличная помехоустойчивость).
Схема подключения к Arduino
- Коллектор 4N25 → D5 (с подтяжкой 2.2 кОм к +5V Arduino)
- Эмиттер 4N25 → GND Arduino
- Питание изолированной части: T1 → диодный мост → LM7808 → схема LM331 + датчик.
Скетч (Arduino)
#include <FreqCounter.h>
void setup() {
Serial.begin(9600);
Serial.println("Optoisolated analog input");
}
long int frq;
void loop() {
FreqCounter::f_comp = 0;
FreqCounter::start(1000); // gate time 1000 мс
while (FreqCounter::f_ready == 0); // ждём готовности
frq = FreqCounter::f_freq; // частота в Гц
Serial.println(frq);
delay(100);
}
Почему частотомер, а не pulseIn? pulseIn измеряет период (два вызова), точность низкая, чувствителен к 50/60 Гц. FreqCounter использует Timer1 (счёт импульсов) и Timer2 (gate time 1 мс прерывания), за 1000 мс накапливает счёт — разрешение в 5 раз лучше, плюс подавление сетевых помех.
Принципиальная схема
Примечание: для диапазона 10 В замените LM7808 на LM7815 и используйте трансформатор с большим напряжением. Подстроечник P1 настраивается на 1 кГц/В.
Подробнее в блоге автора
Производственный процесс
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Экономия пинов Arduino: подключение 4×3 клавиатуры по трём аналоговым входам
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
- Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
- Набор-компаньон для Arduino Nano — необходимые компоненты и инструменты для DIY-электроники
- Набор USB-MIDI адаптера для Arduino Micro / Leonardo — полный список деталей