вторник, 12 февраля 2013 г.

ARDUINO омметр


ARDUIO первый полезный проект

Для реализации данного способа подключения потребуется:

·        1 * резистор 10 кОм (100 руб за набор из 95 штук)
·        Разъем на 5 pin «мама» (25 руб за линейку из 40 штук)

Цены взяты с сайта МОЛОТОК.РУ

Иногда, после творения очередного проекта остается куча резисторов, которые нужно разобрать обратно по местам, согласно маркировки. Проблема в том, что современные резисторы имеют маркировку в виде цветных полос. В отличии от советских резисторов, на которых был написан номинал.
Можно сверять цветную маркировку с таблицами в интернете или использовать программу установленную на ANDROID телефоне. Мне показалось это не удобно.

Я решил сделать небольшой проект «ARDUINO омметр». Наверно всем известен делитель напряжения. Вкратце: падение напряжения на резисторе зависит от его сопротивления. Смотрим схему.


ARDUINO имеет аналоговый вход. При чтении с него возвращается значение от 0 до 1023. Собираем схемку.

На одном плече резистор 10 кОм, ко второму плечу подключаем резистор, сопротивление которого нужно измерить.  Среднюю точку подключаем к аналоговому входу A0.
Загружаем скетч. 

// ОММЕТР (С)2013 ALEN Studio by Little_Red_Rat

// Омметр на осное ARDUINO
//
// Подключение делителя напряжения к ARDUINO
// Arduino 5V -> R1 10kOm -> Arduino Analog 0 -> R2 -> Arduino GND

int analogPin = 0; // Анлоговый вход для считывания напряжения с делителя напряжения
float Vout = 0; // Переменная для хранения значения напряжения в средней точки делителя (0-5.0)

float R2 = 0; // Переменная для хранения значения резистора R2

void setup() 

Serial.begin(9600); // Подготовка Serial Monitor для вывода информации


void loop() 

Vout = (5.0 / 1023.0) * analogRead(analogPin); // Вычисляем напряжение в средней точки делителя (0-5.0)
R2 = 10000 / ((5.0 / Vout) - 1); // Вычисляем сопротивление R2 (10000 это значение R1 10 кОм) 
Serial.print("Voltage: "); // 
Serial.println(Vout); // Напряжения в средней точки делителя (0-5.0) для справки
Serial.print("R2: "); // 
Serial.println(R2); // Значение сопротивления R2

delay(1000); // Пауза 1 сек
}


Включаем Serial Monitor. Раз в 1 секунду мы видим напряжение в средней точке делителя и рассчитанное сопротивление.

Для примера измерено сопротивление резистора, который имеет маркировку 10 кОм. Результат работы удовлетворителен. Но если R2 будет намного больше или меньше, чем R1, погрешность возрастет. Составим таблицу. Показания на аналоговом входе могут изменятся от 0 до 1023. Посмотрим чему будет равно расчетное значение сопротивления R2 для некоторых значений U2.

U2 U1 R1 R2 шаг  в %
1 1023 10000 10
2 1022 10000 20 100
3 1021 10000 29 50
4 1020 10000 39 33
5 1019 10000 49 25
6 1018 10000 59 20
7 1017 10000 69 17
502 522 10000 9617
503 521 10000 9655 0.39
504 520 10000 9692 0.39
505 519 10000 9730 0.39
506 518 10000 9768 0.39
507 517 10000 9807 0.39
1017 7 10000 1452857
1018 6 10000 1696667 17
1019 5 10000 2038000 20
1020 4 10000 2550000 25
1021 3 10000 3403333 33
1022 2 10000 5110000 50
1023 1 10000 10230000 100

Как видно из сокращенной таблицы шаг измерения наименьший в середине диапазона. Это значит, что чем ближе значения R1 и R2, тем результат измерения наиболее точен.
Значит не напрасно в цифровых мультиметрах существует несколько диапазонов для измерения сопротивления. Что можно сделать в нашем случае. Переключатель ставить не хочется. Попробуем использовать несколько аналоговых входов. 

Далее идет чистая теория, не опробованная на практике.

Попробуем собрать схему с несколькими делителями напряжения. Подключим измеряемое сопротивление к GND и к одному из аналоговых входов. Чем ближе значение его сопротивления будет к значению сопротивлению подключенного от этого же входа к 5V, тем точнее будет результат измерения.

В программе нужно реализовать следующие функции.

1.   Определение, к какому входу подключено сопротивление. На этом входе значение будет отличным от 1023 (5V), т.к. при отсутствии R2 в делителе в средней точке будет 5V.
2.   Определение, в какой части диапазона находится значение напряжения. Если в начале или в конце диапазона (например 0-256 или 768-1023) ,предложить подключить сопротивление на соседний вход
3.   Рассчитать сопротивление, исходя из значения R1 подключенного к входу, определенному в пункте 1.

Это уже вы как-нибудь самостоятельно, без меня

Для красоты можно добавить дисплей и ввести таблицу стандартных значений резисторов и подводить измеренное сопротивление под стандарт
Класс точности 10%, ряд Е12 по ГОСТу (Ом, кОм, МОм):
1.0, 1.2, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2, 10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82, 100, 120, 150, 180, 220, 270, 330, 390, 470, 560, 680, 820


Большая просьба к любителям перепостов, указывать автора Little_Red_Rat



понедельник, 4 февраля 2013 г.

ARDUINO первый бесполезный проект


ARDUINO первый бесполезный проект

·        1 * ARDUINI NANO (550 руб)

Цены взяты с сайта МОЛОТОК.РУ


Поздравляю, если вы стали счастливым обладателем любой платы ARDUINO или его аналога.
Вы скачали и установили программу для ПК. Подключили ARDUINO. Что дальше ? Хочется проверить работоспособность и попробовать залить свою первую программу.
Все что нужно для создания своего первого скетча (программы) у вас уже есть.  Дело в том, что на плате ARDUINO есть светодиод, который связан с цифровым выходом номер «13». Подавая 1 или 0 на этот выход, мы заставляем светодиод загораться или гаснуть.
На ПК в редакторе ARDUINO набираем или копируем отсюда и вставляем туда следующие строки. После // идут комментарии, вручную их можно не забивать. Можно взять готовый пример ФАЙЛ-ПРИМЕРЫ-BASICS-BLINK

 // Присваиваем имя № 13
int led = 13;

// настройки программы
void setup() {                
// назначаем № 13 как выход
  pinMode(led, OUTPUT);     
}
// повторяющийся цикл программы
void loop() {
  digitalWrite(led, HIGH);   // включаем светодиод (высокий уровень на выход)
  delay(500);                // ждем 0,5 секунд
  digitalWrite(led, LOW);    // выключаем светодиод (низкий уровень на выход)
  delay(500);                // ждем 0,5 секунд
  digitalWrite(led, HIGH);   // включаем светодиод (высокий уровень на выход)
  delay(500);                // ждем 0,5 секунд
  digitalWrite(led, LOW);    // выключаем светодиод (низкий уровень на выход)
  delay(1500);               // ждем 1,5 секунд  
}

Проверяем в редакторе во вкладке СЕРВИС значения параметров ПЛАТА и  ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ. В первом должно быть указано наименование вашей платы, а во втором COM port  компьютера, к которому она подключена (можно уточнить в диспетчере устройств).

Если все верно, то записываем скетч в ARDUINO и смотрим на результат. Светодиод моргает в нужном нам такте. Рядом горит светодиод питания. Немножко портит картинку.




Далее можно поиграться, добавляя строки включения / выключения и изменяя задержки. Можно выдать SOS азбукой Морзе. На сегодня хватит.