Search
Write a publication
Pull to refresh
32
0

Техножрец Омниссии.

Send message

Автоматизация тибетских поющих чаш с помощью «Ардуино». Шаговый двигатель вместо монаха. Беспроводное программирование

Reading time19 min
Views11K
И ПЕРЕДАЧА БОЖЕСТВЕННОЙ ВОЛИ СИГНАЛОВ ТОЧНОГО ВРЕМЕНИ ЧЕРЕЗ ESP8266.
ЧАСТЬ ЧЕТВЕРТАЯ




Так уж всё совпало. Сначала я увидел статью на «Гиктаймс» про шторы управляемые шаговым двигателем. Вспомнил, что такой же двигатель валяется у меня без дела второй год. Затем взгляд мой упал на поющую чашу, которая пылилась на полке уже лет пять. А затем в голову начали приходить разные умные мысли…

Нет, конечно иногда по настроению, я брал сию чашу в руки и некоторое время извлекал из нее разного рода чарующие звуки, но это было не совсем-то чего мне хотелось. А хотелось мне чем-то заниматься параллельно, а чаша пусть бы в это время звучала сама. Понятно что тысячу лет назад на это потребовался бы отдельный раб человек, лет триста назад — хитроумный заводной механизм, а сейчас… Ну, а сейчас у нас есть и шаговый двигатель и плата «Arduino ProMini» и прочая незамысловатая электроника. Осталось только немного побыдлокодить. И заодно сделать так, чтобы чаша эта тибетская заодно отбивала точное время — зря, что ли наплодили столько серверов точного времени. А с ними пусть общается ESP8266, она это умеет.

Итак…
Читать дальше →

Вся правда об ОСРВ от Колина Уоллса. Статья #5. Взаимодействие между задачами и синхронизация

Reading time7 min
Views4K


В предыдущих статьях мы рассмотрели многозадачную модель, и выяснили, что каждая задача является квазинезависимой программой. Хотя задачи во встраиваемых системах имеют определенную степень независимости, это не означает, что они не «знают» друг о друге. Некоторые задачи будут действительно изолированы от других, но взаимодействие и синхронизация между ними является распространенным требованием. Этот механизм является одной из ключевых функций ОСРВ. Диапазон функций может варьироваться в зависимости от ОСРВ, поэтому в этой статье мы рассмотрим общедоступные варианты.
Читать дальше →

Синхронизация ШИМ на STM32

Reading time4 min
Views38K
Не буду особо вдаваться в теорию, в сети много ресурсов где все очень подробно описано. Но когда дело доходит до практики понимаешь, что все намного сложнее. Используется микроконтроллер stm32l152c-discovery. В статье будет описан процесс запуска ШИМ двух таймеров в одно и то же время (полная синхронизация):

image

А так же запуск с отставанием (на фото отставание в пол периода):

image
Читать дальше →

Создание собственной сети самодельных устройств на базе Arduino (Часть 1)

Reading time4 min
Views14K
Добрый день, хабравчане! Сегодня расскажу вам про интеграцию Arduino с ПК на Windows и другими устройствами. Дело было уже в 2018 году, ко мне наконец-то приехали мои платы Arduino самых разных моделей.

Я давно хотел собрать умный дом, и решил использовать именно эту платформу. Почему? Ну я довольно хорошо знаю C# и немного C++, а как известно, прошивки под Arduino пишутся именно на изменённых плюсах. К тому же платформа имеет цифро-аналоговый преобразователь, что упрощает работу с аналоговыми датчиками. В придачу платформа весьма известна и имеет большую модульную базу.

При всей своей любви к микроконтроллерам, я предпочитаю всё вычислять на винде, а вся моя сила в .NET приложениях. Это и стало моей проблемой. Я просто не мог воспринять среду разработки Arduino IDE. Пришлось привыкать. Однако простые проекты для разминки всё же работали в основном на ПК. Кого заинтересовала тема, прошу под кат!
Читать дальше →

Разработка велоспидометра на базе дисплея от Nokia 3310

Reading time26 min
Views17K
Последнее время среди аксессуаров для велосипедов получили широкое распространение так называемые цифровые велоспидометры (велокомпьютеры). Данные устройства способны измерять множество параметров, главные из которых скорость и расстояние. Принцип измерения скорости основывается на подсчёте периода оборота колеса, а расстояние вычисляется на основе измерения количества таких оборотов. Зачастую датчиком оборота колеса служит геркон в совокупности с магнитом на спице колеса. В зависимости от функциональности, цена таких устройств варьируется в больших пределах. Самый дешёвый велоспидометр можно приобрести примерно за 500 р.

У меня всегда было желание иметь подобное устройство. При этом я сформулировал ряд собственных требований, которым оно должно удовлетворять. Прежде всего, мне очень хотелось, чтобы по мере движения на дисплее пририсовывался график изменения скорости в зависимости от расстояния или времени, накопленный за небольшой период. А также, фиксировать (логировать) измерения на запоминающее устройство для дальнейшей передачи статистических данных на компьютер, их более детального просмотра. Дешёвые модели не полностью соответствуют моим требованиям, а за дорогие модели переплачивать не хочется.
Читать дальше →

Понимая, как используется дисковое пространство в Linux

Reading time11 min
Views52K
Прим перев.: Автор оригинальной статьи — испанский Open Source-энтузиаст nachoparker, развивающий проект NextCloudPlus (ранее известен как NextCloudPi), — делится своими знаниями об устройстве дисковой подсистемы в Linux, делая важные уточнения в ответах на простые, казалось бы, вопросы…

Сколько пространства занимает этот файл на жёстком диске? Сколько свободного места у меня есть? Сколько ещё файлов я смогу вместить в оставшееся пространство?



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

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

Как заставить говорить Omega 2 или сказание об I2S

Reading time3 min
Views10K
Чего сложного с I2S скажете вы? Подключаешься проводками к нужным пинам и все работает.

Omega2 миникомпьютер Я тоже так думал, но с миникомпьютером Omega2 оказалось не все так просто. Поэтому я решил написать эту статью.

Начнем с того, чего я добился в итоге. Я подключил микросхему TDA1543 (стерео I2S ЦАП с разрешением по амплитуде 16 бит) к микрокомпьютеру Omega 2. Звук хороший, я с удовольствием слушаю интернет радиостанции (тут должна быть шутка про аудифилию и теплый ламповый звук). Однако я так и не разобрался в причине перегруза аудио, а лишь научился его обходить костыльным методом. И я очень хотел бы услышать ваши идеи по этому вопросу.
Читать дальше →

Как безопасно программировать в bash

Reading time11 min
Views45K

Почему bash?


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

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

Предисловие


Данное руководство сопровождает ShellHarden, но автор также рекомендует ShellCheck, чтобы правила ShellHarden не расходились с ShellCheck.

Bash — не тот язык, где самый правильный способ решить проблему одновременно является самым простым. Если принимать экзамен по безопасному программированию в bash, то первое правило BashPitfalls звучало бы так: всегда используй кавычки.

Главное, что нужно знать о программировании в bash


Маниакально ставить кавычки! Незакавыченная переменная должна расцениваться как взведённая бомба: она взрывается при контакте с пробелом. Да, «взрывается» в смысле разделения строки на массив. В частности, расширения переменных вроде $var и подстановки команд вроде $(cmd) подвергаются расщеплению слов, когда внутренняя строка расширяется в массив из-за расщепления в специальной переменной $IFS с пробелом по умолчанию. Это обычно незаметно, потому что чаще всего результатом становится массив из 1 элемента, неотличимый от ожидаемой строки.
Читать дальше →

Отладочная плата STM32F4 в форм-факторе Raspberry Pi

Reading time20 min
Views28K

image Добрый день, уважаемые хабровчане! Хочу представить общественности мой проект — небольшая отладочная плата на базе STM32, но в форм-факторе Raspberry Pi. От других отладочных плат она отличается тем, что имеет совместимую с корпусами от Raspberry Pi геометрию и наличие ESP8266-модуля в качестве беспроводного модема. А также приятные дополнения в виде разъёма для micro-SD карты и стерео-усилителя. Для использования всего этого богатства я разработал высокоуровневую библиотеку и демонстрационную программу (на C++11). В статье я хочу подробно описать как аппаратную, так и программную части этого проекта.

Читать дальше →

Грязные трюки с макросами C++

Reading time10 min
Views149K
В этой статье я хочу сделать две вещи: рассказать, почему макросы — зло и как с этим бороться, а так же продемонстрировать пару используемых мной макросов C++, которые упрощают работу с кодом и улучшают его читаемость. Трюки, на самом деле, не такие уж и грязные:
  • Безопасный вызов метода
  • Неиспользуемые переменные
  • Превращение в строку
  • Запятая в аргументе макроса
  • Бесконечный цикл

Заранее предупреждаю: если Вы думаете увидеть под катом что-то крутое, головоломное и сногсшибательное, то ничего такого в статье нет. Статья про светлую сторону макросов.
Читать дальше →

Портируем код с Qt 1.0 на Qt 5.11

Reading time5 min
Views15K
Недавно вышел Qt 5.11 и мне подумалось, что сейчас самое время обновить до него кое-какие мои проектики на Qt 1.0… Ладно, шучу :) На самом деле мне стало интересно, насколько хорошо за все эти годы развития фреймворка Qt нам удавалось сохранять обратную совместимость кода.

Qt гарантирует совместимость на уровне кода и бинарников при обновлении между минорными версиями фреймворка (и мы серьёзно относимся к этому обещанию). Вы не должны переписывать (или даже перекомпилировать) свой код при переходе на другую минорную версию Qt. Однако переходы между мажорными версиями требовали от нас идти на некоторые жертвы ради прогресса. С релиза Qt 1.0 в 1996 году мы ломали совместимость кода четыре раза: в версиях 2.0, 3.0, 4.0 (ох, это было болезненно!) и 5.0.

Мы старались даже в мажорных версиях сломать как можно меньше всего, но всё же это приходилось делать. Отсюда возникает вопрос: насколько сложно портировать приложение, написанное во времена Qt 1.0 до современного Qt 5.11?

Для ответа на этот вопрос я взял пример кода, который поставлялся с документацией на Qt 1.0 и постарался собрать его с помощью Qt 5. Наши публичные архивы содержат изменения начиная с версии 1.41, так что мне пришлось изрядно покопаться в дрейнейшей истории, пройти через логи четырёх разных систем контроля версий… но это я уже отвлекаюсь. Проект, который я планирую собрать, называется «t14» — поскольку это иллюстрация к 14-ой (и последней) главе оригинального руководства.

И вот, что мне пришлось проделать для его сборки.
Читать дальше →

Spectrum-48 против пачки сигарет, каша из топора или что может STM32F103C8T6+video(update)

Reading time3 min
Views43K
Все началось с очередной попытки бросить курить. Разбудив свою внутреннюю «жабу» в поисках поддержки, говорю ей: «Смотри, пачка моих сигарет стоит сегодня как карманный ретро-компьютер с экраном, то есть примерно $10, а когда-то давным давно, на клон синклера-48К мы всю месячную зарплату и больше месяца на сборку и отладку потратили». Она: «Вы мужики- козлы и вруны, докажи!». Пришлось поработать.

Итак, исходно-расходные материалы:

  1. «Blue pill»: STM32F103C8T6 — 20K ram 64K flash $2.06
  2. «Ардуино Display»: ILI9341 2.8" 320x240 с сенсорным экраном и слотом карточки $7.72
  3. Пищалка $0.18
  4. Немного кнопок (7 штук) $0.2
  5. Немного проводов $0.1
  6. Флеш карта на 64 мега (с древнего фотоаппарата), в расчет не включена
  7. Программатор ST-LINK, не расходуется и в расчет не включен, однако тоже пару долларов стоит
  8. Пачка сигарет — расходуется слишком быстро и каждый день -$8.37


Мигаем светодиодом из модуля ядра Linux

Reading time3 min
Views14K
Всем привет. В этой статье хочу поделиться опытом создания простого модуля ядра Linux. Статья будет полезна тем, кто хотел бы понять как писать модули ядра, но не знает с чего начать.

Мне давно хотелось разобраться в этой теме, но до недавнего времени не знал как к ней подойти. Хотелось, чтобы модуль был достаточно простым, но сложнее чем сообщение «Hello world!» выведенное в log файле. В итоге я решил попробовать помигать светодиодом. Дополнительная цель была вывести параметр отвечающий за частоту мигания в sysfs.
Читать дальше →

Используем Onion Omega2 для создания устройств с Linux и Wi-Fi

Reading time9 min
Views49K
В последнее время передо мной часто встают задачи сделать то или иное DIY устройство с Wi-Fi. Я рассматривал разные варианты одноплатных компьютеров и микроконтроллеров, на основе которых это лучше делать, и в итоге моим фаворитом стала Onion Omega2.



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

Программирование современных микроконтроллеров: лекция 1

Reading time16 min
Views97K
Конспект первой лекции по программированию современных микроконтроллеров на примере STM32 и операционной системы RIOT. Лекции читаются в Институте информационных технологий МИРЭА по субботам, с 12:50 в актовом зале на 4 этаже корпуса Д. В занятиях отводится 1,5 часа на саму лекцию и 3 часа на практические занятия в лаборатории IoT Академии Samsung по теме лекции.

Привет, Гиктаймс! Как мы и обещали, начинаем публикацию конспектов лекций, которые сейчас читаются в Институте ИТ МИРЭА. По результатам первой, вводной лекции мы решили немного изменить структуру курса — вместо планировавшихся двух потоков по 5 занятий будет один поток на 7 занятий. Это позволит в более спокойном темпе разобрать ряд вспомогательных вопросов, а также статьи с конспектом будут появляться на GT каждую неделю в течение всего марта и апреля, а не через неделю, как планировалось раньше.

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

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

Цель курса — освоение навыков, позволяющих свободно работать с микроконтроллерами на ядре ARM Cortex-M на современном уровне и, при наличии такого желания, двигаться в сторону дальнейшего углубления своих знаний.



Сегодняшняя лекция — первая, поэтому на ней будут разбираться общие понятия: что такое вообще микроконтроллер и зачем он нужен, что такое прошивка и как она получается, зачем нам нужна операционная система, и наконец — как работать с git. Результат практического занятия — собственный репозитарий на GitHub с исходными кодами ОС, а также успешно настроенная среда сборки на локальном компьютере.

Mikrotik vs Старый ПК, проблема выбора в малом предприятии

Reading time4 min
Views31K
В малых предприятиях остро стоит вопрос экономии при закупке оборудования, зачастую этот вопрос решается отказом от закупки, если можно заставить работать имеющиеся. В этой статье я хочу поделится своим опытом в этом вопросе и осветить основные причины, почему многие делают именно так.


Читать дальше →

«Привет, Хабр» на частоте 835 кГц

Reading time5 min
Views24K
Как-то раз в голове возникла мысль, а что бы сделать такое, чтобы скрестить старый радиоприемник в деревянном корпусе и современный контроллер для интернета-вещей ESP32? То ли с головой не так что-то, то ли делать мне нечего, но скрестить получилось. Не шаблонно, в целом, хотя судить вам, дорогие читатели Хабра).

За подробностями прошу под кат.
Читать дальше →

ESP32 и Ардуино

Reading time8 min
Views206K
image

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

Работает ли это вообще? Что там с поддержкой этих модулей в Arduino IDE? Стоит ли платить больше или лучше ограничиться ставшим уже привычным ESP8266? Мы постараемся вместе ответить на все эти вопросы, а в конце статьи я дам ссылку на реальное воплощение работы ESP32 с Ардуино — дистрибутив бесплатной версии Arduino Mega Server для платформы ESP32.
Читать дальше →

Эмуляторы терминалов

Reading time7 min
Views9.3K
Добрый день. Вашему вниманию представляется публикация о роли терминалов в истории развития компьютерной индустрии. Данная статья основана на личном опыте, размышлениях автора и анализе литературных источников. В дальнейшем содержание статьи может уточняться. Данная публикация адресована специалистам, занимающимся разработкой устройств по передаче, приёму и обработке сигнала в системах связи, интересующимся историей развития технологий.

Терминал — электронное или электромеханическое устройство [1], используемое для организации диалогового взаимодействия пользователя с компьютером, как правило состоящее из клавиатуры и дисплея, подключённое через сетевой интерфейс к удалённому серверу. Первые варианты таких терминальных систем появились в то время, когда ещё не существовало понятия персонального компьютера ввиду огромных размеров ранних ЭВМ. До 70-x годов прошлого века в качестве монитора многими пользователями использовался [2] принтер, на котором распечатывалась реакция ЭВМ на команды, вводимые с клавиатуры.

image


Многотерминальные системы [3] позволяли одновременную работу с ЭВМ нескольких пользователей, каждый из которых получал собственный терминал для работы с компьютером, а их количество определялось его вычислительной мощностью. Такие многотерминальные системы стали прообразом современных вычислительных сетей. В 13 лет Билл Гейтс был буквально загипнотизирован [4] компьютерным терминалом, установленным в здании школы, и каждую свободную минуту он и его друзья проводили рядом с ним. «Мы жили в параллельной вселенной» — говорил потом об этом времени сам Билл Гейтс.

image
Читать дальше →

Основные принципы C++: Правила выражений и операторов

Reading time5 min
Views20K
Бобра!

Что ж, мы плавно выходим на старт второго потока группы «Разработчик С++» и разбираем интересные материалы, которые накопились у преподавателя в свободное от работы и преподавания время. Сегодня рассмотрим (а потом и продолжим) серию материалов, где разбираются отдельные пункты С++ Core Guidelines.

Поехали.

В C++ Core Guidelines много правил, посвященных выражениям и операторам. Если быть точным, то более 50 правил посвящено объявлениям, выражениям, операторам и арифметическим выражениям.



*перевод
Информативные названия

Оптимальная длина переменных

  • Не должны быть слишком длинными (maximimNumberOfPointsInModernOlympics.) или слишком короткими (например, x, x1)
  • Длинные названия сложно печатать, короткие названия недостаточно информативны..
  • Дебажить программы с названиями от 8 до 20 символов гораздо проще
  • Гайдлайны не заставляют вас срочно менять названия переменных на имена из 9-15 или 10-16 символов. Но если вы найдете в своем коде более короткие названия, убедитесь, что они достаточно информативны.

Слишком длинные: numberOfPeopleOnTheUsOlympicTeam; numberOfSeatsInTheStadium; maximumNumberOfPointsInModernOlympics
Слишком короткие: n; np; ntmn; ns; nslsd; m; mp; max; points
В самый раз: numTeamMembers, teamMembersCount

Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Middle