🏠 Линейка-энкодер
Если Вы только начали своё знакомство с модулями Arduino, вас обязательно заинтересуют энкодеры — устройства, используемые для точного позиционирования поворота детали или инструмента в токарных или фрезерных станках. Подробнее об управлении энкодером вы сможете прочитать в отдельной статье, а сейчас я покажу, как можно использовать энкодер в нестандартной ситуации.
🌐 Такие устройства, как энкодер, используются в токарных или фрезерных станках для позиционирования точного поворота детали или инструмента. Энкодер очень точный, и чем больше импульсов за 1 оборот выдает, тем точнее энкодер. В качестве примера возьмем энкодер EC11, у которого за один оборот выдается 24 импульса. Что это означает? Пока мы крутим вал энкодера, он на выходе выдает определенное количество импульсов — чем больше крутим, тем больше импульсов. Если крутим в другую сторону, количество импульсов также увеличивается, но со знаком «–».
🫠 Итак, сегодня мы создадим энкодер, который будет измерять расстояние. Расстояние на любой поверхности — длину криволинейного пола, потолка и т. д. Это может быть полезным для измерения нестандартных длин или даже для работы над проектами по ремонту и декорированию. Но по порядку.
🔧 Нам потребуется:
- Arduino (например, Nano)
- Энкодер EC11
- LCD1602 I2C дисплей (необязательно)
🔬 Схема подключения:

💡 Дисплей (необязательно):
- VCC (дисплей) к +5V (Arduino)
- GND (дисплей) к GND (Arduino)
- SDA (дисплей) к A4 (Arduino)
- SCL (дисплей) к A5 (Arduino)
💡 Подключение энкодера:
- 5V (энкодер) к +5V (Arduino)
- GND (энкодер) к GND (Arduino)
- S1 (энкодер) к D2 (Arduino)
- S2 (энкодер) к D3 (Arduino)
- Key (энкодер) никуда не подключается.
🛠 Переходим к коду:
🛠 При использовании дисплея нужно установить библиотеку LiquidCrystal_I2C.h
. Эта библиотека позволяет легко работать с LCD-дисплеями через шину I2C, что значительно упрощает процесс подключения и программирования.
Для измерения расстояния нам потребуется несколько адаптировать код. Прежде всего, мы должны надеть колесо на вал энкодера. Диаметр этого колеса можно указать в коде для точного вычисления пройденного расстояния. Кроме того, в коде нужно указать количество импульсов за один оборот — эта информация берется из описания энкодера, в нашем случае это 24 импульса.

Ещё одна вещь, о которой стоит помнить: для более точного измерения нужно обеспечить отсутствие проскальзывания между колесом и поверхностью, на которой проводится измерение. В противном случае, погрешность может значительно увеличиться.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int pinS1 = 2; // S1
const int pinS2 = 3; // S2
volatile long pulseCount = 0;
const float wheelDiameter = 50.0; // Диаметр колеса в мм
const int pulsesPerRevolution = 24; // Количество импульсов за оборот
const float mmPerPulse = (wheelDiameter * 3.14159) / pulsesPerRevolution;
void setup() {
pinMode(pinS1, INPUT);
pinMode(pinS2, INPUT);
attachInterrupt(digitalPinToInterrupt(pinS1), encoderInterrupt, CHANGE);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
}
void loop() {
float distanceMM = pulseCount * mmPerPulse;
Serial.print("Импульсов ");
Serial.print(pulseCount);
Serial.print(" Расстояние: ");
Serial.print(distanceMM);
Serial.println(" мм");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(distanceMM);
lcd.print(" mm");
delay(500);
}
void encoderInterrupt() {
int s1State = digitalRead(pinS1);
int s2State = digitalRead(pinS2);
if (s1State == s2State) {
pulseCount++;
} else {
pulseCount--;
}
}
🔖 Загрузка и тест:
📈 Загрузив код на Arduino, на дисплее (если он используется) будут отображаться значения дистанции в реальном времени.

Это позволяет не только контролировать процесс измерения, но и анализировать полученные результаты. Если дисплей не используется, значения можно просматривать в мониторе порта, доступном в среде программирования Arduino IDE. Выглядит это так:

Во время тестирования я использовал обычную пластиковую крышку, чтобы сделать колесо для вала энкодера. Хотя крышка иногда проскальзывала, погрешность составила всего 3 мм на длине около 1 метра, что является довольно неплохим результатом для любительского проекта. Если же требуется повысить точность, можно использовать специальное колесо с резиновым покрытием для лучшего сцепления.

🌟 Как ещё можно использовать энкодер?
Лично я думаю, что энкодер может быть полезен не только для измерения расстояния. Например, вот несколько идей, как его можно применить в быту или для интересных проектов:
- Точная настройка громкости звука или освещения. Энкодеры часто используются в обычных аудиосистемах для регулировки громкости. Но можно пойти дальше — создать систему управления освещением в комнате, где вы просто поворачиваете энкодер, и лампы плавно меняют свою яркость. Это удобно, просто и даже немного футуристично.
- Управление устройствами в умном доме. Представьте себе, что вы можете использовать энкодер как ручку, чтобы открывать или закрывать шторы, или настраивать температуру в комнате. Это можно интегрировать с другими компонентами Arduino, и таким образом получить систему, которая действительно упрощает вашу жизнь.
- Самодельные контроллеры для игр. Если вы любите играть в симуляторы, как, например, симулятор вождения, то энкодер может стать частью вашего собственного самодельного руля. Возможно, это не заменит профессиональные игровые устройства, но точно добавит веселья в процесс создания игр своими руками.
- Проекты для сада и огорода. Например, можно сделать самодельное устройство для измерения длины грядки или ограды. Это намного удобнее, чем носить с собой рулетку, особенно если нужно измерить что-то длинное и извилистое. Просто ведёте энкодер по земле — и сразу видите длину на дисплее.
- Точное позиционирование при работе с инструментами. Если вам нужно делать повторяющиеся точные движения — например, сверлить отверстия на одинаковом расстоянии, — энкодер поможет точно контролировать движение инструмента и избежать ошибок. Это особенно удобно, если работаете с деревом или металлом.
🌍 Советы для повышения точности:
Для достижения максимальной точности при измерении расстояния с помощью энкодера, следует придерживаться нескольких простых правил:
- Используйте колесо с покрытием, которое обеспечит хорошее сцепление с поверхностью.
- Убедитесь, что ось энкодера надёжно закреплена, чтобы избежать люфта или нежелательного движения во время измерений.
- Если возможно, проводите измерения на ровных поверхностях, чтобы минимизировать влияние неровностей на результат.
🥇 Универсальность и точность:
Энкодер — это настоящий современный конкурент рулетке по мерам точности, так как он позволяет не только измерять расстояние, но и контролировать процесс вращения и позиционирования. Используя энкодер, вы сможете измерять длины и углы с высокой точностью, что открывает множество возможностей для реализации ваших проектов.
Удачи в измерениях вместе с myproject.com.ua! 🛏
© 2024 Мій Проект. Автор: Ardu_miha. Использование материалов разрешено только с указанием источника.
Написать комментарий