Хотел красивую железку. Получилось

Часть 1 >> Часть 2 >> Вы находитесь здесь

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

В общем, прошёл год с начала моего фанового проекта. Получилось! Та самая красивая железка выглядит вот так:
Моя прелесссть

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

Для хорошей каши из топора нужна крупа.

5g2-led7lwkzbxjqlxzacvundjo.png

Все знают про ESP8266. У этой борды несколько отличий.


  1. К ней подключаются Troyka-модули. И их разных очень много.
  2. Таких модулей туда можно поставить 4.
  3. У неё 8 каналов АЦП, с измерением диапазона от 0 до 3.3 В. А для голой ESP8266 это очень не характерно.
  4. Здесь есть две шины питания: силовая 5В, цифроаналоговая 3,3 В.
  5. Одно в другое превращается через DC/DC. Меня лично задолбали эти кипятильники-регуляторы. Привет высокий КПД.
  6. А это значит, что можно драйвить моторы прям с неё. И как-нибудь я покажу как.
  7. Она поддерживает Slot Connector. А это круто.

Короче, я могу воткнуть в неё 4 потенциометра, и это будет выглядеть круто. Ради этого всё и затевалось.

А вот и мой любимый STM32F030F4P6.

ocbyrvyuj1pn7ba3qom4gmycprm.png
ybtt7-tkdkvrs9w83lhuh8obqas.png

Это платы с одной и той же прошивкой i2cio. Это расширитель портов ввода/вывода.
9 управляющих пинов этой штуки умеют:


  1. 12-битный АЦП
  2. 16-битный ШИМ, с очень круто регулируемой частотой. Хоть сервы туда вешай (DC/DC помогает и тут), хоть моторы постоянного тока крути, хоть звук играй.
    Так же эти 9 плюс ещё один могут цифровой ввод/вывод.

Дополнительно Slot Expander поддерживает Troyka-разъёмы и разделение питания на силовую и аналоговую части.

Аааа… Забыл. Таких штук можно к железке подключить что-то около 100 штук максимум. И они все рассортируются по I2C-адресам автоматом, предоставляя плоскую адресацию пинов. То есть вы сможете написать

i2cio.digitalWrite(852, HIGH);
int tooHighForAnalogPinNumber_areYouReallyShureQuestion = i2cio.analogRead(942);

И при этом всё получится.
Ну и он стоит 33 рубля. И можно сделать датчик линии с самым большим в мире датчиков серого. С 12 битным АЦП и 16-битной регулировкой чувствительности. Не меняя прошивку.


Заголовок спойлера

Что я обязательно и покажу в следующих сериях.

Едем дальше.

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


Скручиваем всё вместе

p1aolgxxxwwncvsyu9p8j2zksfm.jpeg

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

Для этого мне понадобится материнская платка с мозгами esp8266 (слева). Её отличие от остальных только в том, что она квадратная, имеет 8 входов АЦП и питается от 5 В через DC/DC преобразователь. А ещё к ней можно подключить такую же квадратную плату расширения на моём любимом stm32f030f4p6 (справа) через красивую железку (центр).


Добавим кучу потенциометров

Ещё одна особенность этих железок — в них очень просто вставить стандартные модули. Модулей у меня этих много разных. Я взял кучу потенциометров. Потому что все любят кучу потенциометров©.

gz8_-qc9q_qzo2catvmrb17vehw.jpeg

Больше потенциометров богу потенциометров!

rjmrmos5zqz3xubcnk3ua6pdx1k.jpeg


Соль

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


  1. Купить в Леруа деревянный уголок со стороной 2 см
  2. Взять пилу, и попытаться отпилить его под 45 градусов
  3. Понять, что это не так то просто. Начать бегать повсюду и искать стусло.
  4. Скрутить стусло из советского металлического конструктора.
  5. Упилить почти весь уголок в брак, потому что не дано тебе, Василий, делать что-то красивое руками.
  6. Купить, наконец, стусло.
  7. GOTO 5. Потому что не дано тебе, Василий. Нечего и пытаться.

Вот что получилось:

4wcvwxqkvqtnh71bqakrcuyx11w.jpeg


Ерунда, переделать

Друг говорит: «Это что это, пульт для трактора, да? Не похоже что-то».

Хороша работа. Начинай сначала.

Берём ещё 4 платы расширения, прикручиваем. Берём кучу модульков, и тыкаем куда попало.

Получилось вот это:
jqgmkwsnlvp9khto6xipgd5l8-u.jpeg

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

g57wcfpyvkr0dv7n-sodjq2qtmi.jpeg

Ох, не дано тебе, Василий, не дано…


Демонстрация работы

В итоге получился беспроводной пульт для трактора. Он управляет трактором по WiFi через Open Sound Control.



Исходный код

Исходный код на gitHub. Залил целиком рабочую папку, чтобы не искать библиотеки по всему интернету.


А как вообще это работает?

Красивая железка — это просто коннектор, который при помощи четырёх болтов умеет передавать два сигнала и питание. Два сигнала — это I2C. Материнская плата умеет разбрасывать все платы расширения по последовательно идущим I2C-адресам и, впоследствии, что-то с ними делать. Например, считывать 12-битный аналоговый сигнал с (почти) каждой ножки расширителя. Или управлять 16-битным ШИМ на каждой ножке расширителя. Ну или просто использовать эти ножки как цифровой вход/выход. Можно использовать эти расширители, если вам просто не хватило ног на вашем любимом микроконтроллере.
Прошивка stm32f030f4p6, установленного на плате расширения лежит здесь.
Библиотека для работы с расширителями портов в Arduino IDE лежит здесь.
Если уважаемым хабравчанам будет интересно, я обязательно расскажу об этом подробнее. Но не сегодня.

© Habrahabr.ru