пятница, 25 августа 2017 г.

Ёлка шилд для ардуино - Xmas Tree Shield for Arduino

Давным-давно, наверное года три назад, вдохновившись прикольным проектом "LoL Shield" и познакомившись с понятием Charlieplexing, спроектировал к Новому Году платку в виде новогодней елки.
Проектировал изначально под свой проект Blockduino.

Т.е. как видно на схеме, установленны 72 светодиода которые управляются 7ю выводами микропроцессора: D2, D4-D8, D12.
Получилось вот так вот:

Вот первая проба пера на видео:
Управляется с помощью переделанной библиотеки: LoLshield от jprodgers. Может попозжее выложу.
Как видно из видео, светодиоды можно использовать разного цвета, главное, чтобы их параметры были близки, к примеру впаяв в эту плату синий светодиод выяснил, что ток идет не через него, а через пару параллельных светодиодов зеленого цвета. Т.е. вот так как на схеме.
Еще на плате можете увидеть место под RGB светодиод и три выводных резистора. Это я планировал сделать небольшую подсветку за платой-елкой, например набросать ваты, типа снежные сугробы, которые в темноте подсвечиваются плавно меняющимся цветом. Должно было бы быть красиво. Но мне не удалось подружить библиотеку Charlieplex c ШИМом, как бы работало, но заметно мерцало. В общем - оставил на потом.
Вдоволь наигравшись решил, что идея хорошая и должна получить продолжение. В итоге переделал плату под стандартный разъем Ардуино, ну и заодно решил поэксперементировать и освоить пайку SMD светодиодов:
Ну, пока на этом всё.

Update: Видео работы уже третьей версии платы с установленными Arduino Mini Pro.

четверг, 8 июня 2017 г.

Glyphdicator - Ingress Glyph Indicator


Вводная

Yolka - 42 светодиода, Sontse - 126 светодиодов, IngressGlyphs - 132 светодиода
Расскажу как я чуток, чем занимаюсь последнее время (т.е. почему заглох блог )))
Вот увлекся немного созданием плат с кучей светодиодов, по аналогу с LoLShield.
Серию назвал ArduinoFun, fun переводится как забава, веселье, потеха. Т.е. для меня это баловство с ардуино.
Сейчас расскажу о последней плате IngressGlyphs.

воскресенье, 5 июля 2015 г.

Адресная работа с несколькими датчиками температуры DS18B20 с выводом на графический дисплей - Contrlol Multiple 18b20 Arduino GLCD

Когда-то я уже отписывался о работе с тремя датчиками температуры от компании Dallas 18B20. Но на одном из форумов снова встретил обсуждение работы 10 датчиков. Так вот там утверждалось, что десять датчиков будут опрашиваться по секунде на каждого, те десять секунд на все. Меня это слегка смутило, не помню я такого, поэтому решил перепроверить все вживую. Тем более, что в прошлый раз я не доработал до ума код, тк те датчики не привязывались по адресам к объектам, а выбирались наугад, по очереди.
В общем поставил я 6 датчиков, хотел 9, но не нашел столько сходу. Так что пока только шесть. Но это не принципиально, код написал более менее универсальный, так что можно использовать под любое количество датчиков.

воскресенье, 28 июня 2015 г.

Велосипедный спидометр с графическим ЖК дисплеем 128х64 и библиотекой openGLCD - Bike Speedometer GLCD 128x64 openGLCD lib

Продолжаю играться в велосипедные спидометры.
На этот раз подключил графический ЖК дисплейчик с разрешением 128 на 64 точки. Припаял его на BlockProto2, довольно неплохо он там умостился.
Сюда уже можно вывести много информации, поэтому вывожу:
  • Скорость (Speed) - большими и красивыми цифрами, шрифт сделал сам с помощью проги из библиотеки, прилагается к коду отдельным файлом;
  • Общий пробег (Distance) - до 999.99 км
  • Общее время (TripTime) от включения спидометра
  • График скорости - по вертикали скорость от 0 до 30 км/ч, по горизонтали - время от 0 до 60 секунд. График не движется, а прорисовывается слева на право.

вторник, 23 июня 2015 г.

Велосипедный спидометр с ЖК дисплеем 16х4 и библиотекой BigCrystal - Bike Speedometer LCD JM164 BigCrystal lib

Продолжаю играться в велосипедные спидометры.
На этот раз подключил ЖК дисплейчик JM164A, т.е. 16 символов в 4 ряда. Что немножко избыточно для вывода скорости и расстояния. Но можно подключить библиотеку BigCristal для вывода больших цифр.
Правда нормального вывода чисел там нет, а только посимвольно, поэтому пришлось немного допилить библиотеку, чтоб можно было пользоваться просто функцией Print().

понедельник, 8 июня 2015 г.

Велосипедный спидометр с ЖК дисплеем - Bike Speedometer LCD0802

При компоновке велоспидометра для предыдущего поста, сразу было понятно, что ставить семисегментный индикатор для вывода скорости не совсем то что надо - информативность низкая: пройденное расстояние некуда уже выводить, видимость тоже не ахти: днем не видно, ночью глаза слепит. Но таким было техзадание.
Поэтому когда отполировал код, сразу же подключил ЖК дисплейчик. Вернее платку с BlockLCD0802_IC, т.е. дисплей с разрешением 8 символов в 2 строки с управлением по протоколу I2C (он же TWI).
Теперь видимость уже получше, да и больше инфо можно вывести

воскресенье, 7 июня 2015 г.

Велосипедный спидометр на семисегментном индикаторе - Bike Speedometer 7Segment Display

Привлекла мое внимание ветка на форуме Arduino.ru о создании велосипедного спидометра с выводом на семисегментный индикатор.
Захотелось и себе попробовать, ведь все компоненты для этого уже есть под рукой, да и в перспективе планирую прикупить велосипед.
Для спидометра мне понадобились:

пятница, 5 июня 2015 г.

Тотальное обновление библиотеки lib_Block7Seg, она же PrintTo7Seg

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

среда, 29 апреля 2015 г.

Block7Seg_IC - управляем семи сегментным дисплеем по трем проводам, вывод на дисплей данных функцией print()

Уже более года была готова плата этого блока, но купленные дисплей оказались с общим анодом, а нужны с общим катодом. Дело застопорилось, интерес угас.
Но вот сошлись луны и был приобретен нужный дисплейчик. Плата перепаяна и проверена с помощью библиотеки LedContol. И как обычно бывает, функционал этой библиотеки меня совсем не устроил. Пришлось писать свою.
Пока её ещё не выложу на общее пользование, т.к. хочу по максимуму поганять/отладить.

суббота, 15 ноября 2014 г.

Игра Simon Say 7Notes


Продолжение предыдущего поста - Игра Simon Say на Blockduino -  игра в которой нужно повторить все усложняющуюся последовательность загорающихся светодиодов. Общим количеством в семь. Так же каждому светодиоду соответствует нота, которая звучит одновременно со светящимся светодиодом.

воскресенье, 2 ноября 2014 г.

Игра Simon Say на Blockduino

Как-то встретил товарища, который тоже увлекается Ардуинкой. И похвастался он... Та неа, не похвастался, а просто между прочим проскользнуло, что делал он игру Simon Say и она очень понравилась его сыну.
Ессно и мне захотелось посмотреть, что она из себя представляет. Тем более, есть из чего делать.
Нашел пару вариантов.

Сначала классический:

Четыре разноцветных кнопки и соответствующего цвета светодиоды. И одна кнопка для запуска игры.
Взято все отсюда: http://scuola.arduino.cc/

пятница, 17 октября 2014 г.

Сейфовый кодовый замок с семисегментным дисплеем - SafeLock with 1 pot and 7Seg display

SafeLock - one pot locking on arduino
В продолжение к разным кодовым замкам.
Появилась идея сделать "минимальный" кодовый замок, т.е. из минимального набора элементов: процессор (обработка инфо), резистор (ввод кода), светодиод (вывод инфо) и сервомотор (исполнительный механизм).
Но это будет чуть позже, т.к. в процессе творчества захотелось добавить блок Block7Seg, для более удобного вывода информации (а если честно, то просто нет под рукой из чего сделать диск с номерами для резистора, а в слепую вводить код не получится, поэтому контроль ввода кода происходит по Block7Seg).

пятница, 5 сентября 2014 г.

Контроль работы кондиционера (замеряем температуру на входе и выходе) - Multiple temp sensor 18B20 and 7Seg display

Понадобилось мне сегодня проконтролировать работу кондиционера (возник у начальства такой вопрос). Решил для начала замерять температуры на входе (комнатная температура воздуха) и на выходе кондиционера (температура охлажденного воздуха).
Для этого мне понадобилось:
  • Blockduino - 1 шт
  • Block7Seg - 1 шт
  • CleClo-TempSensor 18b20 - 2 шт
  • Провода в формате GVS
  • Блок питания на 5 вольт
  • Пару шурупов диаметром 3 мм для крепежа
  • и пол-часа времени ;)

вторник, 2 сентября 2014 г.

Кодовый замок на 4х резисторах - DoorLock with 4 pot

Попытался спроектировать универсальную базу для крепежа разного вида платок в одну кучу. Что-то типа стенда.
Для ее проверки решил собрать что-нить новенькое на стандартных компонентах. Выбор пал на имитацию кодового замка на камерах хранения которые стояли на ЖД вокзалах когда-то. Ну конечно же не один-в-один, а улучшенную версию :)

воскресенье, 17 августа 2014 г.

Магический Шар или Ардуино предсказывает будущее (Arduino Magic Ball)


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

В связи с этим захотелось что-то сделать с ее участием и решил реализовать давно витавшую в мозгах идею о Шаре Предсказателе, т.е. в нашем случае об Ардуино Предсказателе Будущего.

пятница, 1 августа 2014 г.

IR Rider w Any IRremote - Управляем роботом с помощью любого ИК пульта



Снова я вне дома, снова без семьи, и-нета, друзей и телевизора. А это значит, что нужно чем-то заполнять пустоту в мозгах.
Достал из чемодана своего IR-Rider'а, а пульт, под который он был запрограммирован, остался где-то там где я тогда работал. Тут же возникла мысль запрограммировать его для обучения "на лету" под любой пульт.

вторник, 1 апреля 2014 г.

Библиотека для блока Block7Seg или Выводим текст на семисегментный светодиодный дисплей

Вступление

Повозившись со существующими библиотеками найденными в сети, понял, что не все так гладко как хотелось.
Во первых, еле нашел библиотеку, которая работает по прерываниям (Multiplex7Seg), что дает возможность в основном теле нашей программы заниматься своими делами, а не прорисовывать числа на дисплеях. Ведь без прерывания при обращении к датчику температуры 18B20 дисплей зависает на одной цифре почти на секунду.
Во вторых, та же библиотека как-то коряво выводит числа на дисплей, каким-то хитрым путем прорисовывает точку в дробных числах. И никакой реализации, чтобы вывести что-то больше. А хочется.
В общем взяв эту библиотеку и взяв на вооружение опыт полученный при написании библиотеки для светодиодного дисплея на микросхеме TM1628 и ее части (библиотеки конечно же) я, промудахавшись пару дней, получил нужное.
Итак, прошу любить и жаловать, библиотека для вывода текста на светодиодный семисегментный индикатор подключенный напрямую к микроконтроллеру: lib_Block7Seg.

пятница, 21 марта 2014 г.

Русифицированная библиотека LiquidCristal_I2C - Updated LiquidCrystalCyr_I2C

Я для блока LCD0802_IC русифицировал библиотеку LiquidCristal_I2C.
Вернее я объединил две библиотеки: LiquidCristal_I2C и LiquidCristalRus (c сайта mk90.ru). Правильно было бы назвать ее LiquidCristalRus_I2C, но назвал ее lib_BlockLCD0802_IC, чтоб было сразу понятно для какого блока она предназначена. Но она работает и с другими производителями (например DFRobot).
Вот пример скетча на два дисплея:

четверг, 24 октября 2013 г.

Line Rider Railway - Железная дорога из бумаги для робота

Робот едущий по линииВ продолжение статьи 'Робот бегущий по линии, с одним датчиком - Line Rider 1'

Исправил проблему с потерей линии. Теперь робот, съехав с линии, поворачивается на небольшую величину в заданную сторону и не найдя линии поворачивается в другую на чуть большую величину, и так далее.
Основное тело программы выглядит так:
void loop() { // Основное тело программы
  if(isLine()) {                  // если под нами линия
    digitalWrite(LED_PIN, LOW);     // гасим индикаторный светодиод
    counter = 3;                    // сбрасываем счетчик
    Run();                          // едем вперед
  } else {                        // иначе (нет под нами линии)
    digitalWrite(LED_PIN, HIGH);    // включаем индикаторный светодиод
    Rotation(MIN_ROT);              // поворачиваем на минимальную величину
    if(!isLine()) {                 // смотрим снова, если под нами нет линии (знак '!' - знак отрицания)
      isCW=!isCW;                     // меняем направление поворота
      Rotation(MIN_ROT * counter);    // поворачиваем на несколько (зависит от количества попыток) минимальных величин
      counter= counter + 4;           // увеличиваем счетчик попыток
    }
  }    
} // конец основной программы, начинаем все сначала
Обратите внимание, что добавилась переменная
int counter;
Для проверки работоспособности собрал небольшую трассу с резкими поворотами и прямыми углами. Тест показал неплохую работоспособность, за исключением небольшого но: на очередном повороте робот потеряв линию проскочил ее снова и начал раскачиваться вокруг своей вертикальной оси. А все потому, что наличие линии определяется только в конечных точках. В общем нашел он ее только развернувшись в обратную сторону. Вот видео:

вторник, 22 октября 2013 г.

Inclination Rider - Едем по наклонной

Как и обещал, подключил акселерометр к управлению роботом.
Inclination Rider - Робот поворачивается в сторону небольшого наклона и едет вперед при бо'льшем наклоне.

Алгоритм прост:
  • если наклон по Х(право-лево) и Y(нос-корма) меньше допустимого, то стоим;
  • если нос вниз и левый борт чуток внизу, то направо;
  • если нос вниз и правый борт чуток внизу, то налево;
  • если левый борт внизу, то направо;
  • если правый борт внизу, то налево;
  • а если нос вверх в два раза больше допустимого, то едем вперед;