Простое измерительное колесо с поворотным энкодером, сделанное своими руками
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
|
Приложения и онлайн-сервисы
|
Об этом проекте
Измерительное колесо - это строительный измерительный инструмент. Колесо вращается, и, используя базовую кинематику вращения (s =rθ), вы можете определить расстояние между двумя точками.
На видео ниже показана уменьшенная функциональная модель такого устройства, состоящая из нескольких компонентов:
- Ардуино Нано
- Поворотный энкодер
- ЖК-дисплей 16x2
- Банк 10к.
- резистор 220 Ом
Принцип работы следующий:
Угловой энкодер измеряет количество оборотов, но мы должны преобразовать вращение в пройденное расстояние. Пройденное расстояние зависит от диаметра колеса. Поворотный энкодер перемещается на N шагов за один полный оборот (360 градусов). Количество шагов на оборот зависит от углового энкодера, который можно изменить с 8 на 48. Предположим, N - это количество шагов на оборот, а R - радиус колеса.
Пройденное расстояние за один оборот =2xπxR
Пройденное расстояние за один шаг =2xπxR / N
Я написал для этого очень простой код, и пройденное расстояние отображается на ЖК-экране в сантиметрах. В зависимости от компонентов, используемых в коде, мы меняем значения «N» и «R».
В моем случае колесо изготовлено на 3D-принтере, и вся сборка установлена на алюминиевом стержне, как видно на видео.
Код
- Код
Код C / C ++
/ * Measurning Whell * * Мирко Павлески, * * https://www.youtube.com/channel/UCHLzc76TZel_vCTy0Znvqyw * / # includeLiquidCrystal lcd (5, 6, 7, 8, 9, 10); int pin1 =2; int pin2 =3; int Pos =0; int State; int LastState; const float pi =3,14; const float R =3,25; const int N =40; расстояние с плавающей запятой =0; void setup () {pinMode (pin1, INPUT_PULLUP); pinMode (pin2, INPUT_PULLUP); lcd.begin (16, 2); lcd.print («ИЗМЕРИТЕЛЬНОЕ КОЛЕСО»); LastState =digitalRead (pin1); } void loop () {Состояние =digitalRead (pin1); если (Состояние! =LastState) {если (digitalRead (pin2)! =Состояние) {Pos ++; } else {Pos -; }} distance =((2 * pi * R) / N) * Pos; lcd.setCursor (0, 1); lcd.print (расстояние); lcd.setCursor (5, 1); lcd.print ("см"); LastState =State; }
Схема
Производственный процесс
- Самодельные простейшие часы Numitron IV9 с Arduino
- Игра с гироскопом Arduino с MPU-6050
- Простой датчик препятствий с Arduino
- DIY вольтметр с Arduino и дисплеем Nokia 5110
- MobBob:самостоятельный робот Arduino, управляемый смартфоном Android
- Датчик Интернета вещей с Arduino, Yaler и IFTTT
- Простой измеритель частоты своими руками до 6,5 МГц
- Монитор качества воздуха своими руками с датчиком Sharp GP2Y1010AU0F
- Портативный счетчик Гейгера с Arduino Nano
- Простой будильник с DS1302 RTC