Перейти к содержимому

Как управлять ардуино с компьютера

  • автор:

Arduino и Processing. Как управлять микроконтроллером по COM порту. Двустороннее общение

Всем привет! В интернете бытует заблуждение, что для управления компьютером при помощи самодельной электроники нужны только специальные платы, которые могут распознаваться как USB HID устройства. А касаемо Arduino все только и говорят о Arduino Leanardo. Такие популярные библиотеки как Keyboard и Mouse, которые позволяют создавать эмуляцию работы мыши или клавиатуры посредством микроконтроллера предназначены только для пары плат Arduino, Leonardo в их числе.

Я расскажу о том, как наладить связь любого микроконтроллера Arduino (для примера взята Arduino Uno) и своей программы на Processing. Добавив ко всему прочему знания о Java, на котором основывается Processing, можно будет дописать проект под управление всем компьютером, а не только собственным приложением. Тема управления компьютером программой на Java не есть чем то секретным, погуглите и все найдете, уверяю вас.

Скачиваем среды для разработки (IDE)

Существует много интегрированных сред разработки для программирования микроконтроллеров на чистом Си. Из них можно отметить самые удобные: Atollic, Eclipse, Keil.

Однако для простоты и доступности данного руководства я буду использовать редактор Arduino IDE и писать на Ардуино Си. Скачать такой редактор можно с официального сайта Arduino.

Среду разработки для программирования на Procrssing так же можно скачать с официального сайта.

Стоит отметить, приличия ради, что данные IDE очень похожи, потому что написаны на одном движке. И когда создавался Arduino основатели старались как можно больше упростить свой редактор кода, как это и было сделано в Processing редакторе.

Arduino. Собираем схему и пишем код

В данном примере я буду использовать Arduino Uno. К ней будет подключена кнопка, потенциометр и светодиод. Соответственно я могу выдавать логический 0 или 1. Читать логический 0 или 1. И проводить Аналого-цифровое преобразование(ADC или АЦП), получая числа от 0 до 1023 (в Arduino Uno 10-ми разрядный АЦП) в зависимости от положения потенциометра. Большего для примера и не нужно, так как это основные функции, которые может делать микроконтроллер.

На схеме светодиод анодом подключен к 5V через ограничивающий резистор ( минимум 220 Ом, желательно 500 Ом), катодом к пину D11. Кнопка замыкает землю и пин D2. Потенциометр меняет потенциал на пине A1.

Задача микроконтроллера следующая: Если по последовательному интерфейсу (Serial COM port) приходит сообщение «LED — H» — засветить светодиод. Если приходит сообщение «LED — L» — затушить светодиод. Каждые 250мс отправлять сообщение в последовательный порт (в данном случае на экран компьютера) сообщение «Pot — » и число, полученное аналоговым чтением пина A1. При нажатии кнопки единожды отсылать сообщение «Button is pressed!».

Вот мое предложение решения данной задачи (не пример для подражания):

Прошивка для Arduino Uno

#define pinPot A1 #define pinLed 11 #define pinBtn 2 void setup() < pinMode(pinPot, INPUT); pinMode(pinLed, OUTPUT); pinMode(pinBtn, INPUT_PULLUP); Serial.begin(9600); Serial.println("The program starts.\n\n"); >void loop() < /* INITIAL VARIABLES. Segment 1 */ static char potMes[] = "Pot - "; static char btnMes[] = "Button is pressed!"; static char passLight[] = "Led - "; static int passLength = sizeof(passLight) - 1; static int sizepm = sizeof(potMes) - 1; static int sizebtn = sizeof(btnMes) - 1; static bool flagLedState = LOW; static bool flagBtnPress = false; static long int curTime = 0; static const int period = 200; static bool flagEnableRead = false; /* INITIAL VARIABLES. Segment 1 */ /* FUNCTIONS CALL. Segment 2 */ /* * Led is attached to HIGH voltage from one side * And to pin on the other side * By that the inverting logic */ ReadSerialForLed(passLight, passLength, &flagLedState); digitalWrite(pinLed, !flagLedState); /* * Button pin always is pulled to the HIGH voltage * And only when button is pressed - Voltage on pin goes to GROUND * So it is need to invert logic when read pins */ if(!Bounce(pinBtn) && flagBtnPress == false)< for(int i = 0; i < sizebtn; i++)< Serial.write(btnMes[i]); >Serial.print("\n"); flagBtnPress = true; if(!flagEnableRead) < curTime = millis(); flagEnableRead = true; >>else if(Bounce(pinBtn)) < flagBtnPress = false; >/* * Read and send Info "Pot - " + var Only after first press on button * Every 'period'ms */ if(millis() - curTime > period && flagEnableRead) < SendData(pinPot, potMes, sizepm); curTime = millis(); >/* FUNCTIONS CALL. Segment 2 */ > /* * Pot - pin with potentiometer * pMes - Array with message before Pot value * sp - size of potentiometer message */ void SendData(int Pot, char* pMes, int sp) < static int varP[2]; varP[0] = analogRead(Pot); varP[1] = varP[0]/256; // 0 - 3 (256 - 1024) varP[0] = varP[0]%256; // 0 - 255 //Send Message for(int i = 0; i < sp; i++)< Serial.write(char(pMes[i])); >//Send 2 bits of data //Serial.write(varP[0]); //Serial.write(varP[1]); Serial.print(analogRead(Pot)); Serial.print("\n"); > /* * Function, which is reads button pin with the bounce */ bool Bounce(int btn)< if(digitalRead(btn) == true)< delay(15); if(digitalRead(btn) == true)< return true; >else < return false; >>else < return false; >> /* * If Message from Serial port, which you read will be the same to passLight * So look at the next symbol after Pass Message. If it is symbol 'H' - make LED to light * If it is 'L' - make LED off. */ void ReadSerialForLed(char *passLight_f, int passLength_f, bool* flagLedState_f) < static char sym; static int cntPass = 0; static bool readyGetLed = LOW; while (Serial.available() >0) < sym = Serial.read(); if(sym == passLight_f[cntPass] && !readyGetLed)< cntPass++; >else if (!readyGetLed)< cntPass = 0; >else if(readyGetLed)< if(sym == 'H')< *flagLedState_f = HIGH; >else if(sym == 'L') < *flagLedState_f = LOW; >> if(cntPass == passLength_f) < readyGetLed = HIGH; >> >

Комментарий: Светодиод подключен анодом к питаю. Это инвертирует логику состояния светодиода и больше никакой пользы не приносит. Кнопка не обвязана подтягивающим резистором из соображений экономии, так как в Arduino Uno имеются встроенные подтягивающие резисторы, которые включаются в схему при инициализации пина в режим INPUT_PULLUP.
Так же в прошивке сообщения о значении снятого с потенциометра отсылаются только после первого нажатия на кнопку!

Что бы залить прошивку в плату не забывайте выбрать порт и плату.

Если вы не знаете какой COM порт у вас отведен для платы Arduino, то на Windows заходим в
Панель управления -> Диспетчер устройств и нажимаем на вкладку «Порты COM»

Если у вас COM порт не подписан как у меня — всегда можно отсоединить Arduino и посмотреть который порт пропадет. А вот если никакой не пропал и Ардуина вовсе не распознается компьютером — значит пора поискать решение в интернете. Но начните с обновления драйверов или смены платы.

Когда все получится — попробуйте открыть монитор порта и ввести «Led — H», «Led — L», по нажимайте на кнопку, покрутите потенциометр и смотрите на экран, все ли правильно выводится.

Наигрались — поменяйте слегка код.

Замените последнюю строку кодом из комментария.

 //Send 2 bits of data //Serial.write(varP[0]); //Serial.write(varP[1]); Serial.print(analogRead(Pot));

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

Processing. Пишем программу, которая взаимодействует с микроконтроллером

Суть связи программы на Processing и микроконтроллера очень проста. Для этого языка программирования существует библиотека Serial, которая позволяет принимать сообщения, отправленные как Serial.write(); , а так же позволяет отправлять сообщения как Serial.print(); . Важно отметить, что при подобной отправке сообщения оно будет записано в буфер порта, а значит будет прочитано микроконтроллером. Так что нам осталось только подключиться к нужному Serial порту и принимать/отправлять на него сообщения.

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

import processing.serial.*; void setup() < String[] port = Serial.list(); for(int i = 0; i < port.length; i++)< print("Port number #" + i + " "); println(Serial.list()[0]); >> void draw() <>

Когда вы напишете код в редактор и нажмете на кнопку «Пуск» (стрелочка 1 на картинке), то появится окно приложения(2) и в консоли(3) выведется список COM портов.

У меня только один такой COM порт и в листе, как в массиве, он будет находиться под номером 0. Из этих соображений объекту класса Serial: Serial port; при его создании будет указан именно первый элемент списка портов port = new Serial(this, Serial.list()[0], 9600);

Залейте в Ардуину нашу последнюю прошивку с изменением. После чего напишите вот эту программу и запустите ее. В ней Каждые 500 миллисекунд отправляется сообщение в COM порт потушить или зажечь светодиод. И если все у вас сделано правильно, то после запуска приложения светодиод должен мигать.

import processing.serial.*; Serial port; // Create object from Serial class void setup() < port = new Serial(this, Serial.list()[0], 9600); >void draw()

Или вот другой пример. Светодиод будет менять свое состояние после любого нажатия на окно приложения (размеры которого 800х800px) кнопкой мыши.

import processing.serial.*; Serial port; // Create object from Serial class int cnt = 0; void setup() < size(800, 800); port = new Serial(this, Serial.list()[0], 9600); >void draw()<> void mousePressed() < cnt++; if(cnt % 2 == 1)< port.write("Led - H"); >else < port.write("Led - L"); >>

Processing. Пример многофункционального приложения

Данное элементарное приложение симулирует «полет в космосе», если это можно так назвать. Значение с потенциометра изменяет скорость полета, нажатие на кнопку меняет направление полета. А любое нажатие кнопки мыши на окно приложения — меняет состояние светодиода (да, ничего оригинальнее я не придумал).

Мой код далек от совершенства, не принимайте его как хороший пример. Это просто пример, который работает. Вот, собственно, он.

Пример многофункциональной программы

import processing.serial.*; Serial port; // Create object from Serial class int val; // Data received from the serial port (symbol) int pot; // Data from potentiometer String potMes = "Pot - "; String btnMes = "Button is pressed!"; int cntPM = 0; // Counter Potentiometer Message. // When it equals to length of Pot Mess - get value. int cntBM = 0; int cntBtnPress = 0; int cntMousePress = 0; Star[] stars = new Star[1000]; float speed; int dir = 1; void setup() < size(800, 800); for(int i = 0; i < stars.length; i++)< stars[i] = new Star(); >frameRate(60); // 60 Frames per second port = new Serial(this, Serial.list()[0], 9600); // Wait for first message from Arduino delay(2000); while (port.available() > 0) < val = port.read(); print(char(val)); >> void draw() < if (port.available() >0) < val = port.read(); cntPM = CheckSymbol(potMes, cntPM, char(val), cntPM); cntBM = CheckSymbol(btnMes, cntBM, char(val), cntBM); >DrawRain(pot, 0, 1023); > void DrawRain(int speed_f, int min, int max) < background(0); translate(width/2,height/2); speed = dir*map(speed_f, min, max, 0, 50); for(int i = 0; i < stars.length; i++)< stars[i].go(); stars[i].update(); stars[i].show(); >> int CheckSymbol(String mes, int index, char sym, int ret_val)< if(mes.charAt(index) == sym && ret_val < (mes.length() - 1))< return (ret_val + 1); >else if( ret_val == (mes.length() - 1) && mes.equals(potMes) ) < if(port.available() >0) < pot = port.read(); // First 0-255 value >if(port.available() > 0) < pot += 256*port.read(); // Last 2 bits 256 - 1024 >>else if( ret_val == (mes.length() - 1) && mes.equals(btnMes) ) < cntBtnPress++; dir = -dir; >return 0; > void mousePressed() < cntMousePress++; if(cntMousePress % 2 == 1)< port.write("Led - H"); >else < port.write("Led - L"); >>

Заключение

Думаю, нужно написать, что идею последней программы я подцепил у одного программиста — Daniel Shiffman, который снимает ролики, понятные даже детям, о программировании на Processing (решено более 140 визуальных задач).

Когда я пытался сам разобраться в том что и как нужно делать для связи Processing и Arduino мне очень помогли вот эти сайты:

  1. developer.alexanderklimov.ru/arduino/processing.php
  2. arduino-diy.com/arduino-processing-osnovi

Ардуино для начинающих. Урок 10. Serial и processing

таблица кодов ascii

Теперь сделаем кое что посложнее. Сейчас напишем скетч для управления, встроенным в Arduino, светодиодом с компьютера через Serial интерфейс. Этот скетч не намного сложнее предыдущего:

 // Управление светодиодом с компьютера int ledPin = 13; void setup () < // Открываем порт на скорости 9600 бод Serial.begin(9600); // Назначаем пин светодиода выходом pinMode(ledPin, OUTPUT); >void loop () < // Ждем данные while (Serial.available() == 0); // Считываем данные int val = Serial.read() - '0'; // Выполняем дествия в зависимости от данных if (val == 1) < Serial.println("Led is On"); digitalWrite(ledPin, HIGH); >else if (val == 0) < Serial.println("Led is Off"); digitalWrite(ledPin, LOW); >else < Serial.println("Invalid!"); >// Очищаем буфер Serial.flush(); >

Тут вы не найдете ничего нового, что мы бы не разбирали в этом или прошлых уроках, кроме Serial.flush(). Этот метод очищает оставшиеся символы в буфере памяти, так как мы работаем только с одним символом и остальные нам не нужны. В видео подробно рассказано зачем эта строчка.

А теперь приступим к самому интересному и сложному на сегодня. Теперь мы будем отправлять значения с Ардуино на компьютер и там их использовать. Для обработки получаемых значений на компьютере мы будем использовать Processing. Скачать его можно на официальном сайте.

Схема очень проста. Мы просто подключим потенциометр к аналоговому пину Arduino. Скетч тоже очень прост:

int potPin = 0; void setup () < Serial.begin(9600); >void loop () < // Считываем и преобразовываем данные int val = map(analogRead(potPin), 0, 1023, 0, 255); // Отправляем данные Serial.println(val); // Задержка для стабильности работы delay(50); >

Если вы прошли прошлые уроки, то в этом скетче вам все будет понятно. Если вы что то не знаете или забыли можете посмотреть прошлые уроки или справочник по языку программирования ардуино. А вот и код для Processing:

 // Подключаем библиотеку монитора порта import processing.serial.*; // Инициируем порт Serial port; // Переменная для хранения значения яркости float brightness = 0; void setup () < // Задаем размер окна size(500, 500); // Слушаем ком порт СОМ3 port = new Serial(this, "COM3", 9600); port.bufferUntil('\n'); >void draw () < // Изменяем цвет фона окна background(0, 0, brightness); >// Получаем значения с ардуино void serialEvent (Serial port)

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

5 комментариев
  1. Влад 2018-12-05 18:34:19

Не работает Serial.flash(). Вместо одной выходят несколько надписей Invaild. Что делать?
Влад, поменяй одну букву в слове Serial.flash()
Должно быть: Serial.flush()

В предпоследнюю строку последнего скетча вкралась опечатка.
Вместо redString в операторе brightness = float(port.redStringUntil(‘\n’)); там имелось в виду
readString, т.е. brightness = float(port.readStringUntil(‘\n’));

А как в процессинге работать с 2-3-4…. Ком портами ?
И как обмениваться float ?

подскажите пожалуйста как принимать 10 разных значений?
чем их разделить или может передавать последовательно?
требуется передать данные с разных датчиков а приняв отобразить в нужных местах. форму в Processing нарисовал, осталось продумать как в нужном порядке передать через Serial (использую Bluetooth) и приняв «разложить по полочкам»

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Железо

Стартовый набор с Arduino Mega и RFID

Стартовый набор с Arduino Mega и RFID Это расширенный стартовый набор. В комплект входит Arduino Mega R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.

Плата Arduino Uno R3

Плата Arduino Uno R3 Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.

Управление компьютером при помощи Arduino через USB ⁠ ⁠

Для одного проекта необходимо было сделать управление компьютером при помощи ардуинки. Почитав информацию в интернете нашел, что такое возможно только при помощи Ардуинок с atmega 32u4 или Due. Мне такой вариант не подошел, так как у меня уже была готовая разведенная плата с atmega328, поэтому пришлось искать другой вариант, которым я и хочу с вами поделиться.

Берем любую ардуинку, например Uno и подключаем к ней кнопку (в моем случае один контакт к pin 2, другой к GND

Управление компьютером при помощи Arduino через USB Arduino, USB, Controller, Autoit, Длиннопост

bool buttonClicked = false;

if ((digitalRead(2) == LOW) && (buttonClicked == false))

if (digitalRead(2) == HIGH) buttonClicked = false;

Теперь перейдем к компьютеру.

Создаем примитивное фоновое приложение

$key = StringReplace($key, @LF, «»)

$key = StringReplace($key, @CR, «»)

if ($key = «KEY_UP») then Send(«»)

В строке _CommSetPort(5, $err) 5 — заменить на номер соответствующего COM порта, на котором висит ардуинка

Теперь по нажатию кнопки подключенной к Arduino у нас на компьютере будет эмулироваться нажатие кнопки ВВЕРХ в любом окне, даже в играх.

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

1.4K поста 20.5K подписчиков

Подписаться Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте — используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

7 лет назад

Спасибо за програмку autoit) давно такую искал

7 лет назад

я вот смотрю всем можно через эту ардуину управлять, а женьщинами можно ?

раскрыть ветку
3 года назад

Может кто пояснить это «Качаем и устанавливаем AutoIt https://www.autoitscript.com/site/autoit/

Создаем примитивное фоновое приложение»

Как эти пользоваться ?)

7 лет назад

Можно обойтись без AutoIt если собрать простой шилд.

Вот видео (На английском, но идея должна быть понятна)

раскрыть ветку
3 года назад

Добрый день. А как с помощью этого можно мышью управлять ?✌

раскрыть ветку
Похожие посты
2 года назад
Подписаться

The Legend VST Synth Special Controller⁠ ⁠

У музыкантов диайвайщиков, появилось новое направление реализации своего таланта в устройствостроении, а именно: делать миди контроллеры под определённый виртуальный инструмент. Мой друг довольно успешно реализовал контроллер для Артуриевского Минимуга или просто Mini V. Знакомый испанец с канала Nerd Musician, также делал контроллер под MiniV . Но всё это делалось из фанеры и выглядит довольно громоздко.

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

Итак, Максим, заразил меня этой интересной идеей. Ну что-же? Будем делать свой МУГ!

Из многочисленных реализаций Муга в виде вст, мне лично, очень понравился виртуальный синтезатор : The Legend от Synapse Audio. Скажу даже больше: я влюбился в него. Для заядлого берлинщика, он буквально идеален, правда секвенсора в нём нет!

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Взяв за основу оригинальный дизайн веэстешки, я перерисовал его под свои размеры в «иллюстраторе». Распечатал на лазернике и заламинировал.

Ещё со старой работы, у меня есть корпуса Gainta G 756, но они очень высокие. Поэтому я его располовинил, дно вырезал из старого оргстекла.

За основу проекта, конечно же берём Ардуино Леонардо и четыре штуки мультиплексора CD4067. Пользуемся библиотекой Control Surface, которая позволяет запрограммировать это всё очень быстро и просто. По началу я даже думал и не выкладывать код, но всё таки в конце — вы его найдёте. )))

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Хитрость, разве что в подключении светодиодов, которые я расположил на корпусе. На самом деле ничего хитрого — паралельно контактам сигнал и минус на переключателе, последовательно, через килоомное сопротивлению (чтоб не сжечь). Да, кстати переключатели — подключены аналогично, обычным потенциометрам, и в коде ничем от потенциометров не отличаются: то есть плюс и минус на крайние ножки и с центральной — сигнал.

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Заказал детальки на Алике и в конце концов собрал сие чудо! Деталек, я должен сказать, много: 38 потенциометров с колпачками ручек, 12 свитчей (на 2 положения), 9 светодиодов с держателями, леонардо, 4 мультиплексора.

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Можно было заморочиться и сделать вместо некоторых потенциометров переключатели ( как на советских телевизорах), по аналогии с оригиналом. Но нога у этого переключателя — огромная, а тут и так 59 элементов на площади меньше чем лист формата А4.

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Замапил все элементы управления как глобальные, что бы в любом проекте, контроллер вёл себя адекватно. Кстати можно замапить и на ту же Артурию Мини.

У оригинального, виртуального The Legend, есть ещё и «задняя» панель на которой расположены ручки управления эффектами и ещё какой то ерундой, которая ни на что не влияет. Хочу сделать, в будущем, контроллер и для задней панели. Ручек там, конечно, немного, но есть идея сделать внизу обычные нотные клавиши, реализовав это на кнопках.

The Legend VST Synth Special Controller Arduino, Controller, Midi, Moog, Своими руками, Видео, Длиннопост, The_legend, Musicmaker

Ну вот такой вот. замечательный зверь у меня получился.

Терпение и упорство, реализуют любую идею, чего и Вам желаю.

Control_Surface.begin(); // Initialize Control Surface

Control_Surface.loop(); // Update the Control Surface

#arduino #controller #MIDI #moog #The_Legend #musicmaker #diy

Показать полностью 7 1
6 лет назад
Подписаться

USB хаб с принцессами и драконами⁠ ⁠

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

В общем, когда я, наконец, собрался, это был уже основательно выношенный проект.

Выглядит он почти как настоящий радиоприбор, и, по сути, таковым и является 🙂

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Правда, сперва я просто хотел засунуть в какую-нибудь небольшую коробочку все те прибамбасы, которые я использую во время работы и которые обычно занимают почти всю свободную поверхность стола : программатор, всякие переходники-с-USB-на-что-то-другое, лог. анализатор, т.н. USB-доктор (вольт/ампер-метр), частотомер и прочее.

И первоначальный вариант выглядел так себе :

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Не стал его домучивать, на полдороге разобрал и отобрал наиболее нужное и то, что действительно нуждается в общем корпусе :

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Зеленая платка — собственно, сам хаб, затем по кругу — светодиодный дисплей для частотомера, тот самый «USB-доктор», переходник USB-UART, GPS-приемник со своей антенной и преобразователь напряжения на LM2596.

Будущий корпус — алюминиевый профиль, из которого делают офисные перегородки и двери. Его сечение 50х100мм, длина — 80мм.

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Окошки и отверстия вырезаны на домашнем фрезере

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Заводская краска на нем держится очень крепко, обычно, если вдруг надо, ее снимают пескоструем. Но один добрый человек предложил просто замариновать этот кусок в растворителе. Я так и сделал : налил в пакет 647-й растворитель, положил в него железяку и выставил на солнце. К вечеру краска облезла большими лоскутами :

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Боковые стенки я вырезал из 1,5-миллиметрового листа и немного прошелся напильником, устраняя «несовершенства»

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Краска — порошковая, не знаю ее код по таблице RAL, мастер (тот самый добрый человек) называет ее «черный крокодил». Наносится, как и всякая другая, тонким слоем, но при запекании дает такую необычную поверхность :

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Основная печатная плата — двухсторонняя, сделана фоторезистивным способом (я только развожу, сам платы не делаю). Отверстия, те, что НЕкруглые, вырезались вручную, поэтому вид у них не очень.

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

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

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

В собранном виде это выглядит так :

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

С обратной стороны — микроконтроллер, генератор на 20MHz, гребенки для подключения к другим платам и всякая мелочь

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

С платы USB-хаба один внутренний порт выводится на лицевую панель (4-пиновый разъем), два других — на заднюю (длинный разъем под гребенку), а последний, четвертый, занят переходником USB-UART.

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Входной разъем — Type-B. К нему припаяна планка для крепления и с обратной стороны он выглядит гораздо фотогеничней

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Для крепления платы приемника я вырезал прокладку из акрила. Антенна — на ее обратной стороне.

Тут они все перед финальным броском

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Хаб принимал участие в недавнем конкурсе на «Радиокоте», поэтому на боковой стенке — соответствующая гравировка.

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Осталась самая малость — закрыть антенну крышкой, наклеить стекла поверх индикаторов и сделать ручку для энкодера

USB хаб с принцессами и драконами USB, Электроника, Arduino, Длиннопост, Видео

Тут для самых стойких технарей, поэтому можно не читать 🙂

Основное назначение — как ни странно, хаб : один порт — на лицевой панели, два других — сзади.

Встроенный амперметр дает возможность замерять ток потребления USB-девайсов.

Верхний тумблер переключает напряжение, от которого можно запитывать какие-то внешние устройства (3,3 и 5 вольт). Нижним тумблером можно выбрать длительность измерения для частотомера (1/10/50 сек).

Есть LC-метр, он сейчас делается в виде выносного блока, который подключается через разъем DB-9 ( на лицевой панели). Задний DB-9 — резервный, пока не занят ничем.

Частотомер имеет несколько рабочих режимов, которые выбираются энкодером : частота, период, скважность, длительность одиночных импульсов. Набортный GPS-приемник дает возможность калибровать и этот частотомер, и что-то другое — с него снимается сигнал 1pps, который имеет погрешность 10 в минус шестой (или седьмой ?) степени и высокую стабильность при изменении температуры.

Помимо этого, когда хаб «просто стоит и ничего не делает», на дисплей можно выводить время, принимаемое с GPS-спутников (на видео) или какую-то информацию с компьютера (пока только загрузку ЦП и памяти, но я еще что-нибудь придумаю :).

Как управлять ардуино с компьютера

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *