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 мне очень помогли вот эти сайты:
- developer.alexanderklimov.ru/arduino/processing.php
- arduino-diy.com/arduino-processing-osnovi
Ардуино для начинающих. Урок 10. Serial и processing

Теперь сделаем кое что посложнее. Сейчас напишем скетч для управления, встроенным в 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 комментариев
- Влад 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 R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.

Плата Arduino Uno R3 Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.
Управление компьютером при помощи Arduino через USB
Для одного проекта необходимо было сделать управление компьютером при помощи ардуинки. Почитав информацию в интернете нашел, что такое возможно только при помощи Ардуинок с atmega 32u4 или Due. Мне такой вариант не подошел, так как у меня уже была готовая разведенная плата с atmega328, поэтому пришлось искать другой вариант, которым я и хочу с вами поделиться.
Берем любую ардуинку, например Uno и подключаем к ней кнопку (в моем случае один контакт к pin 2, другой к GND

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. Скажу даже больше: я влюбился в него. Для заядлого берлинщика, он буквально идеален, правда секвенсора в нём нет!

Взяв за основу оригинальный дизайн веэстешки, я перерисовал его под свои размеры в «иллюстраторе». Распечатал на лазернике и заламинировал.
Ещё со старой работы, у меня есть корпуса Gainta G 756, но они очень высокие. Поэтому я его располовинил, дно вырезал из старого оргстекла.
За основу проекта, конечно же берём Ардуино Леонардо и четыре штуки мультиплексора CD4067. Пользуемся библиотекой Control Surface, которая позволяет запрограммировать это всё очень быстро и просто. По началу я даже думал и не выкладывать код, но всё таки в конце — вы его найдёте. )))

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

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


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

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

Ну вот такой вот. замечательный зверь у меня получился.
Терпение и упорство, реализуют любую идею, чего и Вам желаю.
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-доктор (вольт/ампер-метр), частотомер и прочее.
И первоначальный вариант выглядел так себе :

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Тут для самых стойких технарей, поэтому можно не читать 🙂
Основное назначение — как ни странно, хаб : один порт — на лицевой панели, два других — сзади.
Встроенный амперметр дает возможность замерять ток потребления USB-девайсов.
Верхний тумблер переключает напряжение, от которого можно запитывать какие-то внешние устройства (3,3 и 5 вольт). Нижним тумблером можно выбрать длительность измерения для частотомера (1/10/50 сек).
Есть LC-метр, он сейчас делается в виде выносного блока, который подключается через разъем DB-9 ( на лицевой панели). Задний DB-9 — резервный, пока не занят ничем.
Частотомер имеет несколько рабочих режимов, которые выбираются энкодером : частота, период, скважность, длительность одиночных импульсов. Набортный GPS-приемник дает возможность калибровать и этот частотомер, и что-то другое — с него снимается сигнал 1pps, который имеет погрешность 10 в минус шестой (или седьмой ?) степени и высокую стабильность при изменении температуры.
Помимо этого, когда хаб «просто стоит и ничего не делает», на дисплей можно выводить время, принимаемое с GPS-спутников (на видео) или какую-то информацию с компьютера (пока только загрузку ЦП и памяти, но я еще что-нибудь придумаю :).
Как управлять ардуино с компьютера



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

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