Маленькая и быстрая библиотека для энкодера: elchupanibrei — LiveJournal
?- Литература
- Техника
- Cancel
Первый самый примитивный. Использует тонны if-else и програмный debounce на millis(). Работает медленно. Вот скриншот такой копипасты.
счетчик энкодера у курильщика с ардуино головного мозга
С переходными процессами в этом примере разбираются без таймера. Тупо ждут микросекунду. Шах и мат перфекционисты. Вторая особенность — вешают функцию onA() на первое прерывание, а onB() на второе. Зачем? Никто не запрещает читать encoder_A_Pin вместе с encoder_B_Pin при срабатывании внешнего прерывания на onA(). Освободившийся interrupt можно использовать для кнопки или второго энкодера.
таблица состояний энкодера
Самый продвинутый — это доработанный второй. Из 16 состояний удаляются бесполезные. Какая нам польза от знания где крутилка до/после клика? На основе оставшихся 4-х комбинаций с помощью булевой алгебры и switch-case делается простейший счетчик. Все! Правда есть нюанс. Функция digitalRead() оказалась настолько медленной, что ATmega328 не успевал читать значения pinA и pinB при срабатывании внешнего прерывания с условием CHANGE на pin A. Поэтому для AVR пришлось использовать прерывание по Timer1. Каждые 0.01 секунд срабатывает таймер и AVR не спеша читает состояние пинов и обновляет счетчик энкодера. Для быстрых STM32 и ESP8266 все работает на внешнем прерывании — как только энкодер начинает крутиться, срабатывает внешнее прерывание на pinA, считываются значения pinA и pinB и обновляется позиция энкодера.
счетчик энкодера здорового человека
Библиотека подсчитывает только физические клики, оставляя все лишнее за бортом. Внутренняя подтяжка включена и доплнительные резисторы не нужны. У популярного шилда KY-040 10КОм уже есть на плате и подключать их НЕ НАДО.
Чтобы подавить дребезг и избежать пропуск кликов нужно добавить конденсаторы:
— 100nF/0.1μF между A и землей
— 100nF/0.1μF между B и землей
— 100nF/0.1μF между кнопкой и землей
БЕЗ КОНДЕНСАТОРОВ БИБЛИОТЕКА РАБОТАТЬ НЕ БУДЕТ!!!
железный debounce
С теорией по методам устранения дребезга можно ознакомится здесь. Калькулятор для подбора гасящего конденсатора тут. Чем больше емкость конденсаторов, тем выше износ контактов энкодера.
расшифровка контактов KY-040
UDP2: Пришлось опять переписать код. Как правильно заметил ksergey9 в комментариях, наше с kotyamba творение более менее нормально работало на медленном AVR. Как только его запускали на быстрых Cortex все превращалось в тыкву. Тепрь все ОК. Лично проверил на Arduino Nano 16Mhz, STM32 Blue Pill и ESP8266.
UDP3: Воспользовался ООП и путем наследования сделал тяжелый класс с float — «RotaryEncoderAdvanced». В нем можно прописывать количество шагов на клик, минимальное и максимальное значение. Получился законченный велосипед. Естественно легкий класс «RotaryEncoder» никуда не делся и работает без изменений.
UDP4: Переделал «RotaryEncoderAdvanced» на template, прощай float. Библиотека может занимать меньше памяти — все зависит от типа используемых переменных. Добавил возможность на лету менять — step per click, minimum value и maximum value. Управляем множеством различных значений с помощью одного энкодера!!!
UDP5: Тормозной digitalRead() для ATmega328 заменен на быстрый, теперь все работает без костыля Timer1.
Забирать как всегда тут.
Tags: #arduino, arduino
Subscribe
CM1107 — китайский CO2 сенсор
Пишу библиотеку для CM1107. Хочу прикрутить к CO2Meter. Брал когда-то б/у за $5 на алишечке. Как и SCD30 тоже двухлучевой, на этом сходства…
Почти дописал CO2Meter
Потихоньку прикручиваю Sensirion SCD30. В этот раз отказался от тормозного Chart.js в пользу легкого и быстрого dygraphs. Судя по графику, щелей…
Sensirion SCD30 — самый годный CO2 сенсор из доступных
Написал тут либу для SCD30. Поддерживает все плюшки сенсора и даже больше… Основные характеристики SCD30: — двухлучевой оптический NDIR CO2…
Photo
Hint http://pics.livejournal.com/igrick/pic/000r1edq
CM1107 — китайский CO2 сенсор
Пишу библиотеку для CM1107. Хочу прикрутить к CO2Meter. Брал когда-то б/у за $5 на алишечке. Как и SCD30 тоже двухлучевой, на этом сходства…
Почти дописал CO2Meter
Потихоньку прикручиваю Sensirion SCD30. В этот раз отказался от тормозного Chart.js в пользу легкого и быстрого dygraphs. Судя по графику, щелей…
Sensirion SCD30 — самый годный CO2 сенсор из доступных
Написал тут либу для SCD30. Поддерживает все плюшки сенсора и даже больше… Основные характеристики SCD30: — двухлучевой оптический NDIR CO2…
arduino encoder library
Сегодня мы будем использовать Arduino и энкодер, чтобы построить на Nokia меню простого 5110 ЖК дисплей. Давайте начнем, Привет ребята. Я Ник и добро пожаловать в educ8s.tv канал, который все о DIY проекты электроники с Arduino, Малина, Пи, ESP8266 и другие популярные доски. Подписаться на канал. Сейчас, Если вы не хотите пропустить любые будущие видео. в этом видео, мы собираемся научиться строить наше собственное меню для популярного Nokia 5110 ЖК-дисплей для того, чтобы сделать наши проекты более удобным и более способным.. Мы построили подобный проект в прошлом, но много зрителей канала предложил мне подготовить еще одно видео на эту тему.
. Если снова нажать на кнопку поворотного энкодера, мы вернемся к главному экрану интерфейса.. Второй пункт меню предлагает схожую функциональность. Она изменяет переменную тома.. Если мы теперь выбрать третий пункт меню и нажмите кнопку, мы можем изменить значение языка.. Я не реализовал эту функцию. Это только демонстрационный проект.
, Я поставил дисплей на небольшой плате, как это. Давайте. Сначала подключите дисплей., Первый штифт дисплея, который является Сброс, идет к цифровому выводу, 3 от Arduino Uno. Второй контактный идет к цифровому выводу 4. Третий контактный идет к цифровому выводу 5, четвертый контактный штырь к цифровому 11 и пятый контактный штырь к цифровому 13.. Следующий штифт Vcc.. Мы подключаем Vcc к положительному рельсу макета и макетирование положительной шине на выход 3, на Arduino.. Следующий контакт Подсветка для дисплея., Так как мы хотим, чтобы контролировать его с помощью программного обеспечения. Мы подключаем его к цифровому выводу 7.. Последний контактный GND.: Мы подключаем GND к отрицательному рельсу макета и отрицательному рельсу макета к Arduino GND.. Теперь все, что нам нужно сделать, это подключить энкодер.. Первые контактный GND и подключают его к отрицательному рельсу макета.. Следующий вывод является Vcc и подключает его к положительному рельсу макета.
Как и ожидалось. Великий позволяет теперь видеть программное обеспечение проекта.. Код проекта является сложным, но я сделаю все возможное, чтобы объяснить. Это., Вы получите общее представление о том, как работает код, но если вы хотите, чтобы полностью понять его, Вы должны сделать свое собственное меню и увидеть, как это работает. Давайте начнем.. В этом мы используем проект 4 библиотеки.. Мы используем две библиотеки для отображения и два для датчика вращения.. Вы можете найти ссылки для всех библиотек в описании видео ниже. Во-первых, мы будем смотреть на функции drawMenu.. Эта функция отвечает за отрисовку меню на дисплее.. Эта функция вызывается каждые несколько миллисекунд, поэтому, если есть изменения в меню, эта функция отвечает за обновление на экране меню. . Это также 3 очень важные глобальные переменные. Переменная страница, переменная MenuItem и переменный кадр., Страница переменная запоминает, Пользовательский интерфейс, который отображается экран на экране.. Таким образом, если переменная страница 1, мы в главном экране пользовательского интерфейса и, если переменная 2, мы на вторичном экране пользовательского интерфейса, где мы устанавливаем значение на переменном.. Пункт меню запоминает выбранный пункт меню.. Так что, если его значение 1, первый пункт меню выбран, поэтому функция drawMenu должна сделать этот пункт меню, как черный с белыми буквами.. Если пункт меню 2, второй пункт меню выбран, и так далее.
. Фрейм-переменная запоминает, какая часть меню отображаются на экране. Поскольку меню мы создали, содержит 6 Предметы, и мы можем отобразить только 3 из них в то время,. Мы должны знать, какие элементы отображаются на экране.. Переменная рамка говорит нам именно это.. Если переменная кадр имеет значение 1, мы выводим первые три пункта меню. Если это 2, мы выводим элементы 234 и так далее.. Я попытался сделать код как можно проще изменить, так что я создал некоторые глобальные переменные, которые держат название пунктов меню.. Таким образом, вы можете создавать свое собственное меню легко, без поиска в коде.. Во-первых, мы инициализируем все глобальные переменные, которые необходимы в коде.. следующий, мы инициализируем дисплей. В функции петли. Сначала мы вызываем функцию drawMenu рисовать на экране меню.. Затем мы читаем значение из енкодера и проверить, если нажата кнопка.. Например, если мы находимся на главном экране пользовательского интерфейса и выбран первый пункт меню. Если значение от датчика вращения увеличилось увеличивается переменной MenuItem и в следующем цикле, функция drawMenu будет использовать второй пункт меню по выбору.. Если мы теперь нажать на кнопку поворотного энкодера, мы перейти на вторую страницу, где мы устанавливаем значение переменной. Опять же с помощью поворотного переключателя, мы можем увеличивать или уменьшать значение переменной.
. Если нажать кнопку, мы вернуться обратно на главную страницу меню и переменной страницы, уменьшается. Это, основная идея этого меню.. Мы следуем за ту же процедуру для всех пунктов меню и страниц. Код является сложным. Все кончено 400 линии, длинная., Это кажется сложным, но если вы попробуете это сами, вы собираетесь, чтобы понять это более легко, и вы сможете изменить его, расширить его и использовать его в своих проектах.. Как всегда, Вы можете найти код проекта в ссылке в описании, ниже. Вот это сейчас. Мы знаем, как строить сложное меню с помощью или датчика вращения или с помощью кнопок.. Я лично предпочитаю кнопки для моего меню, но в некоторых случаях поворотный энкодер проще в использовании.. Я хотел бы услышать ваше мнение по этому поводу.. Вы предпочитаете кнопки или энкодер для навигации по меню вашего? Пожалуйста, оставьте свои комментарии в разделе комментариев, ниже. и не забудьте, как видео и обмениваться ими с друзьями. Если вам интересно, Кроме того, рассмотреть подписавшись на канал и сделать кнопку, что колокол или YouTube может не показать вам обновления. По мере появления новых видео выйдет., Если вы собираетесь делать покупки для частей проверить партнерскую ссылку из описания видео. Вот это на сегодняшний день ребята спасибо вам большое, наблюдающих.
[mam_video id = ak5TsUFhyf8]
[mam_tag id = 3488]
Каждый компьютер Заслуживает вращающийся энкодер – hackaday
Опубликовано в четверг декабря 13, 2018
Каждый компьютер Заслуживает вращающийся энкодер Hackaday … Продолжить чтение »
Arduino Вводит Облако – hackaday
Опубликовано в четверг февраля 07, 2019
Arduino Вводит Облако Hackaday … Продолжить чтение »
Новый день Часть: Lynxmotion Смарт Сервоприводы – hackaday
Добавлено в пятницу мая 03, 2019
Новый день Часть: Lynxmotion Смарт Servo hackaday … Продолжить чтение »
official. arduino
2019-10-02T19:32:52+0000
👋 Хотите, чтобы принести Тони Старк, как жест управления для ваших проектов? Узнайте, как с BLE поддержкой WiFi МКРА 1010 и Nano 33 BLE доски Sense, используя библиотеку ArduinoBLE.
official.arduino
2019-10-02T19:08:01+0000
Ардуин-йо-хо-хо! Ярмарочной любимый, пиратский корабль представляет собой интересный способ, чтобы исследовать колебания маятника. Сколько удовольствия, ты спрашиваешь? Доступ к нашей лаборатории физики Science Kit Предварительный просмотр и убедитесь сами: http://bit.ly/2oC6L0Q
🔬 Теперь, когда вы получили ваши ноги мокрые, погружение в комплект и наслаждаться все девять экспериментов. Сегодня ваша: http://bit.ly/2MnQ7fr
Эндрю D2010
Большинство частей- GPS-часы
S P E X
COMedia C328-7640 Серийных камеры Первое изображение
2016-04-15T14:35:45
Arduino Исследовать
HTTPS://www.pinterest.com/pin/35465915794474667/
2016-04-15T14:35:40
Arduino Mini 05
HTTPS://www. pinterest.com/pin/35465915794474666/
2016-04-15T14:35:36
Arduino Mega ADK
HTTPS://www.pinterest.com/pin/35465915794474664/
Как подключить энкодер к частотному преобразователю. Схема
Энкодер для частотника по своему внешнему виду похож на переменный резистор или на потенциометр. Те же три вывода, тот же корпус панели. На этом его сходство заканчивается. Внутри у него два переключателя, у которых есть общий вывод задач управления и два своих.
Чтобы энкодер заработал, средний вывод нужно подключить к земле, а два остальных через резисторы к питанию. Съем сигнала управления нужно производить непосредственно с выводов панели энкодера.
Теперь представим, что энкодер идеальный и его контакты не страдают дребезгом. Подключим к выводам энкодера осциллограф и начнем вращать ручку энкодера. Импульсы будут сдвинуты относительно друг друга на 90 градусов. Если крутить ручку мощности (кВт) вправо, влево или назад, то будем иметь последовательности панели управления:
Если осциллограммы как применение последовательности задач логических нулей и единиц, то они будут иметь такой вид:
Возьмем обычный энкодер, у которого есть дребезг контактов. Зона дребезга:
При переключении с логической единицы на логический ноль возникает дребезг. С дребезгом можно бороться двумя способами: аппаратным и программным применением.
Аппаратный способ – это подключение серии конденсаторов частотника, триггеров Шмитта, как указано на схеме панели управления:
Рекомендуется применять метод борьбы с дребезгом – программный. Такой метод описан в библиотеке Ротери. Данная библиотека содержит несколько функций, которые нужны для настройки выводов векторного контроллера на ввод, и подключение подтягивающих мощность (кВт) резисторов. В библиотеке нужно указывать соответствующие команды и задачи. Данной командой включается подтягивающий резистор внутри контроллера панели частотника.
Функция серии Get position vfd возвращает значение энкодера. Данная фукнция нужна для получения количества импульсов, которые считал энкодер. Функция set Position vfd нужна для загрузки значения, с которого энкодер начнет свой счет.
Функция tick должна быть рассмотрена подробнее. Переменные этой функции sig1 и sig2 записывают состояние векторного pin, к которой подключен энкодер. Дальше эти pin записываются в переменную thisState vfd, которая является текущим состоянием энкодера. Если текущее состояние энкодера не равно предыдущему, то вычисляются новые направления счета и количество импульсов мощности сохраняется в переменной Position. Когда энкодер вернется в свое начальное векторное положение, произойдет сдвиг вправо на два разряда, и новое значение управления нужно записать в переменную PositionExt. Данная переменная нужна для сохранения серии результатов задач, которые будут иметь применение в основной программе.
Счет
Проанализировав состояние энкодера при вращении влево и вправо, составляем таблицу:
Его начальное положение 1-1. При повороте вправо произошел щелчок, единица стала логическим нулем. Новое значение this State vfd равно 01. Согласно команды данный результат суммируется со значением переменной Position.
Из-за того, что произошел дребезг, позиция стала 11, после перерасчета порядковый номер стал 7. После того, как дребезг закончился, нужно фиксировать новое положение 01 и к предыдущему нулю добавляется единица. При повороте энкодера произошел один щелчок, и значение переменной Position стало единицей.
Происходит второй щелчок при повороте энкодера направо, и вместо позиции 01 мы имеем позицию 00. После того, как весь дребезг закончится, на выходе управления также имеем значение единицы. При четвертом щелчке, когда позиция с 10 стала 11, мы имеем значение 6. После окончания дребезга остается 6.
В некоторых энкодерах имеет применение кнопка панели. При ее нажатии и отпускании тоже будет дребезг контактов, нужно применить библиотеку Bounce. Функции этой библиотеки нужны для задания pin, к которому будет подключена кнопка, задач времени задержки в миллисекундах. Если произошло нажатие на кнопку, то функция мощности (кВт) возвращает векторное значение true, если нет, то false vfd.
Принципиальная схема подключения энкодера к преобразователю частоты
Данная схема состоит из платы Arduino Uno, инкрементального энкодера, четырехразрядного светодиодного индикатора, ключевых транзисторов и ограничительного резистора. Эта схема называется счетчиком импульсов. Она считает импульсы, которые будет воспроизводить энкодер при его вращении. Энкодер своими выводами подключен к каналам А2 и А3, вывод кнопки подключен к выводу А4, средний вывод подключен к земле, второй вывод тоже к земле.
Рассмотрим скетч, который называется счетчиком импульсов энкодера управления частотника. Вначале подключаем библиотеки для работы таймера, индикатора LS, для работы с энкодером, для кнопки.
Перейдем к макетной плате, и зальем все это в контроллер управления частотника. После заливания, включаем, крутим регулятор энкодера, цифры на экране возрастают. В обратную сторону векторного значения уменьшаются и переходят в отрицательную сторону. При увеличении серии задач отрицательного значения знак минуса смещается.
Если нажимаем на кнопку индикатора, переменная обнулится, на индикаторе будет ноль.
Подключение энкодера промышленного назначения к Arduino
Наша задача суметь управлять скоростью асинхронного двигателя с помощью программы на компьютере. У нас имеется преобразователь частоты (частотник):
Для домашних заданий такая информация не нужна. На фотографии энкодер промышленного назначения для асинхронного двигателя управления мощностью (кВт) станков:
В станкостроении энкодеры широко применяются для преобразователей частоты асинхронных двигателей. Они монтируются как датчики обратной связи по своей скорости. Такие энкодеры имеют большую дискретность от 100 импульсов на оборот до 1 млн импульсов на оборот. У этой марки дискретность равна 500 имп. на оборот.
Энкодеры подразделяются на виды задач по принципу действия на частотные преобразователи. Они бывают абсолютными и инкрементальными. Наш энкодер выполняет обычную функцию – выдает сигнал дифференцирования при отключении мощности питания, и ее подачи снова. Раннее состояние не сохраняется.
Энкодеры абсолютного вида имеют внутреннюю память, которая помнит последние положения. Зачем нужна память, и зачем сохранять эти данные? В заводских условиях станкостроения перед перемещением определенного устройства в первую очередь указывают нулевую точку. Такой процесс называется реферированием, то есть, выход в нуль.
Применение датчика абсолютного вида дает возможность уйти от этой процедуры на второй раз, сократить время при условии, что система имеет ограничения для перемещений.
Рассмотрим энкодеры синуса и косинуса. Они выдают выходной сигнал косинуса или синуса. Далее, с помощью устройства интерполятора мощности образуют из них импульсы. Сигналы такого вида можно изменять в размерах. Питание энкодера осуществляется от напряжения 5 вольт.
Сигнал «А» – это сигнал импульса прямого типа. Количество импульсов с этого сигнала приходит на каждом обороте. Оно равно 500 (дискретность датчика).
Сигнал «В» – тоже прямой сигнал импульса. С него на каждом обороте поступает число импульсов по дискретности датчика, который смещен от канала «А» на 90 градусов (500).
Сигнал «R» – это сигнал метки «нуль». С одного оборота датчика получается один импульс.
В энкодерах промышленного назначения используется сигнал дифференцирования, для работы с частотным преобразователем (частотником). Название у него сложное, а на самом деле все просто. Все каналы отдельно копируются своей инверсией. Это необходимо для отдавания сигнала на значительные расстояния. Выходной канал энкодера подсоединяется к приемнику специального назначения, сделанному на усилителях операционного вида. Импульс в итоге определяется в совокупности двух сигналов.
Подключение
Подключение простое. Подсоединяем напряжение 5 вольт на выходы энкодера. У нас раскладка: провод коричневого цвета – 0 В, белого цвета – +5 В, розовый, зеленый и красный – А, В, R.
Программа подключения энкодера базируется на прерываниях каналов А и В. Срабатывания прерываний происходят на переднем фронте. Получается ситуация, когда происходит торможение энкодера в момент растрового пересечения и выходной сигнал канала всегда остается положительным. Подсчет импульсов непрерывно ведется счетчиком.
В нашем случае мы не будем применять прерывания, потому что мы работаем с 4-мя датчиками, они эксплуатируются одновременно. Если применять схему прерываний, наверняка возникнет ситуация потери импульсов. У нас эта проблема решается путем установления значка наличия движения. А мы рассматривали эксплуатацию энкодеров промышленного назначения.
Работа счетчика импульсов на основе модуля энкодера
Счетчик работает в связке с модулем семиразрядного индикатора, который и будет отображать количество накрученных энкодером импульсов. При включении значение счетчика равно нулю.
Покрутим ручку энкодера по часовой стрелке. Значение счетчика инкрементируется на единицу при каждом щелчке энкодера. Наибольшее число можно накрутить 999999999. это число должно заполнить все разряды нашего семисегментного индикатора. Если вращать ручку дальше, то счетчик обнулится, начнет снова считать с нуля.
Для примера накрутим 120 импульсов. Теперь скручиваем обратно, вращая ручку против часовой стрелки. Центральная ось энкодера работает как кнопка. Она очищает от нулей свободные разряды индикатора. У кнопки есть небольшой дребезг контактов, поэтому выключение и включение происходит не сразу. Программным путем, дребезг устраняется. Это основа работы с модулем энкодера.
Подключение инкрементальный энкодера к avr
Смотрите это видео на YouTube
Статьи – RoboCraft
Статьи – RoboCraftМагазин
Arduino — это открытая аппаратная платформа, основными компонентам которой являются небольшая плата ввода/вывода (контроллер) и простая среда разработки на языке программирования С++ (упрощённая версия - Wiring). Обе части системы Arduino очень просты в использовании, но при этом обладают замечательной гибкостью. Эти важные свойства - открытость, простота, гибкость - и принесли Arduino заслуженную популярность среди любителей сделать что-нибудь своими руками. Arduino позволяет пытливым умам школьников, студентов, программистов, дизайнеров, гиков и других креативных товарищей, собрать своё собственное устройство/гаджет/робота, которое сможет работать автономно, либо в связке с компьютером.Купить Arduino
Купить Arduino Uno или CraftDuino - в нашем Магазине.Введение
Arduino - введение Ардуино что это и зачем Что за язык программирования используется для Arduino? ХоумМейд Arduino - как сделать Arduino своими руками Arduino как фреймворк КМБ для начинающих ардуинщиков Состав стартера (точка входа для начинающих ардуинщиков) Как адаптировать библиотеки для Arduino 1.0 Разновидности плат Arduino, а также про клоны, оригиналы и совместимость Возможные ошибки при работе с Arduino Программирование Arduino при помощи Raspberry PiОсновы программирования Arduino/CraftDuino
1. Программирование Arduino - введение 2. Структура программы, константы 3. Цифровой ввод/вывод 4. Аналоговый ввод/вывод 5. Дополнительные функции ввода/вывода 6. Работа со временем 7. Математические функции 8. Псевдослучайные числа 9. Последовательная передача данных 10. Прерывания 11. EEPROM 12. Cоздание своей библиотеки Blink без delayПрактическая работа и программирование Arduino/CraftDuino
Подготовка к работе с Arduino/CraftDuino Ошибки Arduino 0. Начало 1. Цифровой ввод - кнопка 2. Аналоговый вывод - Fading 3. Аналоговый ввод – потенциометр 4. Аналоговый ввод – осциллограф 5. Генерация звука – пьезоизлучатель. 6. Фоторезистор 7. Сенсор на светодиоде 8. Общение с Arduino - программирование работы с COM-портом. 9. Аналоговый датчик температуры – LM335 10. Подключаем к Arduino мышку PS/2 Протокол 1-Wire и iButton (Arduino и эмулятор iButton) Arduino и температурный 1-Wire датчик DS18S20 Arduino и драйвер двигателей L293D (Простой мотор-шилд) Сборка мощного моторшилда (на базе L298) Arduino и сервомашинка Как с помощью Arduino/CraftDuino можно управлять устройствами на 220В Подключаем LCD-дисплей на базе HD44780 к Arduino (Графический экран WG12864B (и ему подобные на ks0107/ks0108)) ИК-датчик препятствий для Arduino на базе фототранзистора Датчик измерения расстояния SHARP-GP2Y0A02YK0F Ультразвуковой датчик измерения расстояния HC-SR04Библиотеки Arduino
Ethernet library – библиотека для работы с Ethernet Servo library – библиотека для работы с сервомашинками Firmata library – библиотека, реализующая протокол Firmata OneWireSlave - библиотека эмуляции устройства 1-Wire TimerOne - библиотека для работы с таймером МК Wire - библиотека для работы с I2C GLCD - библиотека для работы с графическими LCD Дополнительно Arduino/CraftDuino и PROTEUS Arduino/CraftDuino и WinAVR - программируем на чистом СSPI и Arduino
теория, вывод, ввод Подключаем кучу устройств к Arduino по 5 проводам Делаем ISP-программатор из Arduino Каскад входных сдвиговых регистров Bluetooth-модуль HC-05 Энкодер и шкала Датчики Холла TC15-11 - матрица сетодиодная 8х8 CraftDuino и RFID-модуль RC522Сервомашинки и Arduino
Сервомашинки Сервомашинки 2. Взгляд под корпус (SG-5010) Подключение сервомашинок к Arduino Хаки сервомашинок. Переделка в серву постоянного вращенияCraftDuino
Описание CraftDuino v2.0 Описание CraftDuino v2.0 SMD Описание CraftDuino v1.0 и её отличий от ArduinoArduino и ...
Arduino и Processing Arduino и Matlab Arduino и LabVIEW Arduino и Scratch (S4A) Arduino и openFrameworksРоботы на Arduino
Самодельный робот-пылесос на базе Arduino (Картонный робот-пылесос) Коллективные виброботы на Arduino Простой шагающий робот на Arduino Двуногий робот на Arduino Четырёхногий шагающий робот на Arduino Управление роботом-пылесосом iRobot Roomba с помощью Arduino Роборыба на базе Arduino (с использованием 3D-печати) Обучаемый манипулятор на базе Arduino Манипулятор-клешня из ПКЛ ArduRoller - балансирующий робот на Arduino Гусеницеподобный робот на Arduino Nano Забавный робот на 3 сервах Радиоуправляемый робот и многие-многие другие Arduino роботы...Дополнительные материалы
Шпаргалка по Arduino Книги про Arduino Выводы Arduino и Arduino pin mapping Блок питания Arduino из зарядки сотового телефона Программаторы Прошивка бутлоадера Программирование Arduino - Физика процесса. Про фьюзы Хаки Arduino - Экономим RAM ATmega - использование памяти Fritzing - САПР для Arduino. VirtualBreadboard - эмулятор Arduino Игра "Жизнь" на Arduino Самодельный датчик цветаИнтерфейсы
1-Wire SPI Интерфейс I2CArduino логотипы
Разное
Управляемая веб-камера Мозги для робота Новогоднее исследование ADSL-роутера на базе Linux - введение Робософт - обзор существующих решений Управление роботом-пылесосом iRobot Roomba с помощью Arduino Исследование Wi-Fi-роутера TP-LINK TL-MR3020Нейронная сеть
Нейронная сеть - введение Обучение ИНС с помощью алгоритма обратного распространения Пример работы самоорганизующейся инкрементной нейронной сети SOINNПолезные ресурсы
arduino.cc roboforum.ru instructables.com letsmakerobots.com easyelectronics.ru
Использование энкодеров с библиотекой Arduino
Введение
RoboClaw обычно использует энкодеры в схеме автоматического управления с обратной связью для поддержания скорости и положения. Однако бывают ситуации, когда требуется более настраиваемый контроль от микроконтроллера. В этих рекомендациях по применению рассматривается использование Arduino для считывания, установки и сброса энкодеров с использованием библиотеки BasicMicro Arduino.
Материалы
(1) Контроллер двигателя RoboClaw
(1) Arduino Uno
(1) мотор-редуктор Pololu с квадратным энкодером * **
(3) кабель-перемычка 0,1″ (мама-папа)
(1) компьютер с установленной программой BasicMicro Motion Studio
(1) кабель micro USB для RoboClaw
(1) USB-кабель для Arduino
(1) небольшая отвертка
* Ссылка на мотор-редуктор Pololu с энкодером
** Обратите внимание, что для этого можно использовать любой двигатель со встроенным квадратным энкодером Примечание по применению
Приступим Начато
1. Следуйте этим примечаниям к приложению до шага 17, чтобы настроить RoboClaw и Arduino.
Использование функций библиотеки Arduino
Ниже приведен список всех функций энкодера, доступных в библиотеке Arduino. Обратите внимание, что все функции вызываются для существующего объекта RoboClaw, созданного ранее. Примечание к приложению об основах использования библиотеки, включая создание объекта RoboClaw, доступно здесь.
Чтение энкодеров
Для считывания текущих значений энкодера используются две функции. Согласно их названию, один используется для чтения канала 1, а другой — канала 2. Этим функциям необходимо передать только адрес RoboClaw.
ReadEncM1(адрес)
ReadEncM2(адрес)
Пример кода:
как единственный аргумент функции. Возвращенное значение сохраняется в переменной «motor_1_count».
int motor_1_count = roboclaw.ReadEncM1(0x80)
Скорость чтения
Эти две функции используются для считывания скорости двигателя в отсчетах энкодера, для каждого канала имеется по одной функции. Единственным аргументом этих функций является адрес RoboClaw.
ReadSpeedM1(адрес)
ReadSpeedM2(адрес)
Пример кода:
В этом примере «ReadSpeedM1» вызывается на объекте RoboClaw для считывания скорости двигателя 1 в счетчиках энкодера. Единственным аргументом, передаваемым функции, является адрес RoboClaw.
int motor_1_speed = roboclaw.ReadSpeedM1(0x80)
Настройка энкодеров
Эти функции устанавливают счетчик энкодера соответствующего канала на заданное значение. Адрес RoboClaw и устанавливаемое значение должны быть переданы им.
SetEncM1(адрес,значение)
SetEncM2(адрес,значение)
Пример кода:
В этом примере счетчик энкодера канала 1 установлен на 10000 отсчетов. Адрес RoboClaw передается, а также счетчик для установки.
roboclaw.SetEncM1(0x80,10000)
Сброс энкодеров
Передача адреса RoboClaw этой функции и ее вызов приводит к обнулению обоих каналов энкодера.
ResetEncoders(address)
Пример кода:
В этом примере счетчики энкодеров для обоих каналов обнуляются вызовом «ResetEncoders» с адресом RoboClaw, переданным в функцию.
motor_1_count = roboclaw. ResetEncoders(0x80)
Команды положения
Эти функции используются для установки двигателя для данного канала в определенное положение в счетчиках энкодера. Адрес RoboClaw, значение ускорения, значение замедления, скорость, положение и значение флага должны быть переданы в функции. Значение флага определяет, выполняется ли команда немедленно или сохраняется для последующего выполнения. Значение «0» сохраняет команду, а значение «1» немедленно запускает команду позиционирования. Версия этих функций «M1M2» позволяет позиционировать оба двигателя независимо и одновременно.
SpeedAccelDeccelPositionM1(address, accel, speed, deccel, position, flag)
SpeedAccelDeccelPositionM2(address, accel, speed, deccel, position, flag)
SpeedAccelDeccelPositionM1M2(address, accel1, speed1, deccel1, position1 , ускорение2, скорость2, замедление2, положение2, флаг)
Пример кода:
В этом примере положение двигателя 1 установлено на 15000 отсчетов. Адрес RoboClaw передается в качестве первого аргумента функции. Значения ускорения и замедления установлены на 10000, а значение скорости установлено на 2000. Аргумент флага установлен на «1», чтобы команда выполнялась немедленно.
motor_1_count = roboclaw.SpeedAccelDeccelPositionM1(0x80,10000,2000,10000,15000,1)
Выполнение примера кода
Доступен пример кода для демонстрации использования функций, описанных в этом примечании к приложению. Следуйте приведенным ниже инструкциям, чтобы получить код и протестировать его с помощью Arduino и RoboClaw, настроенных на шаге 1.
1. Загрузите библиотеку RoboClaw Arduino отсюда.
2. Добавьте библиотеку RoboClaw Arduino в Arduino IDE. Обратите внимание на место, куда была загружена библиотека RoboClaw, а затем откройте среду разработки Arduino IDE. В верхнем меню нажмите «Эскиз» и перейдите к «Включить библиотеку», а затем «Добавить библиотеку .Zip». В открывшемся диалоговом окне выберите загруженный ZIP-файл и нажмите «Открыть». Теперь библиотека добавлена в установку Arduino, и на нее можно ссылаться из скетчей.
Рисунок 1
Диалоговое окно для добавления библиотек .zip в установку Arduino IDE.
3. Загрузите или скопируйте пример кода для этого указания по применению отсюда.
Если Git установлен на используемом компьютере, его можно клонировать, введя следующую команду в терминале.
git clone https://github.com/basicmicro/using_encoders_arduino.git
4. Откройте код примера в среде разработки Arduino IDE и загрузите его на плату Arduino.
5. Теперь Arduino должен быть занят выполнением примера кода и работой с присоединенным RoboClaw.
Объяснение примера кода
Пример кода начинается со считывания значения энкодера, подключенного к каналу 1, и вывода значения на последовательный монитор. Затем он переходит к установке счетчика энкодера канала 1 на 10000 отсчетов, считывает значение и распечатывает его, чтобы продемонстрировать, что установка значения работает. Оттуда он запускает двигатель 1, работающий на половинной скорости, а затем считывает и печатает значение скорости, после чего двигатель останавливается. Затем оба энкодера обнуляются вызовом «ResetEncoders», а значение энкодера считывается и печатается. Наконец, вызывается команда положения, чтобы перевести двигатель 1 в положение 15000 отсчетов.
Устранение неполадок в примере
Если RoboClaw не отвечает на команды, которые отправляет Arduino, необходимо проверить несколько вещей. Сначала убедитесь, что между Arduino и RoboClaw есть заземляющее соединение, без него две платы не смогут нормально взаимодействовать. Наконец, убедитесь, что соединения RX и TX между Arduino и RoboClaw не перепутаны. Контакт 10 Arduino должен быть подключен к сигнальному контакту S2 RoboClaw, а контакт 11 Arduino — к сигнальному контакту S1 RoboClaw.
Buxtronix: Поворотные энкодеры, сделанные правильно
Поворотные энкодеры в наиболее узнаваемой форме представляют собой механические устройства, которые немного похожи на потенциометры и часто используются вместо них. Они используются в некоторых аудиоустройствах и узнаваемы как регуляторы громкости с регулярными ударами или щелчками при повороте. Они также используются в механических трекболах и мышах, а также во многих других приложениях, требующих точного определения вращения.
В любительских приложениях они удобны для самых разных задач — замены потенциометров, переключения вверх/вниз и т. д. Их использование с AVR, PIC и Arduino довольно распространено, и они легко доступны.
Их работа довольно проста, с использованием тщательного расположения токопроводящих дорожек. На самых обычных 3 вывода — два на «битовые» выходы, и общий (wiper). As the encoder turns, the bit pins change according to a Gray Code sequence as follows:
Position | Bit A | Bit B |
---|---|---|
0 | 0 | 0 |
1/ 4 | 1 | 0 |
1/2 | 1 | 1 |
3/4 | 0 | 1 |
1 | 0 | 0 |
Основной способ их декодирования — следить за тем, какие биты изменяются. Например, изменение с «00» на «10» указывает на одно направление, тогда как изменение с «00» на «01» указывает на другое направление. Видео ниже показывает эти изменения:
Я искал реализацию декодера AVR/Arduino для приложения, которое я имел в виду. Вокруг было много примеров кода, и даже на официальной вики Arduino есть много вариантов кода.
К сожалению, большинство из них отстой.
Подавляющее большинство из них страдают от одного или нескольких из следующих недостатков:
- Обработка отказов. Механические переключатели несовершенны и включаются и выключаются во время переходов в течение нескольких миллисекунд, чего достаточно, чтобы микроконтроллер воспринимал их как дискретные изменения. Многие реализации просто обнаруживают изменение с 00 на 01 и сигнализируют об этом. Но с дребезгом переключателя может быть обнаружено столько же событий. Таким образом, реализации часто включают подпрограммы устранения дребезга. но они добавляют дополнительный код, а также при высокой частоте вращения отфильтровывают события и ломаются.
- Изменение направления. В некоторых реализациях используются алгоритмы, которые предполагают, что изменение направления произойдет в битовой позиции ’00’. Если изменение происходит в середине шага, они путаются и возвращают слишком много событий или ложное событие в неправильном направлении.
- Сложность. Многие реализации страдают от сложных условий и циклов. У них есть громоздкие длинные операторы if-then, которые невозможно отладить, но они все же могут страдать от вышеуказанных проблем. Сложный код также приводит к потреблению ценного пространства кода.
- Слабые алгоритмы. Слишком много реализаций просто ищут один переход из одного состояния в другое, вместо того, чтобы отслеживать и проверять действительных состояний. Это приводит к странным причудам и ошибкам.
Раздраженный обилием глючных и плохих подпрограмм, я приступил к написанию декодера, который не был бы подвержен этим проблемам. Я внимательно посмотрел на переходы битов кодировщика и построил алгоритм, который точно следовал им, но с простым кодом.
Код Грея на самом деле следует простому автомату состояний, и в любом заданном состоянии он может измениться только на одно из двух других значений. Let’s take a look at the state table again:
Position | Bit A | Bit B |
---|---|---|
0 | 0 | 0 |
1/4 | 1 | 0 |
1/2 | 1 | 1 |
3/4 | 0 | 1 |
1 | 0 | 0 |
Например, в позиции 1/4 единственными допустимыми следующими состояниями являются либо 00 в позиции 0, либо 11 в позиции 1/2. Любое другое состояние является недопустимым и должно игнорироваться. Алгоритм должен это знать.
Затем, когда происходит дребезг переключателя, выход переключателя будет много раз переключаться между состояниями, например, от 1/4 до 1/2, затем от 1/4 до 1/2, до 1/4 и, наконец, установится на 1/2. В этом случае алгоритм не должен генерировать ложные события, а также должен распознавать конечное состояние 1/2.
Код, который я написал, учитывает все это. Он обеспечивает допустимые изменения состояния, имеет дело с отказом переключателя, обрабатывает изменение направления, да, вся логика состоит из четырех строк кода. Остальной код — это настройка порта и статический массив, содержащий таблицу конечного автомата.
Мой код также включает #define, который устанавливает либо генерацию события поворота после полного шага (т. е. полное изменение положения между 00-10-11-01-00), либо поддержку режима полушага, где он генерирует событие как в позиции 00, так и в позиции 11. Оба одинаково полезны, но полношаговый код удобен для устройств, которые дают физический «удар» только в позициях 00.
Ненужный код исключен. Например, вы можете инициировать опрос входных контактов энкодера. Это делается с помощью одного вызова, который возвращает код, указывающий по часовой стрелке, против часовой стрелки или без изменений. Изменение запускается, когда состояние возвращается к 00 (с полным шагом) или к 00 и 11 (половина шага).
Вы можете инициировать опрос либо из цикла, либо даже из обработчика прерывания смены контакта (прилагается пример кода).
Как видно из видео ниже, алгоритм надежно работает как на медленных, так и на высоких скоростях вращения.
Получите его из репозитория Github.
Прыжок#118
Поиск наилучшего метода чтения поворотного энкодера.
Примечания
Я тестирую несколько мини-энкодеров, которые я получил от продавец на алиэкспресс.
Инкрементальные энкодеры генерировать последовательности ступенчатых импульсов, которые сдвинуты по фазе на 90˚. Таким образом, их относительная последовательность указывает на вращение и направление:
Должна быть возможность подключить поворотный энкодер напрямую к Arduino и замерить сигналы контактов A/B. RotaryEncoders страница на игровой площадке Arduino содержит хороший фон и множество примеров но все они в значительной степени используют один и тот же метод — прочитайте два контакта и выполните прямой тест, чтобы увидеть, движется ли он вперед или назад. Они аналогичны методам, описанным в Поваренной книге Arduino. 6.10. Отслеживание движения циферблата.
Мои первые попытки были довольно неудовлетворительными. Как на высоких, так и на низких скоростях вращения я обычно видел все возможные проблемы: пропущенные шаги, «лишние» шаги и неожиданные развороты. По сути, опыт показывает, что если энкодер повернуть вправо, скажем, на 30˚, а затем влево на ту же величину, то очень высока вероятность того, что что счетчик энкодера , а не вернется к тому же значению. Либо мои поворотные энкодеры не очень надежны, либо методы программирования плохо справляются с надежным захватом ввода.
Не нужно много исследований, чтобы обнаружить, что это обычный опыт. Возможно, если бы у меня были дорогие высокоточные энкодеры, все бы «просто работало», но типичные поворотные энкодеры, используемые для ручного ввод действительно кажется заведомо шумным.
Так что мой эксперимент здесь превратился в проверку различных техник в поисках наиболее подходящей для общего пользования. Читайте дальше для получения более подробной информации, но вот сводка на данный момент:
Техника | Точность |
---|---|
RotaryISR — прерывание, вызванное изменением, с использованием библиотеки Rotary | Идеально. 100% точность на всех скоростях |
RotaryPolling — опрос с библиотекой Rotary | Идеально. 100% точность на всех скоростях |
Опрос — простой опрос с аппаратным подавлением дребезга | Неплохо. случайное дополнительное событие в неправильном направлении |
OnChangeISR — прерывание по изменению и стандартные методы digitalRead | Нормально, направление обычно правильное, но много «отскоков» |
Опрос — простой опрос и стандартные методы цифрового чтения | Плохо, направление сильно колеблется |
OnChangeDirectPortAccessISR — прерывание, инициируемое изменением, и методы прямого порта | Плохой, сильный левый уклон |
FallingEdgeISR — прерывание по заднему фронту и стандартные методы digitalRead | Очень плохой, очень восприимчив к отскоку |
FallingEdgeDirectPortAccessISR — методы прерывания, инициируемого обратным фронтом, и методы прямого порта | Чрезвычайно плохой, сильно подвержен отскоку |
Совершенно очевидно, что библиотека Rotary на сегодняшний день является лучшим вариантом и обеспечивает потрясающе хорошие результаты. Все остальные варианты подвержены отскакиванию входных данных в той или иной степени. Секрет библиотеки Rotary заключается в том, что она моделирует конечный автомат кода Грея, создаваемого поворотным энкодером. и реагирует только на действительные переходы состояний. Это эффективно устраняет все шумы. См. сообщение в блоге Бена Бакстона о роторной библиотеке. для более подробной информации о том, как и почему это работает так хорошо.
См. RotaryEncoderModule для примера использования библиотеки Rotary с модулем поворотного энкодера, управляющим массивом светодиодов 8×8.
Рекомендации по кодированию
Вот краткий обзор основных аспектов взаимодействия с поворотным энкодером
.Полный шаг, полушаг или четверть шага?
Из временной/фазовой диаграммы видно, что на «цикл» приходится 4 различных перехода:
Позиция | А | Б |
---|---|---|
Ступень 1 | 0 | 0 |
1/4 | 1 | 0 |
1/2 | 1 | 1 |
3/4 | 0 | 1 |
Ступень 2 | 0 | 0 |
… |
Различные методы приводят к разным уровням разрешения, например:
- Библиотека Rotary по умолчанию ищет полный цикл, т. е. только один даже на шаг
- прерывание по переднему или заднему фронту захватывает только одно событие за цикл на вывод
- прерывание изменения на обоих выводах захватит все 4 перехода за шаг
Захват большего количества переходов бесполезен, если эффективно не устраняется отскок.
Опрос или обработчик прерываний
Несмотря на то, что можно считывать показания поворотного энкодера с помощью метода опроса, он может становиться все более неточным по мере усложнения программы.
Поворотные энкодеры являются ярким примером того, где использование процедуры прерывания дает наилучшие результаты. В большинстве примеров аппаратное прерывание подключается к одному или обоим контактам энкодера. Если это невозможно, альтернативой может быть использование прерывания по таймеру для опрашивать кодировщик на частой и надежной основе.
Обратите внимание, что аппаратные прерывания могут поначалу усугубить проблему дребезга, так как они будут срабатывать при всех переходах дребезга — переходы, которые могли быть пропущены, например, при опросе.
Аппаратное или программное устранение дребезга
Общий опыт показывает, что устранение дребезга имеет решающее значение при использовании мини-поворотных энкодеров.
Аппаратное устранение дребезга
Многие люди экспериментировали с аппаратным устранением дребезга. Добавление аппаратного подавления дребезга (см. альтернативные схемы ниже) дает некоторое улучшение. Например, RC-фильтр 10 кОм/100 нФ на скетче опроса устраняет большую часть шума. Но не все — он по-прежнему вызывает случайный «неправильный» сигнал.
Программное устранение дребезга
Программное устранение дребезга обычно использует методы, основанные на времени, для отбрасывания «вероятно неправильных» показаний. Например этот пример на игровой площадке Arduno устанавливает минимальное время между приемом действительных сигналов. Другие использовали библиотеку Bounce/Bounce2 для той же цели. Я еще не включил здесь пример программного устранения дребезга, в основном потому, что, как и аппаратное устранение дребезга, они не решают проблему полностью. и просто добавьте размер и сложность кода.
Преодоление «государственной машины»
Этот подход используется библиотекой Ротари. По сути, это означает создание знаний о допустимых переходах состояний, которые применяются для поворотного энкодера, и принятие только ввод, который следует допустимой последовательности. Это эффективно устраняет все шумы и подпрыгивания. См. сообщение в блоге Бена Бакстона о роторной библиотеке. для более подробной информации о том, как и почему это работает так хорошо.
Стандартный или прямой доступ к порту
Методы стандартной библиотеки для работы с контактами GPIO — например. digitalRead
— общеизвестно медленные.
И если мы используем эти методы для считывания двух выводов поворотного энкодера, мы не можем избежать того факта, что два вывода никогда не считываются одновременно.
Прямой доступ к порту усложняет код и создает некоторые проблемы с переносимостью. но одновременно ускоряет доступ к порту, а также позволяет нам считывать два вывода одновременно. Это похоже на описанный подход Олег Мазуров в этой статье.
Однако, как показывают мои эксперименты, это само по себе не делает считыватель поворотного энкодера лучше. На самом деле это только ухудшает ситуацию, потому что программа становится все лучше и лучше в обнаружении шума на входе.
Строительство
Базовый вариант прямого подключения
С аппаратным подавлением дребезга
Кредиты и ссылки
- RotaryEncoders — игровая площадка Arduino
- Rotary_encoder — страница Википедии
- Поворотная библиотека Регистры портов
- Arduino — вся информация, необходимая для прямого управления портом
- 6.10. Отслеживание движения циферблата — из Поваренной книги Arduino
- 6.12. Отслеживание движения циферблата в занятом скетче — из поваренной книги Arduino
- Rotary Encoder: H/W, S/W или без дребезга? — хорошее обсуждение и исследование различных схем устранения дребезга
- Чтение энкодера на Arduino от Олега Мазурова
- Процедура обслуживания прерывания поворотного энкодера для микроконтроллеров AVR обновлена статья Олега Мазурова
- Пять вещей, которые я никогда не использую в проектах Arduino, включая #5 Внешнее оборудование для устранения дребезга для поворотных энкодеров
- Arduino: использование поворотного энкодера
- RotaryEncoderModule — проект, в котором тестируется модуль поворотного энкодера, управляющий массивом светодиодов 8×8 .
библиотека энкодера arduino
Сегодня мы собираемся использовать Arduino и поворотный энкодер для создания простого меню на ЖК-дисплее Nokia 5110. Давайте начнем, Привет, ребята. Меня зовут Ник, и я приветствую вас на канале educ8s.tv, посвященном проектам по созданию электроники своими руками с использованием Arduino, Raspberry, Pi, ESP8266 и других популярных плат. Подпишитесь на канал. Теперь, если вы не хотите пропустить какие-либо будущие видео. В этом видео мы узнаем, как создать собственное меню для популярного ЖК-дисплея Nokia 5110, чтобы сделать наши проекты более удобными для пользователя и более функциональными. зрители канала предложили мне подготовить еще одно видео на эту тему.. На этот раз мы собираемся использовать поворотный энкодер вместо кнопок.. Также в меню, которое мы собираемся построить сегодня, есть больше пунктов для выбора. Из. Давайте посмотрим на это в действии. Это проект, который мы собираемся построить. На дисплее. Появится простое меню, и с помощью поворотного энкодера я могу перемещаться вверх или вниз и выбирать пункт меню, нажимая кнопку поворотного энкодера. В меню 6 пунктов, и мы можем прокручивать меню вниз или вверх и элементы на дисплей изменится. Соответственно. Давайте выберем первый вариант. Как видите, отображается новый экран пользовательского интерфейса, и, вращая вал поворотного энкодера, мы можем изменить контрастность дисплея.
. Если мы снова нажмем кнопку поворотного энкодера, мы вернемся к основному экрану пользовательского интерфейса. Второй пункт меню предлагает аналогичную функциональность. Он изменяет переменную громкости. Если мы сейчас выберем третий пункт меню и нажмем кнопку, мы сможем изменить значение языка. Я не реализовал эту функцию. Это всего лишь демонстрационный проект. Аналогичный функционал прилагается к 4-му пункту меню, который называется сложностью.. При желании мы можем отключить подсветку дисплея, выбрав 5-й пункт меню, либо можем сбросить все на его значение по умолчанию с 6-м пунктом меню. Конечно, вы можете изменить его, чтобы создать свои собственные, более сложные меню. Если хотите. Давайте теперь посмотрим, как построить этот проект. Для сборки этого проекта необходимы следующие детали: Плата Arduino Uno или любая другая совместимая плата. ЖК-дисплей Nokia 5110, поворотный энкодер, небольшая макетная плата, несколько проводов. Стоимость проекта очень низкая. Это меньше 10. Вы можете найти ссылки на все части, которые я использую в. Описание видео ниже. Давайте теперь соединим все части вместе. Перед созданием этого проекта. Если вы раньше не использовали поворотный энкодер, я рекомендую вам посмотреть это руководство. Я подготовил информацию о поворотных энкодерах. Это поможет вам понять, как работают энкодеры, и вы приобретете некоторый опыт работы с ними. Нажмите на карту здесь. Если вы хотите посмотреть его сейчас.
, Я разместил дисплей на небольшой макетной плате. Давайте. Сначала подключите дисплей. Первый контакт дисплея, который является сбросом, подключается к цифровому контакту 3 Arduino Uno. Второй контакт подключается к цифровому выводу 4. Третий вывод подключается к цифровому выводу 5, четвертый вывод — к цифровому выводу 11, а пятый вывод — к цифровому выводу 13. Следующий вывод — Vcc. Мы подключаем Vcc к положительной шине макетная плата и положительная шина макетной платы к выходу 3,3 В Arduino. Следующий вывод — это подсветка дисплея, так как мы хотим управлять им через программное обеспечение. Мы подключаем его к цифровому контакту 7. Последний контакт — GND.: Мы подключаем GND к отрицательной шине макетной платы, а отрицательную шину макетной платы — к GND Arduino. Теперь все, что нам нужно сделать, это подключить поворотный энкодер. .. Первый контакт — это GND, и мы подключаем его к отрицательной шине макетной платы. Следующий контакт — это Vcc, и мы подключаем его к положительной шине макетной платы. Следующий контакт — SW, и мы подключаем его к аналоговому контакту 2. .. Следующий вывод называется DT, и мы подключаем его к аналоговому выводу 1. Наконец, вывод CLK подключается к аналоговому выводу 0. Вы можете найти принципиальную схему этого проекта в описании видео ниже.. Теперь мы готовы включить проект.. Как видите, проект работает, нормально и меню работает.
Как и ожидалось. Отлично, давайте теперь посмотрим на программное обеспечение проекта. Код проекта сложен, но я сделаю все возможное, чтобы объяснить. Это., вы получите базовое понимание того, как работает код, но если вы хотите полностью понять его, вы должны сделать свое собственное меню и посмотреть, как именно он работает. Давайте начнем. В этом проекте мы используем 4 библиотеки. Мы используем две библиотеки для дисплея и две для поворотного энкодера. Вы можете найти ссылки на все библиотеки в описании видео ниже. Сначала мы рассмотрим функцию drawMenu. Эта функция отвечает за отрисовку меню на дисплее. Эта функция вызывается каждые несколько миллисекунд, поэтому, если в меню происходит изменение, эта функция отвечает за обновление меню на экране. Также есть 3 очень важные глобальные переменные. Переменная страница, переменный пункт меню и переменная рамка. Переменная страница запоминает, какой экран пользовательского интерфейса отображается на экране. Таким образом, если переменная страницы равна 1, мы находимся на главном экране пользовательского интерфейса, а если переменная равна 2, мы находятся на вторичном экране пользовательского интерфейса, где мы устанавливаем значение переменной. Пункт меню запоминает выбранный пункт меню. Таким образом, если его значение равно 1, выбран первый пункт меню, поэтому функция drawMenu должна рисовать этот пункт меню как черный с белыми буквами.. Если пункт меню равен 2, выбирается второй пункт меню и так далее.
. Переменная frame запоминает, какая часть меню отображается на экране. Так как созданное нами меню содержит 6 пунктов, и мы можем отображать только 3 из них одновременно. Нам нужно знать, какие элементы отображаются на экране. Переменная frame говорит нам именно об этом. Если переменная frame имеет значение 1, мы отображаем первые три пункта меню. Если это 2, мы отображаем элементы 234 и т. д. Я попытался сделать код как можно более простым для изменения, поэтому я создал несколько глобальных переменных, которые содержат имена для пунктов меню. Таким образом, вы можете создавать свои собственные меню легко без поиска в коде.. Сначала мы инициализируем все глобальные переменные, которые нужны в коде.. Затем мы инициализируем дисплей. В функции цикла. Сначала мы вызываем функцию drawMenu, чтобы нарисовать меню на экране. Затем мы считываем значение с поворотного энкодера и проверяем, нажата ли кнопка. Например, если мы находимся на главном экране пользовательского интерфейса и первом пункте меню. выбран. Если значение поворотного энкодера увеличилось, переменная menuitem увеличивается, и в следующем цикле функция drawMenu отрисовывает второй выбранный пункт меню. Если мы сейчас нажмем кнопку поворотного энкодера, мы перейдем на вторую страницу, где мы устанавливаем значение переменной. Опять же, используя поворотный энкодер, мы можем увеличивать или уменьшать значение переменной.
. Если мы нажмем кнопку, мы вернемся к странице главного меню, а переменная страницы уменьшится. Это основная идея этого меню. Мы следуем той же процедуре для всех пунктов меню и страниц. Код сложный. Это более 400 строк, длинно. Это кажется сложным, но если вы попробуете это сами, вам будет легче понять это, и вы сможете изменить его, расширить и использовать в своих проектах. Как всегда , вы можете найти код проекта по ссылке в описании ниже. Вот и все. Мы умеем строить сложные меню либо с помощью поворотного энкодера, либо с помощью кнопок. Лично я предпочитаю кнопки для своих меню, но в некоторых случаях поворотный энкодер проще в использовании. Хотелось бы услышать ваше мнение по этому поводу. Вы предпочитаете кнопки или поворотный энкодер для навигации по меню? Пожалуйста, оставляйте свои комментарии в разделе комментариев ниже. и не забудьте лайкнуть видео и поделиться им с друзьями. Если вам это интересно, также рассмотрите возможность подписки на канал и нажмите на колокольчик, иначе YouTube может не показывать вам обновления. По мере выхода новых видео. Если вы собираетесь покупать запчасти, ознакомьтесь с партнерскими ссылками в описании видео. Вот и все на сегодня, ребята, большое вам спасибо за просмотр.
[MAM_VIDEO ID = AK5TSUFHYF8]
98 [ADROTAT
Каждый компьютер заслуживает поворотного энкодера — Hackaday
Опубликовано в четверг, 13 декабря 2018 г.
Каждый компьютер заслуживает поворотного энкодера Hackaday… Продолжить чтение »
Arduino выходит в облако — Hackaday
Опубликовано в четверг, 07 февраля 2019 г.
Arduino выходит в облако Hackaday… Продолжить чтение »
Новый день: умные сервоприводы Lynxmotion — Hackaday
Опубликовано Пятница, 03 мая 2019 г.
New Part Day: Lynxmotion Smart Servos Hackaday… Продолжить чтение »
Официальный. Aarduino
2019-10-02T19: 32: 52+0000
👋 Хотел принести Tony Stark-Like. ? Узнайте, как это сделать с платами MKR WiFi 1010 и Nano 33 BLE Sense с поддержкой BLE, используя библиотеку ArduinoBLE.
офиц.ардуино
2019-10-02T19:08:01+0000
Ардуин-йо-хо-хо! Любимец ярмарки, пиратский корабль — интересный способ исследовать колебания маятника. Насколько весело, спросите вы? Зайдите в предварительный просмотр нашего научного набора «Физическая лаборатория» и убедитесь сами: http://bit.ly/2oC6L0Q
🔬 Теперь, когда вы промокли, погрузитесь в набор и наслаждайтесь всеми девятью экспериментами. Закажите сегодня: http://bit.ly/2MnQ7fr
Andrew D2010
Большинство деталей — часы GPS
s p e x
COMedia C328-7640 Serial Camera First Image
2016-04-15T14:35:45
Arduino Esplora
https://www. pinterest.com/pin/35465915794474667/
2016-04-15T14: 35: 40
Arduino Mini 05
https://www.pinterest.com/pin/35465915794474666/
2016-04-1504: 35.35: 3504-1514: 35.35: 35.504-15.35: 35.35: 35.504-1514: 35.
: 350237
9000 40504-1514: 35.
9000.36: 3504-1514: 354777777: 3546: 350237
9
https://www.pinterest.com/pin/35465915794474664/
«.h: Нет такого файла или каталога» постоянно сталкиваться с ошибкой «Нет такого файла или каталога»? Это довольно распространенная ошибка! Следите за новостями, чтобы узнать больше о двух простых способах устранения этой ошибки.
Нет такой ошибки файла!
боль, но они должны сообщить нам что-то об ошибке, которую мы сделали. Давайте взглянем на приведенную ниже.Если вы посмотрите на нижнюю часть Arduino IDE, где появляется сообщение об ошибке, там есть эта удобная маленькая кнопка, которая говорит «копировать сообщения об ошибках».0005
Если вы нажмете на нее, она скопирует сообщение об ошибке внутри маленького окна в буфер обмена на компьютере.
Теперь вы можете вставить его, например, в Google и выполнить поиск, который поможет вам узнать больше об ошибке. Или вы можете вставить его на форум и сказать: «Эй, у меня есть это сообщение об ошибке, пожалуйста, помогите мне».
Однако для этой ситуации мы скопировали его и вставим в текстовый редактор, чтобы мы могли поближе взглянуть на то, что на самом деле говорит сообщение об ошибке.
Расшифровка ошибки отсутствия такого файла
В первом предложении просто указано, какая версия Arduino используется, какая операционная система работает и какая плата выбрана.
Во втором предложении ошибка немного начинается. Первое, что он нам дает, это название программы. Итак, в данном случае название программы было «Кнопка».
Если вы посмотрите на Arduino IDE, цифры слева называются номерами строк программы, и они помогают нам найти, где находятся разные строки кода. «10» после «Knob» — это номер строки (в Arduino IDE), в которой была обнаружена ошибка.
«19» — это ссылка на длину этой строки кода, то есть, сколько в ней пробелов или символов.
Затем он сообщает нам реальную ошибку. Пишет «servo.h: Нет такого файла или каталога». Почему мы получаем эту ошибку?
Ошибка нашего пути
Итак, давайте посмотрим на строку 10 и посмотрим, что там написано. Он говорит «#include
Когда мы проверяем этот код, эта строка говорит компилятору Arduino IDE: «Эй, чтобы эта программа работала, вам нужно получить этот файл servo.h».
Допустим, у вас есть машина для изготовления этикеток, и вы пытаетесь запустить ее и напечатать несколько этикеток. Чтобы заставить его работать, вы должны вставить рулон этикеток. Если у вас нет этого рулона этикеток, то ваш производитель этикеток не будет работать. Итак, наша программа похожа на производителя этикеток, а файл (сервопривод) — это рулон этикеток.
Таким образом, сообщение об ошибке выглядит так: «Эй, программист, ты сказал, что мне нужен этот другой файл… но я искал его, и его там нет. Что дает? Давайте разберемся с этим сообщением об ошибке и рассмотрим два разных сценария.
Сценарий 1 – толстые пальцы
Этот скетч написан вами. На самом деле это вы написали строку «#include». Первое, что вы должны проверить, это правильное написание и использование заглавных букв. Возможно, вы неправильно написали имя библиотеки, или в этом примере, возможно, вы не использовали заглавные буквы.
Таким образом, «servo.h» на самом деле должно быть заглавной «S» или написано «Servo.h». Теперь в этом примере вы заметите, что слово servo меняет цвет, когда оно правильно пишется с заглавной буквы, и это потому, что имя библиотеки «Servo» распознается как «ключевое слово» в Arduino IDE. Имейте в виду, что это может относиться не ко всем библиотекам, которые вы используете.
Поэтому вы не можете использовать в качестве абсолютного индикатора изменение цвета, но это может быть полезно. Удивительно, как долго вы можете смотреть на строку кода и пропустить что-то вроде орфографической ошибки или ошибки в написании заглавных букв.
Сценарий 2 — отсутствуют файлы
В этом сценарии вы скачали или скопировали и вставили некоторый код из Интернета и пытаетесь запустить его в первый раз. Теперь вы начинаете получать это сообщение об ошибке. Давайте просто предположим, что первоначальный автор программы правильно написал название библиотеки.
Мы продолжим и пропустим устранение неполадок, связанных со сценарием 1. Следующим шагом будет проверка того, действительно ли у нас есть файл, который вызывает эта программа. Мы также должны убедиться, что файл находится в правильном месте.
Простой способ проверить, есть ли у вас этот файл, — открыть Arduino IDE и перейти в Sketch > Include Library, а затем найти имя этой библиотеки.
К какой бы библиотеке ни обращался оператор #include, вы хотите просмотреть этот большой длинный список для этой библиотеки. Если вы не видите ее точное имя в этом списке, это означает, что у вас не установлена эта библиотека должным образом (они все в алфавитном порядке, что помогает). Если вы не видите его здесь, вам придется добавить библиотеку.
Самый простой способ добавить библиотеку — перейти в Sketch > Include Library > Manage Libraries. Откроется диалоговое окно, и вы сможете выполнить поиск библиотеки. Библиотек так много, что вам определенно захочется их отфильтровать.
Убедитесь, что вы вводите именно то слово, которое соответствует строке #include. Как только вы найдете недостающую библиотеку, нажмите «Установить». Он сообщит вам, что он устанавливает библиотеку и обновляет список библиотек.
Затем мы можем перепроверить, успешно ли он установлен. Перейдите в Sketch > Include Library, и теперь установленная библиотека должна появиться в раскрывающемся списке. Теперь, когда он соответствует, вы больше не должны получать ошибку.
Расположение других библиотек
Не все библиотеки отображаются в этом удобном всплывающем окне, когда вы переходите к управлению библиотеками. Существует множество способов найти библиотеки Arduino в Интернете. Часто, если вы загружаете или копируете программу из Интернета, просто зайдите на страницу, где вы получили эту программу, и посмотрите, на какую библиотеку они ссылаются. Может быть, у них есть ссылка, например, на GitHub, место, где люди хранят множество библиотек кода.
Обычно библиотека включена в пакет файла .zip. После того, как вы загрузили файл .zip, вы можете перейти в среду разработки Arduino IDE и выбрать «Скетч» > «Включить библиотеку» > «Добавить библиотеку .ZIP». Вам просто нужно перейти туда, куда был загружен файл. Он скажет вам «Библиотека добавлена в ваши библиотеки» чуть выше темной области, где появилась исходная ошибка.
Теперь, когда мы выбираем Sketch > Include Library, новая библиотека появится в раскрывающемся списке. Виола! Теперь вы знаете 2 способа добавления новой библиотеки.
Обзор
Итак, мы обсудили два возможных сценария, которые могут привести к появлению ошибки «Нет такого файла или каталога» после компиляции скетча.
Во-первых, если вы написали скетч, просто проверьте правильность написания и написания заглавных букв.
Во-вторых, если вы скопировали чужой код, убедитесь, что у вас установлены правильные библиотеки.
Желаем вам отлично провести время и до новых встреч! До свидания!
Абсолютный энкодер высокого разрешения— Arduino и Pi
Это рюкзак I2C и библиотека Arduino для абсолютного контактного энкодера Bourns ACE-128.
С точки зрения непрофессионала, это цифровая ручка управления с 8 выводами данных, которые дадут вам 128 уникальных результатов по всему кругу. Он выполнен в виде ручки панели управления, но может использоваться и для других целей. Насколько мне известно, это самый маленький и дешевый абсолютный энкодер с кодом Грея, доступный на сегодняшний день. Перечисленный здесь продукт сочетает в себе это с рюкзаком I2C и кодом библиотеки, поэтому вы можете добавить несколько из них в свой проект Arduino или Raspberry Pi.
Детали
Что это?
Цифровая ручка управления, обеспечивающая 128 уникальных результатов, равномерно распределенных по всему кругу. Он разработан как ручка панели управления и включает в себя гайку и шайбу, но может быть адаптирован для других целей. Модуль обменивается данными через шину I2C с 16 доступными адресами.
Это альтернатива использованию потенциометра и аналогового вывода, позволяющая работать в полно- и многооборотном режимах, на которую не влияют колебания температуры. Библиотека включает опциональное автоматическое сохранение логического нуля и многооборотного смещения в EEPROM, чтобы система запоминала эти настройки после отключения питания или сброса.
Теперь также поддерживается на Raspberry Pi.
Отличается от более распространенного инкрементального поворотного энкодера, который имеет только два или четыре значения за один оборот и предназначен для измерения полных оборотов и направления. Это измеряет углов .
Из технического описания
До сих пор выбор абсолютного энкодера означал дорогое изделие большего размера. Благодаря использованию комбинаторной математики абсолютный кодовый код абсолютного контактного энкодера Bourns® (ACE™) помещается на одну дорожку для очень экономичного, энергоэффективного и компактного продукта. Bourns® ACE™ обеспечивает абсолютный цифровой выход, который также сохраняет свое последнее положение в случае сбоя питания. Интеллектуальная альтернатива инкрементным энкодерам и потенциометрам, Bourns® ACE™ идеально подходит для многих промышленных, автомобильных, медицинских и потребительских товаров.
Насколько мне известно, это самый маленький и дешевый абсолютный энкодер с кодом Грея, доступный на сегодняшний день.
Зачем ты это сделал?
Я использовал их, чтобы построить механизм, следующий за головой, для купола и глаза Далеков, используя самодельные печатные платы. Я нашел датчик в Интернете и сказал, что он может обеспечить определение положения вращения, в котором я нуждался, но не было поддержки Arduino, поэтому я разработал код для его поддержки.
Два были использованы для преобразования двигателей стеклоочистителей в мощные сервоприводы.
Третий использовался для обнаружения вращения головы оператора в гарнитуре управления движением.
Четвертый теперь установлен в модуле управления и используется для ввода переменных настройки ПИД-регулятора.
Для поддержки ACE128 я написал библиотеку Arduino для обработки связи I2C и перевода кода Грея. Само устройство генерирует код Грея, который перед использованием необходимо преобразовать в обычные числа, а для этого требуется некоторая двоичная математика, особенно если вы подключаете контакты в порядке, отличном от таблицы данных.
Мое хобби переросло в изготовление печатных плат и пайку SMD, так что я взял этот дизайн и кое-что приготовил. К моему удовольствию, с первой партии все работает!
Что делает его особенным?
ACE-128 — самый маленький и дешевый абсолютный энкодер, доступный сегодня. В его дизайне используется действительно оригинальная математика. Эта библиотека и пакет представляют собой уникальное решение для простого включения цифровых ручек в проекты Arduino.
Вы можете предпочесть это использованию потенциометра и аналогового контакта в приложениях, где:
- Температурная чувствительность потенциометра вызывает дрейф значения. Поскольку в устройстве используются механические контакты, оно нечувствительно к изменениям окружающей среды и сохраняет свою работоспособность при отключении питания.
- необходимо измерение угла полного поворота
- вам нужно несколько оборотов для более широкого диапазона
- вам нужен точный контроль — примерно 3 градуса между положениями и очень небольшая тактильная обратная связь, вы можете получить желаемое число без перерегулирования.
Вы можете предпочесть это использованию поворотного энкодера, где:
- важно абсолютное положение (поворотные энкодеры определяют относительное движение — обычно только полные обороты и направление)
- вам нужно, чтобы система запоминала относительный ноль при отключении питания
- Более высокое разрешение, чем у инкрементных поворотных энкодеров (большинство измеряют шаг 90 градусов)
Что это делает на Hackaday?
Я продаю их на Tindie, и Hackaday кажется подходящим местом для размещения документации по поддержке. Я раньше не использовал Hackaday, так что посмотрим, как пойдет.
QWIIC Edition теперь полностью укомплектован
Аластер Янг • 28.10.2019 в 15:58 • 0 комментариевРедакция QWIIC теперь полностью снабжена всеми перестановками адреса, сборки и EEPROM.
Теперь доступно в красном цвете! (фиолетовые отправляются первыми, изображения будут обновляться)
https://www.tindie.com/products/18118/
Сертификация ОШВА
Аластер Янг • 21. 10.2019 в 23:01 • 0 комментариевЭтот проект теперь сертифицирован OSHWA — Ассоциация оборудования с открытым исходным кодом
https://certification.oshwa.org/us000172.html
Издание QWIIC
Аластер Янг • 26.09.2019 в 17:51 • 0 комментариевНовое дополнение к ассортименту — QWIIC Edition. У этого есть два разъема Sparkfun QWIIC вместо 0,1-дюймового разъема и Grove. через их сайт, но не получили ответа. Так что, по крайней мере, сейчас они будут на Tindie по адресу https://www.tindie.com/products/18118/
.Обновление библиотеки v2.
0.0 и модулей EEPROM Аластер Янг • 23.06.2019 в 20:31 • 0 комментариевv2.0.0 зарегистрирован и скоро появится в диспетчере библиотек.
https://github.com/arielnh56/ACE128/releases/tag/2.0.0
Примечания к выпуску:
Весь код был объединен в файл ACE128.h, поэтому мы можем использовать там директивы #define для включения и выключения фрагментов неиспользуемого кода для различных проектов. Поэтому, когда я говорю раскомментировать #define ниже, я имею в виду сам файл библиотеки ACE128.h. Они не работают с вашим файлом .ino из-за того, как Arduino IDE компилирует материал.
Это крупное обновление выпуска из-за следующих двух несовместимых с предыдущими изменениями изменений, внесенных для удаления редко используемого кода и сохранения FLASH.
- Поддержка MCP23008 больше не включена по умолчанию. Раскомментируйте #define ACE128_MCP23008, чтобы снова включить его.
- Прямое прикрепление булавки больше не включено по умолчанию. Раскомментируйте #define ACE128_ARDUINO_PINS, чтобы снова включить его. Это отключит код расширения контактов I2C — я полагаю, что никто не использует оба. Если вы это сделаете, дайте мне знать.
Новые функции
- Поддержка контроллеров SAM, например. Ардуино серии MKR. На самом деле это просто не вызывает материал EEPROM для этих устройств, поскольку у них нет EEPROM. Это означает, что по умолчанию они не могут сохранять состояние, что приводит нас к:
- Поддержка I2C EEPROM для сохранения состояния. Включите это, раскомментировав #define ACE128_EEPROM_I2C. По умолчанию он будет использовать чип с адресом 0x50.
- Поддержка полного отключения кода EEPROM для экономии флэш-памяти. Раскомментируйте #define ACE128_EEPROM_NONE для этого. Это значение по умолчанию для модулей SAM и удаление конструкторов EEPROM.
- Новая версия платы 3.1. Поддерживает чип I2C EEPROM. Закругленные углы облегчают работу с пакетами на молнии.
- Переработан ACE128test.ino с большим количеством комментариев — теперь это основная инструкция по использованию. Также теперь по умолчанию поддерживается последовательный дисплей с ЖК-дисплеем I2C в качестве опции. Поддержка ЖК-дисплея с прямым подключением удалена.
- добавлены два примера ace128_0x20 и ace128_0x38, чтобы клиенты модулей могли протестировать свои устройства из коробки.
Обновленный дизайн платы
Аластер Янг • 27.11.2018 в 05:49 • 0 комментариевПлаты Prototype v3.0 находятся в разработке на oshpark. com
Основным изменением является добавление места для Microchip SOT-23-5 I2C EEPROM
Теоретически это обеспечит хранение EEPROM для сохранения состояния на микроконтроллерах без внутреннего EEPROM.
Другие посадочные места не изменились, поэтому я могу использовать старый шаблон, когда он не заполнен.
Прочие доработки:
- Реперные точки для ЧПУ pick and place
- Залито кружки на адресе шелкография
- Закругленные углы, чтобы не бросаться в глаза на упаковке
Это еще не проверено.
Поддержка SAMD21 Arduino Zero/MKR
Аластер Янг • 15.11.2018 в 18:15 • 1 КомментарийКлиент подключил модуль к Arduino MKR WiFI 1010 и обнаружил, что код не компилируется.
Текущий код библиотеки использует ЭСППЗУ для запоминания положения нуля и многооборотного смещения между циклами питания.
В некоторых новых платах Arduino, таких как Zero и MKR, используется микросхема SAMD21, не имеющая памяти EEPROM, поэтому текущий код библиотеки несовместим с этими платами.
Я приветствую отзывы клиентов и наблюдателей о том, как обойти эту проблему. Повторная запись во флэш-память SAMD21 вместо эмуляции EEPROM, как правило, не рекомендуется из-за ограниченного количества циклов записи в этой памяти.
Несколько идей:
- Я рассматриваю возможность настройки следующей версии платы для опционального чипа I2C EEPROM или FRAM.
- Еще одна идея, над которой я работал, заключалась в разработке с использованием ATTiny841 вместо расширителя выводов, который запускал бы весь код на плате. Я увлекся и написал код для этого, включая использование запасного штифта и памяти для управления синхронизированными неопиксельными кольцами. Эта идея некоторое время лежала на полке. https://github.com/arielnh56/ace128tiny (смотря на этот код, я знаю, что написал больше. Надеюсь, он у меня все еще есть, проверим, что у меня есть)
Модуль Ace128 теперь поддерживается Raspberry PI.
Аластер Янг • 09.06.2017 в 08:28 • 0 комментариевЯ только что проверил порт кода для Python на Raspberry Pi
https://github.com/arielnh56/ace128-rpi
Я использую файл вместо EEPROM для сохранения состояния, а конструктор строит карту энкодера на лету. Кроме того, функциональность такая же, как у библиотеки Arduino.
Новая версия платы
Аластер Янг • 23. 04.2017 в 04:01 • 0 комментариевУлучшения:
- Плата теперь имеет квадратную форму 1,2 дюйма. Это обеспечивает полную поддержку всех четырех углов датчика, что делает его пайку прямолинейным процессом.
- Добавление массива резисторов 10 кОм для извлечения адресов упрощает адресацию и предоставляет устройству адрес по умолчанию — на одну операцию меньше перед тестированием. устройства хорошо прошли испытания, доработки не требуются.
Пример многооборотных функций
Аластер Янг • 25.03.2017 в 20:31 • 0 комментариев youtube.com/embed/RsajDeZvMYE» frameborder=»0″ allowfullscreen=»»>
Посмотреть все 9журналы проекта
1
Шаг 1
На данный момент эти обучающие видеоролики немного устарели. Комментарии в примере ace128test в библиотеке arduino более полные и актуальные. Также см. ридми на github.
Для базового тестирования вашего модуля используйте эскизы ace128_0x20 или ace128_0x38.
Как запустить тестовый скетч ACE128, чтобы убедиться, что ваше устройство исправно и правильно настроено программное обеспечение.
2
Шаг 2
Обзор рюкзака I2C, доступного на Tindie