Как сделать компьютер на ардуино

Обновлено: 04.07.2024

Его комментарии к переработке:

1.вся проводка и соединение всех модулей и узлов сохранены из первоначального проекта.(кроме подключения блутуз модуля, он теперь на серийном порте «1»)

2.программа жестко заточена под ардуино МЕГА 2560. на серийном порте «0» присутствует Дебаг при условии раскоментирования дефайна.

3.убран параметр задержки между опросами, задержка полностью интелектуальна и динамична, новый запрос не отправится пока не будет получен ответ на предыдущий с учетом таймаута.

4.добавлена функция восстановления связи в случае разрыва соединения (параметром потери связи служит отсутствие оборотов двигателя).

5.для работы требуется библиотека OBD.h вложенная в архив с проектом, этот экземпляр имеет несколько изменений от оригинала который можно скачать из интернета, и без неё скорее всего проект не будет работать или будет нестабилен.
папку нужно скопировать в папку " \Documents\Arduino\libraries"

Android приложение со всеми нюансами в Google Play: OliviaDrive

Мы сможем сделать бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный бензин за поездку, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ, коррекции топлива, вольтаж датчиков кислорода, нагрузку двигателя и многое другое.

image

image

image

image

image

image

image

image

Список требуемых деталей для сборки БК

image

2) LCD2004 жк-модуль

image

3) Модуль Bluetooth HC-05


4) OBD ELM327 Bluetooth сканер


5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус

Настройка блютуз модуля HC-05 для работы

Подпаиваем провода к пинам блютуза: (картинку с выходами смотреть в описании требуемых деталей)


void loop()
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
>

После успешной загрузки скетча открываем: Сервис->Монитор порта. Далее снизу ставим скорость 9600 бод и NL+CR вместе.

Далее вводим команды по одной и нажимаем [Послать]. После каждого ввода должен быть ответ ok.

Заметьте, что mac-адрес вида: «AA:BB:CC:11:22:33» вводится как «AABB,CC,112233». MAC- адрес своего модуля ELM327 можете посмотреть, подключившись для начала на него со своего мобильника. (Стандартные пароли обычно: 1234, 6789, 0000).

Всё, настройка модуля Bluetooth закончена.

Теперь нужно собрать схему Arduino + блютуз + LCD-экран


Схема:

Переменный резистор на 10кОм нужен, чтобы управлять контрастностью монитора, так что если при первом включении вы включите и ничего не увидите, попробуйте отрегулировать контрастность шрифта поворотом резистора.

3. Подключаем дополнительную кнопку для переключения экранов с данными.

[1 кнопка]: один конец от нормально-открытой кнопки подключаем в GND ардуино, а второй конец в пин 10.
[2 кнопка]: GND + пин 9.

Бипер для звуковых предупреждений подключить по следующей схеме "+" к пину 13, а минус к GND ардуино.

Заливаем скетч в Arduino с помощью Aduino IDE 1.0.6 (использовал эту версию).

Нужно будет обязательно учесть три переменных:

Управление

Скетч:

Все, идем в машину, вставляем ELM327 в порт, ардуину в зарядку для авто и проверяем.


Появился как-то неожиданно в гараже Днепр МТ-16 и т.к. я только начал вникать в программирование микроконтроллеров то, руки сразу зачесались что-то заколхозить на него) Мной было принято решение сделать бортовой компьютер. Решил, что на дисплее будет отображаться напряжометр, термометр, тахометр и температура с двух бошек.


Ну чтож руки в ноги и отправился писать код) Спустя некоторое время макетная плата приобрела вид хаоса из проводов.



В левом верхнем углу вольтметр, в правом верхнем температура окружающей среды с датчика TMP36, по центру тахометр и внизу справа и слева температура с левой и правой головы соответственно. Снимать температуру решил термопарой типа К. Вольтметр из обычного делителя, для бортовика с головой хватит такого решения. Импульсы оборотов коленвала я снимать решил через оптопару с безконтактной системы зажигания.


зажигание. Кажется к черному проводу я подцеплялся. Не помню уже.


max6675 сигнал с термопары решил усиливать именно через него. уж больно понравился он мне.

Вроде бы все настроено и работает как надо. Проверил на аппарате. Надо бы сделать корпус для дисплея.


Да. Да! Я знаю, что маленький дисплей. Но это же моя первая поделка более менее имеющая вид и цель проекта была получить данные от мотоцикла в наглядном виде, а не на выставку. В дальнейшем хотел делать экран больше.







Сделал вот такую плату. Атмегу взял конечно конскую для таких целей))))) Тут бы и 8 хватило) Но задача была все сделать поскорее, хочется кататься) и на тот момент я в основном писал в ардуино ИДЕ.





OLED myOLED(SDA, SCL);

extern uint8_t SmallFont[]; // шрифт термометров
extern uint8_t MediumNumbers[]; // шрифт вольтметра
extern uint8_t BigNumbers[]; // шрифт тахометра
extern uint8_t akb[]; // иконка "Аккумулятор"
//extern uint8_t logo[]; // логотип используемый при запуске
extern uint8_t logo2[]; // логотип используемый при запуске

float V, V1, Voltage = 0; // переменная хранящая данные вольтметра
float temp_out; // переменная для наружной температуры
volatile unsigned int RPM = 0; // переменная тахометра
unsigned long tmr1, timer_imp = 0; // переменные для таймеров

void tacho() // Обработчик прерывания от пина INT0
RPM=60/((float)(micros()-timer_imp)/1000000); // расчет оборотов
timer_imp=micros(); // засекаем когда был последний импульс
>

void setup()
pinMode(volt, INPUT); // пин для вольтметра
pinMode(TMP36, INPUT); // датчик наружной температуры
pinMode(tachometer, INPUT); // пин тахометра
analogReference(INTERNAL); // мерить будем относительно внутреннего опорного напряжения в 1,1в
V = 1.1 / 1024.0 / (R2 / (R1 + R2)); // расчет коэффициента для вольтметра
temp_out = ((analogRead(TMP36) * 1.1 / 1024.0) — 0.5) * 100; // считываем температуру и переводим в градусы
myOLED.begin(SSD1306_128X64); // подключаем дисплей
myOLED.clrScr(); // очищаем дисплей
// myOLED.drawBitmap(30, 0, logo, 64, 64); // рисуем стартовое лого
myOLED.drawBitmap(12, 0, logo2, 100, 63); // рисуем стартовое лого2
myOLED.update(); // выводим все на экран
attachInterrupt(0, tacho, RISING); // устанавливаем прерывания на пине INT0 (D2)
delay(4000); // задержка для стабильности и показа логотипа
>

void loop()
Voltage = analogRead(volt) * V; // Вольтметр
if ((micros() — timer_imp) > 300000) RPM = 0; //если сигнала нет больше 300мсек считаем что RPM 0

if (millis() > tmr1) //считываем окружающую температуру по заданному интервалу
temp_out = ((analogRead(TMP36) * 1.1 / 1024.0) — 0.5) * 100 ; // считываем температуру и переводим в градусы
tmr1 = millis() + 30000; // задаем интервал 30мс
>

//вывод на экран

myOLED.clrScr(); // очищаем экран
myOLED.setFont(MediumNumbers); // задаем шрифт MediumNumbers
myOLED.printNumF(Voltage, 1, 18, 0); // пишем напряжение с 1 знаком после запятой. В х0 у0
myOLED.drawBitmap(0, 1, akb, 18, 15); // рисуем иконку аккумулятора
myOLED.drawLine(0, 18, 128, 18); // рисуем верхнюю линию
myOLED.drawLine(0, 48, 128, 48); // рисуем нижнюю линию
myOLED.setFont(SmallFont); // задаем шрифт SmallFont
myOLED.print("B", 67, 9); // пишем "В" (вольт)
myOLED.print("RPM", 0, 38); // пишем RPM
myOLED.printNumI(thermocouple_L.readCelsius(), LEFT, 53); // считываем температуру с левой термопары
myOLED.printNumI(thermocouple_R.readCelsius(), RIGHT, 53); // считываем температуру с правой термопары
myOLED.printNumF(temp_out, 1, 95, 0); // пишем наружнюю температуру
myOLED.print("C", RIGHT, 0); // пишем С (градусы)
myOLED.setPixel(121, 0); // ставим пиксель для обозначения градусов
myOLED.setFont(BigNumbers); // задаем шрифт BigNumbers
myOLED.printNumI(RPM/2/10*10, RIGHT, 21); // пишем обороты с 0 на конце.
myOLED.update(); // выводим все на экран

delay(150); // задержка для стабильности
>

// Generated by : ImageConverter Mono Online
// Generated from : akb.jpg
// Time generated : Wed, 18 Jan 17 11:27:44 +0100 (Server timezone: CET)
// Image Size : 18x15 pixels
// Memory usage : 33.75 bytes

imagedatatype akb[] PROGMEM=0xFC, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x85, 0x05, 0x05, 0x04, // 0x0010 (16) pixels
0x04, 0xFC, 0xFF, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC3, 0xC1, // 0x0020 (32) pixels
0xC0, 0xC0, 0xC0, 0xFF,
>;

Прошивка залита. Плата спаяна. Дисплей работает. Да вообще все работает) И вот на этом моменте планы резко поменялись. И проект был заброшен из-за отсутствия самого виновника торжества это мотоцикла.((((

Но все же решил выложить работу. Вдруг кому-то из нее что-то пригодится. Код писал очень подробно весь, разберется даже школьник. Да там вроде и ничего особо сложного и нет. Где-то даже слишком примитивно все сделано.
Сначала все немного тормознулось из-за того, что я захотел сделать систему зажигания на МК, потом инжектор вкорячить, параллельно все переписать на Си. Ну вобщем как на современных тачках сделать мозги. И однажды все к херам пошло)

Платы кстати у меня остались, кому надо обращайтесь, по сути это готовый показометр на машину или мот.

Хочу поделиться историей о том, как я спроектировал и сделал себе стильный модный пылесборник корпус для ПК открытого типа, в который интегрирована Ардуина со светодиодными кольцами. На светодиодных кольцах выводится информация о загрузке и температуре железа ПК.


Arduino & Pi

1.1K поста 18.1K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Рассуждать на темы политики

Иллюстрация к комментарию

Я себе кнопку включения пк выводил из корпуса на стол, ставил такую

Иллюстрация к комментарию

а зачем? вся эта подсветка заебет в темноте уже на 3 день/ночь

@AlexGyver, Как на счет сделать стол со встроенным ПК?

Иллюстрация к комментарию

Мне вот интересно, Алекс, снимать видео в трусах уже традиция?)) А зачем там ардуино, можно же в x86 описать что ты хочешь от техники. Посмотри загрузчики, которые до ОС запускаются, типа того же clover. AlexGyver, по корпусу не продумал пыле очистку, пыль будет кушать как пылесос, по бокам корпуса, и на верхней пластине не помешала бы сетка мелкая
Или посадить верхнюю крышку на петли, а удержание крышки сделать на магнитах, или сразу без петель, на магниты. Проще открыть, проще пыль убрать

Вызывает сомнение только гибкость оргстекла. Как бы мамка не повредилась если будет лёгкий перекос

Вопрос не в тему, но мне очень интересно увидеть, как соединить промышленный энкодер с ардуино. Хочу электронную линейку сделать с винтовой передачей и экраном 1602.

Идея клёвая, но имхо я бы ещё как-нибудь USB и аудио порты вывел на переднюю панель, чтобы флешки и наушники прям в стену втыкать. Ну и конечно, чтобы подсветку можно было выключать.

А я люблю светодиоды) мне понравилось) Но подсветку сделал бы отключаемой)

А вот касательно пыли тут был комент - с ним согласен.. Хотя, открытый корпус можно периодически продувать из баллончика)

На вкус и цвет все фломастеры разные, руки не из задницы растут у автора, а это главное))

ЗЫ, как по мне, то все эти лгбт-подсветки, уже приелись, корпус должен быть с пылезащитой,охлаждением и шумкой.

Хм. Проект в открытом доступе. Т.е. в теории можно его кому-то заказать. Я определился с подарком себе на ДР. А если не секрет - сколько примерно вышла по денежкам стоимость самого корпуса?

Крутотенька, хорошо когда руки из нужного места))

дискотЭка в каждый дом + грязь в каждый блок

шоб мозг и глаза охуели.

На будущее: для ВСЕХ форм-факторов материнских плат существуют чёткие стандарты (размеры, отверстия). Их не нужно замерять

Ого, прямо casemods образца 2008 года.


Косячный Arduino CNC Shield v4. Полное восстановление работоспособности

Купил я себе Arduino CNC Shield v4. Как оказалась данный шилд косячный, и про эту проблему известно давно, а китайские производитель так и продают их с данным браком. Но я решил не выбрасывать данную плату, а реанимировать.

Первое что нужно сделать, это настроить прошивку, так как при разводке платы перепутаны местами контакты step и dir.

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Второе что не работает это деление шага. Чтобы сделать максимальное деление шага можно припаять 3 перемычки. Внимание джамперы ставить в данном случае нельзя, ЗАМКНЕТ!

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Если вам нужно выставлять деление шага можно перерезать дорожки и припаять 5 перемычек. Подробнее про данный способ читайте на сайте.

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Что меня удивляет это факт того, что CNC Shield v4 стоит дороже чем его не бракованный брат Arduino CNC Shield v3. Почему так?

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Если что то не понятно смотрите тут.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


Детская игровая кухня своими руками

Всем добра и мира!

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

Пока созревал план-банан, шерстил бескрайние просторы всемогущего интернета, и вот зацепил меня один проект. Евгений собрал для своей дочки чудо-кухню, и готовит, и стирает, пени поёт, а еще и сказки рассказывает. Ух как мне понравилось, аж прям загорелось всё ярким пламенем (внутри). Вот ссылка на проект кухни Евгения.

Имея неплохой опыт сборки мебели с нуля, навыки программирования (но не Ардуино, его я уже изучал в процессе), опыт радиодела, то решил, а почему бы и не. Сказано - сделано! Я связался с Евгением и просто замучал его вопросами по размерам, некоторым нюансам программирования, озвучки, технологическим хитростям, за что еще раз приношу свои извинения за свою назойливость. Вот просто огромная человеческая Благодарность за его терпение и подробные разъяснения, это мне очень помогло, иначе бы проект так и остался бы проектом. Вот еще ссылочка с видео проекта кухни Евгения.

И вот, по прошествии некоторого времени разродился проект, который вам и предоставляю.

Общий вид кухни, уже оккупированной нетерпеливой шеф-поваром =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Имитация кухонной мойки. По задумке к смесителю будет подключён сенсорный датчик (жду с али), при касании будет воспроизводиться звук льющейся воды в раковину.

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Имитация микроволной печи. На имеющийся вращающийся столик будет прикреплена более широкая тарелка, чтобы всё цивильно было =) Есть 2 режима работы микроволновки: 1. Ручной - задается время в ручную, 2. Предустановленные режимы - Время и режим приготовления уже заданы, осталось только выбрать =) Всё крутится, светится, становится на паузу при открытии дверцы, либо в ручную, чтобы проверить степень приготовления пищи =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Кухонная плита и духовой шкаф. В духовке еще не установлены решетки, но они будут, куда ж без них =) Имитация работы конфорок и духовки плавно регулируются. Конфорки имеют звуковое сопровождение шкварчащей сковороды и бульканья воды при кипении. Выключатели включают общий свет на кухне (рабочая зона) и свет в духовом шкафу.

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

А вот некоторые моменты обратной стороны медали =)

Здесь находится основное управление космическим кораблём кухней, плеер, реле управления светом, датчик температуры и влажности, усилитель, дисплей и энкодер. Энкодер позволяет регулировать громкость в обычном режиме, и имеет возможность переходить в служебный режим для осуществления настроек.

При включении кухня приветствует ребенка разными фразами, в зависимости от времени суток, причём, фразы выбираются рандомно. Для каждого времени суток я записал по 3 фразы, чтобы не надоедало =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Здесь живёт крутилка и шумелка, а так же пищалка, которая озвучивает нажатия кнопок на матрице (можно отключать в настройках энкодера)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

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

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

И, наконец, общий вид ЦПУ =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Небольшой обзорчик работы кухни =)

Схема соединения модулей готовится. Будет здесь опубликована. Вот ссылка на некоторые материалы проекта (звуки, библиотеки, скетчи. Важно - библиотека на кнопки модифицирована именно под матрицу 4*4).

Всем спасибо за внимание и радуйте своих детей =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео


Сенсорный кодовый замок своими руками

Сегодня расскажу, как сделать сенсорный кодовый замок своими руками. На подобии тех, что были популярны в фильмах лет 7-10 назад. Тему контроля доступа я уже затрагивал в одной из предыдущих публикаций. А сегодня в меню кодовый замок.

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

Вот так это выглядит у меня.

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

Правда, это всего лишь стенд для проекта. Но в планах установить что-то подобное на шкафчик, где хранятся документы. Просто надоедает открывать и закрывать его ключом, которого постоянно нет под рукой.

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

А с кодовым замком ничего искать не нужно. Главное пароль не забыть!

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


Подключение энкодера к Ардуино и полнофункциональный код обработки для него

Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, энкодер KY-040 гораздо надежней и долговечный.

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Немного подробностей

Собирая один из проектов с использованием encoder. Я не смог найти код для Ардуино выполняющий все мои условия. Так как для проекта нужно обрабатывать следующие команды: "Вращение без нажатия", "Вращение с нажатием", "Нажатие" и "Длинное нажатие", а так же требуется стабильная работа энкодера. Скетчи использующие один пин с прерыванием INT0 или INT1, работают отвратительно и при вращении вала энкодера вылетает очень много ошибок. Код без использования прерываний работает стабильно, но он не работает в фоновом режиме, его нужно встраивать в тело основной программы, что в свою очередь приводит к не своевременному срабатыванию обработчика и пропускам при вращении энкодера. Еще хуже обстоят дела с обработкой нажатия с вращением вала энкодера и обычным с нажатием. Пришлось написать свой код обработки, который исключает описанные выше проблемы. С дребезгом контактов я не стал бороться программно, так как это приводит к задержкам обработки. Проще и надежней использовать керамические конденсаторы.

Схема подключения энкодера к Ардуино

Для считывания сигналов с выходов EC-11, нужно использовать три цифровых входа Arduino. В схеме подключения я использовал редко используемые мной в своих проектах выводы Arduino(A1, A2 и A3). Внешние подтягивающие резисторы отсутствуют, так как я использовал внутреннюю подтяжку микроконтроллера. Конденсаторы нужны для гашения импульсов дребезга контактов. Если у вас новый и хороший энкодер, то можно обойтись и без них. Но на кнопку в любом случае потребуется конденсатор, так как ее дребезг неизбежен.

Используемые в схеме компоненты:

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Скетч для Ардуино

Для того что бы отслеживать изменение положения энкодера в фоновом режиме, я использую прерывание PCINT1. Обработка всех функций происходит в прерывании, обработчик в зависимости от произошедшего действия изменяет переменную enc_state. Если значение переменной enc_state=0 - ничего не произошло, enc_state=1 - экодер вращался без нажатия, enc_state=2 - экодер вращался с нажатием, enc_state=3 - было нажатие на кнопку, enc_state=4 - было длинное нажатие на кнопку, Прерывание будет срабатывать каждый раз по изменению состояния входов, как с высокого уровня на низкий, так и наоборот. То есть при одном щелчке энкодера прерывание сработает 4 раза. Или по 2 раза для каждого из входов. Но обработчик выдаст сигнал поворота только 1 раз на все 4 прерывания.

Код обработчика при каждом срабатывании записывает в переменную lastcomb состояние входов, к которым подключен энкодер. И ждет состояние когда выходы A и B будут замкнуты на GND, это гарантированный сигнал того, что энкодер вращается. После того как этот сигнал получен, обработчик проверяет в какую сторону было вращение. Для этого он сравнивает его предыдущее значение из переменной lastcomb и в зависимости от фазы сдвига определит в какую сторону был поворот ротора. Как я писал ранее, сложнее всего отслеживать нажатие кнопки.

Так как использовать определенные тайминги я не планировал, потому, что они неизбежно приводят длительным задержкам работы обработчика и основной программы, или требуют использование таймера, которых в микроконтроллере всего 3 шт. их, как правило никогда не хватает. Собственно проблема состояла в том, чтобы разделить "нажатие с последующим вращением" от простого нажатия. В итоге как вы уже можете убедиться, я решил эту задачу. Оптимизацией кода я не стал заниматься, потому как все работает и меня все устраивает. Для наглядности в коде все действия с энкодером, отображаются в Serial мониторе программы Adruino IDE.

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

Если у Вас остались вопросы и замечания, пишите их в комментариях. Я с удовольствием на них отвечу.

Если у вас есть тяга к технологиям (или ребёнок с такой тягой), рассмотрите Arduino. Эта штука озадачит вас и ребёнка на много часов, а на выходе получатся удивительные проекты.

10 интересных вещей, которые можно сделать на Arduino

Что за Arduino

Или можно подключить к Arduino датчик углекислого газа. Arduino можно научить считывать показания датчика каждые пять минут и, когда уровень углекислого газа превышает норму, запищать, замигать лампочкой или с помощью серии моторчиков открыть окно.

К Arduino есть много плат расширения и датчиков. Сферы применения платы почти безграничны: автоматизация, системы безопасности, умный дом, музыка, робототехника и многое другое. Вот что можно делать на этой умной итальянской плате и на её российских и зарубежных клонах.

1. Робот-бармен с Bluetooth-управлением

Сложность: 4/5.

Время: 5/5.

Робот-бармен с Bluetooth-управлением

Незаменимое устройство для любой вечеринки: работает от восьми батареек, готовит много коктейлей и управляется без проводов. В основе механического бармена — плата Arduino, приводы для позиционирования шейкера и подачи напитков, датчики положений.

Главная сложность при изготовлении — инженерная. Нужно точно прикрутить все детали и соединить их между собой, чтобы ёмкость оказывалась точно под нужными бутылками.

2. Светящийся куб на 512 светодиодов

Сложность: 3/5.

Время: 3/5.

Светящийся куб на 512 светодиодов

Красивая штука, которая может светиться в такт музыке как трёхмерный эквалайзер и показывать 3D-анимацию. А ещё это может работать как необычный ночник.

3. Взломщик кодовых замков

Сложность: 5/5.

Время: 4/5.

10 интересных вещей, которые можно сделать на Arduino

Этот проект разработал хакер Сэми Камкар, и мы приводим его только в демонстрационных целях. Для взлома, кроме платы Arduino, автор взял серво- и шаговый двигатели для перебора комбинаций и соединил всё на самодельном шасси из алюминия. В основе алгоритма — простой перебор всех комбинаций, но робот это делает быстрее человека.

4. Nod Bang — киваем головой и делаем бит

Сложность: 2/5.

Время: 3/5.

Nod Bang — киваем головой и делаем бит

Идея в том, чтобы не просто кивать в такт музыке, а кивками самому генерировать звук. Эндрю Ли сделал специальное устройство, которое следит за положением головы и в момент наклона воспроизводит нужный звук.

В наушники он встроил акселерометр, кнопки отвечают за выбор звука, а Arduino — за воспроизведение звука на компьютере через MIDI-интерфейс. Чтобы всё выглядело эффектнее, у кнопок есть подсветка, и они тоже делают бит.

5. Поющее растение

Сложность: 2/5.

Время: 2/5.

Поющее растение

По сути это терменвокс, который сделали в виде растения. Все остальные принципы работы остались теми же: звук возникает при движении рук, и разные движения генерируют разную мелодию.

Плата регистрирует изменение амплитуды сигнала, для чего автор использует самодельный сенсорный детектор для анализа прикосновений к цветку. Кроме этого понадобилась плата расширения Gameduino и сам цветок.

6. Замок, который открывается на секретный стук

Сложность: 3/5.

Время: 2/5.

Замок, который открывается на секретный стук

Интересная вещь для тех, кто хочет поиграть в шпионов или пускать в комнату только своих друзей. Замок распознаёт стук по двери и сравнивает его с базовым звучанием, которое установил владелец. Если совпадает — приводы отодвигают замок и дверь открывается, если нет — ничего не происходит, можно постучать заново.

Чтобы установить новый стук на открытие, нужно зажать кнопку на ручке и постучать по двери новым способом. Пьезосенсор распознаёт вибрации и записывает их в память платы.

7. Горшок для цветов с автополивом

Сложность: 4/5.

Время: 3/5.

10 интересных вещей, которые можно сделать на Arduino

Полезный горшок для тех, кто забывает полить цветы перед отъездом или просто не знает, как часто надо их поливать. Вся электроника, насосы и ёмкость для воды находятся внутри горшка. Для каждого растения можно запрограммировать свой режим полива в каждом горшке.

Основные характеристики чудо-горшка:

  • встроенный резервуар для воды;
  • датчик контроля уровня влажности почвы;
  • насос для подачи воды;
  • датчик уровня воды в резервуаре;
  • светодиод, информирующий о недостатке воды в резервуаре.

8. Драм-машина

Сложность: 1/5.

Время: 2/5.

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

Математическая основа этого устройства — разложение в ряд Фурье, которое решается подключением стандартной библиотеки.

9. Шагающий робот

Сложность: 2/5.

Время: 1/5.

Шагающий робот

Простой в изготовлении четырёхногий робот, который шагает и самостоятельно преодолевает препятствия в сантиметр высотой.

Чтобы его сделать, вам понадобятся сервомоторы для ног, немного проволоки и любой пластик, из которого делается шасси. Для питания — аккумулятор любой модели, который крепится на спине робота.

10. Робот-пылесос

Сложность: 4/5.

Время: 5/5.

Робот-пылесос

Дмитрий Иванов из Сочи собрал настоящий робот-пылесос, который делает всё то же самое, что и промышленные устройства, только с возможностью тонкой настройки под себя и свою квартиру.

Основные детали — плата Arduino, 6 инфракрасных датчиков, турбина с двигателем и щётками и аккумулятор. Ещё у робота есть датчики столкновения, которые помогают объезжать препятствия, и контроллер аккумулятора, который следит за уровнем батарей и предупреждает о том, что пылесос надо зарядить.

Читайте также: