Найдя незнакомый флеш накопитель, будьте осторожны, вставляя его в свой ПК. Любой USB HID контроллер поместится в корпус от флешки. Последствия могут быть очень неприятными. Для примера в ролике я набросал "мирную" программу для ATmega32u4.
При подключении к компьютеру Ардуино перехватывает управление с клавиатуры и мыши на себя, открывает окно "Выполнить", меняет раскладку клавиатуры на "EN", вызывает Paint, разворачивает его во весь экран, открывает окно "Свойства изображения", устанавливает разрешение 1280х1024, одобряет и начинает рисовать символ "@", после окончания рисования разворачивает изображение на весь экран и возвращает управление клавиатуре и мыши. Все происходит за несколько секунд.
Отличный комментарий!
помнится паста с баша, где чувак в маршрутке у кого-то на рюкзаке подрезал флешку с надписью 256, вставил себе в комп и тот пошел по пизде. чувак исправил с 256 на 257 и повесил на рюкзак себе
Бабушка хотела выкинуть старый дисковый телефон, но я ее остановил, хотя телефон мне был нужен не весь. Я еще не знал, как именно реализую сложившийся в голове пазл, но точно знал, что я это сделаю! =))
Под видео опишу вкратце, как это сделать с применением контроллера Arduino.
Подключение диска от советского телефона к Arduino Leonardo. (Работать будет под любой ОС)
Вместо Leonardo можно использовать любую другую плату, только в скетче надо будет применять не Keyboard а Serial для вывода результатов.
#include <Bounce.h>; //для снижения эффекта дребезга Bounce bouncer = Bounce(2, 40); int pulses = 0; void setup() { pinMode(2, INPUT); pinMode(3, INPUT); pinMode(13, OUTPUT); Keyboard.begin(); } void loop() { while(digitalRead(3) == HIGH) { //пока идет набор if (bouncer.update()) { //если произошло событие if (bouncer.read()==0) { //если пришел сигнал с контактной группы pulses++; //добавить 1 в переменную bouncer.rebounce(500); } } } if(pulses > 0 && pulses < 10) { //чтобы в com порт шли только реальные цифры и ничего больше Keyboard.print(pulses); //шлем в порт pulses = 0; // обнуляем переменную } else if(pulses == 10) { //если с номеронабирателя пришло 10 pulses = 0; //то реальная цифра - ноль (особенности набирателя), заодно обнуляем переменную Keyboard.print(pulses); //шлем в порт } }
Привет, Реактор! Выношу на Ваш суд разработку контроллера для авиасимуляторов, спроектированную и собранную мной и двумя моими товарищами.
Контроллер авиасимов на Arduino Micro + инерционный трекер на Arduino Nano с акселерометром GY-85 + VR-Box. Пока что первая, сырая, но, тем не менее, уже эффектная версия. Многое еще подлежит переделке, но впечатлений и эмоций очень много.
Узел Педали+РУС начерчен и изготовлен из стали при помощи плазменной резки, всё на подшипниках и газ-лифтах. Оси на датчиках Холла. РУД временно собран из Lego и потенциометра на 10КОм. Рукоятка РУС начерчена и распечатана на 3д принтере.
В WarThunder показания приборов тянутся из игры и выводятся в WEB-интерфейс.
Пока из очевидных недостатков тяжелая ручка управления самолетом с большим ходом. Во первых масса не дает работать возвратным пружинам корректно срабатывать (при сборке под руку подвернулась стальная толстостенная труба, далее будет алюминиевая), во вторых ручка, вероятнее всего, будет укорочена, а механизм джоя поднят выше и уменьшен диапозон свободного хода, пока же трубой стучим по коленям)) Зато ручка "быстросъем", на защелках от пневматики.
Как сделать трекер, хорошо описано во многих статьях в рунете, а в софтвенной части контроллера нам очень помог проект MMJOY2.
Вот, получился такой небольшой сумбур, первопост всё-таки.
Всем привет! Меня зовут Илья и у меня есть хобби - это любительское ракетостроение. Точнее даже, скажем так, карамельное ракетостроение. За то время, что я занимаюсь темой, я успел набить себе немало шишек, во многом действуя по наитию и ставя различные, часто неудачные, эксперименты. Возможно, кто-то скажет, что я криворук и это не моё, что нужно срочно учить матчасть, что всё придумано до меня. И, пожалуй я соглашусь. Но, на мой взгляд, в любительском ракетостроении, как хобби, важен сам процесс инженерных поисков. Решение возникающих проблем и, конечно, создание себе новых. Наверное было бы проще взять уже готовую модель, заправить её готовым двигателем и…Но если бы действительно этим путём пользовались все, то наверное не было бы и развития.
Ракетостроение, даже не ракетомоделизм из кружков (Model Rocketry или High Power Rocketry), пожалуй отличное хобби для технаря, и, конечно айтишника. Даже сам Джон Кармак (один из создателей Doom, кто не знает) в детстве занимался ракетостроением, что уже после id Software переросло в свою ракетную компанию Armadillo Aerospace.
И таких, как он и я, к счастью не единицы. Хотя и совсем немного по земному шару. Наверное это из-за трудоёмкости, спектра проблем из разных научных областей. У той же Амперки в серии «Ракета против Лёхи» по официальной версии всё закончилось как раз из-за отсутствия возможности столько вкладывать ресурсов. Потому что процесс создания любой ракеты - это череда неудач, начала сызнова и итеративное приближение к цели. И к новой. И к ещё одной.
Для меня увлечение ракетами началось с . Сама простота и дешевизна такой «ракетой техники» меня подкупила и я решил воспроизвести этот эксперимент. Собственно тогда родилась цель - сделать такую ракету, которая бы взлетела метров на 300-400, ну, до полкилометра, и спокойно бы вернулась обратно на парашюте. С полезной нагрузкой: скажем, с небольшим бортовым компьютером и камерой. Всё тогда казалось просто, если бы не нюансы, коих было… много…
Конструкция ракеты
Конструкции большинства ракет в основном схожи между собой. Они удовлетворяют в большинстве случаев, так скажем, идеальной "эмпирической ракете":
- длина ракеты полная: L= 15~25 D
- длина головного обтекателя: Ln = 2.5~3.5*D
- размах стабилизатора: S = 1~2*D
- общая площадь стабилизаторов: F= 0,7~0,8*A, где A=L*D - площадь продольного сечения корпуса,
- запас устойчивости: k = 1,5~3*D
В зависимости от поставленных целей и используемых компонентов параметры ракеты могут варьироваться, конечно же, но почти всегда укладываются в вышеобозначенные границы. В моём случае размер ракеты будет определяться исходя из размеров двигателя, парашюта и электроники. Чтобы уместить всё в корпусе ракеты я использую трубу диаметром в 50мм. Трубу можно сделать, в идеале, из стеклопластика, а можно взять ПП канализационную трубу - она сравнительно прочная и лёгкая. Головной обтекатель так же делается из этой же трубы - вырезается "корона" (длиной в 2-3 диаметра ракеты) и склеивается вместе, образуя параболическую форму. Хотя, конечно есть и другие варианты - выточить обтекатель из деревянной заготовки на токарном станке или распечатать его на 3D-принтере. Обтекатель должен быть максимально правильной формы, гладким - это необходимо для снижения аэродинамического сопротивления ракеты и снижения вредных срывных течений в носовой части ракеты.
Стабилизаторы стоит изготавливать из достаточно лёгкого, но прочного материала. Например пластика, фанеры или бальзы. Форма и размер стабилизаторов зависят от размеров ракеты, а если быть точным, то от расположения центра тяжести ракеты и центра давления.
Ракета никогда не летит прямо, а все время поворачивается от направления полета то в одну, то в другую сторону, т.е. рыскает. На ракету набегает встречный поток воздуха, направление которого строго противоположно направлению полета. Получается, что ракета все время поворачивается боком к набегающему потоку на некоторый угол. В аэродинамике такой угол называется углом атаки. Мы уже установили, что ракета, как любое твердое тело, поворачивается относительно ЦТ, но результирующая сила давления воздуха приложена совсем к другой точке, т.е. к ЦД. Если ракета имеет симметричную форму относительно оси, то ЦД потока воздуха расположен на оси ракеты. Если ЦД расположен ближе к хвосту ракеты, то давление воздуха стремится вернуть ракету навстречу набегающему потоку, т.е. на траекторию. Ракета будет устойчива. Тут вполне допустима аналогия с флюгером. Если ракету насадить на стержень, проходящий поперек оси ракеты через ЦТ и вынести её на улицу, где сильный ветер, то устойчивая ракета повернется навстречу ветру. Из этих же соображений делается простейшая проверка ракеты на устойчивость с помощью веревки: привязываем веревку к ракете в месте расположения центра тяжести и начинаем вращать ракету вокруг себя. Если ракета при вращении ориентируется строго по направлению движения, то она аэродинамически устойчива, если ракету крутит в разные стороны или она летит хвостом вперед, то ракета неустойчива.
Центр давления рассчитывается используя метод определения центра давления по Борроумену. К слову сказать, есть и другой, хотя и куда менее точный способ определения центра давления - метод аэродинамической проекции. В любом случае, какой бы мы метод не использовали, чтобы ракета была устойчивой, расстояние между центром тяжести и центром давления должно составлять хотя бы 1,5 диаметра самой ракеты. Эта, так называемая "устойчивость в диаметрах" может быть и выше, хотя устойчивость больше 2-2,5 диаметров не рекомендуется, так как в этом случае стабилизаторы будут больше, а значит тяжелее. Кроме того, большая площадь стабилизаторов приведёт к тому, что ракета будет испытывать большие боковые нагрузки, что приведёт к тому, что она будет, как флюгер разворачиваться по ветру и лететь не вверх, а вбок; в худшем случае - флаттер приведёт к разрушению ракеты в полёте. Подробно об устойчивости можно почитать здесь.
Есть готовые программные решения для расчёта параметров ракеты. Я использую Rocki-design, но чаще, тем более в англоязычном мире используют OpenRocket. Подобрав нужный размер стабилизаторов, вырезаем их из заготовки и прикручиваем винтами к корпусу, используя металлические уголки. Крепление должно быть жёстким. Для лёгких ракет сгодится и просто приклеивание, но для тяжелой ракеты лучше перестраховаться.
Система спасения - одна из самых сложных в ракете. Она включает в себя парашют, крепление к корпусу, а так же механизм выброса парашюта. Она в обязательном порядке порядке должна быть проверена не один раз на земле. Я использую пиротехнический вариант выброса парашюта (мортирка), инициируемый бортовым компьютером. Хотя встречаются и другие решения - механические и пневматические, или вовсе инерционные. Пиротехническая система одна из самых популярных и простых, содержит минимум компонентов.
Сам парашют - это купол диаметром в 70 сантиметров, сшитый из прочной и лёгкой ткани (рип-стоп). Можно рассчитать точно необходимую площадь парашюта для плавного спуска в зависимости от массы ракеты. Хотя, из практики, парашют лучше делать меньше диаметром - это увеличит скорость падения ракеты, конечно, но ракету будет меньше сдувать ветром, и поэтому меньше шансов намотать километры от места запуска до места падения.
Не менее важно обеспечить крепление ракеты с корпусом. Обычно в корпус устанавливаются силовые болты, к которым привязывается силовой трос (фал), соединяющийся со стропами парашюта. Фал пропускается через пыж - лёгкий цилиндр, который впритирку устанавливается ко внутреннему диаметру ракеты - он необходим для выброса парашюта, работая как поршень, приводимый в движение газами из мортирки.
В отличие от ракетомоделизма, в любительском, "карамельном" ракетостроении используются собственно изготовленные двигатели. Ракетные двигатели - это долгий и обширный разговор, который можно растянуть на не одну статью. Если рассказывать очень кратко, то в любительском ракетостроение в большинстве случаев используются твердотопливные двигатели, которые по конструкции очень схожи с двигателями настоящих твердотопливных ракет. Отличие состоит в материалах из которых изготовлен двигатель и в используемом топливе. Чаще всего для изготовления двигателей используется бумага, пластик или композит (стеклоровинг). В моём случае - пластик (полипропиленовая армированная труба в 40мм внешним диаметром). В качестве топлива используется смесь из калиевой селитры и сахара\сорбита в пропорции 65\35. Собственно при плавлении такой смеси образуется сладкая масса (несъедобная!), похожая на карамель, откуда и происходит название "карамельное топливо".
Топливо запресовывается в так называемые "топливные шашки" - цилиндры с отверстием. Размер шашек подбирается таким образом, чтобы во время работы двигателя топливо успевало выгореть равномерно во всех направлениях (в направлении от внутреннего канала к краю). Оптимальной длиной шашки внешним диаметром D и внутренним диаметром d является длина L=1.67D. Шашки в обязательном запрессовываются\оборачиваются в так называемую "бронировку" - внешнюю негорючую оболочку шашки. Бронировка препятствует горению шашки по внешней поверхности, что недопустимо. Слишком большая площадь горения топлива может привести к разрушению двигателя.
Из шашек формируется сборка двигателя с единым топливным каналом. При этом шашки укладываются в теплоизоляционную (негорючую) трубку из тефлона\бумаги, пропитанной силикатным клеем. Теплоизоляция нужна для того, чтобы не допустить разрушения двигателя из-за температуры (фронта горения и горячих газов) при горении топлива.
Карамельное топливо горит сравнительно медленно, поэтому для создания тяги зажигание двигателя производится в дальней точке канала (противоположного от сопла). Немаловажными параметрами двигателя, кроме тяги, является критика сопла и рабочее давление. Чем больше давление в двигателе - тем больше тяга. Чем больше давление - тем выше скорость горения топлива. Настоящим вызовом в создании двигателя является задача создания такого решения, которое при минимальной массе корпуса будет держать максимальное давление и содержать наибольшее количество топлива.
Для расчёта двигателя используются расчёты на основе закона горения. Безусловно, есть готовые решения для расчёта параметров двигателя.
Кроме того, обязательно проводятся стендовые испытания движков. Это позволяет отработать надёжность двигателя на земле, а так же снять реальные показания тяги двигателя (которые могут отличаться от расчётных).
При запуске компьютера инициализируются все датчики и модули, записывается текущая высота, подаётся звуковой сигнал перехода в режим ожидания старта. Моментом старта считается случай изменения высоты на пороговое значение (например 5 метров).
В момент старта фиксируется (записывается время), далее на карту начинают записываться данные с датчиков. В процессе полёта отслеживается апогей - записывается текущая высота, если она меньше предыдущей. Если текущая высота падает на пороговое значение, активируем вышибной заряд. Момент приземления не вычисляется, просто считаем, что через две минуты ракета должна сесть на землю. Через две минуты останавливается запись на карту и начинается подача звуковых сигналов для облегчения поиска ракеты.Полный скетч можно найти тут.
Полёт и результаты
Характеристики собранной ракеты:
- Длина: 1300 миллиметров
- Диаметр: 50 миллиметров
- Масса корпуса (со всеми компонентами): 1000 грамм
Любопытно, что на данных с акселерометра видны всплески, соответствующие работе системы спасения (мортирки).
В итоге...
проект у меня занял целый год в неспешном режиме. Это отличное хобби, которое позволяет столкнуться с огромным разнообразным спектром задач из разных областей. Это и физика, химия, электроника, программирование, инженерия и технология изготовления, включая токарные работы. И, конечно, позволяющее получить незабываемые эмоции от рёва гула у взлетающей ракеты, до трепета и переживаний во время поиска ракеты и снятия показаний с логгера.
Продолжение http://joy.reactor.cc/post/4225166
После 8 часов в горячем растворителе (~60') и охлаждения сухим льдом, компаунд рассыпался и удалось очистить плату. Внутри большую часть занимает литий ионный аккумулятор на 20000 mA*h. и небольшая плата с двумя микросхемами в mqfp корпусе без опознавательных знаков,терморезистор пикейный к аккумулятору, твердотельное реле (нормально замкнутое) коммутирующие выход Vout;GND, большей дроссель и большей количество smd расыпухи. при посылке на BSCL;BSDA старт байта (0x20) в ответ выдает 2 байта, первый байт напряжение на батарее, второй байт уровень заряда. По всей видимость это блок обеспечения временного резервирования питания какой то автоматики.
Недавно ко мне попало устройство представляющее собой плату практически полностью залитую компаундом. с краю платы на не залитом компаундом пространстве находиться двухцветный светодиод, нераспаянный micro usb, разъем и дублирующие его "пяточки". пины подписаны как: (Vout;GND;SCK;SDA;BSCL;BSDA;Vin;GND). пин Vin соединен с питанием usb разъема. если припаять usb и подключить к к компьютеру, то компьютер не находит новых устройств. при сканирование шины I2C находит 2 адреса 80 и 84.
Вопрос к знатокам можно ли каким нибудь обзором запросить список команд у устройства или перебором понять что оно может (в наличии 2 ардуинки и куча радио деталей, в программирование разбираюсь плохо).
Пишу прогу на C++ для управления всякой дичью (2 шаговика, и измерительный АЦП, и прочая дичь по мелочи). Выбрал ардуину для управления устройствами, а сама ардуина получает команды от компа и выполняет их, подключается по USB (сигналами обмениваются в обе стороны). ибо думаю что, для всех алгоритмов обработки данных, полученных с устройства и правил их обработки, может не хватить памяти на ардуине). А как исключить ардуину из этой схемы я не очень понимаю.
Десктопная приложуха пишется на Qt (хочу запилить на линуксе, ак думаю меньше проблем), используется библиотека QserialPort (ранее называлась Qserialdevice) для связи. Связь их мне видится примерно такой: При подтверждении отправки команды формируется строка (символы и цифры норм передаются, поэтому ебаться с кодированием не вижу смысла. посему использую буквы и цифры по максимуму) типа: КЧ\ИК_0/арг1\ИК_1/арг1/арг2\0
Пример реальной команды "11L/1\R/1\0" - включить led(светодиод), отправить сопротивление подстроечного резистора на комп.
где:
КЧ - контрольное число, для проверки, если не совпадает с длинной строки то значит команда пришла не полностью или с ошибкой.
ИК- идентификатор команды - одна большая буква
арг - аргументы, может быть несколько. в зависимости от того что хочешь. например может быть одна и та же буква но разное количество аргументов. тогда будет применяться перегрузка(выглядит как ужасный говнокод swich в котором другие свичи. как сделать красиво и хорошо я хуй его знает. из патернов знаю только визитор)
\0 - конец строки.
была идея сделать таблицу команд что бы они обменивались для подтверждения получения только идентификаторами. и если какая-то команда была пропущена то ардуина поймёт что порядок нарушен и запросит повтор команды. (но это мне кажется ебалой которая только память съест.
собсна к главному вопросу. что я делаю не так, какие предложения могут быть для улучшения/ускорения/итд, как лучше обменивать данные и команды. если есть варик напрямую управлять драйверами ШД, светодиодами, датчиками и тд то как это сделать?.
Также непонятки с частотой обмена данными, ставил маленькую- команды принимались кусками. на большой в начале выполнения ардуина ловит какие-то шумы и выводит "ppppppppp" на дисплейчик(что б понимать что она приняла), потом норм работает.
Как лучше организовать обратную связь? что бы были подтверждения получения команды.
Если кто либо занимался чем то подобным то поделитесь своей мудростью.
Здесь мы собираем самые интересные картинки, арты, комиксы, мемасики по теме arduino (+41 постов - arduino)
Отличный комментарий!