Arduino: как измерить напряжение

напряжение Программирование

Вольтметр переменного тока Arduino

Этот проект Arduino будет представлять собой простой вольтметр переменного тока на основе Arduino, который может очень легко измерять 220 вольт и не требует внешнего датчика. Используя операционный усилитель в качестве другого усилителя, мы понизим 220 В переменного тока до уровня напряжения, который может измерить АЦП Arduino.

4 10

Требуемые компоненты

Ниже приведены основные компоненты, необходимые для разработки детектора переменного напряжения с Arduino:

  • Arduino Uno R3: это основной компонент этого проекта. Он измеряет аналоговое напряжение с помощью встроенных аналоговых каналов и преобразует аналоговое измеренное напряжение в цифровое значение, а затем мы преобразуем это измеренное цифровое значение обратно в напряжение, умножая его на коэффициент разрешения АЦП Arduino.
  • ЖК-дисплей 16 x 2: жидкокристаллический дисплей используется для отображения измеренного значения напряжения. Если вы не знаете, как связать ЖК-дисплей с Arduino, я предлагаю вам ознакомиться с этим руководством по взаимодействию ЖК-дисплея с Arduino.
  • Дифференциальный усилитель: в этом методе измерения переменного напряжения дифференциальный усилитель используется для понижения напряжения с 220 вольт переменного тока до менее 3,3 вольт переменного тока. Я объясню это более подробно в следующем разделе этой статьи.

Датчик напряжения переменного тока с операционным усилителем

Для измерения переменного напряжения с помощью Arduino в первую очередь необходимо сконструировать датчик измерения напряжения переменного тока. Например, если вы хотите измерить напряжение величиной 220 вольт переменного тока. Вам нужно сначала уменьшить это напряжение. Потому что Arduino имеет встроенные каналы АЦП и максимальное напряжение, которое может измерить аналоговый канал Arduino, составляет 5 вольт. Следовательно, мы не можем измерить напряжение больше 5 вольт с помощью аналого-цифрового преобразователя Arduino напрямую. Вы также должны знать, как измерить аналоговое напряжение с помощью Arduino или как использовать аналоговые каналы Arduino.5 4

Как использовать аналоговые каналы Arduino (АЦП)

Чтобы понять аналого-цифровой преобразователь Arduino R3, постройте следующую схему. Вам потребуются следующие компоненты:

  • Ардуино УНО
  • Один 5мм светодиод
  • Потенциометр
  • Резистор 220 Ом
  • Соединительные провода
  • Макет3 11

В приведенной выше принципиальной схеме используется переменный резистор. Один вывод переменного резистора соединяется с землей, а другой вывод с 5 вольтами от Ардуино. Центральный вывод переменного резистора соединен с A0, который является каналом 0 АЦП. Анодный вывод светодиода подключен к цифровому выводу 3 Arduino через токоограничивающий резистор 220 Ом. Кроме того, катодный контакт светодиода обычно заземляется с выводами потенциометра и GND Arduino.

Мы запрограммируем эту схему, показанную выше, таким образом, что когда напряжение, считываемое каналом A0, становится больше 3 вольт, светодиод, подключенный к контакту 3, светится, а когда напряжение меньше 3 вольт, светодиод гаснет.

Скетч для Arduino

int sensorPin = A0; // select the input pin for the potentiometer

int ledPin = 3; // select the pin for the LED

int sensorValue = 0; // variable to store the value coming from the sensor

 

void setup() {

  // declare the ledPin as an OUTPUT:

  pinMode(ledPin, OUTPUT);

}

 

void loop()

 

{

  // read the value from the sensor:

  sensorValue = analogRead(sensorPin);

  sensorValue = sensorValue * 5 / 1023 ; //its convert digital value back into voltage

  // turn the ledPin on

  if (sensorValue >= 3 )

digitalWrite(ledPin, HIGH);

  else

digitalWrite(ledPin, LOW);

}

Как работает данный код

Начните с объявления аналогового вывода Arduino, соединенного с центральным выводом потенциометра. В нашем случае это контакт A0. Мы сохранили его в переменной int «sensorPin».

int sensorPin = A0;

Затем объявите цифровой вывод Arduino, связанный с анодным выводом светодиода. В нашем случае это контакт 3.

int ledPin = 3;

Кроме того, создайте переменную int с именем «sensorValue», чтобы хранить значение датчика.

int sensorValue = 0;

Внутри функции setup() настройте ledPin как выходной контакт, используя функцию pinMode(). Он принимает номер вывода в качестве первого параметра и режим в качестве второго параметра.

void setup() {

  pinMode(ledPin, OUTPUT);

}

Внутри функции loop() мы сначала считываем аналоговый сигнал с помощью функции AnalogRead(). В качестве параметра внутри него берется sensorPin. Показания аналогового входа сохраняются в переменной «sensorValue». Оно будет находиться в диапазоне от 0 до 1023, поскольку Arduino имеет 10-битный АЦП (2 * 10 = 1023).

SensorValue = AnalogRead (SensorPin);

Далее будет преобразовано цифровое значение в напряжение. SensorValue умножается на разрешение АЦП Arduino, которое составляет 5/1023. Разрешение также известно как минимальный шаг АЦП для каждого соответствующего значения напряжения. Например, если значение АЦП равно 10, это означает, что было выполнено 10 шагов, или значение на входном контакте в 10 раз превышает разрешение АЦП. Таким образом, чтобы преобразовать цифровое значение обратно в напряжение, мы просто умножаем его на разрешение, как мы сделали в первой строке.

sensorValue = sensorValue * 5 / 1023 ;

Мы будем использовать оператор if-else, чтобы проверить, является ли напряжение> = 3. Если это так, то включите светодиод. В противном случае, если показания напряжения меньше 3, выключите светодиод.

if (sensorValue >= 3 )

digitalWrite(ledPin, HIGH);

else

digitalWrite(ledPin, LOW);

Демонстрация

Чтобы увидеть демонстрацию приведенного выше кода, загрузите код в Arduino. Но перед загрузкой кода обязательно выберите плату Arduino в меню «Инструменты» > «Плата», а также выберите правильный COM-порт, к которому подключена плата Arduino, в меню «Инструменты» > «Порт».

Когда напряжение больше 3 вольт, светодиод светится. Вольтметр соединен с переменным резистором для проверки напряжения.

Вернёмся к основной теме.

Понижение напряжения переменного тока

Это даст вам представление о том, как использовать аналоговый канал Arduino. Потому что это первый шаг к разработке датчика переменного напряжения с Arduino и измерителя переменного напряжения с Arduino. Как я объяснял ранее, в этом проекте я использовал разностный усилитель для понижения напряжения с 220 вольт переменного тока до менее 3,3 вольт переменного тока. Потому что встроенный АЦП Arduino не может измерять напряжение более 5 вольт.

Поэтому нам нужно найти способ снизить напряжение. Существует много других методов понижения напряжения, таких как трансформатор напряжения или понижающий трансформатор, который является дорогостоящим методом для недорогих приложений. Метод делителя напряжения, это наименее дорогой метод для этой цели. Но у него есть недостаток в меньшем диапазоне напряжения и большем энергопотреблении. Таким образом, мы не можем использовать его в приложениях с критическим питанием.

Поэтому существует другой метод с применением операционного усилителя. Я использую операционный усилитель для понижения. Операционный усилитель используется в качестве разностного усилителя. Регулируя коэффициент усиления операционного усилителя, мы снижаем напряжение до уровня менее 3,3 вольта.

Цепь понижающего напряжения с использованием операционного усилителя

В этой схеме в качестве разностного усилителя используется операционный усилитель LM358. Принципиальная схема дифференциального усилителя приведена ниже:

1 9

Вход дифференциального усилителя составляет 220 вольт переменного тока, а выход дифференциального усилителя менее 3,3 вольт. Я также добавил 5 вольт постоянного тока к переменному, чтобы преобразовать отрицательный цикл в положительный цикл. Потому что Arduino не может напрямую измерять отрицательное напряжение.

Снова обратитесь к статье об измерении напряжения переменного тока с помощью микроконтроллера pic для большего понимания и того, почему я добавил уровень постоянного тока 5 вольт в схему. Выход этой схемы подается на аналоговый канал Arduino, который измеряет это напряжение и после выполнения некоторых вычислений отображает измеренное значение напряжения на ЖК-дисплее.

Принципиальная схема измерения напряжения переменного тока с помощью Arduino

Принципиальная схема измерения переменного напряжения с помощью Arduino приведена ниже. В этой схеме мы использовали ЖК-дисплей 16×2 для отображения значения напряжения.2 11

Скетч для Arduino

#include <LiquidCrystal.h>  // инициализировать библиотеку номерами выводов интерфейса

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int sensorIn = A3;

double Voltage = 0;

double VRMS = 0;

int i;

 

void setup(){

 Serial.begin(9600);

 lcd.begin(16,2); // настроить количество столбцов и строк LCD:

}

void loop(){

  VRMS = voltage_READ();

  lcd.setCursor(0,0);

  lcd.print(«V=»);

  lcd.print(VRMS);

  lcd.print(«V»);

  Serial.print(«V = «);

  Serial.print(VRMS);

  Serial.println(«V»);

  delay(1000);

}

 float voltage_READ(void)

{

 float max;

 int i;

 unsigned int temp=0;

 float maxpoint = 0;

 for(i=0;i<500;i++)

   {

      if(temp =analogRead(sensorIn),temp>maxpoint)

      {

         maxpoint = temp;

      }

   }

maxpoint = maxpoint *(10.0/1023.0);

maxpoint = (maxpoint -5.0);

maxpoint = maxpoint *110.1909091;

 max=maxpoint *.707106781;

 return max;

 }

Как работает код

В комментариях к коду я использовал LCD – ЖК-дислпей.

Сначала подключите библиотеку жидкокристаллического дисплея и определите номер контакта Arduino, который мы подключаем к ЖК-дисплею 16×2.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Мы будем использовать нулевой аналоговый канал Arduino (A0). Эта строка определяет имя нулевого канала как вывод «sensorIn». Сделав это, мы будем использовать это символическое имя во всем коде вместо номера канала АЦП.

const int sensorIn = A0;

Мы определяем три глобальные переменные для хранения значения напряжения, цифрового значения АЦП и для использования с выполнением циклов.

 

double Voltage = 0; // сохраняем значение АЦП

double VRMS = 0; //сохраняем среднеквадратичное значение напряжения

int i;// вести подсчет значения цикла

Внутри функции настройки мы объявляем запуск библиотеки LCD для размера 16×2, используя функцию lcd.begin().

 

lcd.begin(16,2); // устанавливаем количество столбцов и строк ЖК-дисплея

Прежде чем заглянуть внутрь функции loop(), сначала давайте посмотрим на работу подпрограммы voltage_READ().

Функция чтения напряжения

Это основной код проекта вольтметра переменного тока Arduino. Эта функция измеряет пиковое напряжение сигнала переменного тока и преобразует пиковое напряжение в среднеквадратичное (RMS) значение напряжения.

Внутри функции измерения напряжения переменного тока сначала мы берем 500 образцов формы сигнала напряжения переменного тока, используя «петлю» for и аналоговый канал A0 Arduino. Во-первых, мы инициализируем переменную типа float «maxpoint» нулем, и ее значение продолжает обновляться с новым значением выборки ADC, если значение выборки ADC больше, чем текущее удерживаемое значение «maxpoint». 

for(i=0;i<500;i++)

   {

      if(temp =analogRead(sensorIn),temp>maxpoint)

      {

         maxpoint = temp;

      }

   }

После этого эта строка преобразует цифровое измеренное значение АЦП в напряжение.

maxpoint = maxpoint *(10.0/1023.0);

Наконец, мы получаем исходное измеренное значение напряжения, умножая значение напряжения на коэффициент усиления операционного усилителя.

maxpoint = (maxpoint -5.0); // вычесть усиление по постоянному току из сигнала

maxpoint = maxpoint *110.1909091; // умножить на обратную величину усиления

max=maxpoint *.707106781; // преобразование пикового значения в среднеквадратичное значение

Заключение

Теперь вы умеете измерять напряжение Arduino и можете применять это для своих проектов.

Оцените статью
Информация об Ардуино
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я принимаю политику конфиденциальности.