Пол – это лава: я таки открыл свою игровую комнату
Да-да, идея не уникальна, но тег моё, т.к я сам разработал, спаял и запрограммировал эту штуку
Да-да, идея не уникальна, но тег моё, т.к я сам разработал, спаял и запрограммировал эту штуку
1) Антенна GSM/GPRS/3G за 39 рублей
Миниатюрная антенна совместимая с модулями Sim800, sim900 и с усилениеем 3DBI. Стоит такая штука 39 руб. с бесплатной доставкой. ссылка на источник
2) Датчик скорости
Компактный модуль измерения скорости с инфракрасным щелевым датчиком. Модуль применяется для контроля движения в колесных роботах и прочих устройствах. Стоит такой 53 рубля. ссылка
3) Герконовый модуль
Модуль представляет собой миниатюрный магнитный геркон Y213 (нормально разомкнутый) с обвязкой. При приближении магнита контакты замыкаются и модуль символизирует о наличии питания и о срабатывании датчика. Контакты геркона замыкают вход компаратора. Благодаря применению компаратора в модуле через геркон протекает очень малый ток, что значительно продлевает срок службы датчика. Состояние выхода цифрового сигнала говорит о наличии магнитного поля. На модуле установлен подстроечный резистор номиналом 10 кОм. Служит для установки пределов срабатывания геркона и таким образом отрегулировать чувствительность. Также на плате установлен компаратор LM393 для исключения ложных срабатываний магнитного датчика. При считывании показаний с модуля, если геркон разомкнут - выводится "1", если замкнут - выводится "0". Стоит такой 87 руб. ссылка
4) Защитная плата для литий-ионных батарей
Модуль защиты для зарядки аккумуляторов. Стоит такой около 55 руб. ссылка
5) Гигрометр HR31
Датчик для измерения влажности. Стоит такой 55 руб. ссылка на источник
6) Бегущая линия светодиодов
Набор 'сделай сам' - бегущие светодиоды, регулировка через потенциометр. Стоит такой набор 58 рублей с бесплатной доставкой. ссылка
7) Модуль датчика температуры
Термистор для arduino, с помощью регулировки потенциометра вы можете изменить порог обнаружения температуры. Стоит такой 56 руб. ссылка
8) Датчик обхода препятствий
Инфракрасный датчик обхода препятствий для создания Arduino роботов. Стоит такой 57 руб. ссылка
9) Модуль программирования чипов
Модкль для чипов ATtiny13A/ATtiny25 /ATtiny45/ATtiny85. Стоит такой 61 руб. ссылка
10) Разъем типа C
Разъем Type-c для передачи данных. стоит такой 62 рубля. ссылка на источник
11) Датчик управления светом
Набор для самостоятельной сборки фоточувствительного датчика. Стоит такой 63 рубля. ссылка
12) Модуль питания
Плата модуля питания 3.3V, 5V, 12V. Стоит такой 65 рублей ссылка
13) Сигнал тревоги
Сигнал тревоги 95 дБ, 3-24 В. стоит такой 66 руб. ссылка
14) Кнопки
Набор кнопок для изготовления платы управления. Стоит такой набор 70 руб. ссылка
15) Низкоуровневый триггер
1-канальный релейный модуль 5В. Стоит такой 73 рубля с бесплатной доставкой. ссылка на источник
16) Датчик удара
Модуль датчика удара для Arduino, 3 контакта. Стоит такой 78 руб. ссылка
17) Мигающая лампочка
Модуль с 7-цветным мигающим светодиодом диаметром 5-миллиметров. Стоит такой 78 рублей. ссылка
18) Инфракрасный излучатель
10 пар инфракрасного излучателя и ИК-приемника. Стоит 76 руб. с бесплатной доставкой. ссылка
19) Разноцветные светодиоды
Разноцветные светодиоды диаметром 3 мм. Идут партиями по 100 штук. Стоит набор 79 руб. ссылка
20) Датчик наклона
Стандартный модуль датчика наклона KY020, 3 контакта. Стоит такой 79 руб с бесплатной доставкой. ссылка на источник
21) Пятипозиционный модуль навигации
Компактный модуль для обеспечения управления устройствами. Модуль имеет подвижный джойстик, который реагирует на наклоны, поддерживает движение вверх, вниз, влево, вправо и центральное нажатие. Стоит такой 79 рублей. ссылка
22) Датчик сердцебиения
Датчик Arduino KY-039 служит для измерения пульса (сердцебиения) на пальце. Данный сенсор реагирует на изменение прозрачности пальца для инфракрасного излучения от светодиода при колебаниях кровяного давления. Стоит такой 81 руб. ссылка
23) Датчик пламени
Датчик огня KY-026 (flame sensor Arduino) позволяет определить наличие открытого пламени с помощью инфракрасного приемника. Стоит такой 82 рубля. ссылка
24) Модуль энкодера
Модуль энкодера KY-040 для arduino (Ардуино) - это датчик угла поворота. Другое его название - модуль датчика вращения или валкодер. Модуль напоминает переменный резистор, но в отличии от него не имеет ограничений по количеству оборотов, его можно использовать в качестве кнопки. Фактически у него два режима вращения - без нажатия и с нажатием ручки энкодера. Модуль - механический датчик, преобразующий угол поворота в электрические сигналы. Стоит такой 82 рубля ссылка
25) Антенна для IP-модуля SIM800L
Антенна для IP-модуля SIM800L GPRS TCP предназначена для усиления сигнала и обеспечения стабильной связи в сети GPRS и TCP. Стоит такая 86 рублей с бесплатной доставкой. Ссылка на источник.
Предыдущие материалы по теме:
В предыдущей статье я рассказал о том, как возникла идея создания умного дома. Теперь я хочу более подробно рассмотреть архитектуру первой версии этой системы.
МажорДом состоит из нескольких ключевых компонентов: девайсы, хаб, облако, мост, мобильное приложение и голосовой ассистент.
Девайсы обеспечивают управление физическими устройствами в доме. С помощью радиомодулей и протокола "Мерлин", они обмениваются данными, получают команды от хаба и отправляют ему события.
Хаб является центральным элементом системы. Он обеспечивает управление девайсами и координирует их работу. Хаб хранит основную базу данных с информацией о пользователях, доме, комнатах и девайсах. Через локальный HTTP-сервер и WS-сервер, хаб предоставляет API для работы с базой данных и высокоуровневого управления девайсами.
Облако является серверной частью и играет важную роль в обеспечении авторизации пользователей. На облаке хранится база данных пользователей, домов, хабов и их права доступа. Так же в облаке хранятся модели устройств со списком параметров и система обновлений прошивок.
Мост представляет собой WS-сервер, который обеспечивает связь между хабом и удаленными пользователями через интернет. Он позволяет отправлять команды и получать информацию с хаба, не находясь в домашней локальной сети.
Таких мостов в системе может быть несколько и они могут располагаться в разных местах. Клиенты выбирают ближайший или наименее загруженный мост для минимизации задержек при обмене данными.
Одна из главных особенностей системы "МажорДом" - ее отказоустойчивость. Даже при сбое работы одного или нескольких мостов, система продолжает функционировать. Остальные доступные мосты берут на себя задачи вышедших из строя мостов, обеспечивая непрерывность обмена данными между хабом и клиентами.
Нестрашна даже полная потеря интернет-соединения на хабе. Вся логика и обработка команд происходят локально, что обеспечивает независимость от интернет-соединения и сохраняет возможность управления устройствами в локальной сети. Но такой сценарий редкость, ведь хаб может подключаться одновременно по wifi и ethernet кабелю, а в будущем будет добавлена поддержка сим-карт сотовой сети.
Управление умным домом осуществляется через мобильное приложение, которое предоставляет удобный интерфейс для пользователей. Однако на практике, роль мобильного приложения часто сводится к настройке системы, а ежедневное управление устройствами осуществляется с помощью автоматических сценариев и голосового ассистента.
Как и хаб, голосовой ассистент может работать полностью офлайн, что обеспечивает безопасность, конфиденциальность и надежность использования.
Самое главное: теперь установить систему "МажорДом" могут даже те, кто не имеет опыта в программировании. В следующей статье я поделюсь подробным руководством о том, как это сделать.
К сожалению, в наше время многие старые, но весьма неплохие по характеристикам гаджеты отправляются напрямую в помойку, и их владельцы не подозревают, что им можно найти применение. Сервер, мультимедийная-станция, да даже просто как TV-приставка — люди в упор не замечают сфер, где старенький планшет мог бы быть полезен. Но как быть, если посвящаешь жизнь портативным гаджетам, кодингу и копанию в железе? Правильно: сделать довольно мощную игровую консоль из старого планшета самому! Сегодня вам расскажу, как я сделал свою портативную приставку из планшета с нерабочим тачскрином, Raspberry Pi Pico и 8 кнопок! За рабочим результатом прячется несколько дней работы: поиск UART на плате, разработка контроллера геймпада на базе RPi Pico, написание приложения-сервиса, которое слушает события и отправляет их в подсистему ввода Linux в обход Android. Интересно? Тогда жду вас под катом!
Прошло уже практически 10 лет с того момента, как у меня появилась моя первая портативная консоль. Несмотря на то, что я был заядлым ПК-игроком, я уже успел посмотреть на PS3 и PSP, но денег на их покупку у меня особо не было, да и к тому времени уже был в наличии Android-планшет. Но к моему 13-летию в 2014 году, когда я ходил и выбирал себе будущий девайс на день рождения, отец и мама решили подарить мне мою первую портативную консоль. Изначально, я уговаривал её купить мне целых два девайса, но бюджет был ограничен 4.000 рублей, а я хотел взять смартфон Fly IQ239 и консоль JXD S601 одновременно:
Однако, увидев здоровую 7-дюймовую консоль в магазине TREC (думаю, жители южной части РФ помнят такой), мама уговорила меня взять именно её, мотивируя это «ну и чего ты будешь тыкаться в этот мелкий экран? Возьми большую». После покупки гаджета, я был доволен: играл какие-то игрушки с ретро-платформ, устанавливал игры на Android, сидел в ВК через Kate Mobile. Что еще нужно было школяру? Однако, планшет прожил у меня недолго: с очередного лага я психанул и ударил по нему кулачком, унеся на тот свет и дисплей и тачскрин. Так консолька и пролежала в подвале около 8 лет. Впрочем, мне продолжали импонировать подобные устройства и в прошлом году я купил и написал про несколько подобных девайсов.
Несколько месяцев назад, мой читатель Кирилл Севостьянов с Хабра прислал мне HTC HD2 в качестве донора и планшет Prestigio PMP7170B3G, который был рабочим, но… у него отказал тачскрин. Я всё думал, чего бы с ним сделать и решил реализовать игровую консольку своими руками из подручных средств. Идея крутилась в голове довольно давно, но реализовал я её только сейчас.
Итак, что должно быть у портативной консоли? Чипсет, дисплей, звук, ОС — это всё нам уже предоставляет планшет. Нам остаётся лишь сделать свой геймпад. Давайте подумаем, что нам будет нужно для того, чтобы его сделать и передавать от него события на планшет:
Контроллер для геймпада: тут нам подойдет практически любой микроконтроллер, который работает от 3.3в. Выбор большой: Arduino Pro Mini 3.3v, ESP32, RPi Pico. Я остановился на последнем: недавно я взял себе две штучки «пощупать» их — и они мне очень понравились!
Физический интерфейс: с планшетом нужно как-то общаться. У нас есть три варианта: USB (не факт, что поддержка преобразователей включена в ядре), UART и SPI/I2C на пятачках тачскрина (потребуют написания драйвера т. к. в android-устройствах нет прямого доступа к SPI/I2C из userland'а). Я остановился на UART: его легко найти на большинстве китайских планшетов, а если не получилось — то на помощь может прийти схема платы.
Программная реализация: как это будет работать? Я решил реализовать геймпад в виде сервиса на Android, который слушает состояния кнопок с UART и «инжектит» события напрямую в драйвер ввода. Таким образом, поддержка нашего геймпада появляется даже в самой системе — можно управлять менюшкой или приложениями как с клавиатуры!
С планом определились, пора начать с программной части: сначала нам обязательно понадобится ROOT-доступ. Его получение на разных девайсах отличается — на prestigio уже был порт CWM и я просто поставил SuperSU. Без ROOT доступа мы не сможем использовать UART!
Теперь нам нужно найти пятачки UART на плате. Разведен он не везде, но в случае устройств на MediaTek — почти всегда, ещё и пятачки подписаны. На моём планшете он нашёлся сразу: был между двух металлических экранов и соответствовал 4-ому каналу UART. Получить к нему доступ можно в /dev/ttyMT3. Я использую ESP32 в качестве UART преобразователя: подпаиваемся к RX/TX, запускаем putty и заходим в adb shell. Определяем бодрейт (скорость) нашего UART порта — на MediaTek он обычно равен 921600, на других чипсетах — 115200. Пытаемся что-то вывести и хоба — мы уже можем «поболтать» с планшетом!
Итак, у нас уже есть доступ к UART и мы можем общаться с планшетом из внешнего мира. Но получить события с кнопок пол дела, нужно их ещё и послать в систему. Для этого есть целых три способа:
InputManager.injectInputEvent — именно этим методом пользуется команда input, которую вы можете использовать через adb. Но увы, он работает только при наличие разрешения INJECT_EVENTS, который доступен только системным приложениям — находятся они в /system/app и подписаны тем же сертификатом, что и остальная прошивка.
Модуль uinput дает возможность создать виртуальное устройство ввода и посылать события из userland'а — т. е. из прикладного приложения. У моего планшета было устройство /dev/uinput, но lsmod показывал, что сам модуль не загружен. Так что отметаем — он есть не везде.
Прямой инжект событий в character устройство — весьма грязный хак, который позволяет инжектить события, не притворяясь системным приложением, но имеет некоторые ограничения. Именно его я и выбрал и о ограничениях ниже.
Сначала нам нужно узнать, какие кнопки поддерживают загруженные устройства ввода в системе. Для этого используем команду getevent -li. Там есть разные устройства ввода, в том числе и тачскрин (если вам нужно симулировать нажатия на экран), мне же подошёл драйвер физических кнопок mtk-kpd. Он занимается обработкой кнопок громкости, включения и т. п. Тут важно обратить внимание на то, что если попытаться послать кнопку, которое устройство не реализует (например пробел), то ничего не произойдет:
Инжект событий я писал на C, т. к. это требовало прямой записи input_event, а в Java прокинул его через Jni. Концепция простая: открываем устройство /dev/input/event2 и посылаем в него события ввода и синхронизации (это обязательно!), которые затем Android читает и обрабатывает:
#include <linux/uinput.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <android/log.h>
#include <jni.h>
int uinput;
extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_init(JNIEnv *env, jclass clazz) {
uinput = open("/dev/input/event2", O_WRONLY);
__android_log_print(ANDROID_LOG_DEBUG , "Test", uinput >= 0 ? "Open event OK" : "Failed to open event"); }
void emit(int fd, int type, int code, int val) {
struct input_event ie; ie.type = type;
ie.code = code; ie.value = val;
ie.time.tv_sec = 0;
ie.time.tv_usec = 0;
write(fd, &ie, sizeof(ie)); }
extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_sendKeyEvent(JNIEnv *env, jclass clazz, jint key_code, jboolean pressed) {
__android_log_print(ANDROID_LOG_DEBUG , "Test", "Send");
emit(uinput, EV_KEY, key_code, (bool)pressed ? 1 : 0);
emit(uinput, EV_SYN, SYN_REPORT, 0);
}
Основной обработкой занимается сервис, который я реализовал в отдельном потоке: он слушает события с UART и посылает соответствующие изменения состояния через sendKeyEvent. На вход приходят простые сообщения вида:
U L где U/D — нажато, не нажато, а L — однобайтовый идентификатор кнопки. В случае L — это влево, R — вправо и т. п. Вся доступная раскладка хранится в словаре. Причём само чтение из UART реализовано костылем с чтением «чужого» stdout, т. к. android-приложения не умеют сами по себе работать с root правами. В теории, это могло дать неприятный оверхед, но на практике никакого серьезного инпут лага это не создает. Не забываем сделать устройство event записываемым — ставим ему права 777:
package com.monobogdan.inputservicebridge;
public class InputListener extends Service {
private static final int tty = 3;
private InputManager iManager;
private Map<Character, Integer> keyMap;
private Method injectMethod;
private Process runAsRoot(String cmd)
{
try {
return Runtime.getRuntime().exec(new String[] { "su", "-c", cmd });
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
}
public void onCreate() {
super.onCreate();
// According to linux key map (input-event-codes.h)
keyMap = new HashMap<>();
keyMap.put('U', 103);
keyMap.put('D', 108);
keyMap.put('L', 105);
keyMap.put('R', 106);
keyMap.put('E', 115);
keyMap.put('B', 158);
keyMap.put('A', 232);
keyMap.put('C', 212);
InputNative.init();
try {
runAsRoot("chmod 777 /dev/input/event2").waitFor();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
Process proc = runAsRoot("cat /dev/ttyMT" + tty);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(true)
{
try {
String line = reader.readLine();
if(line != null && line.length() > 0) {
Log.i("Hi", "run: " + line);
boolean pressing = line.charAt(0) == 'D';
int keyCode = keyMap.get(line.charAt(2));
Log.i("TAG", "run: " + keyCode);
InputNative.sendKeyEvent(keyCode, pressing);
}
}
catch(IOException e)
{
e.printStackTrace();
}
/*try {
Thread.sleep(1000 / 30);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
}
}
});
}
public IBinder onBind(Intent intent) {
return null;
}
}
Таким образом, если мы отправляем с ПК «D L» — система считает, что мы зажали стрелку влево, а U L — считает что мы отпустили. Но если mtk-kpd поддерживает стрелки и еще некоторые действия без каких либо проблем, то enter в список обрабатываемых кнопок не входит: придется мудрить! И тут нам приходит на помощь механизм трансляции кодов кнопок в действия: они хранятся в специальных файлах .kl в /system/usr/keylayout/. Я назначил DPAD_CENTER на… кнопку регулировки громкости звука! Ну, а почему бы и нет. :) Таким образом можно переназначить уже имеющиеся кнопки громкости на, например, start/select.
После того, как сервис был готов и отлажен, нужно было реализовать хардварную часть проекта — сам геймпад. В качестве контроллера я, как уже говорил, выбрал Raspberry Pi Pico на базе МК RP2040 — бодреньком контроллере с двумя ARM Cortex-M0 ядрами. Стоит копейки, а в отличии от ESP'шек, его SDK не такое перегруженное и выглядит более приближенным к bare-metal.
На данный момент, я решил развести все кнопки на бредборде — макетной плате без пайки, т. к. макеток для пайки у меня под рукой не было. Сделал примитивный геймпад:
Развел на соответствующие GPIO:
И написал примитивную прошивку, которая отслеживает состояние кнопок. В прошивке точно так же есть словарь, задающий ассоциацию между физическими пинами и «виртуальными» кнопками. При нажатии или отжатии кнопки, программа изменяет стейт и отсылает новое состояние планшету.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pico/stdlib.h"
#include "pico/time.h"
#include "hardware/uart.h"
struct keyMap
{
int gpio;
char key;
bool pressed;
int lastTick;
};
keyMap keys[] = {
{
15,
'L',
false,
0
},
{
14,
'U',
false,
0
},
{
13,
'D',
false,
0
},
{
12,
'R',
false,
0
},
{
11,
'E',
false,
0
},
{
10,
'B',
false,
0
},
{
20,
'A',
false,
0
},
{
21,
'C',
false,
0
}
};
#define KEY_NUM 8
int main() {
stdio_init_all();
uart_init(uart0, 921600);
gpio_set_function(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART);
sleep_ms(1000); // Allow serial monitor to settle
for(int i = 0; i < KEY_NUM; i++)
{
gpio_init(keys[i].gpio);
gpio_set_dir(keys[i].gpio, false);
gpio_pull_up(keys[i].gpio);
}
while(true)
{
int now = time_us_32();
for(int i = 0; i < KEY_NUM; i++)
{
char buf[5];
buf[1] = ' ';
buf[3] = '\n';
buf[4] = 0;
if(!gpio_get(keys[i].gpio) && !keys[i].pressed && now - keys[i].lastTick > 15500)
{
buf[0] = 'D';
buf[2] = keys[i].key;
puts(buf);
keys[i].lastTick = now;
keys[i].pressed = true;
continue;
}
if(gpio_get(keys[i].gpio) && keys[i].pressed && now - keys[i].lastTick > 15500)
{
buf[0] = 'U';
buf[2] = keys[i].key;
puts(buf);
keys[i].pressed = false;
keys[i].lastTick = now;
}
}
}
}
Собираем всё вместе и тестируем. Хоба, всё работает, мы можем перемещаться по менюшке используя наш геймпад!
А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!
Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.
В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! :)
Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать еженедельные статьи про моддинг различных гаджетов!
А вот и небольшое обновление:
Пока учусь работать с Tenserflow (машинное зрение), если на данном этапе все получится, то следующий этап - проектирование печатной платы (чтобы избавиться от кучи проводов и сэкономить много места, плюс хочется убрать второй этаж)
Если самоделки и колхоз вызывают у вас приступы кринжа - лучше пропустить этот пост😅
Дисклеймер: я не программист и электроникой тоже занимаюсь очень любительски в свободное время. Все это для я делаю как хобби для фана и отдыха.
К нашим баранам. Как это выглядит, трекбол на фото светится фиолетовым. А сейчас подробнее.
Начнем с того, что есть устройство на линуксе raspberry pi4. И очень хотелось бы сделать его переносным. С клавой все решается достаточно просто - монтированием в корпус к самому устройству или подключив через usb/bt и кладешь куда угодно.
Однако с мышкой все сложнее, нужна ровная, незеркальная, чистая поверхность. Тачпады это слишком просто, ну, мы же не ищем легких путей! В крайнем случае у меня есть такая хрень.
Но и печатать и пользоваться мышкой на ней неудобно это скорее костыль.
Так вот о чем это я? Мне для "кибердеки" нужна была мышь.
Исключая тачпад, есть два три стула:
Джойстик (различных видов)
Трекбол
Трекпоинт (такие стоят на линейке Thinkpad от Lenovo)
С джойстиками я попробовал и, в принципе, это работает. Немного не хватает резкости, из-за недостатка опыта в коде не могу это поправить нормально.
Трекбол изначально мне импонировал, так как тема киберпанка берет свое начало когда такие штуки уже были и хотелось опробовать. Годных вариантов за недорого не так много.
Трекпоинты интересная вещь, тоже считаю нужным опробовать, как будет возможность или желание. Работает он в отличие от обычного джойстика на тензометрических датчиках.
Я выбрал трекбол из-за экзотики, размера и цены.
На алишке можно найти по запросу ICSH044A или Blackberry Trackball, так как такие стояли на телефонах Blackberry.
Также мне понадобилась Ардуинка, так как моя UNO не поддерживает работу USB HID, так что пришлось взять Pro Micro на чипе ATmega32U4 (который и позволяет в hid)
Ладно, я слегка затянул с прелюдией...
Было много гуглирования, чтобы найти хоть что-то по модулю, а также, чтобы его поменять под свои нужды, но в основном спасибо этому посту на github, в котором чувак еще и добавил ускорение курсора при увеличении кратковременного ускорения скорости шарика.
Подсветку можно запитать на свой вкус, подав на подписанные контакты "+", выбирая или миксуя синий, красный, зеленый и белый. Здесь запитаны красный и синий, что дает фиолетовое свечение.
Подключение к пинам ардуино:
right_pin 3
left_pin 4
down_pin 5
up_pin 6
Левая кнопка 7
Правая кнопка 8
При отпаивании ножек отпаялась площадка, а также кнопки приклеил сюда же - так что сейчас будет мясо. Но учитывая небольшой брак модуля он точно не останется в финальной сборке. На кнопки накинуты резисторы 10 кОм во избежание дребезга сигнала.
Итак:
Если кому-то будет интересно могу снять видео, но демо-видео трекбола можно найти по ссылке на github, которую указывал выше.
Расположение подобрано для большого пальца правой руки.
Из плюсов:
Удивительно, но к этому действительно легко привыкнуть.
Подключается по USB и начинает работать сразу и в WIndows и в Linux.
Достаточно хорошая точность и отклик.
Из минусов:
Можно отметить небольшой брак(заводской), это остатки клея, которые мешали работе одной из осей и встроенной кнопки.
Отсутствие скролла в собранной конструкции.
Двигать курсором по диагонали не очень удобно.
Прошло больше года со дня публикации проекта гусеничного шасси, появилось свободное время и я решил его сделать заново. Цель - открытый проект робота под различные МК и мини ПК. Эдакая игрушка на поиграться с машинным зрением.
Размеры:
13,5 см на 10 см на 4 см
Печатал на SLA 3D принтере, время печати - 2 часа. Моделировал в Fusion360.
Предусмотрена установка "2 этажа", нет фото, так-как жду некоторые расходники.
Также на фото не показано посадочное место под аккумуляторные батареи типа 18650, но тут та же ситуация - жду доставку.
Серва на модели для установки датчика препятствий или манипулятора (попытка создать универсальную модель)
Есть идеи, что можно добавить для универсальности? Буду рад предложениям и критике.
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.