Сообщество - Arduino & Pi
Добавить пост

Arduino & Pi

1 380 постов 20 588 подписчиков

Популярные теги в сообществе:

Прошу помощи в создании. ESP32 или что-то другое?

Всем привет!
Прошу помощи в создании одной штуки.
Если надо - не безвозмездно.

ТЗ следующее:
В автомобиль, где напряжение бортсети достигает до 15 в (хотя в комментах подсказывают что будут всплески куда высокие, до 200в, но суть ясна), и эксплуатация от -30 до +30 градусов нужно установить "звездное небо" с 3-4 "кометами" в потолок.

"Звёздное небо" - оптоволоконные нити, в один торец которых стороны будут светить светодиоды, а другой будет заподлицо вмонтирован в тканевую обшивку потолка.
1 светодиод - пачка оптоволокна, и таких соответственно какое-то количество, пусть например 20 штук светодиодов на 800 оптоволокон.
Нужно будет эмпирическим методом подбирать предполагаю.
Минимальные эффекты - мерцание с высокой частотой, возможно плавная смена яркости.
Максимальные - по ситуации, может настройка цвета, яркости или какие-то другие программы.

"Кометы" - те же оптоволоконные нити, выстроенные в дугу-синусоиду-иное, и уже 1 светодиод = 1 нить.
Эффект - последовательное включение от первого до последнего светодиода, с плавным погасанием отключающихся светодиодов "комета с хвостом"
Минимальные эффекты - уметь делать этот эффект белым цветом.
Максимальные - по ситуации, может настройка цвета, яркости или какие-то другие программы.

Таких "Комет с хвостом" будет несколько штук, 2-4.
Время включения этих комет нужно будет сделать разным, и соответственно паузу между ними так же нужно иметь, а не так чтобы циклично каждые 2 секунды включались)

Так же нужно чтобы контроллер помнил последнее состояние/программу и запускался сразу после подачи питания.

Натыкивать оптику, крепить её к светодиодам, паять проводочки это без вопросов.

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

Насколько я понял, для создания такой вещи мне необходима адресная светодиодная лента, скорее всего с минимальным "пикселем" в 1 светодиод (это скорее всего микросхемка вмонтирована в сам светодиод будет)
Напряжением... в 12? вольт...
Протокол управления сказали что SPI будет приемлем.
DMX вроде как надежнее (не последовательное соединение), но его почему-то отвергли как более сложный вариант

И некая плата управления.

Мне порекомендовали посмотреть на платы ESP32
Т.к. к ним видимо можно писать программы, а так же эта плата имеет несколько выходов для SPI ленты.

Т.е. можно использовать:

1 выход на ленты с звездными небом
2 выход на комету 1
3 выход на комету 2
4 выход на комету 3

И т.д.

И для каждого выхода будет своя программа.

Ну и нужно подобрать какой-то стабилизатор питания для этого всего дела.

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

Что скажете други?

Показать полностью

Самодельный боксмод

Привет! Мой первый пост на Пикабу. Не знаю как его оценят, но не суть. Я решил сделать первую самоделку в жизни и выбрал боксмод. Раньше я не занимался ни программированием, ни самоделками. Решил делать я по схеме и уже готовой прошивке. За основу взял arduino nano. Сама система будет на мосфете. Лишь бы не вышла ручная граната. На этом всё! Хорошего дня.

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect

источник

Raspberry pi 5, часть 1

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

rpi5

Протестируем работу Raspberry pi 5, посмотрим особенности, а также проверим возможность удалённого управления интерфейсом. Тема нам интересна, ранее у нас были эксперименты с ARM, в начале канала описаны первые шаги.

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

rpi-connect

Сразу отметим, что для полноценной работы rpi5 требуется мощный блок питания на 5А. В нашем случае на блоке питания на 3А rpi5 работала, но на рабочем столе всё время "сигналила". В реальности потребление было меньше, естественно, без подключения других компонент, только вентилятор:

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

psu

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

warning

(!) Для информации: на Али китайские коллеги часто продают абсолютно не подходящие по параметрам блоки питания, перед покупкой читайте комментарии.

По параметрам rpi5 превосходит rpi4 раза в 2: новый процессор, память, видео, поддержка быстрых дисков etc. Также есть приятные мелочи - кнопка включения; она работает так - при подключении питания rpi5 включается сама, далее выключить/включить можно с кнопки.

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

working

Нагревается rpi5 прилично, поэтому ставить радиатор+вентилятор обязательно, об этом мы говорили ранее:

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

cooling

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

Для проверки rpi-connect нужна десктопная версия системы:

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

Raspberry PI Imager

После установки плата автоматически перезагружается несколько раз. Честно сказать, десктопной версией мы пользовались всего несколько раз. Тут ничего особенного нет. Советуем при запуске Raspberry PI Imager настроить:

  • логин/пароль пользователя

  • подключение к своей точке доступа, если нет кабельного подключения

  • включить ssh-сервер

Для проверки rpi-connect нужно обновить пакеты, ОС и установить пакет с последующей перезагрузкой:

sudo apt install rpi-connect

Все действия по настройке rpi-connect сделать только через консоль не получится.

Регистрация на сайте нужна (им для учёта нас) для возможности удалённого входа по логину/паролю из любого браузера. Ресурс для входа будет вида:

https://connect.raspberrypi.com/devices/qwertyui-1234-5678-zxcv-1234567890qw

Raspberry pi 5, часть 1. Особенности, первый запуск, удалённое управление через rpi-connect Китайские товары, AliExpress, Linux, Raspberry pi, Raspbian, Длиннопост

rpi-connect

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

Наши выводы:

  • rpi5 - достаточно мощная плата, позже мы еще ещё постестируем её возможности

  • охлаждение и блоки питания - важные составляющие, на этом экономить нельзя

  • функция rpi-connect (beta) интересна, но пока притормаживает. Если нужно просто удалённо управлять платой с графической оболочкой - используйте. Нам пока хватает ssh

Показать полностью 8

Светодиодные матрицы для "чайников" (часть 2)

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

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

Возьмем, к примеру, мою новогоднюю звезду . Диоды там уложены концентрическими звездами, да еще и змейкой.

Светодиодные матрицы для "чайников" (часть 2) Arduino, Программирование, Длиннопост, Светодиоды, Видео, Без звука

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

Светодиодные матрицы для "чайников" (часть 2) Arduino, Программирование, Длиннопост, Светодиоды, Видео, Без звука

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

uint16_t mapTable[][2] = {

{ 206, 340 },

{ 181, 354 },

{ 156, 369 },

{ 132, 383 },

{ 107, 398 },

{ 89, 404 },

{ 89, 385 },

{ 95, 357 },

{ 101, 329 },

{ 107, 301 },

{ 114, 273 },

... // и так далее, для всех 180 диодов

};

struct ledCoords {

uint16_t x;

uint16_t y;

};

ledCoords mapIdxToXY( byte index ) {

return { mapTable[index][0], mapTable[index][1] };

}

void loop() {

for ( byte i = 0; i < NUM_LEDS; i++ ) {

ledCoords lc = mapIdxToXY(i);

leds[i] = effectColorByCoords(lc.x, lc.y);

}

FastLED.show();

}

На практике это оказывается не очень удачным решением. Координаты - штука относительная. У кого-то линейка в дюймах, а у кого-то 4К картинка с четырехзначными координатами. Замучаешься подгонять масштаб анимации под каждое устройство. Чтобы избежать этого выполняют нормализацию координат.
Звучит страшно, но на практике это просто пересчет в некую фиксированную систему координат. Например, давай примем за правило, что минимальная координата по X среди всех диодов это 0 в нашей "нормализованной" системе, а максимальная - 1. И все остальные координаты пересчитаем пропорционально Xn = ( x - Xmin )/(Xmax - Xmin). Аналогично поступим с координатами Y.

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

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

  • Во-первых все эти дробные координаты для контроллера являются числами с плавающей точкой (float) и он тебе не скажет спасибо за их использование. В отместку контроллер будет тратить кучу времени на расчеты даже простой арифметики, не говоря уж о корнях, степенях и тригонометрии.

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

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

И тут ты подкидываешь наивную идею: "А можно как-то так чтобы координаты остались целыми, но не такими большими и более-менее схожей размерности на разных устройствах?"

Можно!

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

Светодиодные матрицы для "чайников" (часть 2) Arduino, Программирование, Длиннопост, Светодиоды, Видео, Без звука

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

byte mapTable[][2] = {

{ 12, 18 },

{ 11, 19 },

{ 9, 20 },

{ 7, 21 },

{ 6, 22 },

{ 5, 22 },

{ 5, 21 },

{ 5, 19 },

{ 6, 18 },

{ 6, 16 },

{ 6, 15 },

... // и так далее, для всех 180 диодов

}

Вроде неплохо получается.

А чтобы все алгоритмы были похожи на работу с обычной прямоугольной матрицей,можно развернуть мэппинг. Будем хранить в таблице не координаты, а индексы диодов для каждой ячейки нашей матрицы 27x23
Только как же быть с пустыми клеточками, ведь их нужно как-то пропустить при обработке? Да запиши в них просто какое-то значение индекса которое ты отловишь в цикле и пропустишь обработку. Например любое число большее общего количества диодов. И таблица примет такой вид:

byte mapTableIndex[23][27] = {

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 27,

255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 26, 255,

28, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 25, 77,

29, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 78, 255,

76, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 24, 255, 255,

255, 30, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

{ 255, 255, 255, 255, 255, 255, 255, 255, 255, 23, 255, 79, 117,

75, 255, 31, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },

... // и еще 17 строк

}

Тогда функция мэппинга и рабочий цикл будут выглядеть как-то так:

byte mapXYtoIdx( byte x, byte y ) {

return mapTableIndex[y][x];

}

void loop() {

for ( byte y = 0; y < 23; y++ ) {

for ( byte x = 0; x < 27; x++ ) {

byte ledIndex = mapXYToIdx(x,y);

if ( ledIndex == 255 ) continue;

leds[ledIndex] = effectColorByCoords(x, y);

}

}

FastLED.show();

}

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

Собираем все полученные знания в кучу и зажигаем)

(Продолжение следует, stay tuned)

Показать полностью 3 1

Кнопка с подсветкой на Ардуино

Сразу скажу - я полный нуб в Ардуино. Задумал тут один проект, что-то типа баттон бокса. Только мне нужны кнопки с подсветкой. Вот такие:

Кнопка с подсветкой на Ардуино Arduino, Вопрос, Нужен совет

Кнопки будут на 5V.

Есть ли какой-то способ подключить эти кнопки к плате, чтобы при включении загоралась зеленая подсветка? Или всё таки нужно мудрить через блок питания?

Показать полностью 1

Светодиодные матрицы для "чайников" (часть 1)

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

Светодиодные матрицы для "чайников" (часть 1) Arduino, Программирование, Длиннопост, Светодиоды, Видео, Без звука

Итак, адресный RGB светодиод отличается от обычного трехцветного наличием встроенного контроллера, вон тот черный прямоугольник на картинке. Эта чудесная микросхема принимает со входа Din пакет данных, откусывает от него первые 24 бита и отправляет оставшиеся данные на выход Dout. А откушенный кусочек превращает в прекрасное свечение определенного цвета.

На мой взгляд, определение “адресный” не совсем подходит для этого контекста, так как адреса и нет вовсе, а есть только порядковый номер диода в конкретной конструкции. Если снесут дом на улице, остальные дома останутся при своих номерах, а если убрать на светодиодной ленте первый диод, то второй станет первым.

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

CRGB leds[NUM_LEDS];
leds[0] = CRGB::Red;
FastLED.show();

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

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

Большинство эффектов для светодиодных конструкций представляют собой некую функцию определяющую цвет светодиода в текущий момент времени по его координатам в конструкции.

С лентами вроде все понятно, одномерный объект, одна координата равная порядковому номеру диода на ленте.

А как быть с матрицами? Они уже двумерные, там у каждого диода есть две координаты - столбец и строка. Не паникуй, оказывается среднестатистическая матрица это та же лента уложенная рядочками. Так что, технически, обращение к конкретному диоду выполняется все так же, по его номеру. Слышу твое возмущение, и ты конечно же прав, матрица двумерная и обращаться к диодам хотелось бы по понятным двум координатам. Выручит небольшая функция, которая будет пересчитывать две координаты в номер диода. В общем случае, для прямоугольной матрицы размером WIDTH х HEIGHT, получится как-то так:

int XY( int x, int y ) {
return y * WIDTH + x;
}

Это преобразование обычно называют мэппингом ( mapping )

Ты уже подпрыгиваешь на месте и хочешь собрать что-то сверкающее и красивое? Не вижу причин отказывать тебе в этом, погнали.

Берем самую распространенную китайскую матрицу 16х16 с диодами WS2812, первый диод в левом верхнем углу, там же и начало координат. Все координаты и индексы начинаются с нуля. Цепляем матрицу по схемам из интернета к контроллеру и пишем первую программу.

#include <FastLED.h>
#define DATA_PIN 12
#define WIDTH 16
#define HEIGHT 16
#define NUM_LEDS WIDTH * HEIGHT

CRGB leds[NUM_LEDS];

byte XY( byte x, byte y ) {
return y * WIDTH + x;
}

void setup() {
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.clear();
for ( byte y = 0; y < HEIGHT; y++ ) {
for ( byte x = 0; x < WIDTH; x++ ) {
leds[XY(x,y)] = CRGB::Red;
FastLED.show();
delay(100);
}
}
}

void loop() {
}

Компилируем, прошиваем. Работает!!!

Так, стоп! У нас цикл для X идет по возрастанию от 0 до 15, почему же тогда каждая вторая строка матрицы заполняется в обратном порядке?
Помнишь я говорил что матрица это лента уложенная рядочками? Так вот ленту удобнее укладывать змейкой, что производители и делают) Раскладка так и называется - serpentine ( aнгл. змеевидный ).

Что же делать с нашим примером, ведь мы хотим зажечь диод с координатами (2,1) а зажигается диод (13,1). Немного поскрипим извилинами и изменим функцию мэппинга так чтобы каждый второй ряд считался в обратном порядке.

byte XY( byte x, byte y ) {
if ( y%2 == 0 ) {
return y * WIDTH + x;
} else {
return ( y + 1 ) * WIDTH - x - 1;
}
}

Не буду разжевывать математику, прикинешь на пальцах, сообразишь сам что к чему.

Теперь все ок.

С адресацией матрицы разобрались, можем творить красоту.

(Продолжение следует. Stay tuned)

Показать полностью 3

Определение направления вращения колёсика мыши (неоптической)

Возникла мысль об использовании энкодера мыши в Ардуино. И стало интересно как определяется направление вращения колёсика. В интернете информация конечно есть, но в основном по оптическим. Провел небольшой эксперимент. Делюсь результатами.

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

Определение направления вращения колёсика мыши (неоптической) Физика, Arduino, Эксперимент, Мышь, Энкодер, Электроника, Самоделки, Видео

Если смотреть с этой стороны, то правой крайний пин общий, остальные переменные.

Попробую использовать, если получится сделаю пост о том, что получилось.

Показать полностью 1

Xbox 360 пропатчен !

долго собирал необходимый инструмент, но в итоге, я это сделал, Xbox 360 пропатчен.

Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост
Xbox 360 пропатчен ! Xbox 360, Пиратство, Rasberi PI, Длиннопост

PS

Это мой 3й Xbox360, чтото все время жизнь меня с ними разлучает, но я не сдаюсь и вот вновь получил возможность прикоснуться к прекрасному 😃

PS PS

Это моя консоль, которую я купил, что хочу, то с ней и ворочу) Волков бояться, на торренты не заходить ;)

Показать полностью 10
Отличная работа, все прочитано!