В этой статье мы рассмотрим создание омметра (измерителя сопротивления) на основе платы Arduino Uno. Принцип действия нашего омметра будет основываться на использовании делителя напряжения. Измеренное значение сопротивления будет выводиться на экран ЖК дисплея 16х2.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Потенциометр 1 кОм (купить на AliExpress).
- Резисторы (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Работа схемы
Схема омметра на основе платы Arduino Uno представлена на следующем рисунке.
Плата Arduino Uno
Arduino Uno представляет собой плату с открытым исходным кодом, построенную на основу микроконтроллера ATmega328p. Она имеет 14 цифровых контактов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых контактов, регуляторы напряжения и другие элементы. Arduino Uno имеет 32 кБ флэш памяти, 2 кБ SRAM (статическое ОЗУ) и 1 кБ EEPROM (энергонезависимая память). Плата работает на тактовой частоте 16 МГц. Arduino Uno обеспечивает связь по последовательного каналу связи, а также поддерживает протоколы связи I2C и SPI. В следующей таблице представлены технические характеристики платы Arduino Uno.
Микроконтроллер | ATmega328p |
Рабочее напряжение | 5 В |
Входное напряжение | 7-12V (рекомендовано) |
Количество цифровых контактов ввода/вывода | 14 |
Количество аналоговых контактов | 6 |
Flash memory (память программ) | 32 Кб |
SRAM (оперативная память) | 2 Кб |
EEPROM (энергонезависимая память) | 1 Кб |
Рабочая частота микроконтроллера | 16 МГц |
ЖК дисплей 16×2
ЖК дисплей 16×2 является одним из самых распространённых дисплеев для приложений встраиваемой электроники. У этого дисплея есть 2 важных регистра – регистр команд и регистр данных. Регистр команд используется для передачи команд, таких, к примеру, как очистить экран, вернуть курсор в исходное положение и т.п. Регистр данных используется для передачи данных которые будут отображаться на экране дисплея. В следующей таблице представлено назначение контактов (распиновка) ЖК дисплея 16×2.
Контакт | Символ | I/O (ввод/вывод) | Описание |
1 | Vss | — | земля |
2 | Vdd | — | +5V (питающее напряжение) |
3 | Vee | — | питание для управления контрастностью |
4 | RS | I | RS=0 — регистр команд, RS=1 -регистр данных |
5 | RW | I | R/W=0 — запись , R/W=1 — чтение |
6 | E | I/O | Enable (доступен) |
7 | D0 | I/O | 8-битная шина данных |
8 | D1 | I/O | 8-битная шина данных |
9 | D2 | I/O | 8-битная шина данных |
10 | D3 | I/O | 8-битная шина данных |
11 | D4 | I/O | 8-битная шина данных |
12 | D5 | I/O | 8-битная шина данных |
13 | D6 | I/O | 8-битная шина данных |
14 | D7 | I/O | 8-битная шина данных |
15 | A | — | +5V для подсветки дисплея |
16 | K | — | земля |
Основы цветовой маркировки резисторов
Для определения сопротивления резисторов используется следующая формула:
R= { (AB*10c)Ω ± T% }
где
A – значение цвета в первой полоске,
B – значение цвета во второй полоске,
C – значение цвета в третьей полоске,
T – значение цвета в четвертой полоске.
В следующей таблице представлены цветовые коды резисторов.
Цвет | Числовое значение цвета | Множитель (10c) | Допуск |
черный | 0 | 100 | — |
коричневый | 1 | 101 | ± 1% |
красный | 2 | 102 | ± 2% |
оранжевый | 3 | 103 | — |
желтый | 4 | 104 | — |
зеленый | 5 | 105 | — |
синий | 6 | 106 | — |
фиолетовый | 7 | 107 | — |
серый | 8 | 108 | — |
белый | 9 | 109 | — |
золотой | — | 10-1 | ± 5% |
серебряный | — | 10-2 | ± 10% |
нет полоски | — | — | ± 20% |
К примеру, если цветовые коды на резисторе Brown – Green – Red – Silver (коричневый – зеленый – красный – серебро), сопротивление резистора рассчитывается следующим образом:
Brown = 1
Green = 5
Red = 2
Silver = ± 10%
Исходя из приведенной формулы для расчета сопротивления резистора R = AB*10c получаем:
R = 15 * 10+2
R = 1500 Ω
Четвертая полоска показывает допуск резистора, в нашем случае это ± 10%.
10% of 1500 = 150
For + 10 percent, the value is 1500 + 150 = 1650Ω
For - 10 percent, the value is 1500 -150 = 1350Ω
То есть актуальное сопротивление данного резистора будет лежать в диапазоне от 1350 до 1650 Ом.
Также в сети интернет можно найти достаточно много калькуляторов, которые исходя из цветового кода резистора рассчитают вам его сопротивление. Например, вот этот калькулятор, в котором нужно просто ввести цвета колец на резисторе и он вам выдаст сопротивление резистора.
Определение сопротивления резистора с помощью омметра на Arduino
Принцип работы рассматриваемого нами омметра основан на использовании делителя напряжения, напряжение на выходе которого рассчитывается по следующей формуле:
Vout = Vin * R2 / (R1 + R2 )
Из этой формулы мы можем выразить значение сопротивления R2:
R2 = Vout * R1 / (Vin – Vout)
где R1 – известный резистор,
R2 – неизвестный резистор,
Vin – напряжение на выходе 5V платы Arduino,
Vout – падение напряжения на резисторе R2 по отношению к земле.
Мы в нашем проекте выбрали значение сопротивления R1 равное 3,3 кОм, но вы можете выбрать другое значение этого сопротивления.
То есть если мы будем знать падение напряжения на неизвестном резисторе (Vout), то мы можем сравнительно просто определить значение сопротивления неизвестного резистора R2. Мы будем считывать значение этого напряжения (Vout) с помощью аналогового контакта A0 платы Arduino и конвертировать значение с выхода АЦП (аналогового-цифрового преобразователя) данного контакта (0-1023) в цифровое значение напряжения.
Исходный код программы
Полный код программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.
В программе мы должны сообщить плате Arduino, к каким ее контактам подключен ЖК дисплей. Контакт RS ЖК дисплея подключен к цифровому контакту 2 платы Arduino, а контакт Enable – к цифровому контакту 3 платы Arduino. Контакты данных ЖК дисплея (D4-D7) подключены к цифровым контактам 4,5,6,7 платы Arduino.
1 |
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7 |
Затем в программе мы должны инициализировать необходимые нам переменные.
1 2 3 4 |
int Vin=5; //напряжение на контакте 5V платы arduino float Vout=0; //напряжение на контакте A0 платы arduino float R1=3300; //значение сопротивления известного резистора float R2=0; // значение сопротивления неизвестного резистора |
Далее в программе мы должны инициализировать наш ЖК дисплей.
1 |
lcd.begin(16,2); |
Затем мы должны считать значение на выходе АЦП контакта A0.
Далее значение с выхода АЦП (оно в диапазоне от 0 до 1023) конвертируется в значение напряжения.
1 2 |
buffer=a2d_data*Vin; Vout=(buffer)/1024.0; |
Плата Arduino Uno имеет АЦП на своих аналоговых контактах с разрешением 10 бит. Соответственно входное напряжение в диапазоне от 0 до 5 В преобразуется в значение на выходе АЦП от 0 до 1023. То есть если мы умножим значение с выхода АЦП на (5/1024), то мы получим цифровое значение входного напряжения. Более подробно об АЦП в Arduino можно прочитать в этой статье.
Далее в коде программе исходя из найденного значения напряжения мы рассчитываем значение сопротивления R2.
1 2 |
buffer=Vout/(Vin-Vout); R2=R1*buffer; |
Далее найденное значение сопротивления резистора R2 выводится на экран ЖК дисплея.
1 2 3 4 5 |
lcd.setCursor(4,0); lcd.print("ohm meter"); lcd.setCursor(0,1); lcd.print("R (ohm) = "); lcd.print(R2); |
Если вас заинтересовал данный проект, то вы можете следующие похожие проекты на нашем сайте:
— цифровой вольтметр на Arduino;
— цифровой амперметр на Arduino;
— частотомер на Arduino;
— измеритель емкости на Arduino.
Далее приведен полный код программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include<LiquidCrystal.h> LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7 int Vin=5; //напряжение на контакте 5V платы arduino float Vout=0; //напряжение на контакте A0 платы arduino float R1=3300; //значение сопротивления известного резистора float R2=0; // значение сопротивления неизвестного резистора int a2d_data=0; float buffer=0; void setup() { lcd.begin(16,2); } void loop() { a2d_data=analogRead(A0); if(a2d_data) { buffer=a2d_data*Vin; Vout=(buffer)/1024.0; buffer=Vout/(Vin-Vout); R2=R1*buffer; lcd.setCursor(4,0); lcd.print("ohm meter"); lcd.setCursor(0,1); lcd.print("R (ohm) = "); lcd.print(R2); delay(1000); } } |
2 ответа к “Омметр (измеритель сопротивления) на Arduino Uno”
Я пробовал заменить arduinj uno на atmega328 (с учетом распиновки и кварцем 16 Мгц),но точность здорово упала.Думаю проблема во фюзах.Я отключил делитель на 8.
Если нужно, могу подсказать адрес статьи про отличия в установке фьюзов по умолчанию в плате Ардуино и в микроконтроллере atmega328