Первый опыт с Arduino

Jan 09, 2017 21:00

Уже давно я мечтал освоить Arduino. Это очень дешёвый микрокомпьютер, у которого есть 14 цифровых входов/выходов и 6 аналоговых входов. Для Arduino есть множество дополнительных модулей (датчики, клавиатуры, экраны, моторы), программы для него создаются на простом языке программирования и загружаются по USB.

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




Arduino UNO удобно использовать, как платформу для разработки (плата напрямую подключается к компьютеру, а все соединения выполняются без пайки проводами с разъёмами). Такая плата на Aliexpress стоит от $2.99. Когда разработка завершена, в готовом устройстве можно использовать гораздо меньшую по размерам и ещё более дешёвую плату Arduino Pro Mini, обладающую теми же возможностями. Она стоит меньше 100 рублей - $1.3.



Для меня Arduino не игрушка. Я хочу с помощью неё сделать совершенно конкретные, нужные мне устройства. Первые две вещи, которые я хочу сделать - гониофотометр и электронный ЛАТР.

Гониофотометр - устройство, позволяющее определить световой поток лампы и угол освещения. Он прокручивает мотором патрон с лампой на 360 градусов в горизонтальной плоскости, измеряя уровень освещённости в каждом положении лампы, а затем рассчитывает световой поток и угол.

Электронный ЛАТР - устройство, позволяющее получать переменное напряжение от 1 до 256 вольт с дискретностью 1 вольт. Оно пригодится для моего тестирования ламп и для регулировки скорости вентиляторов (с обычными диммерами вентиляторы гудят). Идея в том, чтобы заказать небольшой трансформатор с восемью вторичными обмотками: 1, 2, 4, 8, 16, 32, 64 и 128 вольт. Коммутируя их с помощью реле, управляемых Arduino, можно будет получать любые напряжения.

Сегодня я научился управлять шаговым мотором. Мотор 28BYJ-48 вместе с платой управления стоит всего $1.65. У него есть встроенный редуктор и он делает полный оборот за 2048 шагов или 4096 полушагов.

Сначала я пробовал разбираться с готовыми библиотеками Stepper и AccelStepper, но потом понял, что проще обойтись без них и управлять двигателем напрямую.

Я нашёл в интернете программу управления и схему подключения. Запустил - крутится. Научился делать циклы. Потом разобрался, как создавать функции. В результате через три часа после того, как первый раз в жизни включил Arduino, я создал функцию, которая умеет делать нужное количество шагов мотора.
Вся программа, вращающая двигатель по часовой стрелке на полоборота с паузой 200 мс выглядит так:

int pins[] = {8, 9, 10, 11}; //Задаем пины по порядку

int phases = 8;

bool motorPhases[8][4] = { // [phase][pin]
// -------- pins ----------
// Winding A B A B
// Motor Pin 1 2 3 4
// Color Bl Pi Ye Or
{ 1, 1, 0, 0},
{ 0, 1, 0, 0},
{ 0, 1, 1, 0},
{ 0, 0, 1, 0},
{ 0, 0, 1, 1},
{ 0, 0, 0, 1},
{ 1, 0, 0, 1},
{ 1, 0, 0, 0}
};

void setup() {
for (int i = 0; i < 4; i++) pinMode(pins[i], OUTPUT);
}

int phase = 0;
int _step = 1; // Если у шага поменять знак, на -1 - изменится направление вращения.

void loop() {
int a = 2047;
step (a);
delay(200);
}

void step(int x){
int i;
for(i = 0; i{
phase += _step;
if (phase > 7) phase = 0;
if (phase < 0) phase = 7;

for (int i = 0; i < 4; i++) {
digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW));
}
// Пауза на вращение на один полушаг
delay(2);

}
digitalWrite(pins[0], LOW);
digitalWrite(pins[1], LOW);
digitalWrite(pins[2], LOW);
digitalWrite(pins[3], LOW);
}

Конечно, предстоит разбираться ещё с очень многим, но успешное начало положено. :)

Сегодня я заказал ещё модуль двухстрочного ЖК-экрана с шестью кнопками за $2.60, пару модулей с четырьмя силовыми реле по $1.95 (есть модули и с восемью реле, но я решил, что два модуля по 4 реле удобней), четырёхкнопочную мембранную клавиатуру за $0.53, четырёхразрядный индикатор за $1.4. Ещё заказал два разных датчика освещённости за $0.4 и за $0.6, но с ними я промахнулся - они пороговые и используются для включения освещения в тёмное время суток. Но ничего, пригодятся. Заказал хитрый датчик с двумя фотодиодами и двумя АЦП за $1.75 и простенький датчик с аналоговым выходом за $0.9.

© 2017, Алексей Надёжин

Основная тема моего блога - техника в жизни человека. Я пишу обзоры, делюсь опытом, рассказываю о всяких интересных штуках. А ещё я делаю репортажи из интересных мест и рассказываю об интересных событиях.
Добавьте меня в друзья здесь. Запомните короткие адреса моего блога: Блог1.рф и Blog1rf.ru.

Второй мой проект - lamptest.ru. Я тестирую светодиодные лампы и помогаю разобраться, какие из них хорошие, а какие не очень.

Электроника

Previous post Next post
Up