
Arduino & Pi
Журнал «Amperkot.ru». Выпуск №1(11/2018)
Вышел дебютный ноябрьский номер бесплатного электронного и печатного журнала «Amperkot.ru». В этом выпуске вас ждет ряд эксклюзивных статей: Интервью с Alex Gyver'ом, одним из самых известных и уважаемых блогеров в Российском YouTube по тематике Arduino, DIY и др. Мы не прошли стороной и таких мировых гигантов, как Google, с их аппаратными платформами для обучения искусственных нейронных сетей. Разберем причину ссоры разработчиков Arduino и разницу между платами Arduino или Genuino. Узнаем, чем чревато запускать коптер в ненастную погоду и что с ним будет, если в него ударила молния. А статья о "творчестве" роботов позволит не судить однобоко о бездушных железках.
Помимо этого, вас ждет часть статьи от наших друзей из журнала «Хакер» про ESP32 и IoT. А так же, ответы технического специалиста Amperkot.ru на вопросы о проблемах в работе Wi-Fi модулей ESP8266 в среде Arduino IDE и непонимании наших клиентов, как запустить Arduino MKR тысячной серии.
Приятного чтения!
Raspberry Pi 3 Model A+ — новый одноплатный компьютер за $25
Компания Raspberry Pi Foundation представила новый одноплатный ПК под названием Raspberry Pi 3 Model A+. Новинка похожа на последнюю версию Model B+, хотя и лишена некоторых возможностей.
В основе ПК лежит такой же чип, что и в модели B+, SoC Broadcom BCM2837B0 с четырьмя ядрами Cortex-A53. Также тут имеется 512 МБ оперативной памяти и слот microSD для установки накопителя. В активе устройства имеются модули 802.11.b/g/n/ac Wi-Fi, Bluetooth 4.2, 40-контактный разъём GPIO, порты HDMI и USB 2.0, разъём CSI для подключения камеры и DSI — для подключения дисплея.
Впрочем, не обошлось и без урезания функций, которое позволило обеспечить снижение цены на $10. Под нож пошли порт Ethernet (впрочем, его необходимость на фоне наличия Wi-Fi уже не так важна), размер оперативной памяти (512 МБ вместо 1 ГБ у старшей модели) и всего один разъем USB 2.0 вместо четырех у Model B+.
Нужен совет
Есть нерабочий самсунг gt n8000 с живым дисплеем и тачем. Можно ли его подключить к малинке?
Таймерная служба и диспетчер для ардуино от DiHalt
Пост по мотивам дверного звонка.
Можно сказать логическое его продолжение. Совместим приятное с полезным и заодно рассмотрим таймерную службу и диспетчер задач от DiHalt. Мне показалось эта система довольно удобна для организации кода, особенно если кода много и он чуть сложнее чем мигание светодиодом.
Логично в таком случае делить весь код на мелкие задачи, выполняющие что-то одно и запускать их по мере необходимости, по очереди. Этим занимается диспетчер задач: у нас есть очередь из таких задач, диспетчер проходит по очереди и выполняет наиболее старую (первый встал в очередь, первый выполнился).
Пример на том же светодиоде. Допустим, в прерывании мы увидели что нужно зажечь светодиод, причем поскорее, но не задерживая другой код. Добавляем задачу в очередь прямо в прерывании:
SetTask(BlinkON);
Функция добавления выполняется не долго (конкретно сколько - хз, можно посчитать, это вам в качестве домашки). Понятно что моргнуть светодиодом можно и в самом прерывании, это быстрее. Но к примеру:
SetTask(SendToSerial_длинный_текст);
уже выгода ощущается заметно.
Вторая часть "системы" - это таймерная служба. Суть та же, но задачи выполняются с задержкой.
Например в прерывании мы спалили что нажата кнопка:
if(кнопка нажата){
отключаем прерывание у этой кнопки;
SetTask(btnPress);
}
В btnPres() мы выполняем нужные действия и добавляем SetTimerTask(btnRelease, 100);
Таким образом через 100мс после нажатия кнопки сработает btnRelease, где мы обратно включим прерывания с кнопки. Этим самым мы добиваемся того, что в главном цикле меньше говнокода, портянки проверок и запусков всего, упрощаем масштабирование кода(пример в конце) и заодно, конкретно в этом примере мы избавляемся от головняка отслеживания дребезга.
Теперь кусок псевдокода моего проекта, задача:
1) по нажатию кнопки включать проигрывание мелодии
2) ночью снижать громкость, время синхронизировать с RTC микрухой
3) ограничивать звук вручную с переменного резистора
4) синхронизироваться с телефоном(выбор мелодии, установка времени тихого режима, синхронизация времени телефон->ардуино->RTC и тд)
Главный цикл:
void setup() {
поднимаем_serial();
настраиваем_пины();
инициализируем_переменные();
настраиваем_mp3();
настраиваем_прерывание_с_кнопки(PCIN2);
настраиваем_таймер_для_отсчета_времени();
InitRTOS(); // Инициализируем ядро таймерной службы
RunRTOS(); //Запускаем таймерную службу и диспетчер задач
// Запуск фоновых задач
SetTimerTask(read_max_volume, 1000); //читаем данные с переменного резистора каждые 1 сек
SetTimerTask(check_time, 1000); //проверяем время, не поздно ли. если поздно - включим тихий режим
SetTimerTask(read_rtc, 65000); //синхронизируемся с RTC
SetTimerTask(check_sync, SYNC_PERIOD); //читаем bluetooth модуль, проверяем пришли ли данные
SetTimerTask(BlinkON,500); //моргаем светодиодом
sei();
}
void loop() {
TaskManager();
}
И все, ничего лишнего. check_sync проверяет есть ли данные в буфере от bluetooth модуля.
Если данные есть - мы их считываем и запускаем задачу их распарсить. Как только доходит очередь до функции парсинга, мы понимаем какой пакет данных пришел:
- если это запрос текущих настроек - отправляем ответ
- если это данные с новыми настройками - принимаем и сохраняем их
- если это запрос "воспроизведи текущую мелодию" запускаем задачу воспроизведения
Каждую задачу нужно писать так что бы она выполнялась как можно быстрее, никаких delay внутри быть не должно(кроме совсем уж мелких, как у 1-wire), вместо этого отдаем управление другой задаче, предварительно добавив нужный флаг состояния этой задачи и добавив себя же в очередь(таймерную)
Слишком сильно делить задачи тоже не стоит, т к очередь не бесконечная(это настраиваемый параметр)
Ознакомиться с полным псевдокодом можно тут (упростил для понимания, вырезав лишнее), весь проект можно глянуть тут (там же дернуть либу, в виде подключаемых файлов), и главное ознакомиться с первоисточником, прочитать устройство библиотеки, посмотреть некрасивые рисунки взаимодействия диспетчеров и почитать шутки от дихалта можно тут
UPD: Забыл про пример расширяемости кода. Допустим мы захотели к дверному звонку добавить пару функций: датчик дыма, угарного газа, с оповещением или датчик движения, с оповещением, etc.
Для этого нужно добавить в конец setup() пару строк:
SetTimerTask(check_gas, 1000);
SetTimerTask(check_motion_sensor, 500);
Останется написать сами эти функции. т к опросы датчиков происходят очень редко, по меркам МК, это нисколько не нагрузит ни очередь, ни сам микропроцессор. Функция проигрывания уже написана, нам нужно только записать нужные мелодии на флешку и запомнить их id
Вопросы, пожелания и критика приветствуется)
Rock Pi 4: копия Raspberry Pi по цене от $39
Долгожданный RPi 4 почти готов! Обратите внимания, что речь идет не об Raspberry Pi 4, а об Rock Pi 4, который разработан командой Radxa и вернулся спустя три года после выпуска компьютера Radxa Rock 2 Square, а новый SBC только что был выпущен Томом Куби, основателем Radxa.
Одноплатный компьютер Rock Pi 4 с шестиядерным ЦП Rockchip RK3399, ОЗУ 1-4 Гб и соответствует размерам платы Raspberry Pi 3 и ASUS Tinker.
Будут два варианта Rock Pi 4 – модель A и модель B, у которых будут одни и те же технические характеристики:
- SoC – шестиядерный процессор Rockchip RK3399 big.LITTLE с 2x Arm ядрами Cortex-A72 @ до 1.8 ГГц, 4x ядрами Cortex-A53 @ до 1.4 ГГц, графическим процессором Mali-T864 с поддержкой OpenGL ES1.1 / 2.0 / 3.0 / 3.1, OpenVG1.1, OpenCL, DX11 и AFBC, и процессор машинного зрения (VPU) с декодированием 4K VP9 и 4K 10-бит H265 / H264
- Оперативная память – 1, 2 или 4 Гб LPDDR4 @ 3200 Мбит / с
- Хранилище – слот для модуля eMMC, слот для микро SD-карты до 128 Гб, слот M.2 NVME SSD
- Видеовыход / интерфейс дисплея:
- HDMI 2.0a до 4K @ 60 Гц
- 2-полосный MIPI DSI через разъем FPC
- Поддержка двух независимых дисплеев
- Аудио – через HDMI и 3.5 мм аудио разъем; HD-кодек, поддерживающий аудио до 24 бит/96 кГц
- Камера – разъем MIPI-CSI2 для камеры до 8 МП
- Сеть:
- Rock Pi 4A – Гигабитный Ethernet
- Rock Pi 4B – Гигабитный Ethernet с поддержкой PoE (требуется дополнительный HAT),
- 802.11ac WiFi 5 и Bluetooth 5.0 со встроенной в плату антенной
- USB – 1x USB 3.0 хост порт, 1x порт USB 3.0 OTG, 2x USB 2.0 хост порта
- Расширение – 40-контактный разъем расширения с 1x UART, 2x SPI bus, 2x шинами I2C, 1x PCM / I2S, 1x SPDIF, 1x PWM, 1x АЦП, 6x GPIO и силовые сигналы (5 В, 3.3 В и GND)
- Разное – RTC
- Питание – через порт USB-C, поддерживающий USB PD 2.0 (9 В / 2 А, 12 В / 2 А, 15 В / 2 А или 20 В / 2 А) и Qualcomm Quick Charge 3.0 / 2.0 (9 В / 2 А, 12 В / 1.5 А). Также есть возможность питания через адаптер питания 5 В / 3,4 А, но это не рекомендуется.
- Размеры – 85 x 54 мм
Таким образом, единственное реальное различие между моделью A и моделью B состоит в том, что последний включает в себя модуль беспроводной сети и дополнительную поддержку для PoE.
Основное преимущество в использовании форм-фактора Raspberry Pi заключается в использовании дополнений к Rasperry Pi, в том числе официальных, например, 7-дюймовый дисплей Raspberry Pi или камеру Raspberry Pi V2 IMX219, которая успешно была протестирована на платах Rock Pi. Чтобы внести ясность, совместимость здесь подразумевается аппаратная, но не программная, поэтому образ (имеется виду дистрибутив Linux) для Raspberry Pi 3 не будет работать на Rock Pi 4. Документация доступна на вики Radxa, а также на специальном веб-сайте.
Том Куби не сообщил о ценах, также нет этой информации на веб-сайте, но LinuxGizmos сообщает, что Rock Pi A будет продаваться за $39 (1 Гб), $49 (2 Гб) и $65 (4 Гб), а вот модель B будет стоить $49 (1 Гб), $59 (2 Гб) и $75 (4 Гб).
Источник: cnx-software.ru
@armlab - канал про одноплатные компьютеры в Telegram
Нужна критика электронщика
Я давеча задумался, есть драйвер uln2003 и шаговики от дисководов, можно ли их задружить? Конечно ясно, что uln2003 подходит только для униполярных движков(или биполярных только без реверса), но если сделать обвес?
Взяв за основу полный мост и безжалостно его обрезав, я получил такую вот схемку питания одной обмотки.











