Skip to the content
4 layers29.9 × 32 mmModels heart rev1.1, the printed circuit board in 3D

Models heart rev1.1

KushlaVR/models-heart7

Можливості: Керування через WIFI з телефона або ПК 5 незалежних каналів (світлодіоди/сервомотори) 1 Н-міст для підключення мотора (піковий струм до 3А) Вмонтована BMS 1S та контроллер заряду Li-Ion акумулятора з…

Size
29.9 × 32 mm
Copper layers
4
Thickness
1.6 mm
Parts
106
Nets
75
Pads
296
Tracks, vias
1,097, 242
Pours
32
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
17 Jul 2023
Updated
18 Dec 2023

Overview

Models heart rev1.1 is an open-source printed circuit board by KushlaVR, from the KushlaVR/models-heart repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 29.9 × 32 mm with 106 parts on 75 nets, routed with 1,097 tracks and 242 vias.

It is built around the CH340C, ESP-12E and DRV8833PWP, with the AMS1117-3.3, DW01 and TP4056 among its other parts. Its parts include 28 resistors, 15 capacitors, 9 transistors, 6 ICs and 3 diodes. It belongs with the ESP8266 boards of this library.

Main components

11

README

README.md

Model's Heart

Model's Heart View

Breathe life into your model

Плата для керування електронікою моделі (статичної або рухомої)

Можливості:

  • Керування через WIFI з телефона або ПК
  • 5 незалежних каналів (світлодіоди/сервомотори)
  • 1 Н-міст для підключення мотора (піковий струм до 3А)
  • Вмонтована BMS 1S та контроллер заряду Li-Ion акумулятора з індикацією заряду
  • Вмикання/вимикання 1 кнопкою (вже є на платі)
  • Дистанційне вимкнення

Поки ти читаєш цей текст - українці гинуть від російських ракет.

While you are reading this text, Ukrainians are dying from russian missiles.

Ти можеш перерахувати будь-яку суму на спеціальний рахунок Національного Банку України для допомоги збройним силам україни у протистоянні російському окупанту.

Навіть незначна сума може врятувати чиєсь життя!

You can transfer any amount to a special account of the National Bank of Ukraine to help the armed forces of Ukraine in the fight against the Russian occupier.

Even a small amount can save someone's life!

Для зарахування коштів у національній валюті:

text
Банк: Національний банк України
МФО 300001
Рахунок № UA843000010000000047330992708
код ЄДРПОУ 00032106
Отримувач: Національний банк України 

To deposit funds in USD:

text
BENEFICIARY: National Bank of Ukraine
BENEFICIARY BIC: NBUA UA UX
BENEFICIARY ADDRESS: 9 Instytutska St, Kyiv, 01601, Ukraine
ACCOUNT NUMBER: 804790258
BENEFICIARY BANK NAME: JP MORGAN CHASE BANK, New York
BENEFICIARY BANK BIC: CHASUS33
ABA 0210 0002 1
BENEFICIARY BANK ADDRESS: 383 Madison Avenue, New York, NY 10017, USA
PURPOSE OF PAYMENT: for ac 47330992708 

To deposit funds in EUR:

text
BENEFICIARY: National Bank of Ukraine
IBAN DE05504000005040040066
PURPOSE OF PAYMENT: for ac 47330992708
BENEFICIARY BANK NAME: DEUTSCHE  BUNDESBANK, Frankfurt
BENEFICIARY BANK BIC: MARKDEFF
BENEFICIARY BANK ADDRESS: Wilhelm-Epstein-Strasse 14, 60431 Frankfurt Am Main, Germany

To deposit funds in GBP:

text
BENEFICIARY/RECIPIENT NAME: National Bank of Ukraine
ACCOUNT NUMBER: 80033041
IBAN GB52CHAS60924280033041
BENEFICIARY ADDRESS: 9 Instytutska St, Kyiv, 01601, Ukraine
BENEFICIARY BANK NAME: JP MORGAN CHASE BANK NA, London
BENEFICIARY BANK BIC: CHASGB2L
SORT CODE: 60-92-42 
BENEFICIARY BANK ADDRESS: 125 London Wall, London EC2Y 5AJ, UK
PURPOSE OF PAYMENT: for ac 47330992708

Донатьте на ЗСУ

Як створювалась ця плата

https://www.youtube.com/watch?v=I-fucbyPBxc&list=PLNvbguf8aVrykSSVMaIyB5YiUsczeTyt5

Цей список відтворення містить детальний опис процесу проектування, виготовлення та створення прошивки для цього проекту з чистого листка.

Schematic

Model's Heart Schematic

Board

Photo

Що обрати Model's Heart чи Arduino?

Плата Model's Heart та Arduino чи Wemos не є взаємозамінні. Вони схожі, проте мають і відмінності. Це як комп'ютери із різною комплектацією. Для коащого розуміння ознайомтесь із порівняльоню таблицею.

Проівняльна таблиця Arduino Nano, Wemos D1, Model's Heart

ХарактеристикаArduino NanoWemos D1Model's Heart
ПроцесорAtmega 328ESP8266ESP8266
Ядро8-bit AVR RISCTensilica L106 32-bit RISCTensilica L106 32-bit RISC
ТипMicrocontrollerSocSoC
Оперативня пам'ять2K bytes50k bytes50k bytes
Постійна пам'ять32K bytes інтергрована--
Зовнішня пам'ять-16M bytes16M bytes
Частота процесора16MHz52MHz52Mhz
GPIO24118
Analog Pins811
ADC111
Точність ADC10bit10bit10bit
Wi-Fi-2.4GHz2.4GHz
USB Powermicro USBmicro USBType-C
Живлення від Li-Ion--+
Li-Ion BMS--+
Li-Ion Charger--+
Power switch--+
H-Bridge--3A (max)

У мене вже є плата Model's Heart, що далі?

Базовий набір:

  • Завантажена з GitHub копія проекту
  • Модуль, або відлагоджувальна плата Model's Heart, або інша на базі процесора ESP8266 (Наприклад Wemos D1 mini, Lolin, і т.п.)
  • Комп'ютер з USB
  • Веб-переглядач для налаштування (наприклад Edge, Chrome, Mozilla, Safari, Opera ...)

Додаткові інструменти, якщо ви захочете переробити прошивку під більш складні задачі:

  • Visual Studio Code
  • Встановлена бібліотека Platformio

Прошивка

У папці Tools є утиліта для прошивки та безпосередньо сам файл прошивки. Для більшості користувачів цього є цілком достатньо. Виконавши декілька простих кроків, ви зможете перетворити плату у радіоапаратуру для керування моделями.

Покрокова інструкція

  1. Підключаєте плату до USB-порту вашого комп'ютера.
  2. Встановлюєте драйвер CH340 (якщо його ще немає)
  3. Заходите у диспетчер пристроїв і перевіряєте, чи всі драйвери встановлено і чи ваша плата розпізнається системою.
  • Відкриваєте панель керування комп'ютером. Call device manager
  • Переходите на пункт "Диспетчер пристроїв". Ймовірно, ваша плата буде називатися 'USB-Serial CH340 (COM_)' Model's Heart serial port
  • Запам'ятовуєте, який номер порта отримала ваша плата (у моєму випадку - №3) Call device manager
  1. Запускаєте Tools/upload.bat
  2. Після старту скрипт запитає номер порта, до якого під'єднано вашу плату
  3. Вводите номер (тільки цифру), натискаєте Enter
  4. Натискаєте кнопку Power на платі Model's Heart
  5. Чекаєте, поки завершиться процес завантаження

Все - плата прошита.

З цього моменту нею можна користуватись.

Встановлення поновлень

Поновлення відбувається аналогічно до прошивки. Завантажуєте нову версію репозиторію. А далі все по кроках...

Зважте на те, що прошивка повністю переписує все що є в пам'яті плати. Тобто, якщо ви завантажували в неї модифікації через файловий менеджер, то завантажте їх, щоб не втратити.

Налаштування елементів UI

Усі елементи користувацького інтерфейсу використовують абсолютну координатну сітку. Відлік координат починається у верхньому правому кутку.

Робоче поле має фіксовані пропорції 100:45

Розміри елементів інтерфейсу вказуються у відсотковому еквіваленті до ширини робочого поля.

Наприклад цей текстовий блок буде розміщений з відступом 10% з ліва, 20% з гори. Його ширина і висота відповідатимуть відповідно 30% ширини екрану та 40% ширини екрану. Зверніть увагу, що в обидвох випадках (ширина і висота блока) виміри прив'язані до % ширини екрану

text
    {
        "type":"text",
        "x": "10",
        "y": "20",
        "w": "30",
        "h": "40",
        "text":"текст"
    }

Елементи графічного інтерфейсу

Text

text
    {
        "type":"text",
        "x": int,
        "y": int,
        "w": int,
        "h": int,
        "text":string,
        "bg":string
    }

Button

text
    {
        "type":"button",
        "x": int,
        "y": int,
        "w": int,
        "h": int,
        "text": string,
        "cmd": string
    }

Slider

text
    {
        "type":"slider",
        "x": int,
        "y": int,
        "w": int,
        "h": int,
        "color": string,
        "cmd": string,
        "autocenter": bool,
    }

Image

text
    {
        "type":"image",
        "x": int,
        "y": int,
        "w": int,
        "h": int,
        "cmd": string,
        "src": string,
        "autocenter": bool,
    }

Toggle

text
    {
        "type":"toggle",
        "x": int,
        "y": int,
        "w": int,
        "h": int,
        "text": "Off|A|B|C",
        "values": "0|30|60|90",
        "cmd": string,
        "autocenter": bool,
    }

Редактор графічного інтерфейсу

Плата обладнана редактором інтерфейсу. З допомого якого можна вносити зміни в існуючий дизайн, або створититповністю новий унікальний вигляд на ваш смак. Model's Heart GUI Designer

Для кожного елемента графічного інтерфейсу передбачено редактор властивостей. Model's Heart GUI Designer

Графічний інтерфейс

Model's Heart GUI Designer

Сценарій

Сценарій визначає, як плата реагуватиме на команди користувача. У сценарію є лише одна властивість - "elements" (містить перелік команд)

text
{
    "elements" : [ {"cmd": string, ..}, {..}, ..]
}

Команди активуються у результаті взаємодії користувач з UI. Поки команда активна - її дії обробляються, інакше - ігноруються.

Структура команди:

  • cmd - назва команди.
  • type - тип команди
    • toggle - кожна активація команди вмикає/вимикає її стан
    • click - команда активна поки користувач утримує її значення відмінним від 0
    • none - команда не потребує активації. Вона активна завжди.
  • actions - перелік дій, що будуть виконуватись поки команда активна.
text
{
    "cmd": string,
    "type": "toggle/click/none",
    "actions": 
        [
            {
                "type": 
                "cmd": string,
            },
            {
                "type": "motor",
                "speed": string (source of speed value for full H bridge). When set - a+b ignored
                "a": string (source of A half bridge values),
                "b": string (source of B half bridge values),
                "weight": int (in grams)
            },
            {
                "type": "blink",
                "points": [
                    {"pin": "1", "offset":"0", "value":"0"},
                    {"pin": "1", "offset":"500", "value":"255"},
                    {"pin": "1", "offset":"1000", "value":"0"}
                ]
            }

Дії сценаріїв

Маячок

Дія перемикає виходи у заданій часовій точці.

  • type - blink
  • points - масив точок

Точка:

  • pin - номер виходу
  • offset - точка часу у мілісекундах. Відлік починається від старту дії
  • value - PWM значення виходу
text
{
    "type": "blink",
    "points": [
        {"pin": "1", "offset":"0", "value":"0"},
        {"pin": "1", "offset":"500", "value":"255"},
        {"pin": "1", "offset":"1000", "value":"0"}
    ]
}
Мотор

Дія використовується для керування мотором.

  • type - motor
  • speed - назва команди яка використовуються для швидкості мотора
  • weight - вага уявного маховика мотора. Використовується для імітації інерції
text
{
    "type":"motor",
    "speed":"motor_x",
    "weight": "80000"
}

Приклади сценаріїв

Керування гвинтовим літаком

ui.json

text
{
  "bg": "url('img/bg.jpg')",
  "elements": [
    {
      "type": "toggle",
      "x": 31,
      "y": 40.5,
      "w": 42,
      "h": 4,
      "text": "Max|Mid|Min|Off|Min|Mid|Max",
      "cmd": "motor_x",
      "values": "100|60|30|0|-30|-60|-100"
    },
    {
      "type": "slider",
      "x": 57.5,
      "y": 17.5,
      "w": 26.5,
      "h": 6,
      "cmd": "motor",
      "autocenter": "y"
    },
    {
      "type": "button",

scripts.json

text
{
  "elements": [
    {
      "cmd": "beacon",
      "type": "toggle",
      "actions": [
        {
          "type": "blink",
          "points": [
            {
              "pin": "1",
              "offset": "0",
              "value": "0"
            },
            {
              "pin": "1",
              "offset": "0",
              "value": "0"
            },
            {
              "pin": "1",
              "offset": "100",
              "value": "20"
            },

Підключення

Чи можна розрізати плату?

Плата достатньо мініатюрна і необхідно постаратись її так прилаштувати, щоб не довелось її розрізати. Проте, якщо є необхідність "запакувати" по максимуму, то плату можна розрізати на 3 окремі частини. Після розрізання, їх можна об'єднати провідниками, або використовувати плату без них. Кожна із 3-ох частин є завершеним блоком.

How to cut PCB Model's Heart in correct way

Підключення окремих блоків плати Model's Heart

Плата зарядки

Плата зарядки - може використовуватись як зарядний пристрій Li-Ion акумуляторів.

Charging chunk

Плата програматора

Плату програматора можна використовувати як окремий USB<->TTL перетворювач.

Alt text

Основна плата

Підключення акумулятора

Alt text

Підключення мотора

Alt text

Підключення кнопки вкл./викл.

Alt text

Підключення світлодіода до виходу #1

Alt text

Підключення світлодіода до шини живлення #2

При підключенні світлодіода до шини живлення необхідно обмежити струм з допомогою резистора. Типовий струм для світлодіодів - 2мА

Опір обмежувального резистора можна розрахувати за законом Ома

text
Закон Ома

  I = U/R 

Де:
  I - струм, що протікає через коло в Амперах
  U - напруга на кінцях кола у Вольтах
  R - опір кола у Омах

Знаходимо R

  R = U/I 

  U = 4.2V
  I = 2mA = 0.002A

  R = 4.2V / 0.002A 
  R = 2100 Ом => 2.1KOм

Alt text

Web API

Взаємодія web інтерфейсу та плати відбувається по WIF з допомогою HTTP запитів.

Плата Model's Heart дозволяє одночасне керування з кількох клієнтів. Для того, щоб надіслані команди відпрацьовувались платою - необхідна авторизація (GET api/EventSourceName). У відповідь ми отримаємо endpoint з допомогою якого можна підписатись на HTTP Events (GET /api/events), щоб отримувати інформацію від плати. Також, щоразу як користувач змінив стан поля відбувається пересилка цього стану у плату (POST api/post)

GET api/EventSourceName

Метод повертає Endpoint (адресу джерела Events) по якому транслюється інформація з плати на web-UI. Одним із параметрів є ID клієнта

GET /api/events

Встановлюється як EventSource для сторінки Web інтерфейсу Детальніше тут -> https://developer.mozilla.org/en-US/docs/Web/API/EventSource

POST api/post

Надсилаємо інформацію про поле на плату

text
{
  client:"random string id of client"
  format:[field1, field2, field, ... fieldN],
  values:['v1', 'v2', 'v3', .. 'vN']
}
  • client - ID клієнта
  • format - назви полів які наявні у інтерфейсі. Надсилається лише один раз. Всі інші рази ігнорується. Цього формату має притримуватись додаток при комунікації з приладом, і в такому ж форматі має відповідати плата. (це для того, щоб мінімізувати трафік і одночасно забезпечити підтримку стрих версій додатку у яких може бути інша конфігурація елементів керування)
  • values - значення полів у посортовані відповідно до format.

Алгоритм взаємодії

  1. Авторизація
  2. Налаштовуємо EventSource.
  3. POST api/post формат даних
  4. По Event source каналу отримуємо від плати масив значень і розставляємо їх по елементах керування у відповідності до обговореного формату
  5. Якщо користувач змінив якийсь параметр - надсилаємо платі пакет у обговореному наперед форматі. (Повертаємось до п4)
  6. Якщо зв'язок втрачено - запускаємо зворотній відлік на 3 секунди і пробуємо відновити зв'язок (Повертаємось до п1)

Parts

106
QtyValueFootprintReferences
1110kResistor_SMD:R_0603_1608MetricR4, R7, R8, R15, R16, R17, R18, R19, R22, R24, R28
9GNDTestPoint:TestPoint_Pad_D1.0mmTP7, TP8, TP18, TP19, TP20, TP21, TP22, TP42, TP43
70.1uFCapacitor_SMD:C_0603_1608MetricC3, C7, C8, C9, C11, C12, C15
710uFCapacitor_SMD:C_1206_3216MetricC1, C2, C4, C5, C6, C10, C13
6100kResistor_SMD:R_0603_1608MetricR11, R12, R13, R14, R21, R25
5PWRTestPoint:TestPoint_Pad_D1.0mmTP23, TP24, TP25, TP26, TP27
4+5V0TestPoint:TestPoint_Pad_D1.0mmTP9, TP10, TP28, TP29
4AO3401APackage_TO_SOT_SMD:SOT-23Q1, Q4, Q5, Q8
31kResistor_SMD:R_0603_1608MetricR1, R2, R10
2220kResistor_SMD:R_0603_1608MetricR20, R23
2470Resistor_SMD:R_0603_1608MetricR5, R6
25k1Resistor_SMD:R_0603_1608MetricR26, R27
2BAT +TestPoint:TestPoint_Pad_D1.0mmTP3, TP6
2BAT -TestPoint:TestPoint_Pad_D1.0mmTP4, TP5
2BC857BSPackage_TO_SOT_SMD:SOT-363_SC-70-6Q6, Q7
2BTNTestPoint:TestPoint_Pad_D1.0mmTP11, TP12
2D+TestPoint:TestPoint_Pad_D1.0mmTP40, TP41
2D-TestPoint:TestPoint_Pad_D1.0mmTP38, TP39
2IO 0TestPoint:TestPoint_Pad_D1.0mmTP36, TP37
2LEDLED_SMD:LED_0603_1608MetricD1, D2
2RSTTestPoint:TestPoint_Pad_D1.0mmTP34, TP35
2RXTestPoint:TestPoint_Pad_D1.0mmTP30, TP32
2TXTestPoint:TestPoint_Pad_D1.0mmTP31, TP33
2UMH3NPackage_TO_SOT_SMD:SOT-363_SC-70-6Q3, Q9
1100Resistor_SMD:R_0603_1608MetricR3
12.2uFCapacitor_SMD:C_0805_2012MetricC14
1AMS1117-3.3Package_TO_SOT_SMD:SOT-89-3U4
1BAS16TWPackage_TO_SOT_SMD:SOT-363_SC-70-6D3
1CH340CPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU3
1DRV8833PWPPackage_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm_ThermalViasU6
1DW01Package_TO_SOT_SMD:SOT-23-6U2
1ESP-12ERF_Module:ESP-12EU5
1FS8205Package_TO_SOT_SMD:SOT-23-6Q2
1MOT ATestPoint:TestPoint_Pad_D1.0mmTP1
1MOT BTestPoint:TestPoint_Pad_D1.0mmTP2
1NTCResistor_SMD:R_0603_1608MetricR9
1OUT 1TestPoint:TestPoint_Pad_D1.0mmTP17
1OUT 2TestPoint:TestPoint_Pad_D1.0mmTP16
1OUT 3TestPoint:TestPoint_Pad_D1.0mmTP15
1OUT 4TestPoint:TestPoint_Pad_D1.0mmTP14
1OUT 5TestPoint:TestPoint_Pad_D1.0mmTP13
1SW_PushButton_Switch_SMD:SW_SPST_EVQP7CSW1
1TP4056Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mmU1
1USB_C_PlugConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalP1

More from KushlaVR/models-heart

1
  • 4 layers24 × 39.4 mmModels heart, the printed circuit board in 3D

    Models heart

    KushlaVR/models-heart

    Можливості: Керування через WIFI з телефона або ПК 5 незалежних каналів (світлодіоди/сервомотори) 1 Н-міст для підключення мотора (піковий струм до 3А) Вмонтована BMS 1S та контроллер заряду Li-Ion акумулятора з…

    99 parts7GPL-3.0

Similar boards

  • 2 layers67 × 96 mmTo the moon, the printed circuit board in 3D

    To the moon

    Krakert/To-the-moon

    63 parts
  • 2 layers54.9 × 95 mmBoard v5, the printed circuit board in 3D

    Board v5

    brev-dev/another_esp8266_sensor_board

    PCB layout and instructions for a multi-purpose esp8266 sensor device, with optional LORA connectivity.

    86 parts5GPL-3.0
  • 4 layers119 × 119.3 mmControlUnit, the printed circuit board in 3D

    ControlUnit

    Dharanitrainee/16bit-ALU

    This project implements a 16-bit Arithmetic Logic Unit (ALU) using TTL (74 series) digital integrated circuits. The control unit is built using an ESP32 microcontroller, enhancing functionality with a user-friendly…

    51 partsMIT
  • 2 layers100 × 100 mmVga, the printed circuit board in 3D

    Vga

    imihajlow/ccpu

    A 8-bit computer made of 74xx series logic gates and memory ICs.

    84 parts145
  • 2 layers80 × 50 mmIguana V1, the printed circuit board in 3D

    Iguana V1

    iowlabs/Iguana

    Repositorio para proyecto Iguana IOWLabs (Cultivo)

    120 parts1
  • 2 layers78.5 × 20.6 mmKamiTrack, the printed circuit board in 3D

    KamiTrack

    kitspace-test-repos/kicad6-file-collection

    65 partsMIT

Questions

How big is the Models heart rev1.1 PCB?

It measures 29.9 × 32 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Models heart rev1.1 use?

106 parts, built around the CH340C, ESP-12E, DRV8833PWP and AMS1117-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Models heart rev1.1 KiCad files?

From the KushlaVR/models-heart repository on GitHub, at the commit this page was made from: the board is PCB/models-heart-rev1.1.kicad_pcb and its schematic PCB/models-heart.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Models heart rev1.1 design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).