Процесс полностью выполняется искусственным интеллектом. Когда тестировщик поворачивает голову, ИИ мгновенно корректирует своё решение, безопасно выполняя задачу.
Компания основана стэнфордскими профессорами и недавно получила финансирование от Alibaba и Sequoia China.
Noematrix сотрудничает с лидерами розничной торговли и товаров для дома, чтобы продвигать массовую поставку своих роботизированных решений.
Noematrix — китайский стартап, занимающийся внедрением интеллектуальных технологий, в частности роботизированного интеллекта (embodied AI). Основан в 2023 году.
Компания фокусируется на разработке систем воплощённого интеллекта, которые учатся через взаимодействие с реальностью, а не через датасеты. Подход: вместо «роботов под одну задачу» создаётся единый мозг для множества тел, который понимает объекты, запоминает привычки человека и обучается прямо в процессе работы.
Цель: предоставлять инновационные решения и услуги в области общего роботизированного интеллекта для клиентов в различных отраслях.
Некоторые продукты компании Noematrix:
Noematrix Brain — платформа для воплощённого интеллекта, включает две большие модели: модель физического мира и модель поведения робота, библиотеку атомарных навыков, программный фреймворк и инструменты разработчика.
AnySkill — библиотека атомарных навыков для повышения адаптивности роботов и улучшения их способности справляться с задачами в различных средах.
Обучающая платформа Noematrix — предлагает инструменты MLOps для ускорения разработки моделей воплощённого интеллекта.
Платформа разработки Noematrix — интегрированная платформа для разработки и интеграции встроенных интеллектуальных решений как в программное, так и в аппаратное обеспечение.
Робот-ферма Noematrix — платформа управления для кластеров роботов, облегчает координацию и работу нескольких роботов.
Noematrix сотрудничает с лидерами розничной торговли и товаров для дома, чтобы продвигать массовую поставку своих роботизированных решений.
7. **Корпус:** Набор для самостоятельной 3D-печати корпуса (файлы .STL) из различных материалов (PLA, PETG, нейлон) *или* готовый корпус из поликарбоната с металлическими вставками.
8. **Инструменты:** Набор прецизионных отверток, пинцет с антистатическим покрытием, приспособление для укладки шлейфов.
9. **Документация:**
* Полные принципиальные схемы и разводка PCB.
* Руководство по портированию AOSP (Android Open Source Project) и Linux.
* Дампы оригинальной прошивки, инструменты для разработки.
* Доступ к форуму и сообществу разработчиков.
**Сборка:** Требуются продвинутые навыки: пайка BGA-компонентов *не требуется*, но нужна аккуратность при сборке. Время сборки: 8-15 часов.
---
### **Универсальные улучшения для всех наборов:**
* **Мобильное приложение-инструктор:** Приложение с AR-режимом (дополненная реальность), которое через камеру планшета/телефона показывает, куда и какой компонент устанавливать.
* **Онлайн-платформа:** Форумы, видеоуроки, гит-репозитории с последними версиями прошивок и сообщество для помощи.
* **Модульность:** Возможность докупить дополнительные модули: тепловизор, лазерный дальномер, датчик качества воздуха, SDR-приемник.
* **Экологичность:** Использование перерабатываемых материалов для упаковки, программа приема старых наборов для утилизации.
Такой доработанный набор покрывает все сегменты энтузиастов — от школьников, изучающих электронику, до инженеров, экспериментирующих с аппаратным обеспечением следующего поколения.
Особые приметы: белая шерсть, синяя толстовка, милая мордочка. Зовут Айс. Будет прятаться в RuStore с 25 по 31 мая.
Задача проста: ищите мишку в магазине приложений каждый день и получайте подарки. Чем больше Айсов найдете, тем выше шанс выиграть главные призы: смартфон Samsung Galaxy Z Fold или наушники Samsung Galaxy Buds3 Pro.
Говорят, мишку заметили где-то в разделе «Интересное».
В условиях всё более частых и разрушительных лесных пожаров российские разработчики предлагают не ждать помощи сверху — а действовать здесь и сейчас. Проект LesnikFPV, созданный энтузиастом Виктором выложенный в открытый доступ на GitHub, демонстрирует, как обычный лесник или доброволец может использовать недорогой квадрокоптер и современные технологии компьютерного зрения для раннего обнаружения возгораний.
Просто, доступно, по-настоящему полезно
LesnikFPV — это не просто «умная игрушка». Это готовое решение, собранное из доступных компонентов: квадрокоптера на базе популярной платформы Betaflight, тепловизионной камеры (например, FLIR Lepton) и Raspberry Pi или аналогичного одноплатного компьютера. Всё это управляется через открытый код, который автоматически анализирует видеопоток в реальном времени и ищет признаки огня или дыма.
Система обучена распознавать открытый огонь, а также задымление. Как только алгоритм обнаруживает подозрительную зону — он немедленно отправляет оповещение оператору и фиксирует координаты. Это может сэкономить часы, а иногда и дни — ведь чем раньше обнаружен пожар, тем проще его локализовать.
Почему это важно?
В 2023–2024 годах лесные пожары в Сибири и на Дальнем Востоке охватывали миллионы гектаров. Часто первые очаги возгорания остаются незамеченными до тех пор, пока пламя не перерастает в катастрофу. Патрулирование пешком или на машине — медленно и неэффективно на огромных территориях. Спутниковые данные — полезны, но имеют задержку и не всегда высокое разрешение.
LesnikFPV предлагает «золотую середину»: мобильность дрона, точность тепловизора и скорость реакции искусственного интеллекта. При этом вся система обходится в десятки тысяч рублей — в разы дешевле профессиональных решений, используемых МЧС или лесхозами.
Открытый код — сила сообщества
Особенно впечатляет, что проект полностью открыт. Любой лесник, школьник-технарь или волонтёр может скачать код, собрать устройство и адаптировать его под свои условия.
«Это не про технологии ради технологий, — говорит один из тестировщиков проекта в Иркутской области. — Это про то, чтобы дать людям простой инструмент, который реально спасает лес и, возможно, чьи-то дома».
Что дальше?
Сейчас Виктор работает над версией с автономным полётом по заданному маршруту и возможностью передавать данные напрямую в региональные центры мониторинга. Также рассматривается интеграция с OpenStreetMap и системами ГЛОНАСС для точной привязки координат.
Проект — яркий пример того, как grassroots-инициативы могут решать масштабные экологические проблемы. В эпоху, когда каждый градус глобального потепления увеличивает риск пожаров, такие решения становятся не просто полезными — они жизненно необходимы.
Ссылка на проект:https://github.com/VohminV/LesnikFPV Для кого: лесники, добровольцы, школьные кружки, экоактивисты, местные администрации. Главное: не ждать беды — быть на шаг впереди огня.
Современные робототехнические системы, дроны и автоматизированные устройства требуют точного определения перемещения в пространстве. Один из ключевых компонентов для этой задачи — Оптический модуль визуальной инерциальной навигации, такой как MTF02.Этот компактный и энергоэффективный сенсор позволяет устройствам "чувствовать" движение даже без GPS или внешних ориентиров.
Оптический датчик MTF-02
В конструкции датчика MTF-02 интегрированы две ключевые подсистемы:
ToF motion sensor (Time-of-Flight) для получения точечного расстояния;
Сенсор оптического потока (Optical flow) для отслеживания движения поверхности.
Основные характеристики
Напряжение питания:4 - 5.5В, потребление ~200мВт;
Размеры/вес: ~25x10x4,5мм 1,5г;
Оптический поток: 42° - при освещенности 60 ≥ Lux;
Минимальная высота: ≥ 8см;
Максимальная скорость: до 7м/c на высоте 1 метр;
FoV-камера: до 2,5 м @ 90% отражения и 600 Lux, мертвая зона FoV-камеры после 2см;
Длина волны ToF: 940нм.
Процесс работы MTF-02:
ToF motion sensor — технология измерения расстояния до объекта с помощью времени задержки отраженного сигнала (лазерного или ИК-импульса). Точечные датчики измеряют дистанцию до одной точки.
Optical flow - датчик захватывает изображение поверхности вниз и вычисляет относительное движение при частоте ~50 Гц, работает начиная с высоты 8см и далее для алгоритмов стабилизации движения при полете или перемещении в помещении.
Это похоже на то, как компьютерная мышь определяет свое перемещение, но с более высокой точностью.
Задача стоит следующая: мне необходимо разработать такую систему, которая способна сканировать в пространстве над поверхностью т.е. по "воздуху".
Для решения поставленной задачи, был выбран датчик MTF-02, обладающий необходимыми характеристиками для одновременного определения пройденного пути, координат перемещения в плоскости (X, Y) и оценки высоты объекта.
Благодаря встроенномуToF motion sensor, обеспечивающей точное измерение расстояния, а также модулю оптического потока, MTF-02 способен адаптироваться к условиям, когда отсутствует прямая опора или контрольный фон, это делает его особенно эффективным в задачах, где важно отслеживать перемещение объекта в подвешенном состоянии или при движении над неровной/неоднородной поверхностью.
Схема подключения датчика MTF-02
Сигнал TX датчика MTF-02 подключается к STM32F103(PA10-31 контакт - RX), а так же +5В и GND
Для более стабильного напряжения питания можно использовать следующую схему, в которой работает понижающий преобразователь MP231, но необходим источник +12В, в моем случае используется аккумуляторная сборка (NiMH/Pb +12В).
Вид осциллограммы передаваемых данных модуля MTF-02 по интерфейсу USART (линия TX)
Настройка микроконтроллера STM32F103 в CubeIDE
Настройка интерфейса USART в микроконтроллере STM32F103
В пункте [ 1 ] настраиваю скорость (Baud Rate [115200]), остальные параметры без изменений;
В пункте [ 2 ] заходим в параметр "DMA Settings" и включаем его на примем данных;
В рамках реализации приема данных по интерфейсу(USART) была задействована технология прямого доступа к данным (DMA), что позволило существенно снизить нагрузку на центральный процессор.
Для этого приемный сигнал USART(USART_RX) был сконфигурирован на работу в режиме DMA, при котором поступающие данные автоматически записываются в выделенный участок оперативной памяти без участия ядра.
В пункте [ 3 ] заходим в параметр "NVIC Settings" и включаем глобальное прерывание.
Для отслеживания состояния интерфейса USART и обработки важных событий (например, завершения приема или ошибки), в разделе NVIC Settings было включено глобальное прерывание USART, это обеспечивает возможность немедленного реагирования со стороны микроконтроллера на изменения состояния периферии без постоянного опроса регистров.
Реализация программного кода(настройка и прием данных)
//буфер для сборки строки #define SIZEBUF_result 96 char uart_rezult_buf1[SIZEBUF_result]={0,}; char uart_rezult_buf2[SIZEBUF_result]={0,}; char* uart_rezult_buf=uart_rezult_buf1; short uart_rezult_buf_i=0;//индекс char* uart_bufRow=uart_rezult_buf1;//буфер с целой строкой //E N D буфер для сборки строки //E N D для составления строк
//Данные полученные от структуры float distance_m=0.0f; int16_t flow_vel_x_cop=0; float flow_vel_x_cop_ab=0.0f; int16_t flow_vel_y_cop=0; float flow_vel_y_cop_ab=0.0f; uint32_t time_ms_s = 0; float distance_global =0.0f; //E N D данные полученные от структуры
//Данные после преобраз.сглаживания float smoothed_x = 0.0f; // Сглаженная скорость по X (см/с) float smoothed_y = 0.0f; // Сглаженная скорость по Y (см/с) float smoothed_distance = 0.0f; // Сглаженная дистанция (м) float total_velocity = 0.0f; // Общая скорость из сглаж. линейных скор. и дистанции (см/с) //E N D Данные после преобраз.сглаживания
staticfloat total_path_m = 0.0f; // Пройденный путь (метры) float total_path_m_cop = 0.0f; long total_path_m_cop_long =0; //тест staticfloat position_x_m = 0.0f; // Положение по X (в метрах) float position_x_m_cop = 0.0f; long position_x_m_cop_long= 0; staticfloat position_y_m = 0.0f; // Положение по Y (в метрах) float position_y_m_cop = 0.0f; long position_y_m_cop_long= 0; float beta_rad = 0.0f;
// Буферы для сглаживания данных #define BUFFER_SIZE 5 // Размер буфера для сглаживания, если необходимо еще медленее, уменьшать размер float flow_vel_x_buffer[BUFFER_SIZE] = {0}; // Буфер для flow_vel_x float flow_vel_y_buffer[BUFFER_SIZE] = {0}; // Буфер для flow_vel_y float distance_buffer[BUFFER_SIZE] = {0}; // Буфер для дистанции uint8_t buffer_index = 0; // Индекс текущего положения в буфере // E N D Буферы для сглаживания данных
Данный метод отвечает за получение, предварительную обработку и подготовку к использованию данных, поступающих от датчика MTF-02.
Основные задачи метода • Приём данных с датчика Метод реагирует на прерывания DMA — по заполнению первой или второй половины приёмного буфера. Это позволяет работать с потоком данных непрерывно, без потерь.
• Буферизация и переключение кадров Используются два чередующихся буфера (uart_rezult_buf1 и uart_rezult_buf2), чтобы приём новых данных и обработка предыдущих шли параллельно.
• Декодирование пакета Полученные байты передаются в функцию micolink_decode, которая разбирает пакет и выделяет физические величины:
flow_vel_x_cop — линейная скорость по оси X
flow_vel_y_cop — линейная скорость по оси Y
distance_m — дистанция до поверхности
• Сглаживание данных Для уменьшения шумов значения проходят через циклический буфер и усредняются функцией calculate_average. Это даёт стабильные показания скорости и расстояния.
• Интегрирование скорости в путь На основе сглаженных скоростей выполняется интегрирование (update_position) для получения пройденного пути по осям X и Y. Параллельно рассчитывается общая длина пути и угол движения (calculateBetaRadians).
• Подготовка данных для передачи Формируются готовые строки (sprintf) с данными в удобном текстовом формате для отладки, логирования или передачи в другие системы.
void uart_Handler_MTF(void) { HAL_Delay(1);//чтобы HAL_GetTick() не выдавал ноль uint32_t ms = HAL_GetTick(); // uint32_t time_sec = ms / 1000; char isData=0; char* pData=(char*)uart_rx_buffer_MTF;
if(uartRxFullIRDone){ uartRxFullIRDone = 0; // Указатель на вторую половину основного буфера DMA pData=(char*)&uart_rx_buffer_MTF[UART_RX_BUFFER_SIZE/2]; isData=1; } if(uartRxHalfIRDone){ uartRxHalfIRDone = 0; // Указатель на первую половину основного буфера DMA pData = (char*)uart_rx_buffer_MTF; isData=1; } if(isData) { isData=0;
smoothed_x = calculate_average(flow_vel_x_buffer); smoothed_y = calculate_average(flow_vel_y_buffer); smoothed_distance = calculate_average(distance_buffer); //E N D Сглаженные значения float time_sec = ms/1000.0f;//перевод в секунды
update_position(smoothed_x,smoothed_y,ms);//интегрирование линейной скорости для расчёта пройденного пути, с учётом фильтрации малых шумов.
update_motion(smoothed_x,smoothed_y,smoothed_distance, ms);//расчёт общей скорости и пройденного пути
//делаю копию потому что position_x_m,y и total_path_m static (если одтать в буфер staic, то работать система не будет) position_x_m_cop = position_x_m; position_y_m_cop = position_y_m; total_path_m_cop = total_path_m*1000.0f; total_path_m_cop_long = (long)roundf(total_path_m_cop);
flow_vel_x_cop_ab=position_x_m_cop * 1000.0f;//перевод в мм flow_vel_y_cop_ab=position_y_m_cop * 1000.0f; position_x_m_cop_long = (long)roundf(flow_vel_x_cop_ab); position_y_m_cop_long = (long)roundf(flow_vel_y_cop_ab); //E N D
beta_rad = calculateBetaRadians(flow_vel_x_cop_ab, flow_vel_y_cop_ab);//получение угла в радианах
Данный метод отвечает за расчёт общей скорости и пройденного пути, он выполняет ключевую навигационную задачу — на основе данных от MTF-02 вычисляет, с какой скоростью движется объект и какое расстояние он прошёл с момента старта измерений.
Принцип работы • Измерение времени между кадрами Функция хранит момент предыдущего вызова (last_time_ms) и определяет, сколько секунд прошло между текущим и прошлым измерением (delta_time_s). Это позволяет интегрировать движение по времени.
• Вычисление мгновенной скорости
Используются проекции скорости по осям X и Y (flow_vel_x, flow_vel_y).
Их векторная сумма (sqrtf(...)) даёт модуль скорости в плоскости.
Результат умножается на измеренное датчиком расстояние до поверхности (distance_m), что учитывает масштаб оптического потока.
Деление на 100 применяется, если исходные скорости приходят в сантиметрах в секунду (приведение к м/с).
• Интегрирование для получения пути Общая скорость умножается на интервал времени — это даёт приращение пути за данный шаг. Приращение накапливается в переменной total_path_m, которая отражает суммарное пройденное расстояние с начала работы системы.
• Обновление времени В конце функция сохраняет текущее время вызова, чтобы при следующем измерении корректно вычислить delta_time_s.
Простыми словами Метод update_motion — это шагомер с точностью до миллиметров, но не по количеству шагов, а по точным данным от оптического датчика. Он измеряет скорость движения, умножает её на прошедшее время и складывает результат в копилку пройденного пути
// Функция расчёта общей скорости и пройденного пути void update_motion(float flow_vel_x, float flow_vel_y, float distance_m,uint32_t time_ms) {
staticuint32_t last_time_ms = 0; // Время предыдущего измерения
float delta_time_s = (time_ms - last_time_ms) / 1000.0f; // Время в секундах
if (delta_time_s > 0) { // Рассчитываем общую скорость (м/с) float total_velocity_m_per_s =distance_m * sqrtf(flow_vel_x * flow_vel_x + flow_vel_y * flow_vel_y)/100.0f;// деление на 100 если скорости передаются в см/c если в м/то не надо делить // Интегрируем скорость для расчёта пути total_path_m += total_velocity_m_per_s * delta_time_s; } last_time_ms = time_ms; // Обновляем время последнего измерения }
Метод update_position
Данный метод отвечает за то, чтобы перевести показания датчика MTF-02 из скоростей в координаты — то есть понять, где сейчас находится объект относительно точки старта.
Как это работает Определение времени между измерениями Метод вычисляет, сколько секунд прошло с момента предыдущего вызова (delta_time_s). Это нужно, чтобы правильно учесть, на какое расстояние мог сдвинуться объект.
• Отсев шумов Если скорость по X или Y слишком мала (меньше 0,01 см/с), она считается шумом и приравнивается к нулю. Это предотвращает накопление ошибок из-за микроколебаний или дрожания датчика.
• Перевод в метры в секунду Показания датчика приходят в сантиметрах в секунду, поэтому они делятся на 100, чтобы работать в метрической системе (м/с).
Интегрирование — путь из скорости
Скорость умножается на время, прошедшее с предыдущего измерения.
Полученное приращение добавляется к текущим координатам position_x_m и position_y_m.
Таким образом, шаг за шагом накапливается точка текущего положения в метрах.
• Обновление времени Сохраняется момент последнего измерения, чтобы при следующем вызове правильно рассчитать delta_time_s.
Простыми словами update_position — это математический «следопыт»: он берёт скорости, отбрасывает шум, переводит их в пройденное расстояние и складывает с предыдущими координатами. В результате получается текущая позиция объекта в двухмерном пространстве.
//интегрирование линейной скорости для расчёта пройденного пути, с учётом фильтрации малых шумов. void update_position(float flow_vel_x, float flow_vel_y,uint32_t time_ms){
staticuint32_t last_time_ms = 0;// Время последнего измерения (мс)
// Вычисляем разницу во времени между измерениями в секундах float delta_time_s = (time_ms - last_time_ms) / 1000.0f; if (delta_time_s > 0.0f) {
// Проверка на малые скорости и шумы if (fabsf(flow_vel_x) < 0.01f) flow_vel_x = 0.0f; // Игнорируем шум по X if (fabsf(flow_vel_y) < 0.01f) flow_vel_y = 0.0f; // Игнорируем шум по Y
// Переводим скорости из см/с в м/с float velocity_x_mps = flow_vel_x / 100.0f; // Линейная скорость по X (м/с) float velocity_y_mps = flow_vel_y / 100.0f; // Линейная скорость по Y (м/с)
// Интегрируем скорости для обновления положенияx` position_x_m += velocity_x_mps * delta_time_s; // Путь = Скорость * Время position_y_m += velocity_y_mps * delta_time_s; } // Обновляем время последнего измерения last_time_ms = time_ms; }
Метод calculate_average вычисление среднего значения из буфера, необходи для сглаживания данных поступающих от датчика MTF-02
float calculate_average(float*buffer) { float sum = 0.0; for (int i = 0; i < BUFFER_SIZE; i++) { sum += buffer[i]; } return sum / BUFFER_SIZE; } //E N D функция вычисления среднего значения из буфера
В работе с датчиком MTF-02 информация передаётся в виде бинарных сообщений по протоколу MicoLink. Этот набор функций выполняет полный цикл приёма — от поимки первого байта до получения готовых чисел скорости и высоты.
1. Метод micolink_parse_char, осуществляет приём и разбор данных, обрабатывает поток входящих байтов, поступающих от датчика.
Каждый байт проходит через «машину состояний»:
Заголовок — признак начала пакета.
ID устройства и системы — кому адресовано сообщение.
ID сообщения — тип передаваемых данных (например, показания дальномера).
Длина полезной нагрузки — сколько байт занимает полезная информация.
Полезная нагрузка — сами измеренные значения (скорости, дистанция).
Контрольная сумма — защита от ошибок в передаче.
Если всё прошло успешно и контрольная сумма совпала — пакет считается принятым.
2. Метод micolink_check_sum, осуществляет проверку целостности Каждое сообщение содержит контрольную сумму — специальное число, рассчитанное по всем байтам пакета.
Если расчёт на приёмной стороне совпадает с переданным значением, значит, данные достоверны.
Этот шаг защищает от искажений, которые могут возникнуть в линии связи.
3. Метод micolink_decode, осуществляет декодирование,после успешного приёма пакет разбирается по смыслу.
В случае с MICO_LINK_MSG_ID_RANGE_SENSOR из него извлекаются:
time_ms — отметка времени измерения;
distance_m — высота над поверхностью, в метрах;
flow_vel_x и flow_vel_y — линейные скорости по осям X и Y (см/с).
Эти значения затем используются для расчёта скорости, перемещения и построения траектории движения.
// Функция обработки данных uint8_t* data, size_t size void micolink_decode(uint8_t* data, size_t size) { //static MICOLINK_MSG_t msg;
if (micolink_parse_char(&msg,data,size) == false) { return; }
После вызова данного метода MTF-02 начинает передавать пакеты данных по UART, а контроллер непрерывно принимает их в выделенный буфер, не тратя ресурсы на побайтовую обработку. Когда буфер наполняется наполовину или полностью, срабатывают соответствующие обработчики (uartRxHalfIRDone и uartRxFullIRDone), и начинается разбор протокола MicoLink.
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код -Исходный код для датчика MTF-02]
Вывод
Датчик MTF-02 — это отличное решение для проектов, требующих точного измерения перемещения без сложных навигационных систем. Его простота, низкая цена и энергоэффективность делают его популярным в робототехнике, дронах и умных устройствах.
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код -Исходный код для датчика MTF-02]
Вывод
Датчик MTF-02 — это отличное решение для проектов, требующих точного измерения перемещения без сложных навигационных систем. Его простота, низкая цена и энергоэффективность делают его популярным в робототехнике, дронах и умных устройствах.
Заключение
Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить – буду благодарен за подписку на мой ТГ-канал: https://t.me/ChipCraft.
Когда мы разработали первые Arduino-совместимые изделия на MIK32 Амур - ELBEAR ACE-UNO, и они завелись без «волшебного дыма» - мы воодушевились. После нескольких правок и пары итераций запустили небольшую серию – и поняли: «Хьюстон, у нас проблемы»… Далеко не все платы заводились сразу – сказывались особенности монтажа микроконтроллера (потребовалось определенное время, чтобы набить на этом шишек и наладить тех процессы и в нанесении пасты, и в ее оплавлении, и в самом выборе пасты), и иногда ошибки при монтаже на любой из стадий - авторастановщик/печь/отмывка/ручной монтаж... Как мы поняли довольно быстро - визуальный контроль не панацея, далеко не все получалось отследить «глазками»…
В итоге проверка плат после монтажа производилась вручную – в ход шли осциллограф, мультиметр и знания о том, как это должно работать. Проверялись напряжения на основных тестпоинтах, загрузка прошивки и работа самого микроконтроллера, связь по интерфейсу USB.
1/2
И делали это на первых порах не ребята на производстве, а высококвалифицированные инженеры, что конечно было в целом «из пушки по воробьям».
По мере наращивания производства стало понятно, что нужно более тщательно проверять монтаж элементов на плате и желательно так, чтобы это занимало поменьше времени.
Попытки улучшить и ускорить проверку
Для упрощения проверки плат ELBEAR ACE-UNO на MIK32 Амур была создана специальная тестовая плата. Предварительно перед ее использованием всё так же проверялись уровни напряжений на тестпоинтах и отсутствие коротких замыканий на плате по питанию.
Сначала это была просто плата со светодиодами (как на самой первой фотографии сверху), позже уже был разработана специальная тестовая плата.
Тестовая плата при использовании с проверочной прошивкой позволяла проверить и цифровую, и аналоговую части платы. На ней находился набор светодиодов для каждого вывода проверяемой платы, переключатели для перемычек BOOT, некоторые дополнительные кнопки и светодиоды. Проверочная прошивка загружалась в проверяемую плату UNO (вместе с ней загружался и начальный загрузчик), а после тестовая плата надевалась сверху на проверяемую. Для проведения проверки проверяемая плата подключалась к ПК по интерфейсу USB, а на ПК открывалась программа монитора последовательного порта.
1/2
В прошивке на первом этапе все цифровые выводы платы по очереди выставлялись в 1, при этом на тестовой плате рядом с каждым выводом должен был зажигаться свой (только один) светодиод. Эта проверка позволяла выявить непропаи или закорачивания цифровых выводов платы.
На втором этапе проверялась работа АЦП и ЦАП – на двух каналах ЦАП формировались изменяющиеся в разные стороны уровни напряжений – один на увеличение, другой на уменьшение. Формируемые аналоговые сигналы подавались на светодиоды SDA, SCL на тестовой плате, а ожидаемые значения выводились в монитор порта. По итогам сравнения ожидаемых значений с яркостью свечения соответствующих светодиодов делался вывод о корректности работы каналов ЦАП.
Для проверки каналов АЦП в монитор порта на втором этапе выводились значения, измеренные на каждом канале. По умолчанию эти значения должны быть относительно маленькими. На тестовой плате есть кнопка, по нажатию которой на аналоговые выводы проверяемой платы подается высокий уровень напряжения. В процессе проверки платы данная кнопка нажималась, а проверяющий контролировал значения, выводимые в монитор порта – все они должны значительно увеличиться. Таким образом проверялась корректность работы каналов АЦП.
Помимо этого, в процессе проверялась работа встроенных на плату светодиода и кнопки.
После выхода пакета поддержки плат ELBEAR в ArduinoIDE к проверке добавился еще один этап – загрузка проверочного скетча на проверяемую плату в ArduinoIDE по интерфейсу USB и проверка работы интерфейса UART (при получении любых сообщений микроконтроллер эхом отправлял их обратно в порт).
Автоматизированная проверка плат
С появлением плат ELBEAR ACE-NANO на MIK32 Амур появилось и желание еще как-то ускорить и улучшить проверку плат после монтажа. Хотелось использовать для проверки не светодиоды и глаза проверяющего, а другой микроконтроллер, который сам будет принимать решение об успешности прохождения проверки. И почему бы для этого не использовать микроконтроллер с точно такой же платы с точно таким же набором выводов? И специальную тестовую плату делать не придется. Так родилась наша автоматизированная насколько это возможно проверка плат. Начали мы с платы ACE-NANO.
Для проверки нужна одна уже проверенная, заведомо рабочая плата NANO – она будет платой-мастером. В эту плату загружается специальная прошивка, которая управляет процессом проверки. Проверяемая плата изначально проверяется на наличие коротких замыканий, после чего в нее загружается проверочная прошивка (а вместе с ней и начальный загрузчик), которая слушает команды от платы-мастера и выполняет их. После загрузки прошивок проверяемая плата и плата-мастер соединяются друг с другом pin-to-pin в этакий «бутерброд», и плата-мастер подключается к ПК по интерфейсу USB.
1/2
Проверка состоит из нескольких этапов:
• Stage MISO: проверяемая плата по очереди изменяет состояние цифровых выводов, а плата-мастер считывает состояние выводов и анализирует результаты.
• Stage MOSI: плата-мастер по очереди изменяет состояние цифровых выводов, проверяемая плата считывает состояние выводов, отправляет результаты мастеру, а тот их анализирует.
• Stage Analog: плата-мастер по очереди подает высокий уровень на все аналоговые выводы, а проверяемая плата каждый раз измеряет напряжение на всех своих выводах и отправляет результаты мастеру, а тот их анализирует. Проверяются и прямые каналы АЦП, и переключаемые.
• Stage OTP content: проверяемая плата считывает из OTP памяти тестовую строку и результат отправляет плате-мастеру. Если память не запитана, плата-мастер получит пустую строку, а проверяющему придется проверить плату вручную.
• Stage End Time: на этом этапе проверятся точность работы часов реального времени на проверяемой плате – при старте проверки по команде время заводится на обеих платах, а на данном этапе проверяемая плата присылает свое текущее время. Если оно близко к времени платы-мастера – с трактом часового кварца все в порядке.
На этапах MISO, MOSI, Analog в каждый момент времени активен только один вывод. Если это так – этапы проверки пройдены успешно. Если нет – в монитор порта выводится информация о «лишних» сработавших выводах – это повод проверить указанные выводы вручную.
После успешной автоматизированной проверки проводится проверка в ArduinoIDE – по интерфейсу USB в проверяемую плату загружается проверочный скетч, в котором проверяется работа встроенного светодиода и интерфейса UART – все сообщения, полученные от ПК, микроконтроллер отправляет обратно в порт. Этот этап остался неизменным.
Такая проверка для плат ACE-NANO нам понравилась, поэтому было решено сделать аналогичную проверку для плат ACE-UNO. Проверка производится точно так же, как с платами ACE-NANO. Единственное отличие – платы ACE-UNO не получается соединять «бутербродом» из-за некоторых разъемом, поэтому платы соединяются pin-to-pin проводами.
С этого момента все стали предельно довольными - все платы без исключения проходят проверку, пропустить ошибку или не заметить из-за того, что устал, просто невозможно - практически все происходит автоматически, ну а сама скорость проверки существенно выросла.
Вопрос к пикабушникам! Прочитал в инженерном хабе @hubdelo интересный материал про усики. И подумал, а ведь сегодня мозги электронные не только в бытовой технике, но и в авто и промышленном оборудовании. Интересно как защищают электронику в промышленных станках от воздействия влажности, пыли и даже вибраций станка? Особенно в дорогих ЧПУ центрах? А еще слышал про миграцию водорода в чипах - это что-то про нейтрино и плоскую землю?)))
Компания «Элрон», российский разработчик электронных приборов, представила первый в стране графический язык программирования BearLogica, предназначенный для работы с микроконтроллером MIK32 «Амур» от «Микрона». Новый инструмент позволяет создавать код с помощью визуальных блоков, упрощая обучение основам программирования для школьников и студентов.
BearLogica поддерживает платы ELBEAR ACE-NANO и ELBEAR ACE-UNO (16/32 Мб), работающие на базе MIK32 – первого отечественного 32-разрядного микроконтроллера с архитектурой RISC-V. Особенность языка – возможность экспорта кода в Arduino IDE, что облегчает переход от визуального программирования к текстовому.
При работе с BearLogica формируется код, который можно перенести в среду Arduino IDE, это позволяет облегчить переход от работы в графических средах программирования к текстовой среде Arduino IDE. BearLogica — первый графический язык, поддерживающий MIK32 Амур, мы намерены непрерывно развивать данный проект, который со временем поможет заместить программируемый конструктор Лего, чтобы обучать настоящих российских инженеров почти с пеленок.
Иван Лебедев, генеральный директор ООО «Элрон»
«Микрон» уже проводил мастер-классы по программированию MIK32, а с появлением BearLogica процесс обучения станет еще доступнее.
Благодаря инициативе «Элрона», с новым языком программирования откроются дополнительные возможности для более эффективного обучения и вовлечения юных программистов в мир технологий. Вполне возможно, в перспективе на базе MIK32 Амур будет работать программируемый детский конструктор.
Станислав Шепелев, начальник отдела системных разработок АО «Микрон»
MIK32 «Амур» активно используется в промышленной автоматизации, IoT и образовательных проектах. «Элрон» продолжает расширять его функционал, добавляя новые датчики и модули для плат ELBEAR.