merge panels
This commit is contained in:
@@ -0,0 +1,264 @@
|
|||||||
|
# Toy PCB Brain Transplant Guide
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Instead of building a whole new board, desolder the original MCU from the
|
||||||
|
toy's PCB and replace it with a breakout connector wired to the XIAO
|
||||||
|
nRF52840. The original PCB keeps doing everything it's good at (power,
|
||||||
|
buttons, motor, speaker routing) — you just swap the brain.
|
||||||
|
|
||||||
|
## What You Need
|
||||||
|
|
||||||
|
| Item | ~Cost | Notes |
|
||||||
|
|------|-------|-------|
|
||||||
|
| SOP-16 solder-down DIP adapter | $2 | Logical Systems PA-SOF-D420-16, or generic SOIC-16→DIP breakout |
|
||||||
|
| Seeed XIAO nRF52840 | $10 | The new brain |
|
||||||
|
| IS25LP128F (SPI flash) | $2 | Audio storage (solder to a small perfboard with the XIAO) |
|
||||||
|
| 16-pin ribbon cable or Dupont jumpers | $1 | Connect adapter to XIAO |
|
||||||
|
| Solder, flux, solder wick | — | For desoldering and rework |
|
||||||
|
| Multimeter | — | For reverse-engineering the pinout |
|
||||||
|
|
||||||
|
**Total added cost: ~$15** (and you reuse 90% of the original toy)
|
||||||
|
|
||||||
|
|
||||||
|
## Step 1: Document the Original Board
|
||||||
|
|
||||||
|
Before desoldering anything:
|
||||||
|
|
||||||
|
1. **Photograph both sides** of the PCB in good light
|
||||||
|
2. **Identify the MCU** — look for markings like TRSF1602A, chip-on-board
|
||||||
|
(black blob), or other SOP-8/SOP-16 packages
|
||||||
|
3. **Note the pin 1 indicator** — dot, notch, or beveled corner
|
||||||
|
4. **Count pins** — this guide assumes SOP-16, but adapt for SOP-8
|
||||||
|
5. **Trace visible connections** by eye:
|
||||||
|
- Which pins have fat traces? → probably power (VCC/GND)
|
||||||
|
- Which pins connect to the speaker? → audio output
|
||||||
|
- Which pins go to the motor area? → motor drive
|
||||||
|
- Which pins go to buttons? → GPIO inputs
|
||||||
|
|
||||||
|
|
||||||
|
## Step 2: Desolder the Original MCU
|
||||||
|
|
||||||
|
**Hot air method (recommended):**
|
||||||
|
1. Apply flux to all pins
|
||||||
|
2. Set hot air to ~350°C, low airflow
|
||||||
|
3. Heat evenly around the chip until solder reflows
|
||||||
|
4. Lift chip with tweezers
|
||||||
|
5. Clean pads with wick and flux
|
||||||
|
|
||||||
|
**Soldering iron method:**
|
||||||
|
1. Apply flux generously
|
||||||
|
2. Add fresh leaded solder to all pins (lower melting point helps)
|
||||||
|
3. Drag iron back and forth across pins on each side
|
||||||
|
4. Use solder wick to remove excess
|
||||||
|
5. Gently pry chip up while heating one side, then the other
|
||||||
|
6. Clean pads with wick
|
||||||
|
|
||||||
|
**If it's a chip-on-board (black blob):**
|
||||||
|
Unfortunately, these can't be desoldered. You'll need to cut the traces
|
||||||
|
instead and jumper to the XIAO. Identify the traces leading to the blob
|
||||||
|
and cut them with an X-acto knife, then solder wires directly to the
|
||||||
|
button/speaker/motor pads on the board.
|
||||||
|
|
||||||
|
|
||||||
|
## Step 3: Solder the SOP-16 Breakout Adapter
|
||||||
|
|
||||||
|
1. Place the SOP-16 → DIP adapter on the now-empty pads
|
||||||
|
2. Align pin 1 with the original pin 1 marking
|
||||||
|
3. Tack-solder two corner pins
|
||||||
|
4. Check alignment under magnification
|
||||||
|
5. Solder remaining pins
|
||||||
|
6. Now you have 16 through-hole pins you can plug jumper wires into
|
||||||
|
|
||||||
|
|
||||||
|
## Step 4: Reverse-Engineer the Pinout
|
||||||
|
|
||||||
|
This is the detective work. You need to figure out what the original
|
||||||
|
MCU was connected to on each pin.
|
||||||
|
|
||||||
|
### 4a: Power pins (multimeter, board OFF)
|
||||||
|
|
||||||
|
Set multimeter to continuity/beep mode.
|
||||||
|
|
||||||
|
1. Touch one probe to the battery negative terminal (GND)
|
||||||
|
2. Touch the other probe to each of the 16 breakout pins
|
||||||
|
3. **Mark any pins that beep as GND**
|
||||||
|
4. Now touch one probe to battery positive (after the power switch)
|
||||||
|
5. Touch other probe to each remaining pin
|
||||||
|
6. **Mark any pins that beep as VCC**
|
||||||
|
|
||||||
|
Typical SOP-16 MCUs have 1-2 GND pins and 1-2 VCC pins.
|
||||||
|
|
||||||
|
|
||||||
|
### 4b: Speaker pins (visual trace + multimeter)
|
||||||
|
|
||||||
|
Follow the traces from the speaker solder pads back to the breakout.
|
||||||
|
Often the speaker connects through a small capacitor or resistor, then
|
||||||
|
to one or two MCU pins.
|
||||||
|
|
||||||
|
- **One speaker pin** = single-ended PWM audio (most common)
|
||||||
|
- **Two speaker pins** = bridge-tied-load (BTL) direct drive (no amp chip)
|
||||||
|
|
||||||
|
|
||||||
|
### 4c: Motor pin (visual trace)
|
||||||
|
|
||||||
|
Follow the motor wires. In cheap toys, the motor often connects to a
|
||||||
|
single transistor (TO-92 or SOT-23 package near the motor area). The
|
||||||
|
transistor's base connects (through a resistor) to an MCU pin.
|
||||||
|
|
||||||
|
If there's no transistor and the motor connects directly to an MCU pin
|
||||||
|
(rare but possible on very cheap toys), you'll need to add a MOSFET —
|
||||||
|
MCU pins can't drive motors directly.
|
||||||
|
|
||||||
|
|
||||||
|
### 4d: Button pins (multimeter, board OFF)
|
||||||
|
|
||||||
|
For each physical button on the toy:
|
||||||
|
1. Press the button while testing continuity between its pads
|
||||||
|
2. Trace one pad to GND (common) and the other to an MCU pin
|
||||||
|
3. Label that breakout pin as a button input
|
||||||
|
|
||||||
|
Most cheap toys wire buttons between the MCU pin and GND, relying on
|
||||||
|
the MCU's internal pull-up resistor — same as our design.
|
||||||
|
|
||||||
|
|
||||||
|
### 4e: Automated pin discovery (firmware)
|
||||||
|
|
||||||
|
Upload the pin_discovery sketch (included below) to the XIAO. Connect
|
||||||
|
each breakout pin one at a time to a XIAO GPIO and the sketch will
|
||||||
|
tell you what it sees:
|
||||||
|
- High/low/floating state
|
||||||
|
- Whether pressing a button changes it
|
||||||
|
- Whether it shows PWM activity when the toy was running
|
||||||
|
- Approximate voltage level
|
||||||
|
|
||||||
|
|
||||||
|
## Step 5: Create the Pin Map
|
||||||
|
|
||||||
|
Fill out a table like this for your specific toy:
|
||||||
|
|
||||||
|
| SOP-16 Pin | Connects To | XIAO Pin | Notes |
|
||||||
|
|------------|-------------|----------|-------|
|
||||||
|
| 1 | VCC | 3V3 | Power supply |
|
||||||
|
| 2 | GND | GND | Ground |
|
||||||
|
| 3 | Button 1 | D0 | Play/Pause (active LOW) |
|
||||||
|
| 4 | Button 2 | D1 | Next track |
|
||||||
|
| 5 | Button 3 | D2 | Motor on/off |
|
||||||
|
| 6 | Button 4 | D3 | Volume/speed |
|
||||||
|
| 7 | Speaker + | D10 | PWM audio output |
|
||||||
|
| 8 | Speaker - | GND | Or second PWM for BTL |
|
||||||
|
| 9 | Motor ctrl | D6 | Through transistor on board |
|
||||||
|
| 10 | NC | — | Not connected |
|
||||||
|
| 11-16 | ... | ... | (varies by toy) |
|
||||||
|
|
||||||
|
|
||||||
|
## Step 6: Wire It Up
|
||||||
|
|
||||||
|
1. Solder header pins to the XIAO if not already done
|
||||||
|
2. Solder the IS25LP128F flash chip to a small piece of perfboard
|
||||||
|
next to the XIAO (VCC, GND, and 4 SPI wires)
|
||||||
|
3. Run jumper wires from each SOP-16 breakout pin to the
|
||||||
|
corresponding XIAO pin per your pin map
|
||||||
|
4. Connect VCC breakout pin → XIAO 3V3 (to power the XIAO from toy batteries)
|
||||||
|
5. Connect GND breakout pin → XIAO GND
|
||||||
|
|
||||||
|
**IMPORTANT voltage check:** Before connecting power, measure the toy's
|
||||||
|
VCC with batteries installed. If it's 2×AA (3V) or 3×AA (4.5V), you
|
||||||
|
can connect directly to the XIAO's 3V3 pin (which accepts 1.7-3.6V on
|
||||||
|
the nRF52840). If the toy uses more than 3 batteries (>5V), you MUST
|
||||||
|
use the XIAO's 5V pin or add a regulator.
|
||||||
|
|
||||||
|
For 2×AA: Connect through the TPS61220 boost to get stable 3.3V,
|
||||||
|
then feed that to XIAO 3V3. Or if you're fine with the limited voltage
|
||||||
|
range, connect the battery VCC directly to XIAO 3V3 — the nRF52840
|
||||||
|
runs down to 1.7V, but the IS25LP128F needs 2.3V minimum, so you'll
|
||||||
|
lose the bottom of the battery capacity.
|
||||||
|
|
||||||
|
|
||||||
|
## Step 7: Update the Firmware Pin Mapping
|
||||||
|
|
||||||
|
In baby_mobile_v2.ino, update the pin definitions to match your wiring:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// Adjust these to match YOUR toy's pin map
|
||||||
|
#define PIN_AUDIO_PWM D10 // connected to speaker trace
|
||||||
|
#define PIN_AMP_SD -1 // set to -1 if toy has no separate amp
|
||||||
|
#define PIN_MOTOR_PWM D6 // connected to motor transistor base
|
||||||
|
#define PIN_BTN1 D0 // play/pause button
|
||||||
|
#define PIN_BTN2 D1 // next
|
||||||
|
#define PIN_BTN3 D2 // motor toggle
|
||||||
|
#define PIN_BTN4 D3 // fourth button
|
||||||
|
// ... set unused buttons to -1
|
||||||
|
```
|
||||||
|
|
||||||
|
If the toy's original circuit drives the speaker directly from the MCU
|
||||||
|
(no amp chip), the XIAO's PWM output through the RC filter should work
|
||||||
|
similarly. The original PWM was likely at a higher carrier frequency
|
||||||
|
(the TRSF1602A runs at up to 13MHz), but 8kHz audio content will
|
||||||
|
sound the same.
|
||||||
|
|
||||||
|
|
||||||
|
## Common Toy PCB Patterns
|
||||||
|
|
||||||
|
### Pattern A: Direct-drive speaker (most common in cheap toys)
|
||||||
|
```
|
||||||
|
MCU pin → small cap (100nF-1µF) → Speaker+
|
||||||
|
Speaker- → GND
|
||||||
|
```
|
||||||
|
The MCU generates PWM, the cap blocks DC. No amplifier. Maximum volume
|
||||||
|
is limited by the MCU's output current (~20mA). This works fine with
|
||||||
|
the XIAO — just set the PWM pin and skip the PAM8302A entirely.
|
||||||
|
|
||||||
|
### Pattern B: Transistor amplifier
|
||||||
|
```
|
||||||
|
MCU pin → resistor (1K-10K) → transistor base
|
||||||
|
collector → Speaker+
|
||||||
|
emitter → GND
|
||||||
|
Speaker- → VCC
|
||||||
|
```
|
||||||
|
Again, the XIAO's PWM drives this directly. The transistor provides
|
||||||
|
current amplification.
|
||||||
|
|
||||||
|
### Pattern C: Dedicated amp IC (higher-end toys)
|
||||||
|
```
|
||||||
|
MCU pin → coupling cap → amp IC input
|
||||||
|
amp IC output → Speaker ±
|
||||||
|
```
|
||||||
|
Here you're feeding the amp's input from the XIAO PWM through the
|
||||||
|
existing coupling cap. Should work as-is. If there's a shutdown pin
|
||||||
|
on the amp, trace it back to the MCU and control it from the XIAO.
|
||||||
|
|
||||||
|
### Motor drive patterns:
|
||||||
|
```
|
||||||
|
Common: MCU pin → resistor → NPN base → motor → VCC
|
||||||
|
emitter → GND
|
||||||
|
diode across motor
|
||||||
|
|
||||||
|
Simple: MCU pin → motor → VCC (tiny motors only, <20mA)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**No sound:** Check speaker connections. Measure voltage on the audio pin
|
||||||
|
with a multimeter while playing — you should see ~1.5V average. If 0V,
|
||||||
|
wrong pin. If VCC, the pin is driving high but not PWMing.
|
||||||
|
|
||||||
|
**Distorted sound:** The RC filter values may need adjustment. Try
|
||||||
|
increasing R2 or C7 to lower the cutoff frequency. Also check that
|
||||||
|
analogWriteResolution(8) is set in setup().
|
||||||
|
|
||||||
|
**Motor doesn't spin:** The XIAO pin may not source enough current to
|
||||||
|
drive the transistor. Check if the base resistor is reasonable (1K-10K).
|
||||||
|
If the original design was a darlington or MOSFET, the XIAO should
|
||||||
|
drive it fine.
|
||||||
|
|
||||||
|
**Buttons don't work:** Verify the button wires go to GND when pressed.
|
||||||
|
Some toys use a resistor ladder (all buttons on one ADC pin with
|
||||||
|
different resistor values) — this requires reading analogRead() instead
|
||||||
|
of digitalRead(). The pin_discovery sketch will detect this.
|
||||||
|
|
||||||
|
**Board doesn't power up:** The original MCU may have been pulling
|
||||||
|
certain pins to specific states that other components depend on. Check
|
||||||
|
if any traces from the MCU footprint go to enable pins on regulators
|
||||||
|
or other ICs on the board.
|
||||||
@@ -1,229 +0,0 @@
|
|||||||
# Baby Mobile Audio Board v2 — Design Document
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
Drop-in replacement for baby crib mobile electronics. Custom audio from
|
|
||||||
SPI flash, DC motor control, 8 buttons, and long runtime on 2×AA batteries.
|
|
||||||
No programmer needed — upload audio via USB drag-and-drop or Bluetooth.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
2×AA (1.8-3.2V) → SW9 → D1(BAT54S) → TPS61220 boost → 3.3V ──┐
|
|
||||||
├── MDBT50Q
|
|
||||||
USB-C VBUS (5V) → D3(BAT54S) → MCP1700 LDO → 3.3V ────────────┘ (nRF52840)
|
|
||||||
│
|
|
||||||
┌────────────── SPI ── IS25LP128F (16MB flash, 2.3-3.6V) │
|
|
||||||
│ ┌───────── PWM ── R+C LPF ── PAM8302A ── 8Ω speaker │
|
|
||||||
│ │ ┌───── GPIO ── AO3400A MOSFET ── DC motor │
|
|
||||||
│ │ │ ┌─── GPIO ── 8× buttons (internal pull-ups) │
|
|
||||||
│ │ │ │ ┌─ USB ── USB-C D+/D- (mass storage) │
|
|
||||||
│ │ │ │ │ BLE ── phone (wireless upload) │
|
|
||||||
└────┴───┴─┴─┴──────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
## Power Design — Diode OR-ing (Safe for ALL Battery Types)
|
|
||||||
|
|
||||||
```
|
|
||||||
BAT54S TPS61220
|
|
||||||
2×AA ──SW9──┤►├──────┐ ┌─ VIN VOUT ─── 3.3V rail
|
|
||||||
├── node ┤
|
|
||||||
USB VBUS ───┤►├── LDO ┘ └─ EN GND ─── GND
|
|
||||||
BAT54S MCP1700 L ─── L1(4.7µH)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Why this is safe:** The Schottky diodes only pass current in one direction.
|
|
||||||
When USB provides 3.3V via the LDO, the boost converter stops switching and
|
|
||||||
the battery diode is reverse-biased. Zero current flows into the batteries
|
|
||||||
regardless of chemistry (alkaline, NiMH, lithium).
|
|
||||||
|
|
||||||
**Diode drop:** BAT54S drops ~0.25V. TPS61220 accepts inputs down to 0.7V.
|
|
||||||
Depleted 2×AA = 1.8V → boost sees 1.55V → still operational.
|
|
||||||
|
|
||||||
|
|
||||||
## Pin Mapping — MDBT50Q (nRF52840)
|
|
||||||
|
|
||||||
| Module Pin | nRF52840 Port | Function | Connected To |
|
|
||||||
|------------|---------------|--------------|-------------------------------|
|
|
||||||
| 4 | P0.02/AIN0 | Button 1 | SW1 → GND (active LOW) |
|
|
||||||
| 5 | P0.03/AIN1 | Button 2 | SW2 → GND |
|
|
||||||
| 6 | P0.04/AIN2 | Button 3 | SW3 → GND |
|
|
||||||
| 7 | P0.05/AIN3 | Button 4 | SW4 → GND |
|
|
||||||
| 8 | P0.06 | Button 5 | SW5 → GND |
|
|
||||||
| 9 | P0.07 | Button 6 | SW6 → GND |
|
|
||||||
| 10 | P0.08 | Button 7 | SW7 → GND |
|
|
||||||
| 11 | P0.09 | Button 8 | SW8 → GND |
|
|
||||||
| 12 | P0.10 | Motor PWM | R4(100Ω) → Q1 gate |
|
|
||||||
| 13 | P0.11 | Audio PWM | R2(4.7K) → C7(10nF) → C6 → U3|
|
|
||||||
| 14 | P0.12 | Flash ~CS | U2 pin 1 |
|
|
||||||
| 15 | P0.13 | SPI MOSI | U2 pin 5 |
|
|
||||||
| 16 | P0.14 | SPI MISO | U2 pin 2 |
|
|
||||||
| 17 | P0.15 | SPI SCK | U2 pin 6 |
|
|
||||||
| 18 | P0.16 | LED output | R6(1K) → D2 → GND |
|
|
||||||
| 19 | P0.17 | Amp ~SD | U3 pin 1, R3(100K) → GND |
|
|
||||||
| 20 | P0.18/~RESET | Reset | (internal pull-up) |
|
|
||||||
| 21 | P0.19 | TXD (serial) | J5 pin 2 |
|
|
||||||
| 22 | P0.20 | RXD (serial) | J5 pin 3 |
|
|
||||||
| 28 | D- | USB Data - | J6 D- |
|
|
||||||
| 29 | D+ | USB Data + | J6 D+ |
|
|
||||||
| 33 | SWDIO | Debug | J4 pin 2 (SWD header) |
|
|
||||||
| 34 | SWDCLK | Debug | J4 pin 3 (SWD header) |
|
|
||||||
| 32 | VCC | Power | 3V3 rail |
|
|
||||||
| 1 | GND | Ground | GND rail |
|
|
||||||
|
|
||||||
|
|
||||||
## SPI Flash: U2 — IS25LP128F (SOIC-8)
|
|
||||||
|
|
||||||
| Pin | Name | Connected To |
|
|
||||||
|-----|-----------|-------------------|
|
|
||||||
| 1 | ~CS | P0.12 (FLASH_CS) |
|
|
||||||
| 2 | SO (MISO) | P0.14 (SPI_MISO) |
|
|
||||||
| 3 | ~WP | 3V3 (tie high) |
|
|
||||||
| 4 | GND | GND |
|
|
||||||
| 5 | SI (MOSI) | P0.13 (SPI_MOSI) |
|
|
||||||
| 6 | SCLK | P0.15 (SPI_SCK) |
|
|
||||||
| 7 | ~HOLD | 3V3 (tie high) |
|
|
||||||
| 8 | VCC | 3V3 |
|
|
||||||
|
|
||||||
**Operating voltage: 2.3V–3.6V** — works across entire boost output range.
|
|
||||||
|
|
||||||
|
|
||||||
## Audio Signal Path
|
|
||||||
|
|
||||||
```
|
|
||||||
P0.11 (PWM) → R2(4.7K) → node → C6(1µF coupling) → PAM8302A A+
|
|
||||||
│
|
|
||||||
C7(10nF) → GND
|
|
||||||
|
|
||||||
RC LPF cutoff: 1/(2π × 4700 × 10e-9) ≈ 3.4 kHz
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## USB-C Wiring
|
|
||||||
|
|
||||||
```
|
|
||||||
USB-C Pin → Board
|
|
||||||
────────────────────
|
|
||||||
VBUS (5V) → D3 anode → MCP1700 VIN
|
|
||||||
GND → GND
|
|
||||||
D+ → nRF52840 D+ (pin 29)
|
|
||||||
D- → nRF52840 D- (pin 28)
|
|
||||||
CC1 → R7(5.1K) → GND
|
|
||||||
CC2 → R8(5.1K) → GND
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Bill of Materials
|
|
||||||
|
|
||||||
| Ref | Part | Package | Qty | ~Cost |
|
|
||||||
|--------|----------------------|---------------|-----|--------|
|
|
||||||
| U1 | MDBT50Q-P1MV2 | Module | 1 | $6.00 |
|
|
||||||
| U2 | IS25LP128F-JBLE | SOIC-8 | 1 | $2.00 |
|
|
||||||
| U3 | PAM8302AASCR | SOIC-8 | 1 | $0.80 |
|
|
||||||
| U4 | TPS61220DCKR | SC-70-5 | 1 | $0.80 |
|
|
||||||
| U5 | MCP1700-3302E/TT | SOT-23 | 1 | $0.20 |
|
|
||||||
| Q1 | AO3400A | SOT-23 | 1 | $0.15 |
|
|
||||||
| D1 | BAT54S | SOT-23 | 1 | $0.05 |
|
|
||||||
| D3 | BAT54S | SOT-23 | 1 | $0.05 |
|
|
||||||
| D4 | SS14 | SMA | 1 | $0.10 |
|
|
||||||
| D2 | LED green | 0805 | 1 | $0.05 |
|
|
||||||
| L1 | 4.7µH inductor | 0805 | 1 | $0.15 |
|
|
||||||
| R2 | 4.7KΩ | 0805 | 1 | $0.01 |
|
|
||||||
| R3 | 100KΩ | 0805 | 1 | $0.01 |
|
|
||||||
| R4 | 100Ω | 0805 | 1 | $0.01 |
|
|
||||||
| R5 | 100KΩ | 0805 | 1 | $0.01 |
|
|
||||||
| R6 | 1KΩ | 0805 | 1 | $0.01 |
|
|
||||||
| R7,R8 | 5.1KΩ | 0805 | 2 | $0.02 |
|
|
||||||
| C1 | 100µF/10V | Radial 5mm | 1 | $0.15 |
|
|
||||||
| C2 | 100nF | 0805 | 1 | $0.01 |
|
|
||||||
| C3 | 10µF | 0805 | 1 | $0.05 |
|
|
||||||
| C5 | 100nF | 0805 | 1 | $0.01 |
|
|
||||||
| C6 | 1µF | 0805 | 1 | $0.02 |
|
|
||||||
| C7 | 10nF | 0805 | 1 | $0.01 |
|
|
||||||
| C8 | 10µF | 0805 | 1 | $0.05 |
|
|
||||||
| C9,C10 | 10µF | 0805 | 2 | $0.10 |
|
|
||||||
| C11,C12| 1µF | 0805 | 2 | $0.04 |
|
|
||||||
| SW1-8 | Tactile switch | 6mm SMD | 8 | $0.80 |
|
|
||||||
| SW9 | SPDT slide | THT | 1 | $0.20 |
|
|
||||||
| J1 | JST-PH 2-pin | THT | 1 | $0.15 |
|
|
||||||
| J2 | JST-PH 2-pin | THT | 1 | $0.15 |
|
|
||||||
| J3 | JST-PH 2-pin | THT | 1 | $0.15 |
|
|
||||||
| J4 | 1×4 pin header | 2.54mm | 1 | $0.10 |
|
|
||||||
| J5 | 1×3 pin header | 2.54mm | 1 | $0.05 |
|
|
||||||
| J6 | USB-C receptacle | SMD | 1 | $0.30 |
|
|
||||||
| | **TOTAL** | | |**~$12**|
|
|
||||||
|
|
||||||
|
|
||||||
## Power Analysis
|
|
||||||
|
|
||||||
| State | MCU | Flash | Amp | Motor | Boost η | Battery mA |
|
|
||||||
|--------------------|--------|--------|--------|--------|---------|------------|
|
|
||||||
| Audio + motor | 4 mA | 8 mA | 10 mA | 80 mA | 90% | ~113 mA |
|
|
||||||
| Audio only | 4 mA | 8 mA | 10 mA | 0 | 90% | ~24 mA |
|
|
||||||
| BLE idle | 0.5 mA | 0.001 | 0.001 | 0 | 85% | ~0.7 mA |
|
|
||||||
| Deep sleep | 0.002 | 0.001 | 0.001 | 0 | — | ~0.01 mA |
|
|
||||||
|
|
||||||
**Estimated runtimes on 2×AA alkaline (2500 mAh usable with boost):**
|
|
||||||
|
|
||||||
| Mode | Runtime |
|
|
||||||
|------------------|--------------|
|
|
||||||
| Audio + Motor | ~22 hours |
|
|
||||||
| Audio only | ~104 hours |
|
|
||||||
| BLE standby | ~149 days |
|
|
||||||
| Deep sleep | ~28 years |
|
|
||||||
| 30 min/day use | **~44 days** |
|
|
||||||
|
|
||||||
|
|
||||||
## Module Options (Soldering Difficulty)
|
|
||||||
|
|
||||||
The schematic is designed around the MDBT50Q module, but the firmware
|
|
||||||
works on any nRF52840 board. Here are your options from easiest to hardest:
|
|
||||||
|
|
||||||
| Module | ~Cost | USB-C | Bootloader | Soldering |
|
|
||||||
|-----------------------------|-------|-------|------------|------------------|
|
|
||||||
| **Seeed XIAO nRF52840** | $10 | Yes | UF2 preloaded | **Through-hole headers** — solder like any DIP. Has castellated pads too. |
|
|
||||||
| **Adafruit Feather nRF52840** | $25 | Yes | UF2 preloaded | Through-hole headers |
|
|
||||||
| **SparkFun Pro nRF52840** | $20 | Yes | UF2 preloaded | Through-hole headers |
|
|
||||||
| **Ebyte E73-2G4M08S1C** | $3 | No | None | Castellated edge pads — hand-solderable with regular iron |
|
|
||||||
| **MDBT50Q-P1MV2 (Raytac)** | $6 | No | None | SMD pads — needs reflow or hot air |
|
|
||||||
|
|
||||||
**Recommended for beginners: Seeed XIAO nRF52840.** It plugs into standard
|
|
||||||
2.54mm headers like an Arduino Nano. USB-C and UF2 bootloader are built in,
|
|
||||||
so you never need a programmer. Just drag-and-drop firmware and audio files.
|
|
||||||
|
|
||||||
**If using a XIAO or Feather:** you can skip the TPS61220 boost converter,
|
|
||||||
MCP1700 LDO, USB-C connector, and CC resistors from the BOM. The dev board
|
|
||||||
handles all of that. Feed the boost converter's 3.3V output to the board's
|
|
||||||
3V3 pin. Total BOM drops to ~$15 including the XIAO.
|
|
||||||
|
|
||||||
**If using MDBT50Q or E73:** you need the full schematic as designed. The
|
|
||||||
E73 is the budget option — castellated pads are solderable with flux, a
|
|
||||||
fine tip, and patience. Pre-tin both the pads and the board footprint,
|
|
||||||
then tack one corner and reflow the rest.
|
|
||||||
|
|
||||||
|
|
||||||
## User Experience
|
|
||||||
|
|
||||||
### Upload Audio (USB)
|
|
||||||
1. Plug USB-C cable into board
|
|
||||||
2. Board appears as USB mass storage drive
|
|
||||||
3. Drag .wav or .mp3 files onto drive
|
|
||||||
4. Eject and unplug — music ready to play
|
|
||||||
|
|
||||||
### Upload Audio (Bluetooth)
|
|
||||||
1. Open Web Bluetooth page on phone (no app install)
|
|
||||||
2. Connect to "BabyMobile" device
|
|
||||||
3. Select audio files → transfer
|
|
||||||
4. ~15 min for 30 minutes of audio at BLE speeds
|
|
||||||
|
|
||||||
### Update Firmware
|
|
||||||
1. Double-tap reset button (or hold BTN1+BTN2 on power-on)
|
|
||||||
2. Board appears as UF2 drive
|
|
||||||
3. Drag .uf2 firmware file onto drive
|
|
||||||
4. Board reboots with new firmware
|
|
||||||
|
|
||||||
### No-Programmer Setup
|
|
||||||
The MDBT50Q ships with the nRF52840 bootloader ROM. Flash the Adafruit
|
|
||||||
nRF52 UF2 bootloader once via SWD (J4 header) using any $3 CMSIS-DAP
|
|
||||||
probe, J-Link, or even a Raspberry Pi. After that, all future updates
|
|
||||||
are drag-and-drop over USB. The SWD header is only needed once.
|
|
||||||
+112
@@ -0,0 +1,112 @@
|
|||||||
|
# Ordering & Assembly Guide
|
||||||
|
|
||||||
|
## JLCPCB Order Settings
|
||||||
|
|
||||||
|
Upload `baby-mobile-panel.kicad_pcb` gerbers with these options:
|
||||||
|
|
||||||
|
| Setting | Value |
|
||||||
|
|---|---|
|
||||||
|
| Layers | 2 |
|
||||||
|
| PCB Thickness | 1.6mm (carrier) / 0.8mm works too |
|
||||||
|
| Surface Finish | LeadFree HASL (cheapest) or ENIG |
|
||||||
|
| **Castellated Holes** | **Yes** (required for adapters) |
|
||||||
|
| **V-Score** | **Yes** (break between carrier and adapters) |
|
||||||
|
| Quantity | 5 (minimum) |
|
||||||
|
| **Estimated Cost** | **~$8 for 5 panels** |
|
||||||
|
|
||||||
|
If ordering JLC assembly (SMT), upload `carrier_bom_jlc.csv`.
|
||||||
|
Otherwise, hand-solder the carrier components yourself — everything
|
||||||
|
is 0805 or larger except the TPS61220 (SC-70-5, fine-pitch but doable
|
||||||
|
with flux and a fine tip).
|
||||||
|
|
||||||
|
|
||||||
|
## Carrier Board BOM
|
||||||
|
|
||||||
|
| Ref | Part | Package | LCSC | ~Cost | Notes |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| U1 | TPS61220DCKR | SC-70-5 | C83951 | $0.80 | **Pin 1 dot on silk** |
|
||||||
|
| U2 | IS25LP128F-JBLE | SOIC-8 | C194872 | $1.80 | **Pin 1 dot on silk** |
|
||||||
|
| L1 | 4.7µH inductor | 0805 | C408336 | $0.15 | |
|
||||||
|
| C1 | 10µF ceramic | 0805 | C15850 | $0.05 | Boost input |
|
||||||
|
| C2 | 10µF ceramic | 0805 | C15850 | $0.05 | Boost output |
|
||||||
|
| C3 | 100nF ceramic | 0805 | C49678 | $0.01 | Flash decoupling |
|
||||||
|
| C4 | 100nF ceramic | 0805 | C49678 | $0.01 | (optional XIAO decoupling) |
|
||||||
|
| C5 | 10nF ceramic | 0805 | C1710 | $0.01 | Audio LPF |
|
||||||
|
| R1 | 4.7KΩ | 0805 | C17673 | $0.01 | Audio LPF |
|
||||||
|
| R2 | 10KΩ | 0805 | C17414 | $0.01 | Flash CS pullup |
|
||||||
|
| J1 | JST SH 10-pin SMD | 1.0mm | C160404 | $0.30 | Right-angle |
|
||||||
|
| J2,J3 | Female header 1×7 | 2.54mm | C124378 | $0.20 | XIAO socket (×2) |
|
||||||
|
| — | Seeed XIAO nRF52840 | module | — | $9.90 | From Seeed/Amazon |
|
||||||
|
| | **Carrier subtotal** | | | **~$13.30** | |
|
||||||
|
|
||||||
|
### Not on PCB (buy separately)
|
||||||
|
|
||||||
|
| Item | Source | ~Cost |
|
||||||
|
|---|---|---|
|
||||||
|
| JST SH 10-pin cable (both ends female) | Amazon/AliExpress | $1.50 |
|
||||||
|
| 30AWG wire (for adapter-to-JST) | Amazon | $5/spool |
|
||||||
|
| 2×AA battery holder | Reuse from toy | $0 |
|
||||||
|
|
||||||
|
|
||||||
|
## Breakaway Adapter BOM
|
||||||
|
|
||||||
|
The adapters are **passive PCBs** — no components except one JST SH
|
||||||
|
connector each. Buy the connector that matches your adapter:
|
||||||
|
|
||||||
|
| Adapter | JST SH Pins | LCSC | ~Cost |
|
||||||
|
|---|---|---|---|
|
||||||
|
| SOP-8 | 8-pin | C160402 | $0.25 |
|
||||||
|
| SOP-16 narrow | 10-pin | C160404 | $0.30 |
|
||||||
|
| SOP-16 wide | 10-pin | C160404 | $0.30 |
|
||||||
|
|
||||||
|
You only need one adapter per toy — snap off the right one.
|
||||||
|
|
||||||
|
|
||||||
|
## Assembly Order
|
||||||
|
|
||||||
|
### 1. Carrier board (do this first, test before connecting to toy)
|
||||||
|
|
||||||
|
1. **Solder U1 (TPS61220)** — align pin 1 dot. Tin one pad, place
|
||||||
|
chip, reflow that pad, then solder remaining 4 pins.
|
||||||
|
2. **Solder L1, C1, C2** — boost converter circuit. Apply 2×AA
|
||||||
|
battery voltage to VBAT/GND test points. Measure 3V3 output —
|
||||||
|
should read 3.30V ±0.1V.
|
||||||
|
3. **Solder U2 (IS25LP128F)** — align pin 1 dot. Same technique as U1.
|
||||||
|
4. **Solder C3, R2** — flash decoupling and CS pullup.
|
||||||
|
5. **Solder R1, C5** — audio RC filter.
|
||||||
|
6. **Solder J1 (JST SH)** — align pin 1 mark.
|
||||||
|
7. **Solder J2, J3** — XIAO female headers.
|
||||||
|
8. **Plug in XIAO** — USB-C faces the left edge marked on silk.
|
||||||
|
9. **Test** — upload pin_discovery.ino, verify serial output.
|
||||||
|
|
||||||
|
### 2. Adapter board
|
||||||
|
|
||||||
|
1. **Snap off** the adapter matching your toy's MCU package.
|
||||||
|
2. **Solder JST connector** to adapter's top surface.
|
||||||
|
3. **Desolder** original MCU from toy PCB (hot air or iron + flux).
|
||||||
|
4. **Place adapter** in empty footprint, pin 1 aligned.
|
||||||
|
5. **Solder castellated edges** — the half-holes sit on the SOP pads.
|
||||||
|
Apply flux, touch with iron, solder wicks into the half-hole.
|
||||||
|
6. **Plug JST cable** from adapter into carrier J1.
|
||||||
|
|
||||||
|
### 3. Map and wire
|
||||||
|
|
||||||
|
1. Upload **pin_discovery.ino** to XIAO.
|
||||||
|
2. Use multimeter + the serial tool to identify each SOP pin's function.
|
||||||
|
3. Create your pin map (see BRAIN_TRANSPLANT.md).
|
||||||
|
4. Update **baby_mobile_v2.ino** pin definitions.
|
||||||
|
5. Upload final firmware.
|
||||||
|
6. Upload audio via USB mass storage.
|
||||||
|
|
||||||
|
|
||||||
|
## Silkscreen Guide
|
||||||
|
|
||||||
|
All polarized components have pin 1 dots (●) on the silkscreen:
|
||||||
|
- **U1 (TPS61220):** dot near pin 1 (VIN)
|
||||||
|
- **U2 (IS25LP128F):** dot near pin 1 (~CS)
|
||||||
|
- **J1 (JST SH):** dot near pin 1 (VBAT)
|
||||||
|
- **Each adapter:** dot near SOP pin 1
|
||||||
|
|
||||||
|
The XIAO outline shows the board rectangle with a USB-C bump
|
||||||
|
on the left edge. Pin labels (D0-D10, 3V3, GND, 5V) are printed
|
||||||
|
next to each header hole.
|
||||||
@@ -0,0 +1,445 @@
|
|||||||
|
(kicad_pcb (version 20221018) (generator "panel_gen_v3")
|
||||||
|
(general (thickness 1.6))
|
||||||
|
(paper "A4")
|
||||||
|
(title_block
|
||||||
|
(title "Baby Mobile — Combined Panel")
|
||||||
|
(date "2026-03-11")
|
||||||
|
(rev "3.0")
|
||||||
|
(comment 1 "Carrier: XIAO nRF52840 + IS25LP128F + TPS61220")
|
||||||
|
(comment 2 "Breakaway: SOP-8, SOP-16N, SOP-16W castellated adapters")
|
||||||
|
(comment 3 "Order as one panel from JLCPCB with castellated holes + v-score")
|
||||||
|
)
|
||||||
|
(layers
|
||||||
|
(0 "F.Cu" signal) (31 "B.Cu" signal)
|
||||||
|
(34 "B.Paste" user) (35 "F.Paste" user)
|
||||||
|
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
|
||||||
|
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
|
||||||
|
(44 "Edge.Cuts" user) (49 "F.Fab" user "F.Fab") (48 "B.Fab" user "B.Fab")
|
||||||
|
)
|
||||||
|
(setup (pad_to_mask_clearance 0.05))
|
||||||
|
(net 0 "")
|
||||||
|
(net 1 "GND") (net 2 "VBAT") (net 3 "3V3")
|
||||||
|
(net 4 "SPI_MOSI") (net 5 "SPI_MISO") (net 6 "SPI_SCK") (net 7 "FLASH_CS")
|
||||||
|
(net 8 "BOOST_SW")
|
||||||
|
(net 9 "SIG_1") (net 10 "SIG_2") (net 11 "SIG_3") (net 12 "SIG_4")
|
||||||
|
(net 13 "SIG_5") (net 14 "SIG_6") (net 15 "SIG_7") (net 16 "SIG_8")
|
||||||
|
|
||||||
|
(gr_line (start 100 100) (end 148.0 100) (layer "Edge.Cuts") (width 0.1) (uuid "7b1700cb-2e02-4e2e-9378-f797465d2604"))
|
||||||
|
(gr_line (start 148.0 100) (end 148.0 136.0) (layer "Edge.Cuts") (width 0.1) (uuid "74de5cee-1470-42ab-ae12-5d13adf0da95"))
|
||||||
|
(gr_line (start 148.0 136.0) (end 100 136.0) (layer "Edge.Cuts") (width 0.1) (uuid "7673667b-18a1-446c-aa5c-fe52e4354265"))
|
||||||
|
(gr_line (start 100 136.0) (end 100 100) (layer "Edge.Cuts") (width 0.1) (uuid "918f360a-2692-439d-a5c9-ac14740cb644"))
|
||||||
|
(gr_line (start 100 125.0) (end 148.0 125.0) (layer "Edge.Cuts") (width 0.1) (uuid "783f22f9-02f5-42c4-a763-c768f7fc670f"))
|
||||||
|
(gr_text "— SNAP HERE —" (at 124.0 125.0) (layer "F.SilkS") (uuid "b18cbfec-4605-45b0-b128-89ced7badd2b") (effects (font (size 0.6 0.6) (thickness 0.09))))
|
||||||
|
(gr_line (start 111.5 126.0) (end 111.5 136.0) (layer "Edge.Cuts") (width 0.1) (uuid "a783dca9-0c36-4d1f-8397-d0c443740d11"))
|
||||||
|
(gr_line (start 126.5 126.0) (end 126.5 136.0) (layer "Edge.Cuts") (width 0.1) (uuid "ebef14ed-7814-4b0b-a462-71d18131efff"))
|
||||||
|
(gr_rect (start 105.5 104.25) (end 126.5 121.75) (layer "F.SilkS") (width 0.15) (uuid "df1a4a4b-4fe2-47f9-8823-a6a873b671d3"))
|
||||||
|
(gr_rect (start 104.5 111.25) (end 105.5 114.75) (layer "F.SilkS") (width 0.15) (uuid "751bafa2-2bb5-45ab-a9d5-a4633e786a63"))
|
||||||
|
(gr_text "USB-C" (at 102.5 113.0) (layer "F.SilkS") (uuid "4da04b1c-4fcd-42b3-b4d6-46a9c04dfe43") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "XIAO nRF52840" (at 116 113.0) (layer "F.SilkS") (uuid "c5647cc5-4310-45d9-9aee-757ce667d5f0") (effects (font (size 0.7 0.7) (thickness 0.105) bold)))
|
||||||
|
|
||||||
|
(footprint "panel:XIAO_L" (layer "F.Cu")
|
||||||
|
(at 107.11 113.0)
|
||||||
|
(uuid "424b9417-5f41-43c3-8293-a8e6cb933576")
|
||||||
|
(fp_text reference "XIAO_L" (at 0 0) (layer "F.Fab") (uuid "1a192681-0423-4f3e-891c-0eab3ca39c22")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "720cd57c-edcc-4b50-ad35-7338533983cd")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "D0" thru_hole circle (at 0.000 -7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 9 "SIG_1") (uuid "13d7148a-50c1-4a94-8c11-e9dcb6a754c6"))
|
||||||
|
(pad "D1" thru_hole circle (at 0.000 -5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 10 "SIG_2") (uuid "7ca7a9e0-026d-402d-ab32-548113b484a6"))
|
||||||
|
(pad "D2" thru_hole circle (at 0.000 -2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 11 "SIG_3") (uuid "2d34971b-f0cc-450a-b01f-c96eef28ae65"))
|
||||||
|
(pad "D3" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 12 "SIG_4") (uuid "fbb508a4-080e-4393-b007-24b8441ed40c"))
|
||||||
|
(pad "D4" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 13 "SIG_5") (uuid "057c4634-92da-473b-bd74-636c3b5da05a"))
|
||||||
|
(pad "D5" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 14 "SIG_6") (uuid "e996f8e8-cba1-4124-adea-6e6a55822cf2"))
|
||||||
|
(pad "D6" thru_hole circle (at 0.000 7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 15 "SIG_7") (uuid "c1ecb403-d181-4f94-8a3f-f0d904a321af"))
|
||||||
|
)
|
||||||
|
(gr_text "D0" (at 104.11 105.38) (layer "F.SilkS") (uuid "8ccee08b-7714-4ea7-a015-9ac7c7007746") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D1" (at 104.11 107.92) (layer "F.SilkS") (uuid "b369c277-cc9e-477d-aa9c-3cbfea32fea2") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D2" (at 104.11 110.46) (layer "F.SilkS") (uuid "aeb4b4c5-29de-460e-820d-bc8d6b3af6d1") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D3" (at 104.11 113.0) (layer "F.SilkS") (uuid "8548eb5a-87f5-4282-9d87-f43ad4cc7c3e") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D4" (at 104.11 115.53999999999999) (layer "F.SilkS") (uuid "fecb2fc5-5665-4cb4-a0f0-96b5f4e7b60b") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D5" (at 104.11 118.08) (layer "F.SilkS") (uuid "fd67dc0f-1c74-4a8f-8058-5237b0164175") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D6" (at 104.11 120.61999999999999) (layer "F.SilkS") (uuid "ada138f6-8731-4fc5-ae8d-e392f03f1f5e") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
|
||||||
|
(footprint "panel:XIAO_R" (layer "F.Cu")
|
||||||
|
(at 124.89 113.0)
|
||||||
|
(uuid "3cd83d54-c4bd-49db-8108-1fea4f7216d3")
|
||||||
|
(fp_text reference "XIAO_R" (at 0 0) (layer "F.Fab") (uuid "757c0392-628e-4915-bd7c-e069da6da9e3")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "4c8ac95c-7732-46f0-bf26-80e8ae16043a")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "D10" thru_hole circle (at 0.000 -7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 16 "SIG_8") (uuid "f264cff2-da9c-43e9-963b-b94769bdfcb1"))
|
||||||
|
(pad "D9" thru_hole circle (at 0.000 -5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 6 "SPI_SCK") (uuid "308ce269-69a0-432d-905a-673545bacbe6"))
|
||||||
|
(pad "D8" thru_hole circle (at 0.000 -2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 4 "SPI_MOSI") (uuid "ad23c509-4739-4079-a75c-e5e315d806b5"))
|
||||||
|
(pad "D7" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 5 "SPI_MISO") (uuid "da735dbd-fa9b-43d3-b598-21925b5096d2"))
|
||||||
|
(pad "3V3" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 3 "3V3") (uuid "b903209b-71fb-41d3-a113-1733752b5319"))
|
||||||
|
(pad "GND" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 1 "GND") (uuid "2960e5f3-39de-410d-8c2e-1efa6f5d6d41"))
|
||||||
|
(pad "5V" thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "ebbd6673-2b72-4e71-bdb3-9884752f82ec"))
|
||||||
|
)
|
||||||
|
(gr_text "D10" (at 127.89 105.38) (layer "F.SilkS") (uuid "5203eb0b-f267-4c9a-8362-5d4ad5b4b82e") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D9" (at 127.89 107.92) (layer "F.SilkS") (uuid "c6ce93ba-42a5-4a0e-97c8-5c5cbb22a23f") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D8" (at 127.89 110.46) (layer "F.SilkS") (uuid "3847168c-3ec1-4ab3-8c8c-1a387e691cd9") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "D7" (at 127.89 113.0) (layer "F.SilkS") (uuid "d5d839c4-a0fb-4936-9647-afd65ec22baf") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "3V3" (at 127.89 115.53999999999999) (layer "F.SilkS") (uuid "7f208461-157c-4f2e-9ba8-9ff7a92e2592") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "GND" (at 127.89 118.08) (layer "F.SilkS") (uuid "0d7bb0f3-d447-40c0-8c0d-852c0888bd95") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "5V" (at 127.89 120.61999999999999) (layer "F.SilkS") (uuid "41673efe-250c-4f9d-b726-a4a3323f0a55") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_circle (center 131.5 110.0) (end 131.8 110.0) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "13a16cf6-f659-4a1b-a214-eaa0051e312f"))
|
||||||
|
(gr_rect (start 131.5 104.5) (end 136.5 108.5) (layer "F.SilkS") (width 0.15) (uuid "e3237dd4-989a-4291-8a2d-4dc17b1b3a49"))
|
||||||
|
(gr_text "U2 IS25LP128F" (at 134 103.0) (layer "F.SilkS") (uuid "0f957ce0-a31e-4bdc-ab4e-cfa38072838b") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "●1" (at 131.5 110.7) (layer "F.SilkS") (uuid "d38fce73-c8ac-41f6-a19f-8c9bf104fcb0") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:IS25LP128F" (layer "F.Cu")
|
||||||
|
(at 134 106.5)
|
||||||
|
(uuid "035c717e-5224-4dae-b80e-c5ad937661b4")
|
||||||
|
(fp_text reference "IS25LP128F" (at 0 0) (layer "F.Fab") (uuid "a831eb77-f12b-4f9c-a65a-1ea2a8eecb84")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "80984351-2ea3-4c2d-8c81-2146ab830536")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.905 2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "FLASH_CS") (uuid "a9a47098-819e-4532-ac33-07c50281d653"))
|
||||||
|
(pad "2" smd rect (at -0.635 2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 5 "SPI_MISO") (uuid "2351be0b-b569-4b8c-8140-aaac92581886"))
|
||||||
|
(pad "3" smd rect (at 0.635 2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "bac05db0-0409-4c26-a620-50caf6c4cca8"))
|
||||||
|
(pad "4" smd rect (at 1.905 2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "edcc2bd9-c8ae-403f-bbf2-f4626fdcdb9e"))
|
||||||
|
(pad "5" smd rect (at 1.905 -2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 4 "SPI_MOSI") (uuid "219218ea-ebfb-487d-a51e-c42592053dbe"))
|
||||||
|
(pad "6" smd rect (at 0.635 -2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 6 "SPI_SCK") (uuid "c81ade0d-58ae-4354-95f3-c81c0bdef5e8"))
|
||||||
|
(pad "7" smd rect (at -0.635 -2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "4c34d938-b3ee-470b-8f42-ccb75644e447"))
|
||||||
|
(pad "8" smd rect (at -1.905 -2.700) (size 0.6 1.5) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "8b9ebe9d-3c52-4bda-9d1f-7dcc2a6431e5"))
|
||||||
|
)
|
||||||
|
|
||||||
|
(footprint "panel:C3" (layer "F.Cu")
|
||||||
|
(at 139 106.5)
|
||||||
|
(uuid "6c849ca5-09fb-49a3-9c51-234d3277ff4c")
|
||||||
|
(fp_text reference "C3" (at 0 0) (layer "F.Fab") (uuid "64dfb9e1-c603-44f5-9695-85e9febe5068")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "d71421ef-b387-4165-9478-3494261bb3eb")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "75dbbfeb-def5-4b8b-9cb1-935bbd23f5ac"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "754aa1fe-fa86-4f71-ae83-8a549899f4ca"))
|
||||||
|
)
|
||||||
|
(gr_text "C3 100n" (at 139 105.3) (layer "F.SilkS") (uuid "63cd6760-d68d-4280-b7ab-b1bec1a5435b") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "+" (at 137.8 106.5) (layer "F.SilkS") (uuid "5df09abb-4d82-48fa-b277-3d8e5c8c9ff0") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:R2" (layer "F.Cu")
|
||||||
|
(at 139 109.5)
|
||||||
|
(uuid "f285b94d-6fb7-4652-94cc-c59818678108")
|
||||||
|
(fp_text reference "R2" (at 0 0) (layer "F.Fab") (uuid "7eff1e64-ff06-429f-8417-782c8082dd8c")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "edbb8ed0-6a3c-4b9a-af54-f1496efc2bff")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "FLASH_CS") (uuid "b945b811-e8b4-45d6-b1ab-1a67524b65bc"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "822ffa6c-5cfc-465e-a985-4ce3593ff60a"))
|
||||||
|
)
|
||||||
|
(gr_text "R2 10K" (at 139 108.3) (layer "F.SilkS") (uuid "ada14ace-3cd5-44e2-9165-76e0941f655b") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:R1" (layer "F.Cu")
|
||||||
|
(at 134 113)
|
||||||
|
(uuid "31b61a4c-cb67-41fe-abde-6237a02672e7")
|
||||||
|
(fp_text reference "R1" (at 0 0) (layer "F.Fab") (uuid "f8c37308-786e-400d-81b0-fb29dc6121b0")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "6554f611-3d96-4bd4-9be6-ff4f31f8e0f9")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "SIG_8") (uuid "664bc9f2-d270-4113-9d41-1649df5b63e0"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "AUDIO_FILT") (uuid "9c4ec3bf-1942-4b3b-a0bc-d2270af990a1"))
|
||||||
|
)
|
||||||
|
(gr_text "R1 4.7K" (at 134 111.8) (layer "F.SilkS") (uuid "c302f0de-3645-4a12-bfb6-d6e0acc191bb") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:C5" (layer "F.Cu")
|
||||||
|
(at 134 115.5)
|
||||||
|
(uuid "c70ac8eb-9f06-48c7-a731-46c4ce383b29")
|
||||||
|
(fp_text reference "C5" (at 0 0) (layer "F.Fab") (uuid "6dfa0d66-c59f-4fd3-8df3-928ab755c88b")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "c931a903-19ee-46b1-9846-5939fc8aa326")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "AUDIO_FILT") (uuid "3fa692ca-1d5a-4a89-b1a2-f01428dc22f4"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "6b0bca98-110f-45d1-aed4-e862f8a1202e"))
|
||||||
|
)
|
||||||
|
(gr_text "C5 10n" (at 134 114.3) (layer "F.SilkS") (uuid "5e2e8cd8-6382-4870-a049-816dd507fa2d") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_circle (center 132.8 121.5) (end 133.10000000000002 121.5) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "a9e16b85-e4af-4e84-94a7-f47d0120bcb1"))
|
||||||
|
(gr_text "U1 TPS61220" (at 134 117.5) (layer "F.SilkS") (uuid "b124be9f-a3a8-4149-946d-a031307b61a4") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "●1" (at 132.8 122.2) (layer "F.SilkS") (uuid "33ea581f-e2cb-4990-94a7-1983dac9d167") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:TPS61220" (layer "F.Cu")
|
||||||
|
(at 134 120)
|
||||||
|
(uuid "1f475038-a4b5-4175-91c9-7d26e3766a1e")
|
||||||
|
(fp_text reference "TPS61220" (at 0 0) (layer "F.Fab") (uuid "40582112-b236-436a-afdc-dbcb9ca5417b")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "1acbc7e6-9df7-4224-b91b-20582215db1d")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -0.650 0.700) (size 0.4 0.55) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "8b9f424f-e807-4bf0-ac6e-68a45cefae72"))
|
||||||
|
(pad "2" smd rect (at 0.000 0.700) (size 0.4 0.55) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "8aab62be-1aaf-44e0-bc10-877fc0c5cef0"))
|
||||||
|
(pad "3" smd rect (at 0.650 0.700) (size 0.4 0.55) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "dcc4a5fd-3515-412c-bc9a-04d98d276173"))
|
||||||
|
(pad "4" smd rect (at 0.650 -0.700) (size 0.4 0.55) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "b4de3046-f675-425b-ba3b-b91d0a31f6a0"))
|
||||||
|
(pad "5" smd rect (at -0.650 -0.700) (size 0.4 0.55) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "BOOST_SW") (uuid "1296667a-5140-4529-b8c0-e3e5c52ffe73"))
|
||||||
|
)
|
||||||
|
|
||||||
|
(footprint "panel:L1" (layer "F.Cu")
|
||||||
|
(at 130 120)
|
||||||
|
(uuid "31c56158-ebf0-488e-9c27-a7b32fcbf6c4")
|
||||||
|
(fp_text reference "L1" (at 0 0) (layer "F.Fab") (uuid "e44c635a-7a50-48bd-8af2-1c65a923068a")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "201cfb60-ce63-47dd-bb3f-2377cfdd3367")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "BOOST_SW") (uuid "db0d1c42-7f1c-4fc8-bbc2-50d413f665fc"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "07b425f3-ebae-4c23-bdbe-3f3ae544a11f"))
|
||||||
|
)
|
||||||
|
(gr_text "L1 4.7u" (at 130 118.8) (layer "F.SilkS") (uuid "6a6d0334-20cc-4df5-b4a8-d678450ff424") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:C1" (layer "F.Cu")
|
||||||
|
(at 130 123)
|
||||||
|
(uuid "388f4ff3-38e6-4b57-ade2-7879dd444e34")
|
||||||
|
(fp_text reference "C1" (at 0 0) (layer "F.Fab") (uuid "86f3204f-e9bc-4f25-a3a9-238b9ef0f036")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "862f86fc-3311-4743-904b-b0a7d0a1d8b4")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "3f9ec573-2045-4f59-8aa1-61f1e6c044d6"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "4098d85d-3560-4bfe-88d1-62fdca17533f"))
|
||||||
|
)
|
||||||
|
(gr_text "C1 10u" (at 130 121.8) (layer "F.SilkS") (uuid "e13ad2f1-be9f-4c11-b453-5b3056c504dc") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
|
||||||
|
(footprint "panel:C2" (layer "F.Cu")
|
||||||
|
(at 138 120)
|
||||||
|
(uuid "71039fd9-95ff-4065-9c59-60105470ff55")
|
||||||
|
(fp_text reference "C2" (at 0 0) (layer "F.Fab") (uuid "4507f636-6ecc-4887-b582-643579401f00")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "dbc71da1-b782-46b4-88c6-c69d9b4fed69")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "a0201b14-401e-4afb-b31f-fe5fcb82fdd6"))
|
||||||
|
(pad "2" smd rect (at 1.000 0.000) (size 1.0 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "cc269e12-18cf-4357-b7bb-a725b6e8a234"))
|
||||||
|
)
|
||||||
|
(gr_text "C2 10u" (at 138 118.8) (layer "F.SilkS") (uuid "6b0a22cf-83cb-4569-8a04-62d5d0dfec82") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "J1 TO TOY →" (at 136 107) (layer "F.SilkS") (uuid "c569cf60-f111-4dff-83db-fafbd8197660") (effects (font (size 0.5 0.5) (thickness 0.075))))
|
||||||
|
(gr_text "1=VBAT 2=GND 3-10=SIG" (at 136 116) (layer "F.SilkS") (uuid "3a1c1424-149b-42dd-9647-76ba66d15e60") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 135.7 111) (end 136.0 111) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "937dca26-8795-40b6-aa11-cd91fa320aec"))
|
||||||
|
|
||||||
|
(footprint "panel:J1_JST_SH10" (layer "F.Cu")
|
||||||
|
(at 141 111)
|
||||||
|
(uuid "1bf0b2d9-7ef1-4f6f-aa3a-336ad20f828f")
|
||||||
|
(fp_text reference "J1_JST_SH10" (at 0 0) (layer "F.Fab") (uuid "4a61bb05-8474-4184-a42c-e0f0eb360403")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "96812a3b-b2ef-44d8-b9b0-b38e2233d654")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" smd rect (at -4.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "c5100258-7976-444f-aa98-b9e4d45bace7"))
|
||||||
|
(pad "2" smd rect (at -3.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "65697aea-87a9-40cf-9a90-60397ae8e81d"))
|
||||||
|
(pad "3" smd rect (at -2.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 9 "SIG_1") (uuid "b415ff5e-b50e-4f91-a350-43f232c23ab3"))
|
||||||
|
(pad "4" smd rect (at -1.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "SIG_2") (uuid "9bf989cb-344e-43ab-bc5e-1ca8a620a89b"))
|
||||||
|
(pad "5" smd rect (at -0.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "SIG_3") (uuid "c81114ae-ab4a-4351-9aef-979bd5776fc5"))
|
||||||
|
(pad "6" smd rect (at 0.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "SIG_4") (uuid "d2de3994-f605-4758-89d3-32dbf3b28812"))
|
||||||
|
(pad "7" smd rect (at 1.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "SIG_5") (uuid "f29d020f-6822-424e-b2a0-22e7d1669a86"))
|
||||||
|
(pad "8" smd rect (at 2.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "SIG_6") (uuid "f88f3dcc-efde-4594-ae2b-410f3ca1a074"))
|
||||||
|
(pad "9" smd rect (at 3.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "SIG_7") (uuid "2fb195c4-5246-46f4-a2a1-7718847f4819"))
|
||||||
|
(pad "10" smd rect (at 4.500 0.000) (size 0.6 1.2) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "SIG_8") (uuid "7933cf14-f6ed-4f06-b736-87fe37541f89"))
|
||||||
|
(pad "S1" smd rect (at -6.000 2.150) (size 1.2 1.8) (layers "F.Cu") (net 0 "") (uuid "77da10bc-5247-4236-90c2-afbb80680c20"))
|
||||||
|
(pad "S2" smd rect (at 6.000 2.150) (size 1.2 1.8) (layers "F.Cu") (net 0 "") (uuid "a31546da-deff-4b09-a1bb-bb654a1e05c4"))
|
||||||
|
)
|
||||||
|
|
||||||
|
(footprint "panel:MH" (layer "F.Cu")
|
||||||
|
(at 104.5 102.5)
|
||||||
|
(uuid "3d6c895f-0a9b-464e-8536-a32c4457a246")
|
||||||
|
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "5d96b049-f10c-447b-9bac-97113e1219ec")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "4b13c3b7-8e4f-472a-9fd7-8dbbc87151ca")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "6909aca5-a5b1-46df-bfbd-d664ad4f9dd8"))
|
||||||
|
)
|
||||||
|
|
||||||
|
(footprint "panel:MH" (layer "F.Cu")
|
||||||
|
(at 141.0 123.0)
|
||||||
|
(uuid "993bf336-b07f-4cf2-99b9-4b6f1dd8c0fc")
|
||||||
|
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "0e7ad9bf-ded2-4dac-8aed-3b81f17dd8b6")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "6fbeac64-dc35-4fbc-9311-d5e822009ffb")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "f384efc5-884c-4fc7-be90-6214a76d9363"))
|
||||||
|
)
|
||||||
|
(gr_text "Baby Mobile Carrier v3.0" (at 124.0 100.5) (layer "F.SilkS") (uuid "536313ba-aa0f-43ca-ad0d-46a9123ce61d") (effects (font (size 0.7 0.7) (thickness 0.105) bold)))
|
||||||
|
(gr_text "3V3" (at 132.0 125.3) (layer "F.SilkS") (uuid "45d2ab75-759c-4f37-8618-87f620e2d745") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "XIAO D0-D6 = SIG_1-7 (buttons/speaker/motor)" (at 124.0 106) (layer "B.SilkS") (uuid "30f97b1f-9a2e-424f-8178-488ab913f73c") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "XIAO D7=MISO D8=MOSI D9=SCK D10=AUDIO" (at 124.0 108) (layer "B.SilkS") (uuid "fd1a9361-d67c-4b32-ae97-80ae719e4cf5") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "JST: 1=VBAT 2=GND 3-10=SIG_1-8" (at 124.0 110) (layer "B.SilkS") (uuid "adb6bbb5-5687-41b9-b2df-cef2d9088d0e") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_line (start 103.095 127.55) (end 108.905 127.55) (layer "Edge.Cuts") (width 0.1) (uuid "c6351db3-0d63-4b19-b879-1096a1ebb7cc"))
|
||||||
|
(gr_line (start 108.905 127.55) (end 108.905 134.45) (layer "Edge.Cuts") (width 0.1) (uuid "4ecacc87-37c8-48d7-a1ef-e7991a4153f9"))
|
||||||
|
(gr_line (start 108.905 134.45) (end 103.095 134.45) (layer "Edge.Cuts") (width 0.1) (uuid "4ce6f3f0-4e32-4c24-a6d9-84ec04c0c836"))
|
||||||
|
(gr_line (start 103.095 134.45) (end 103.095 127.55) (layer "Edge.Cuts") (width 0.1) (uuid "997589ec-4d8b-4593-b35f-180de9f3fc82"))
|
||||||
|
(gr_text "SOP-8" (at 106 126.55) (layer "F.SilkS") (uuid "1b597be2-2a34-4900-98bf-1f2517842d20") (effects (font (size 0.6 0.6) (thickness 0.09) bold)))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-8_pads" (layer "B.Cu")
|
||||||
|
(at 106 132.5)
|
||||||
|
(uuid "0eca431f-4ee4-44a9-afdf-51d718534b5c")
|
||||||
|
(fp_text reference "SOP-8_pads" (at 0 0) (layer "B.Fab") (uuid "afa5c0fb-39e0-4941-8a90-6419f4300c8d")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "b5533d64-7952-40ea-beb6-a2586cf440e5")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" thru_hole circle (at -1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "361b27a3-f477-4c94-879b-4e123751cf63"))
|
||||||
|
(pad "8" thru_hole circle (at -1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "e38495d5-30b3-4bc4-893d-c51c476300f1"))
|
||||||
|
(pad "2" thru_hole circle (at -0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "050516cc-4844-453e-a4c8-92cc0ef936d1"))
|
||||||
|
(pad "7" thru_hole circle (at -0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "5d2afb12-8ea1-4d80-9e8a-22d4e3620ed3"))
|
||||||
|
(pad "3" thru_hole circle (at 0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "14975a05-c721-4062-afb2-9f336a44c385"))
|
||||||
|
(pad "6" thru_hole circle (at 0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "5de5a38d-5292-44a0-b866-5a5d6b86edef"))
|
||||||
|
(pad "4" thru_hole circle (at 1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "7cdb28e0-15e0-45ae-a7e0-88e0cce8f6b9"))
|
||||||
|
(pad "5" thru_hole circle (at 1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "d4f5b25e-b4aa-4dae-9928-7e05078eb636"))
|
||||||
|
)
|
||||||
|
(gr_text "1" (at 104.095 135.25) (layer "F.SilkS") (uuid "f5c9593e-7259-4d40-9547-c3fa917499db") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "8" (at 104.095 129.75) (layer "F.SilkS") (uuid "9c12d426-d109-4879-8f62-fa55ac473f6c") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "2" (at 105.365 135.25) (layer "F.SilkS") (uuid "80f87ae1-198d-4372-9e7f-94238f2ca0b8") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "7" (at 105.365 129.75) (layer "F.SilkS") (uuid "b567e07a-b5a7-4b34-83a4-5875666ab5a1") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "3" (at 106.635 135.25) (layer "F.SilkS") (uuid "1c61d6e3-ba47-4305-89c9-436eef9a9b54") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "6" (at 106.635 129.75) (layer "F.SilkS") (uuid "c1fcc1ba-1bd8-4e73-8262-9251a35ffc5c") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "4" (at 107.905 135.25) (layer "F.SilkS") (uuid "81633807-bc28-4f41-a567-02907c6e5656") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "5" (at 107.905 129.75) (layer "F.SilkS") (uuid "55462181-2c84-4bfa-8ca2-613eedb69ac4") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 103.495 134.95) (end 103.745 134.95) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "4b74368f-179f-40bd-b0c4-1c6a2e65a838"))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-8_JST" (layer "F.Cu")
|
||||||
|
(at 106 129.05)
|
||||||
|
(uuid "e98f9c1d-98b1-4684-8a3b-8ded8d0454b1")
|
||||||
|
(fp_text reference "SOP-8_JST" (at 0 0) (layer "F.Fab") (uuid "1024358b-e61c-4657-b5f9-482448a2a8cc")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "b482a232-0071-4793-a66b-b8244ac0dfd7")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "J1" smd rect (at -3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "7f4a8271-2243-4f28-a589-efa81177ed32"))
|
||||||
|
(pad "J2" smd rect (at -2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "671447e7-c863-49e3-880d-4153c11d9ed4"))
|
||||||
|
(pad "J3" smd rect (at -1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "f7d739a7-0996-49df-accc-1e980e86064a"))
|
||||||
|
(pad "J4" smd rect (at -0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "5b438e3d-d561-44da-a542-434a7cb7e986"))
|
||||||
|
(pad "J5" smd rect (at 0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "379acc48-9b28-4dcf-880b-ea34cbdbc194"))
|
||||||
|
(pad "J6" smd rect (at 1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "eac7ffe5-08d0-4880-a0bf-9a65086e63d9"))
|
||||||
|
(pad "J7" smd rect (at 2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "0414d2bc-e60a-49e3-a499-16dc1f3287c8"))
|
||||||
|
(pad "J8" smd rect (at 3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "acb37cf8-1c43-4d18-9ab7-bf5dbef4393c"))
|
||||||
|
)
|
||||||
|
(gr_text "JST" (at 106 127.55000000000001) (layer "F.SilkS") (uuid "7fa426dc-36e1-4889-8e8c-927910eeb31a") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 101.7 129.05) (end 101.9 129.05) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "fece2278-867a-421f-a49d-78a23eca6b39"))
|
||||||
|
(gr_line (start 114.555 126.5) (end 125.44500000000001 126.5) (layer "Edge.Cuts") (width 0.1) (uuid "2fc6e446-43a3-405a-a030-10f6e05f5310"))
|
||||||
|
(gr_line (start 125.44500000000001 126.5) (end 125.44500000000001 135.5) (layer "Edge.Cuts") (width 0.1) (uuid "b924be81-09cb-4afa-b7cd-ba218190706f"))
|
||||||
|
(gr_line (start 125.44500000000001 135.5) (end 114.555 135.5) (layer "Edge.Cuts") (width 0.1) (uuid "36c5db66-cf81-4c2f-b7c4-0c0a89a59d87"))
|
||||||
|
(gr_line (start 114.555 135.5) (end 114.555 126.5) (layer "Edge.Cuts") (width 0.1) (uuid "b47949f9-1b7f-430b-bfb0-f9f4a17a28ec"))
|
||||||
|
(gr_text "SOP-16N" (at 120 125.5) (layer "F.SilkS") (uuid "fe5e0f87-c3ec-44c3-9bdb-2943579813c4") (effects (font (size 0.6 0.6) (thickness 0.09) bold)))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-16N_pads" (layer "B.Cu")
|
||||||
|
(at 120 132.5)
|
||||||
|
(uuid "3701fa1b-825b-4648-bb67-5661713c49b3")
|
||||||
|
(fp_text reference "SOP-16N_pads" (at 0 0) (layer "B.Fab") (uuid "fa9d17ce-47e3-4163-8bbb-ef21c48e8a5b")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "31bd2f24-ffb9-4929-8e62-b567ca5fa457")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" thru_hole circle (at -4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "96894655-c1fd-4926-95e1-720467b1d1db"))
|
||||||
|
(pad "16" thru_hole circle (at -4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "f24a95ec-fb94-441c-af60-354b16c413b4"))
|
||||||
|
(pad "2" thru_hole circle (at -3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "f617f3fe-ed62-4736-b8b7-ffc7e30e4c77"))
|
||||||
|
(pad "15" thru_hole circle (at -3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "ffb8c150-9b59-44d2-8de6-ea9761fab4a1"))
|
||||||
|
(pad "3" thru_hole circle (at -1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "eca590f6-c2d0-4081-8a03-b9732a4cde1c"))
|
||||||
|
(pad "14" thru_hole circle (at -1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "2bb228b2-3315-41bb-8a55-7f1a67adac95"))
|
||||||
|
(pad "4" thru_hole circle (at -0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "ac0baa4b-7af9-4749-88dc-ab7009d200b2"))
|
||||||
|
(pad "13" thru_hole circle (at -0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "b8e3c538-e5bc-4a47-822c-1f8333c82a28"))
|
||||||
|
(pad "5" thru_hole circle (at 0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "0e3a6f08-8df6-4b07-b647-b5c2ac8ff96e"))
|
||||||
|
(pad "12" thru_hole circle (at 0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "61698711-bd67-4626-9590-ddd735effbd7"))
|
||||||
|
(pad "6" thru_hole circle (at 1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "38d4335c-662f-4be5-9fbf-53ee1084c374"))
|
||||||
|
(pad "11" thru_hole circle (at 1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "b8e01f00-14d1-4280-bb10-1682af9b6a1b"))
|
||||||
|
(pad "7" thru_hole circle (at 3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "9fa33513-28db-41b0-b412-d76ce27b9e18"))
|
||||||
|
(pad "10" thru_hole circle (at 3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "4a533dd2-9097-4ef2-afad-921cfb7e3983"))
|
||||||
|
(pad "8" thru_hole circle (at 4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "85330de0-c53d-4800-9578-0cc3dafb2e3f"))
|
||||||
|
(pad "9" thru_hole circle (at 4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "93c0d157-1a13-4732-997c-4469b9eb4ffa"))
|
||||||
|
)
|
||||||
|
(gr_text "1" (at 115.555 136.3) (layer "F.SilkS") (uuid "5875da56-cd75-453c-99b1-d99292331ce7") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "16" (at 115.555 128.7) (layer "F.SilkS") (uuid "05383887-6c29-421f-b812-5af47aeb8af4") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "2" (at 116.825 136.3) (layer "F.SilkS") (uuid "58407aeb-0041-4ff3-bc69-3d05922b6680") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "15" (at 116.825 128.7) (layer "F.SilkS") (uuid "2cec8f90-d7fb-497e-80fa-0528ae2e7f4c") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "3" (at 118.09500000000001 136.3) (layer "F.SilkS") (uuid "3c345293-b744-436e-baca-e390c07ec531") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "14" (at 118.09500000000001 128.7) (layer "F.SilkS") (uuid "ddf9ffdf-da47-44a8-96e8-016d1b8e39d0") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "4" (at 119.36500000000001 136.3) (layer "F.SilkS") (uuid "1ba584bd-a85f-436e-93c0-f14382e4f112") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "13" (at 119.36500000000001 128.7) (layer "F.SilkS") (uuid "b43e5efc-f5cd-4fa0-975b-3a5c455bf433") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "5" (at 120.635 136.3) (layer "F.SilkS") (uuid "638812b1-cf4a-43d5-882c-65ebf45d50a8") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "12" (at 120.635 128.7) (layer "F.SilkS") (uuid "5ed17165-92a2-4292-924b-4a996778b40e") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "6" (at 121.905 136.3) (layer "F.SilkS") (uuid "c61c18a6-703d-442b-b5b1-6b2cc330178d") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "11" (at 121.905 128.7) (layer "F.SilkS") (uuid "612d5b34-c3aa-43d7-b5c6-bc3bcd5edf85") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "7" (at 123.17500000000001 136.3) (layer "F.SilkS") (uuid "8c73cee8-e49b-4516-b1b2-d5b458c65ed3") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "10" (at 123.17500000000001 128.7) (layer "F.SilkS") (uuid "81415c0e-b422-417b-891c-9b265f3a9490") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "8" (at 124.44500000000001 136.3) (layer "F.SilkS") (uuid "4643670c-3e2e-4898-93fa-f94089b8bc70") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "9" (at 124.44500000000001 128.7) (layer "F.SilkS") (uuid "3f211df8-900b-4182-9056-dafbab78e44c") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 114.95500000000001 136.0) (end 115.20500000000001 136.0) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "ae452f51-64f3-492c-800f-0a92aae3f25a"))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-16N_JST" (layer "F.Cu")
|
||||||
|
(at 120 128.0)
|
||||||
|
(uuid "2b8602d1-de42-4302-8ea1-29bc923063a5")
|
||||||
|
(fp_text reference "SOP-16N_JST" (at 0 0) (layer "F.Fab") (uuid "2f071088-2901-4294-850e-43ec54f05465")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "cfe264e6-6db0-4df7-b0ee-fd08effe36a3")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "J1" smd rect (at -4.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "2fc2338d-5959-41d5-9e87-4249c11d83b0"))
|
||||||
|
(pad "J2" smd rect (at -3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "174d4da3-c824-49a7-9289-2a4bafb40c61"))
|
||||||
|
(pad "J3" smd rect (at -2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "08f931bf-579d-4e3d-bb8a-a6098144ae7f"))
|
||||||
|
(pad "J4" smd rect (at -1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "68b1fdc4-e36c-4465-8f13-0607f1033394"))
|
||||||
|
(pad "J5" smd rect (at -0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "2e06c2a5-df6d-4454-bf8a-fa56768057da"))
|
||||||
|
(pad "J6" smd rect (at 0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "2a0a15c9-cafb-43cc-be75-43a66b0addd0"))
|
||||||
|
(pad "J7" smd rect (at 1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "f8733fb3-787d-4024-8852-abe90145d2e2"))
|
||||||
|
(pad "J8" smd rect (at 2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "cd9cac1b-2505-4223-ba93-11ace821e5ad"))
|
||||||
|
(pad "J9" smd rect (at 3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "248f8301-96c2-4e99-9d41-86b8ba211321"))
|
||||||
|
(pad "J10" smd rect (at 4.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "556be4a5-a310-44b4-88c4-a8a0729e0d1f"))
|
||||||
|
)
|
||||||
|
(gr_text "JST" (at 120 126.5) (layer "F.SilkS") (uuid "2c02c675-43b7-4b85-86c0-a10cc14fcc7a") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 114.7 128.0) (end 114.9 128.0) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "f09b75e7-7351-43cd-8a0e-b9e9d795466a"))
|
||||||
|
(gr_line (start 131.555 124.35) (end 142.445 124.35) (layer "Edge.Cuts") (width 0.1) (uuid "4c7738b5-0870-478d-9fa0-2f96294e88d7"))
|
||||||
|
(gr_line (start 142.445 124.35) (end 142.445 137.65) (layer "Edge.Cuts") (width 0.1) (uuid "378b3434-232b-4372-899d-ec56bb14c57a"))
|
||||||
|
(gr_line (start 142.445 137.65) (end 131.555 137.65) (layer "Edge.Cuts") (width 0.1) (uuid "60769822-3a55-41ba-af35-1c3058e26ba6"))
|
||||||
|
(gr_line (start 131.555 137.65) (end 131.555 124.35) (layer "Edge.Cuts") (width 0.1) (uuid "6284e709-5244-43f8-a2f5-660046cfbd85"))
|
||||||
|
(gr_text "SOP-16W" (at 137 123.35) (layer "F.SilkS") (uuid "b3ed8f8b-4c73-41b1-99a1-da1b41dd4dd5") (effects (font (size 0.6 0.6) (thickness 0.09) bold)))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-16W_pads" (layer "B.Cu")
|
||||||
|
(at 137 132.5)
|
||||||
|
(uuid "9c71ac82-8fc0-478d-9d35-73f765bda15d")
|
||||||
|
(fp_text reference "SOP-16W_pads" (at 0 0) (layer "B.Fab") (uuid "8cea900b-c79a-43fe-844a-148f69cb95b6")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "ae30beaa-083f-4fb7-bdec-79c9dc2cc012")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "1" thru_hole circle (at -4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "d0432d6f-61ac-448a-85c6-181ddbd1aa33"))
|
||||||
|
(pad "16" thru_hole circle (at -4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "22a1e7eb-27d6-4233-b5b8-f36767df33e9"))
|
||||||
|
(pad "2" thru_hole circle (at -3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "5bfa1d99-38b6-4ab7-a56b-61b1a2a3db1d"))
|
||||||
|
(pad "15" thru_hole circle (at -3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "b934db02-c5d7-497f-bc1f-2486399da781"))
|
||||||
|
(pad "3" thru_hole circle (at -1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "a700b37c-bc69-41b5-9de2-fbc9e8dc036b"))
|
||||||
|
(pad "14" thru_hole circle (at -1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "b30fe8b5-1352-435a-85dc-749e62f01ebb"))
|
||||||
|
(pad "4" thru_hole circle (at -0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "bd6026e4-be88-4e7d-b235-9808417d9423"))
|
||||||
|
(pad "13" thru_hole circle (at -0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "e3c51d8e-b93e-4342-a5a1-2d09b8b808ab"))
|
||||||
|
(pad "5" thru_hole circle (at 0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "bc05b28d-1c31-4589-b8fb-1d60035d7232"))
|
||||||
|
(pad "12" thru_hole circle (at 0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "77ceab5c-f996-4bb3-97e8-a590fc7a88ae"))
|
||||||
|
(pad "6" thru_hole circle (at 1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "6ae748a9-ab27-400b-ae2d-80637c92e869"))
|
||||||
|
(pad "11" thru_hole circle (at 1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "afb69667-cf85-4248-88bf-bd9764348c2e"))
|
||||||
|
(pad "7" thru_hole circle (at 3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "7f3f8b8a-0c4e-4bdd-abb4-0ce85369336f"))
|
||||||
|
(pad "10" thru_hole circle (at 3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "bca205a0-edf1-4a22-b9c5-3dc5b2876199"))
|
||||||
|
(pad "8" thru_hole circle (at 4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "3cb40bf6-e26f-4ede-9c6f-1d92a4cbca15"))
|
||||||
|
(pad "9" thru_hole circle (at 4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 0 "") (uuid "4fbaa12e-f2bf-4e17-99fd-1da6892472bb"))
|
||||||
|
)
|
||||||
|
(gr_text "1" (at 132.555 138.45000000000002) (layer "F.SilkS") (uuid "67ae8809-6189-4d62-b63d-803a1ebc7814") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "16" (at 132.555 126.55) (layer "F.SilkS") (uuid "622f424c-467e-421c-8185-b39ea5ae0bdf") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "2" (at 133.82500000000002 138.45000000000002) (layer "F.SilkS") (uuid "0cd9df21-e290-4ee6-903d-cf3c63deac08") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "15" (at 133.82500000000002 126.55) (layer "F.SilkS") (uuid "40292e2a-5cb6-4a2a-9ed0-22db669f357d") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "3" (at 135.095 138.45000000000002) (layer "F.SilkS") (uuid "12e4979e-2a43-45f2-b74a-391e6a055358") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "14" (at 135.095 126.55) (layer "F.SilkS") (uuid "da1908e3-ab44-4984-9043-1b1aa520e82f") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "4" (at 136.365 138.45000000000002) (layer "F.SilkS") (uuid "a75049c3-ea78-4cd6-a54f-87776bf27ee9") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "13" (at 136.365 126.55) (layer "F.SilkS") (uuid "8e30096f-00c5-40c7-b944-51f8150dfa61") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "5" (at 137.63500000000002 138.45000000000002) (layer "F.SilkS") (uuid "d6d623cc-8f41-430b-b77d-e20779841d1f") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "12" (at 137.63500000000002 126.55) (layer "F.SilkS") (uuid "47fd108a-17c2-4c89-966b-b517d9e672a9") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "6" (at 138.905 138.45000000000002) (layer "F.SilkS") (uuid "0de8b8ae-d871-45cf-ab0f-5ae66919b156") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "11" (at 138.905 126.55) (layer "F.SilkS") (uuid "699f7121-2403-4879-99d8-231f07b64ab6") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "7" (at 140.175 138.45000000000002) (layer "F.SilkS") (uuid "7d6d6327-5063-4d9f-b917-295688569b83") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "10" (at 140.175 126.55) (layer "F.SilkS") (uuid "814b9dfc-3c9a-4780-a49d-859adbf1ec8f") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "8" (at 141.445 138.45000000000002) (layer "F.SilkS") (uuid "e6b7e389-6169-4f6c-b8cc-28f43917672e") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_text "9" (at 141.445 126.55) (layer "F.SilkS") (uuid "c9db7018-eb0b-4187-b0b1-a5f271ecc5a8") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 131.955 138.15) (end 132.205 138.15) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "906e42c9-101a-4cb8-a69d-e5abb20041b7"))
|
||||||
|
|
||||||
|
(footprint "panel:SOP-16W_JST" (layer "F.Cu")
|
||||||
|
(at 137 125.85)
|
||||||
|
(uuid "2b5d7da6-43b0-4993-a157-1ea204151ee4")
|
||||||
|
(fp_text reference "SOP-16W_JST" (at 0 0) (layer "F.Fab") (uuid "9be5d86d-f26d-41db-b3d5-96aa9ffdc96b")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "61ef7135-26fc-4a16-b06c-1053aa39fbe3")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(pad "J1" smd rect (at -4.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "be81bea1-903d-41cf-b073-ceca5dc11f48"))
|
||||||
|
(pad "J2" smd rect (at -3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "24e8d037-1b4b-4fa5-8c6c-8ae2af43cae8"))
|
||||||
|
(pad "J3" smd rect (at -2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "93959318-9fd0-4326-9d33-1f4193cf2727"))
|
||||||
|
(pad "J4" smd rect (at -1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "ef1e10ae-c8eb-4b8e-a528-b2dc4a061704"))
|
||||||
|
(pad "J5" smd rect (at -0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "5f83f573-7a00-49f9-b631-c93ab0c829a0"))
|
||||||
|
(pad "J6" smd rect (at 0.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "27ec44ef-d97a-4997-81fc-b7e4957caa76"))
|
||||||
|
(pad "J7" smd rect (at 1.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "c0cd43f0-19ef-4813-935c-1dd41339f027"))
|
||||||
|
(pad "J8" smd rect (at 2.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "a4360e04-4d1a-466c-b637-3b5738c34df4"))
|
||||||
|
(pad "J9" smd rect (at 3.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "ce94402f-7c99-45e6-9b2f-04a9a8e1103e"))
|
||||||
|
(pad "J10" smd rect (at 4.500 0.000) (size 0.6 1.0) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "6535b20a-7bf1-4cf8-9d59-9f4228e74d47"))
|
||||||
|
)
|
||||||
|
(gr_text "JST" (at 137 124.35) (layer "F.SilkS") (uuid "3ebcdaf3-af81-4207-8b30-06bce9658c7b") (effects (font (size 0.35 0.35) (thickness 0.0525))))
|
||||||
|
(gr_circle (center 131.7 125.85) (end 131.89999999999998 125.85) (layer "F.SilkS") (width 0.15) (fill solid) (uuid "41121629-2cd5-4e5c-928d-2e259710e93a"))
|
||||||
|
(gr_text "Snap off adapter matching your toy's MCU. Castellations solder into SOP footprint." (at 124.0 136.0) (layer "B.SilkS") (uuid "8a35efdd-15ba-4ffe-82f7-1ca8fb1d6665") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
(gr_text "JST cable connects adapter to carrier board J1." (at 124.0 137.0) (layer "B.SilkS") (uuid "03798201-3787-40a2-a031-6838215cea81") (effects (font (size 0.4 0.4) (thickness 0.06))))
|
||||||
|
)
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"filename": "baby-mobile-panel.kicad_pro",
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"board": {
|
||||||
|
"design_settings": {
|
||||||
|
"rules": {
|
||||||
|
"min_track_width": 0.15,
|
||||||
|
"min_via_diameter": 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"net_settings": {
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"name": "Default",
|
||||||
|
"clearance": 0.15,
|
||||||
|
"track_width": 0.25
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Power",
|
||||||
|
"clearance": 0.2,
|
||||||
|
"track_width": 0.5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"meta": {
|
|
||||||
"filename": "baby-mobile-v2.kicad_pro",
|
|
||||||
"version": 1
|
|
||||||
},
|
|
||||||
"board": {
|
|
||||||
"design_settings": {
|
|
||||||
"defaults": {
|
|
||||||
"board_outline_line_width": 0.1,
|
|
||||||
"copper_line_width": 0.2
|
|
||||||
},
|
|
||||||
"rules": {
|
|
||||||
"min_copper_edge_clearance": 0.3,
|
|
||||||
"min_track_width": 0.2,
|
|
||||||
"min_via_diameter": 0.6,
|
|
||||||
"min_via_annular_width": 0.13
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"net_settings": {
|
|
||||||
"classes": [
|
|
||||||
{
|
|
||||||
"name": "Default",
|
|
||||||
"clearance": 0.2,
|
|
||||||
"track_width": 0.3,
|
|
||||||
"via_diameter": 0.6,
|
|
||||||
"via_drill": 0.3
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"schematic": {
|
|
||||||
"legacy_lib_dir": "",
|
|
||||||
"legacy_lib_list": []
|
|
||||||
},
|
|
||||||
"sheets": [
|
|
||||||
[
|
|
||||||
"",
|
|
||||||
""
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,815 +0,0 @@
|
|||||||
(kicad_sch (version 20230121) (generator "baby_mobile_gen_v2")
|
|
||||||
|
|
||||||
(uuid "bcbf6700-9330-4856-9326-a804adb9eec3")
|
|
||||||
(paper "A3")
|
|
||||||
|
|
||||||
(title_block
|
|
||||||
(title "Baby Mobile Audio Board v2")
|
|
||||||
(date "2026-03-09")
|
|
||||||
(rev "2.0")
|
|
||||||
(comment 1 "MDBT50Q (nRF52840) + IS25LP128F + PAM8302A")
|
|
||||||
(comment 2 "2xAA Battery + USB-C, Diode OR, TPS61220 Boost")
|
|
||||||
(comment 3 "BLE + USB mass storage for audio upload")
|
|
||||||
(comment 4 "8-ohm 0.25W Speaker, DC Motor, 8 Buttons")
|
|
||||||
)
|
|
||||||
|
|
||||||
(lib_symbols
|
|
||||||
|
|
||||||
(symbol "baby_mobile:MDBT50Q" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "U" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "MDBT50Q-P1MV2" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "RF_Module:Raytac_MDBT50Q" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "MDBT50Q_0_1"
|
|
||||||
(rectangle (start -20 30) (end 20 -30) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "MDBT50Q_1_1"
|
|
||||||
(pin power_in line (at -5 -33 90) (length 3) (name "GND" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -5 33 270) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "32" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 20 0) (length 3) (name "P0.00/XL1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 17.5 0) (length 3) (name "P0.01/XL2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 15 0) (length 3) (name "P0.02/AIN0" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 12.5 0) (length 3) (name "P0.03/AIN1" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 10 0) (length 3) (name "P0.04/AIN2" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 7.5 0) (length 3) (name "P0.05/AIN3" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 5 0) (length 3) (name "P0.06" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 2.5 0) (length 3) (name "P0.07" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 0 0) (length 3) (name "P0.08" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -2.5 0) (length 3) (name "P0.09/NFC1" (effects (font (size 1 1)))) (number "11" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -5 0) (length 3) (name "P0.10/NFC2" (effects (font (size 1 1)))) (number "12" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -7.5 0) (length 3) (name "P0.11" (effects (font (size 1 1)))) (number "13" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -10 0) (length 3) (name "P0.12" (effects (font (size 1 1)))) (number "14" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -12.5 0) (length 3) (name "P0.13" (effects (font (size 1 1)))) (number "15" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -15 0) (length 3) (name "P0.14" (effects (font (size 1 1)))) (number "16" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -17.5 0) (length 3) (name "P0.15" (effects (font (size 1 1)))) (number "17" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 20 180) (length 3) (name "P0.16" (effects (font (size 1 1)))) (number "18" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 17.5 180) (length 3) (name "P0.17" (effects (font (size 1 1)))) (number "19" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 15 180) (length 3) (name "P0.18/~{RESET}" (effects (font (size 1 1)))) (number "20" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 12.5 180) (length 3) (name "P0.19" (effects (font (size 1 1)))) (number "21" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 10 180) (length 3) (name "P0.20" (effects (font (size 1 1)))) (number "22" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 7.5 180) (length 3) (name "P0.21" (effects (font (size 1 1)))) (number "23" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 5 180) (length 3) (name "P0.22" (effects (font (size 1 1)))) (number "24" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 2.5 180) (length 3) (name "P0.23" (effects (font (size 1 1)))) (number "25" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 0 180) (length 3) (name "P0.24" (effects (font (size 1 1)))) (number "26" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -2.5 180) (length 3) (name "P1.00" (effects (font (size 1 1)))) (number "27" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -5 180) (length 3) (name "D-" (effects (font (size 1 1)))) (number "28" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -7.5 180) (length 3) (name "D+" (effects (font (size 1 1)))) (number "29" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -10 180) (length 3) (name "P0.25" (effects (font (size 1 1)))) (number "30" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -12.5 180) (length 3) (name "P0.26" (effects (font (size 1 1)))) (number "31" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 23 -17.5 180) (length 3) (name "SWDIO" (effects (font (size 1 1)))) (number "33" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 23 -20 180) (length 3) (name "SWDCLK" (effects (font (size 1 1)))) (number "34" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:IS25LP128F" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "U" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "IS25LP128F" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "IS25LP128F_0_1"
|
|
||||||
(rectangle (start -7 6) (end 7 -6) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "IS25LP128F_1_1"
|
|
||||||
(pin input line (at -10 4 0) (length 3) (name "~{CS}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at -10 1.5 0) (length 3) (name "SO/IO1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -10 -1.5 0) (length 3) (name "~{WP}/IO2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -10 -4 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -4 180) (length 3) (name "SI/IO0" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -1.5 180) (length 3) (name "SCLK" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 1.5 180) (length 3) (name "~{HOLD}/IO3" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 10 4 180) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:PAM8302A" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "U" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "PAM8302A" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "PAM8302A_0_1"
|
|
||||||
(rectangle (start -8 8) (end 8 -8) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "PAM8302A_1_1"
|
|
||||||
(pin input line (at -11 5 0) (length 3) (name "~{SD}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -11 2 0) (length 3) (name "VDD" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -11 -1 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -11 -4 0) (length 3) (name "A+" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -11 -7 0) (length 3) (name "A-" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at 11 2 180) (length 3) (name "VO+" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at 11 -1 180) (length 3) (name "VO-" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 11 -4 180) (length 3) (name "PAD" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:TPS61220" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "U" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "TPS61220DCK" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-353_SC-70-5" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "TPS61220_0_1"
|
|
||||||
(rectangle (start -7 5) (end 7 -5) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "TPS61220_1_1"
|
|
||||||
(pin power_in line (at -10 3 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -10 -3 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -3 180) (length 3) (name "EN" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin power_out line (at 10 3 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 8 270) (length 3) (name "L" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:MCP1700" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "U" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "MCP1700-3302E" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "MCP1700_0_1"
|
|
||||||
(rectangle (start -6 4) (end 6 -4) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "MCP1700_1_1"
|
|
||||||
(pin power_in line (at -9 2 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 0 -7 90) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin power_out line (at 9 2 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Capacitor" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "C" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "C" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Capacitor_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Capacitor_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Resistor" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "R" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "R" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Resistor_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Resistor_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Diode_Schottky" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "D" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BAT54S" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Diode_SMD:D_SOT-23_ANK" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Diode_Schottky_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Diode_Schottky_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:LED" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "D" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "LED" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "LED_SMD:LED_0805_2012Metric" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "LED_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "LED_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Conn_2Pin" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "J" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "Conn_2" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Conn_2Pin_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Conn_2Pin_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Switch" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "SW" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SW" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Switch_0_1"
|
|
||||||
(circle (center -2 0) (radius 0.4) (stroke (width 0) (type default)) (fill (type none)))
|
|
||||||
(circle (center 2 0) (radius 0.4) (stroke (width 0) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.6 0) (xy 1.6 1)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Switch_1_1"
|
|
||||||
(pin passive line (at -5 0 0) (length 3) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 5 0 180) (length 3) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:NMOS" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "Q" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "AO3400A" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "NMOS_0_1"
|
|
||||||
(polyline (pts (xy -0.5 2) (xy -0.5 -2)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "NMOS_1_1"
|
|
||||||
(pin passive line (at 0 5 270) (length 2.5) (name "D" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -4 0 0) (length 2.5) (name "G" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -5 90) (length 2.5) (name "S" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Inductor" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "L" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "4.7uH" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Inductor_SMD:L_0805_2012Metric" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Inductor_0_1"
|
|
||||||
(arc (start 0 2.5) (mid 0.75 1.875) (end 0 1.25) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 1.25) (mid 0.75 0.625) (end 0 0) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 0) (mid 0.75 -0.625) (end 0 -1.25) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 -1.25) (mid 0.75 -1.875) (end 0 -2.5) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Inductor_1_1"
|
|
||||||
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:USB_C" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "J" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "USB_C_Receptacle" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_USB:USB_C_Receptacle_GCT_USB4085" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "USB_C_0_1"
|
|
||||||
(rectangle (start -6 8) (end 6 -8) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "USB_C_1_1"
|
|
||||||
(pin power_in line (at -9 6 0) (length 3) (name "VBUS" (effects (font (size 1 1)))) (number "A4" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -9 3 0) (length 3) (name "CC1" (effects (font (size 1 1)))) (number "A5" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -9 0 0) (length 3) (name "CC2" (effects (font (size 1 1)))) (number "B5" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -9 -3 0) (length 3) (name "D+" (effects (font (size 1 1)))) (number "A6" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -9 -6 0) (length 3) (name "D-" (effects (font (size 1 1)))) (number "A7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 9 -6 180) (length 3) (name "GND" (effects (font (size 1 1)))) (number "A1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 9 0 180) (length 3) (name "SHIELD" (effects (font (size 1 1)))) (number "S1" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:SWD_Header" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "J" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SWD_Header" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "SWD_Header_0_1"
|
|
||||||
(rectangle (start -3 11.0) (end 3 -11.0) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "SWD_Header_1_1"
|
|
||||||
(pin passive line (at -6 9.0 0) (length 3) (name "P1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -6 6.5 0) (length 3) (name "P2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -6 4.0 0) (length 3) (name "P3" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -6 1.5 0) (length 3) (name "P4" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(symbol "baby_mobile:Serial_Header" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "J" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "Serial_Header" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
|
|
||||||
(symbol "Serial_Header_0_1"
|
|
||||||
(rectangle (start -3 8.5) (end 3 -8.5) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "Serial_Header_1_1"
|
|
||||||
(pin passive line (at -6 6.5 0) (length 3) (name "P1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -6 4.0 0) (length 3) (name "P2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -6 1.5 0) (length 3) (name "P3" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Conn_2Pin") (at 20 40 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "70d7070b-9b9d-48ab-8f07-7e955ee95852")
|
|
||||||
(property "Reference" "J1" (at 23 37 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BATTERY" (at 23 43 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal" (at 20 40 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 20 40 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 38 35 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "fa74c532-0744-4aea-a2d6-1086b3906684")
|
|
||||||
(property "Reference" "SW9" (at 41 32 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "PWR" (at 41 38 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_THT:SW_SPDT_CK-JS102011SAQN" (at 38 35 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 38 35 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Diode_Schottky") (at 55 35 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "6625ba09-9a7b-45e4-bb05-f5be950fe70a")
|
|
||||||
(property "Reference" "D1" (at 58 32 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BAT54S" (at 58 38 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Diode_SMD:D_SOT-23_ANK" (at 55 35 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 55 35 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 48 45 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "5b7c8b52-73ae-48f5-92a3-ae01dce193f9")
|
|
||||||
(property "Reference" "C1" (at 51 42 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100uF" (at 51 48 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_THT:CP_Radial_D5.0mm_P2.00mm" (at 48 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 48 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:TPS61220") (at 80 40 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "a1d374e7-7486-4f8a-8b32-2683679e26a9")
|
|
||||||
(property "Reference" "U4" (at 83 37 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "TPS61220DCK" (at 83 43 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-353_SC-70-5" (at 80 40 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 80 40 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Inductor") (at 80 28 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "71a98694-95de-44d2-9449-ea2e75c2d031")
|
|
||||||
(property "Reference" "L1" (at 83 25 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "4.7uH" (at 83 31 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Inductor_SMD:L_0805_2012Metric" (at 80 28 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 80 28 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 68 45 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "0594c449-f95c-4a95-9e38-2d39cd72fe7f")
|
|
||||||
(property "Reference" "C9" (at 71 42 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "10uF" (at 71 48 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 68 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 68 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 95 45 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "21938427-01a0-4ec2-8e51-946b91b75873")
|
|
||||||
(property "Reference" "C10" (at 98 42 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "10uF" (at 98 48 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 95 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 95 45 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:USB_C") (at 20 80 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "8d3dfb8b-38a7-4c72-b926-a3cfa199b606")
|
|
||||||
(property "Reference" "J6" (at 23 77 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "USB_C" (at 23 83 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_USB:USB_C_Receptacle_GCT_USB4085" (at 20 80 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 20 80 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 38 83 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "aad7b37e-5135-48f8-85a7-d10c2ae025f8")
|
|
||||||
(property "Reference" "R7" (at 41 80 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "5.1K" (at 41 86 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 38 83 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 38 83 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 38 88 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "acbcde11-54d1-4f44-908e-220214c79f0b")
|
|
||||||
(property "Reference" "R8" (at 41 85 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "5.1K" (at 41 91 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 38 88 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 38 88 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Diode_Schottky") (at 55 74 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "e8998fe7-93f1-44bb-b19b-4464f77b6dd9")
|
|
||||||
(property "Reference" "D3" (at 58 71 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BAT54S" (at 58 77 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Diode_SMD:D_SOT-23_ANK" (at 55 74 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 55 74 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:MCP1700") (at 72 74 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "d32653e5-c0d2-451f-a9d5-d1daf1bc082d")
|
|
||||||
(property "Reference" "U5" (at 75 71 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "MCP1700-3302E" (at 75 77 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 72 74 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 72 74 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 62 82 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "a931807e-4c4b-44a1-8d60-5d98aad60b7f")
|
|
||||||
(property "Reference" "C11" (at 65 79 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "1uF" (at 65 85 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 62 82 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 62 82 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 82 82 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "d3de9a69-ceee-485c-a6c4-1c67c1b603d8")
|
|
||||||
(property "Reference" "C12" (at 85 79 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "1uF" (at 85 85 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 82 82 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 82 82 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:MDBT50Q") (at 160 100 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "594bd8ce-6f7f-41a5-9e1a-d3960d0a099a")
|
|
||||||
(property "Reference" "U1" (at 163 97 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "MDBT50Q-P1MV2" (at 163 103 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "RF_Module:Raytac_MDBT50Q" (at 160 100 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 160 100 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 135 60 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "8d2f0126-6582-4abb-bb02-b468a2a7e303")
|
|
||||||
(property "Reference" "C2" (at 138 57 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100nF" (at 138 63 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 135 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 135 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 128 60 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "49fb3b95-d44a-4ad8-a22e-a44e0bb59f88")
|
|
||||||
(property "Reference" "C3" (at 131 57 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "10uF" (at 131 63 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 128 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 128 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:IS25LP128F") (at 260 60 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "66c0d38b-8b39-4ca4-a5c2-ca6166c01990")
|
|
||||||
(property "Reference" "U2" (at 263 57 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "IS25LP128F" (at 263 63 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 260 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 260 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 285 50 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "70abbd58-d545-4aa6-907a-dc51d3e39b40")
|
|
||||||
(property "Reference" "C5" (at 288 47 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100nF" (at 288 53 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 285 50 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 285 50 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:PAM8302A") (at 260 140 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "36bdb273-1745-4ae6-a0c5-8ee5ce247b24")
|
|
||||||
(property "Reference" "U3" (at 263 137 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "PAM8302A" (at 263 143 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 260 140 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 260 140 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 220 135 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "43e10163-561a-41ef-a818-083eb46dadbb")
|
|
||||||
(property "Reference" "R2" (at 223 132 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "4.7K" (at 223 138 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 220 135 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 220 135 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 230 145 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "294f675b-caf9-46fb-a7e3-4f2b3f1e6278")
|
|
||||||
(property "Reference" "C7" (at 233 142 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "10nF" (at 233 148 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 230 145 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 230 145 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 240 135 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "195a432e-ee1e-4cd3-8448-97b1efccd434")
|
|
||||||
(property "Reference" "C6" (at 243 132 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "1uF" (at 243 138 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 240 135 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 240 135 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Capacitor") (at 285 130 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "a374fa1d-d300-401e-a298-17204d120f0b")
|
|
||||||
(property "Reference" "C8" (at 288 127 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "10uF" (at 288 133 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 285 130 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 285 130 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 240 155 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "26431bf8-ccbf-4a0d-9b17-4cf5a0660df2")
|
|
||||||
(property "Reference" "R3" (at 243 152 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100K" (at 243 158 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 240 155 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 240 155 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Conn_2Pin") (at 290 145 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "63c284ab-b058-480d-884f-ea0e5a23be78")
|
|
||||||
(property "Reference" "J2" (at 293 142 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SPEAKER" (at 293 148 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal" (at 290 145 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 290 145 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:NMOS") (at 160 200 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "8361bf44-050a-467e-a525-5cc39ff3aa0e")
|
|
||||||
(property "Reference" "Q1" (at 163 197 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "AO3400A" (at 163 203 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-23" (at 160 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 160 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 140 200 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "de5de389-8023-498e-a92c-82ae00e9e811")
|
|
||||||
(property "Reference" "R4" (at 143 197 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100R" (at 143 203 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 140 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 140 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 150 212 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "91f0e3bf-5e2f-42b4-8da6-8a77e2ef1ad8")
|
|
||||||
(property "Reference" "R5" (at 153 209 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "100K" (at 153 215 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 150 212 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 150 212 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Diode_Schottky") (at 175 190 90) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "d21b4325-c08a-4cf7-9598-f2eead5a0427")
|
|
||||||
(property "Reference" "D4" (at 178 187 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SS14" (at 178 193 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Diode_SMD:D_SMA" (at 175 190 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 175 190 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Conn_2Pin") (at 180 180 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "d9fb0352-f82e-4858-bc84-824cdfd66411")
|
|
||||||
(property "Reference" "J3" (at 183 177 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "MOTOR" (at 183 183 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal" (at 180 180 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 180 180 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 80 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "57360837-e551-42fd-92c4-90b47e3af1d7")
|
|
||||||
(property "Reference" "SW1" (at 303 77 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN1" (at 303 83 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 80 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 80 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 94 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "25df26f9-6b89-45c0-8247-d0fca36ce61d")
|
|
||||||
(property "Reference" "SW2" (at 303 91 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN2" (at 303 97 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 94 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 94 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 108 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "d10f35e2-3a88-464c-bad3-32d1b7dc37e7")
|
|
||||||
(property "Reference" "SW3" (at 303 105 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN3" (at 303 111 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 108 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 108 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 122 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "7422ffd7-92cd-4290-a5ef-a9725f9ce828")
|
|
||||||
(property "Reference" "SW4" (at 303 119 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN4" (at 303 125 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 122 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 122 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 136 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "72136978-3095-41af-9a20-710af6a51233")
|
|
||||||
(property "Reference" "SW5" (at 303 133 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN5" (at 303 139 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 136 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 136 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 150 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "eb1956dd-8fc8-428e-8a8a-732832b3046a")
|
|
||||||
(property "Reference" "SW6" (at 303 147 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN6" (at 303 153 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 150 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 150 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 164 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "838098eb-6069-4a93-803d-71f7bcc015ed")
|
|
||||||
(property "Reference" "SW7" (at 303 161 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN7" (at 303 167 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 164 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 164 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Switch") (at 300 178 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "4c7b5735-d245-4a22-b39e-da02d205dd6f")
|
|
||||||
(property "Reference" "SW8" (at 303 175 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "BTN8" (at 303 181 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Button_Switch_SMD:SW_SPST_TL3342" (at 300 178 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 300 178 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:LED") (at 115 200 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "381a075f-afed-41fe-8bee-e87a0c979fb5")
|
|
||||||
(property "Reference" "D2" (at 118 197 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "LED_GRN" (at 118 203 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "LED_SMD:LED_0805_2012Metric" (at 115 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 115 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Resistor") (at 105 200 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "29ff321d-9917-491b-aa90-e6857486d032")
|
|
||||||
(property "Reference" "R6" (at 108 197 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "1K" (at 108 203 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 105 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 105 200 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:SWD_Header") (at 200 60 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "e9f21ce7-386a-49f0-b58a-baa3c2c214fd")
|
|
||||||
(property "Reference" "J4" (at 203 57 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SWD" (at 203 63 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" (at 200 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 200 60 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(symbol (lib_id "baby_mobile:Serial_Header") (at 200 30 0) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "430fc64d-7b88-4340-93e7-7f62c2e6e768")
|
|
||||||
(property "Reference" "J5" (at 203 27 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "SERIAL" (at 203 33 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (at 200 30 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 200 30 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)
|
|
||||||
(label "3V3" (at 95 37 0) (effects (font (size 1.27 1.27))) (uuid "8ed071e2-ba5f-47a3-94d1-f6573f0fc9e6"))
|
|
||||||
(label "3V3" (at 135 55 0) (effects (font (size 1.27 1.27))) (uuid "82c68cf0-245b-4579-9abd-df6a25942f65"))
|
|
||||||
(label "3V3" (at 128 55 0) (effects (font (size 1.27 1.27))) (uuid "b759afce-3d7a-43ae-a815-920f94039f06"))
|
|
||||||
(label "3V3" (at 285 45 0) (effects (font (size 1.27 1.27))) (uuid "14313904-f45a-4f5c-8e82-3e71fb09a66a"))
|
|
||||||
(label "3V3" (at 285 125 0) (effects (font (size 1.27 1.27))) (uuid "5fc1cdc3-7530-4122-ab28-2954b8f56786"))
|
|
||||||
(label "3V3" (at 155 67 0) (effects (font (size 1.27 1.27))) (uuid "e84c183d-2287-4a07-bd7f-2427b2373c61"))
|
|
||||||
(label "3V3" (at 82 72 0) (effects (font (size 1.27 1.27))) (uuid "a3c425cd-d49b-47ff-8ef2-a0796ad2421f"))
|
|
||||||
(label "3V3" (at 180 175 0) (effects (font (size 1.27 1.27))) (uuid "9eb533dd-82ed-459c-bddc-5394f3d00809"))
|
|
||||||
(label "VBAT" (at 48 35 0) (effects (font (size 1.27 1.27))) (uuid "e7d3519e-53fd-4369-9e31-d5f75ead4298"))
|
|
||||||
(label "VBAT" (at 55 30 0) (effects (font (size 1.27 1.27))) (uuid "ae7b918c-7601-447a-8523-7c71e3ff5acf"))
|
|
||||||
(label "VBAT" (at 68 37 0) (effects (font (size 1.27 1.27))) (uuid "26a13740-da13-42a7-b4e9-218732d83e0d"))
|
|
||||||
(label "VBOOST_IN" (at 65 37 0) (effects (font (size 1.27 1.27))) (uuid "ad461d02-0622-4db7-a37a-33ffedce49f1"))
|
|
||||||
(label "VBOOST_IN" (at 70 37 0) (effects (font (size 1.27 1.27))) (uuid "eff048a1-c542-479d-a2da-4b1574cc7645"))
|
|
||||||
(label "3V3" (at 90 37 0) (effects (font (size 1.27 1.27))) (uuid "77b6f1d8-570a-4483-ae22-d2f30387bec8"))
|
|
||||||
(label "USB_VBUS" (at 29 74 0) (effects (font (size 1.27 1.27))) (uuid "1c439b3b-db55-4ff6-81df-7b615e8e6c39"))
|
|
||||||
(label "USB_VBUS" (at 55 69 0) (effects (font (size 1.27 1.27))) (uuid "6126f227-20fc-4552-8088-543092d7d2c9"))
|
|
||||||
(label "USB_LDO_OUT" (at 81 72 0) (effects (font (size 1.27 1.27))) (uuid "22bc2b82-1cd3-4fbf-b722-7aec2e3e7ac6"))
|
|
||||||
(label "GND" (at 48 55 0) (effects (font (size 1.27 1.27))) (uuid "1d89d47f-e5cc-47c8-96ef-875a47dd3d7d"))
|
|
||||||
(label "GND" (at 68 55 0) (effects (font (size 1.27 1.27))) (uuid "d070d4a1-832d-4144-a8e7-62c665cb7c19"))
|
|
||||||
(label "GND" (at 95 55 0) (effects (font (size 1.27 1.27))) (uuid "19863f8b-aa0c-4a5b-a8ad-4c10e0df834c"))
|
|
||||||
(label "GND" (at 80 50 0) (effects (font (size 1.27 1.27))) (uuid "31dcf8fa-9fe5-49f7-898c-eb9bb164aecc"))
|
|
||||||
(label "GND" (at 155 133 0) (effects (font (size 1.27 1.27))) (uuid "3389eb1b-db83-4210-bb6a-73265aeaa3e8"))
|
|
||||||
(label "GND" (at 260 70 0) (effects (font (size 1.27 1.27))) (uuid "4454cdab-2b40-43cc-ad3a-593113577789"))
|
|
||||||
(label "GND" (at 285 55 0) (effects (font (size 1.27 1.27))) (uuid "39014c1d-a110-4de1-8340-ac91b0cf2cd8"))
|
|
||||||
(label "GND" (at 285 155 0) (effects (font (size 1.27 1.27))) (uuid "955fabd2-0a64-46fb-899b-880b837da381"))
|
|
||||||
(label "GND" (at 160 215 0) (effects (font (size 1.27 1.27))) (uuid "da5dcfa8-d9b3-4750-b5e8-e0249eb1aca7"))
|
|
||||||
(label "GND" (at 150 218 0) (effects (font (size 1.27 1.27))) (uuid "6ff8e8df-1e76-4220-9afb-0e8e64c0ed7b"))
|
|
||||||
(label "GND" (at 230 155 0) (effects (font (size 1.27 1.27))) (uuid "5837c09d-c9c6-4753-b127-65cf1fd82b7a"))
|
|
||||||
(label "GND" (at 240 165 0) (effects (font (size 1.27 1.27))) (uuid "95a99a98-2c30-42a6-a07e-0aa4f2b48488"))
|
|
||||||
(label "GND" (at 62 92 0) (effects (font (size 1.27 1.27))) (uuid "76e18ea2-8285-426f-9ef8-9fa76e7111eb"))
|
|
||||||
(label "GND" (at 82 92 0) (effects (font (size 1.27 1.27))) (uuid "8ea4dfaf-0d35-489a-80b6-78f27b959ae4"))
|
|
||||||
(label "GND" (at 72 81 0) (effects (font (size 1.27 1.27))) (uuid "b7470fc2-e399-46eb-9fd3-bd74e283e117"))
|
|
||||||
(label "GND" (at 38 93 0) (effects (font (size 1.27 1.27))) (uuid "e5aa3e17-1915-485d-88f2-e4c97b203429"))
|
|
||||||
(label "GND" (at 38 98 0) (effects (font (size 1.27 1.27))) (uuid "9e79744e-5eed-4812-84be-ac90ad982c39"))
|
|
||||||
(label "GND" (at 135 65 0) (effects (font (size 1.27 1.27))) (uuid "b3762e1f-492b-4a17-93bc-c59442290780"))
|
|
||||||
(label "GND" (at 128 65 0) (effects (font (size 1.27 1.27))) (uuid "1de86c1d-deef-4198-a7ad-b33d2084bbe4"))
|
|
||||||
(label "USB_D+" (at 29 77 0) (effects (font (size 1.27 1.27))) (uuid "cafef546-ab22-40e8-bf8e-5a1b4a866c7b"))
|
|
||||||
(label "USB_D+" (at 183 92.5 0) (effects (font (size 1.27 1.27))) (uuid "02cbe821-47c0-4b39-ab87-c0017f8610d0"))
|
|
||||||
(label "USB_D-" (at 29 80 0) (effects (font (size 1.27 1.27))) (uuid "12b0e3d5-044c-4e34-b046-c90d3a2eb5a6"))
|
|
||||||
(label "USB_D-" (at 183 95 0) (effects (font (size 1.27 1.27))) (uuid "148c349c-b923-4ee5-9770-8b45ca65230e"))
|
|
||||||
(label "USB_CC1" (at 29 83 0) (effects (font (size 1.27 1.27))) (uuid "03410510-b26c-408e-818a-067a7db0f5b8"))
|
|
||||||
(label "USB_CC1" (at 38 78 0) (effects (font (size 1.27 1.27))) (uuid "218b088a-8395-4491-9a0e-6d5db11ca7a4"))
|
|
||||||
(label "USB_CC2" (at 29 86 0) (effects (font (size 1.27 1.27))) (uuid "c3131644-9adc-40f6-b7ce-2206504a9a27"))
|
|
||||||
(label "USB_CC2" (at 38 83 0) (effects (font (size 1.27 1.27))) (uuid "4825f804-a15c-4194-b1ec-fa57f3d85eff"))
|
|
||||||
(label "SPI_MOSI" (at 183 87.5 0) (effects (font (size 1.27 1.27))) (uuid "da1257b0-9158-4049-bdfc-ac6750ac975a"))
|
|
||||||
(label "SPI_MOSI" (at 250 56 0) (effects (font (size 1.27 1.27))) (uuid "1b17c2f2-8313-4f5d-b7cc-b863d00796bb"))
|
|
||||||
(label "SPI_MISO" (at 183 85 0) (effects (font (size 1.27 1.27))) (uuid "0860088c-74d8-43fb-860e-15349a699593"))
|
|
||||||
(label "SPI_MISO" (at 250 61.5 0) (effects (font (size 1.27 1.27))) (uuid "3b2dc367-6d21-4735-8410-d30a500e74a5"))
|
|
||||||
(label "SPI_SCK" (at 183 82.5 0) (effects (font (size 1.27 1.27))) (uuid "53e5a5c7-e20f-4482-a55d-2688efc6f7ba"))
|
|
||||||
(label "SPI_SCK" (at 270 58.5 0) (effects (font (size 1.27 1.27))) (uuid "26492f79-696e-4aea-b80d-03bfd63c2c3f"))
|
|
||||||
(label "FLASH_CS" (at 183 80 0) (effects (font (size 1.27 1.27))) (uuid "3a5652cc-c614-4368-9c13-111744980544"))
|
|
||||||
(label "FLASH_CS" (at 250 64 0) (effects (font (size 1.27 1.27))) (uuid "6e5a8087-754e-481b-a1bb-3c7f3f3f5232"))
|
|
||||||
(label "AUDIO_PWM" (at 183 100 0) (effects (font (size 1.27 1.27))) (uuid "57c2b713-56f7-42e2-bd58-5b5d04bebd30"))
|
|
||||||
(label "AUDIO_PWM" (at 210 135 0) (effects (font (size 1.27 1.27))) (uuid "4631b763-c906-4580-8fd8-1a93edd729d3"))
|
|
||||||
(label "AMP_SD" (at 183 102.5 0) (effects (font (size 1.27 1.27))) (uuid "deb32a13-e972-41aa-8d41-d20a062e3cba"))
|
|
||||||
(label "AMP_SD" (at 240 150 0) (effects (font (size 1.27 1.27))) (uuid "9bdd3963-b925-4327-92c0-1c3679ea2ebe"))
|
|
||||||
(label "MOTOR_PWM" (at 137 112.5 0) (effects (font (size 1.27 1.27))) (uuid "5b5f8fba-9659-4dee-9aad-e4ff3779e804"))
|
|
||||||
(label "MOTOR_PWM" (at 130 200 0) (effects (font (size 1.27 1.27))) (uuid "73d245e9-56a0-4ce1-9410-9cc9522893b0"))
|
|
||||||
(label "BTN1" (at 295 80 0) (effects (font (size 1.27 1.27))) (uuid "32e72139-ab6e-48c9-a0cf-65e931a41274"))
|
|
||||||
(label "BTN1" (at 137 120 0) (effects (font (size 1.27 1.27))) (uuid "b4d8683f-1cd7-4f33-9eda-8398e1098d6a"))
|
|
||||||
(label "BTN2" (at 295 94 0) (effects (font (size 1.27 1.27))) (uuid "17aea161-ddd2-4d17-ba4a-feedd256f98b"))
|
|
||||||
(label "BTN2" (at 137 117.5 0) (effects (font (size 1.27 1.27))) (uuid "808daa01-07c4-4622-9bca-032aaa095ffe"))
|
|
||||||
(label "BTN3" (at 295 108 0) (effects (font (size 1.27 1.27))) (uuid "39886739-7865-48a6-88b3-40ce4caf35b8"))
|
|
||||||
(label "BTN3" (at 137 115 0) (effects (font (size 1.27 1.27))) (uuid "ff98c423-d019-4c3e-8ba8-b7fcda8c6d3b"))
|
|
||||||
(label "BTN4" (at 295 122 0) (effects (font (size 1.27 1.27))) (uuid "7be84ac2-a319-4e89-8912-a48308157a57"))
|
|
||||||
(label "BTN4" (at 137 112.5 0) (effects (font (size 1.27 1.27))) (uuid "2c5a6c32-a6d7-4a20-a777-f8e4bf9caf99"))
|
|
||||||
(label "BTN5" (at 295 136 0) (effects (font (size 1.27 1.27))) (uuid "d0569adf-df84-42ea-8fa4-9b19b8f5266a"))
|
|
||||||
(label "BTN5" (at 137 110 0) (effects (font (size 1.27 1.27))) (uuid "aee28d6b-be5d-4a1c-a2ee-17bc73d031bb"))
|
|
||||||
(label "BTN6" (at 295 150 0) (effects (font (size 1.27 1.27))) (uuid "dbe9e702-77e0-48af-8818-9f2154f62514"))
|
|
||||||
(label "BTN6" (at 137 107.5 0) (effects (font (size 1.27 1.27))) (uuid "ee40d98c-46b9-45f2-a122-471375cc3a26"))
|
|
||||||
(label "BTN7" (at 295 164 0) (effects (font (size 1.27 1.27))) (uuid "dbe03385-adea-4e6f-87f0-fda692538d54"))
|
|
||||||
(label "BTN7" (at 137 105 0) (effects (font (size 1.27 1.27))) (uuid "404ba48f-c3f9-4bd9-9e7c-7e4662f61fa5"))
|
|
||||||
(label "BTN8" (at 295 178 0) (effects (font (size 1.27 1.27))) (uuid "160da6ab-3b24-4688-9c7b-67d82a3d897b"))
|
|
||||||
(label "BTN8" (at 137 102.5 0) (effects (font (size 1.27 1.27))) (uuid "a53bf467-04c2-45bd-9b30-b0f3446d8c9f"))
|
|
||||||
(label "GND" (at 305 80 0) (effects (font (size 1.27 1.27))) (uuid "f6f4b71d-c1f2-45bb-b1eb-07c33f60c27f"))
|
|
||||||
(label "GND" (at 305 94 0) (effects (font (size 1.27 1.27))) (uuid "4a9f4779-5345-41a1-a039-727291be615e"))
|
|
||||||
(label "GND" (at 305 108 0) (effects (font (size 1.27 1.27))) (uuid "a396ef9e-6be6-4b73-9829-12db9b3e07b3"))
|
|
||||||
(label "GND" (at 305 122 0) (effects (font (size 1.27 1.27))) (uuid "0cf7df09-6c2d-40cf-815f-e080021dce6d"))
|
|
||||||
(label "GND" (at 305 136 0) (effects (font (size 1.27 1.27))) (uuid "016e1cf1-b3f5-4ad5-a212-3ffcefeed34f"))
|
|
||||||
(label "GND" (at 305 150 0) (effects (font (size 1.27 1.27))) (uuid "a2c17108-4c26-4ae7-ab8c-2def7d9478a7"))
|
|
||||||
(label "GND" (at 305 164 0) (effects (font (size 1.27 1.27))) (uuid "41c52008-b330-4723-8b7c-d4e6be680b6a"))
|
|
||||||
(label "GND" (at 305 178 0) (effects (font (size 1.27 1.27))) (uuid "1087b54a-297b-4224-b9e2-48695ff85b8d"))
|
|
||||||
(label "LED_OUT" (at 95 200 0) (effects (font (size 1.27 1.27))) (uuid "cc999662-caea-48b8-9222-78cab879fcdc"))
|
|
||||||
(label "LED_OUT" (at 137 100 0) (effects (font (size 1.27 1.27))) (uuid "013e7457-91fe-4fbd-a0ee-7ee89c54199d"))
|
|
||||||
(label "SWDIO" (at 194 55.5 0) (effects (font (size 1.27 1.27))) (uuid "25823cf8-69a9-41c6-9b9c-a5c49404406c"))
|
|
||||||
(label "SWDIO" (at 183 82.5 0) (effects (font (size 1.27 1.27))) (uuid "00074155-1634-4876-8d45-3fe907bf2db3"))
|
|
||||||
(label "SWDCLK" (at 194 58 0) (effects (font (size 1.27 1.27))) (uuid "ff3a7eec-2bb9-4f1e-967f-5cadd8e240dc"))
|
|
||||||
(label "SWDCLK" (at 183 80 0) (effects (font (size 1.27 1.27))) (uuid "a30d2c78-19ef-46c2-a458-36c2c5876254"))
|
|
||||||
(label "3V3" (at 194 53 0) (effects (font (size 1.27 1.27))) (uuid "f99c5f81-ea9a-41f5-960e-d2fae7d0a181"))
|
|
||||||
(label "GND" (at 194 60.5 0) (effects (font (size 1.27 1.27))) (uuid "e26ea204-b9ea-4447-8197-4e162160fd9d"))
|
|
||||||
(label "TXD" (at 194 25.5 0) (effects (font (size 1.27 1.27))) (uuid "301ed6e2-a2bd-4b45-9f9a-392d72600933"))
|
|
||||||
(label "TXD" (at 137 80 0) (effects (font (size 1.27 1.27))) (uuid "5ebc2fb5-79e1-41fc-94e0-ae66b9cfe1f5"))
|
|
||||||
(label "RXD" (at 194 28 0) (effects (font (size 1.27 1.27))) (uuid "8dbda22c-6ed0-427c-a7a2-3cb9994d6b43"))
|
|
||||||
(label "RXD" (at 137 82.5 0) (effects (font (size 1.27 1.27))) (uuid "cd81992e-9202-48d6-b995-d0f86e69f52e"))
|
|
||||||
(label "GND" (at 194 30.5 0) (effects (font (size 1.27 1.27))) (uuid "6fb29d8b-c74b-4471-b93c-4751e770957b"))
|
|
||||||
(label "3V3" (at 250 58.5 0) (effects (font (size 1.27 1.27))) (uuid "76f5880c-4436-4818-94bb-c78a7ee6fe4e"))
|
|
||||||
(label "3V3" (at 270 61.5 0) (effects (font (size 1.27 1.27))) (uuid "a4e298f8-b82b-4d58-8e1f-b0f80af8cc9e"))
|
|
||||||
(label "VBAT" (at 90 43 0) (effects (font (size 1.27 1.27))) (uuid "4e07ee15-a453-4fe9-805e-d131f584d1a8"))
|
|
||||||
(text "POWER: 2xAA → BAT54S → TPS61220 boost → 3.3V (1.8-3.2V input)" (at 10 12 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "10cfdea1-8a29-4bde-88d4-c91935a5e9ac")
|
|
||||||
)
|
|
||||||
(text "USB: VBUS → BAT54S → MCP1700 LDO → 3.3V (safe with any battery chemistry)" (at 10 15 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "27e25aeb-a530-42a6-9e45-b196b84a0721")
|
|
||||||
)
|
|
||||||
(text "MCU: MDBT50Q (nRF52840) — BLE 5.0, USB 2.0, 1.7-5.5V, UF2 bootloader" (at 10 18 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "5ec8a803-c645-49fb-936d-707f1a426ea0")
|
|
||||||
)
|
|
||||||
(text "FLASH: IS25LP128F 16MB (2.3-3.6V) = ~33 min @ 8kHz 8-bit PCM" (at 10 21 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "3540a598-29a4-42b0-955e-10cfb84fcec3")
|
|
||||||
)
|
|
||||||
(text "AMP: PAM8302A Class-D, 90% eff, Vmin=2.0V, shutdown pin for power save" (at 10 24 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "5b07f1c0-2adc-42e6-9792-d4d4c22a5559")
|
|
||||||
)
|
|
||||||
(text "MOTOR: AO3400A logic-level N-MOSFET, PWM speed control" (at 10 27 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "f259ebac-06b9-4b51-84fd-855ca64743c6")
|
|
||||||
)
|
|
||||||
(text "USB-C: Drag-and-drop audio as mass storage device" (at 10 230 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "9bb11b21-6fca-415e-9aa1-383cbc0bf675")
|
|
||||||
)
|
|
||||||
(text "BLE: Wireless audio upload from phone (Web Bluetooth compatible)" (at 10 233 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "e3624e20-88ff-405d-99a6-634170b921f6")
|
|
||||||
)
|
|
||||||
(text "FIRMWARE: UF2 bootloader — update by drag-and-drop, no programmer needed" (at 10 236 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "f25d994c-c32d-4858-a3ed-12707aea679c")
|
|
||||||
)
|
|
||||||
(text "RUNTIME: Audio+Motor ~25h, Audio only ~167h, Sleep ~years on 2xAA" (at 10 239 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "9fdf6591-0f6e-4339-b052-f5593d9b3690")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
Comment,Designator,Footprint,LCSC Part Number,Qty,Value,Description
|
||||||
|
"Boost Converter","U1","SOT-353_SC-70-5","C83951",1,"TPS61220DCKR","3.3V fixed output boost converter 0.7-5.5V in"
|
||||||
|
"SPI Flash 16MB","U2","SOIC-8_3.9x4.9mm_P1.27mm","C194872",1,"IS25LP128F-JBLE","128Mbit SPI NOR Flash 2.3-3.6V"
|
||||||
|
"Boost Inductor","L1","L_0805_2012Metric","C408336",1,"4.7uH","Inductor 4.7µH 1.2A saturation"
|
||||||
|
"Boost Input Cap","C1","C_0805_2012Metric","C15850",1,"10uF","Ceramic capacitor 10µF 10V X5R"
|
||||||
|
"Boost Output Cap","C2","C_0805_2012Metric","C15850",1,"10uF","Ceramic capacitor 10µF 10V X5R"
|
||||||
|
"Flash Decoupling","C3","C_0805_2012Metric","C49678",1,"100nF","Ceramic capacitor 100nF 25V X7R"
|
||||||
|
"XIAO Decoupling","C4","C_0805_2012Metric","C49678",1,"100nF","Ceramic capacitor 100nF 25V X7R"
|
||||||
|
"RC Filter R (audio LPF)","R1","R_0805_2012Metric","C17673",1,"4.7K","Resistor 4.7KΩ 1%"
|
||||||
|
"RC Filter C (audio LPF)","C5","C_0805_2012Metric","C1710",1,"10nF","Ceramic capacitor 10nF 50V"
|
||||||
|
"Flash CS Pullup","R2","R_0805_2012Metric","C17414",1,"10K","Resistor 10KΩ 1% (holds CS high during boot)"
|
||||||
|
"Toy Connector","J1","JST_SH_SM10B-SRSS-TB_1x10_P1.00mm","C160404",1,"SM10B-SRSS-TB","JST SH 1.0mm 10-pin SMD right-angle"
|
||||||
|
"XIAO Header Left","J2","PinHeader_1x07_P2.54mm_Vertical","C124378",1,"1x7 2.54mm","Female pin header 1x7"
|
||||||
|
"XIAO Header Right","J3","PinHeader_1x07_P2.54mm_Vertical","C124378",1,"1x7 2.54mm","Female pin header 1x7"
|
||||||
|
@@ -1,553 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Generate KiCad 7 schematic for Baby Mobile Audio Board v2.
|
|
||||||
|
|
||||||
Design: MDBT50Q (nRF52840) + IS25LP128F SPI Flash + PAM8302A Class-D Amp
|
|
||||||
Power: 2xAA → TPS61220 boost → 3.3V, USB-C via MCP1700 LDO, diode OR-ing
|
|
||||||
Audio: 30+ min at 8kHz/8-bit mono via 16MB SPI flash
|
|
||||||
USB: Mass storage for drag-and-drop audio upload
|
|
||||||
BLE: Wireless audio transfer from phone
|
|
||||||
|
|
||||||
FIX: Sub-symbol names (the _0_1, _1_1 variants) must NOT include the
|
|
||||||
library prefix. Only the outer symbol declaration gets "baby_mobile:".
|
|
||||||
"""
|
|
||||||
|
|
||||||
import uuid
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
|
|
||||||
LIB = "baby_mobile"
|
|
||||||
|
|
||||||
def uid():
|
|
||||||
return str(uuid.uuid4())
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# SYMBOL HELPERS
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
def _sym_start(name, ref_prefix, default_value, footprint, extra_props=""):
|
|
||||||
"""Outer symbol with library prefix."""
|
|
||||||
return f"""
|
|
||||||
(symbol "{LIB}:{name}" (in_bom yes) (on_board yes)
|
|
||||||
(property "Reference" "{ref_prefix}" (at 0 1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "{default_value}" (at 0 -1 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "{footprint}" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
{extra_props}"""
|
|
||||||
|
|
||||||
|
|
||||||
def _unit(name, unit_id):
|
|
||||||
"""Inner sub-symbol WITHOUT library prefix — this was the bug."""
|
|
||||||
return f""" (symbol "{name}_{unit_id}" """
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# SYMBOL DEFINITIONS
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
def sym_mdbt50q():
|
|
||||||
"""MDBT50Q-P nRF52840 BLE module, 32 pins exposed."""
|
|
||||||
s = _sym_start("MDBT50Q", "U", "MDBT50Q-P1MV2",
|
|
||||||
"RF_Module:Raytac_MDBT50Q",
|
|
||||||
"")
|
|
||||||
s += f"""
|
|
||||||
(symbol "MDBT50Q_0_1"
|
|
||||||
(rectangle (start -20 30) (end 20 -30) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "MDBT50Q_1_1"
|
|
||||||
(pin power_in line (at -5 -33 90) (length 3) (name "GND" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -5 33 270) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "32" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 20 0) (length 3) (name "P0.00/XL1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 17.5 0) (length 3) (name "P0.01/XL2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 15 0) (length 3) (name "P0.02/AIN0" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 12.5 0) (length 3) (name "P0.03/AIN1" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 10 0) (length 3) (name "P0.04/AIN2" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 7.5 0) (length 3) (name "P0.05/AIN3" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 5 0) (length 3) (name "P0.06" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 2.5 0) (length 3) (name "P0.07" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 0 0) (length 3) (name "P0.08" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -2.5 0) (length 3) (name "P0.09/NFC1" (effects (font (size 1 1)))) (number "11" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -5 0) (length 3) (name "P0.10/NFC2" (effects (font (size 1 1)))) (number "12" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -7.5 0) (length 3) (name "P0.11" (effects (font (size 1 1)))) (number "13" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -10 0) (length 3) (name "P0.12" (effects (font (size 1 1)))) (number "14" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -12.5 0) (length 3) (name "P0.13" (effects (font (size 1 1)))) (number "15" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -15 0) (length 3) (name "P0.14" (effects (font (size 1 1)))) (number "16" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -23 -17.5 0) (length 3) (name "P0.15" (effects (font (size 1 1)))) (number "17" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 20 180) (length 3) (name "P0.16" (effects (font (size 1 1)))) (number "18" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 17.5 180) (length 3) (name "P0.17" (effects (font (size 1 1)))) (number "19" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 15 180) (length 3) (name "P0.18/~{{RESET}}" (effects (font (size 1 1)))) (number "20" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 12.5 180) (length 3) (name "P0.19" (effects (font (size 1 1)))) (number "21" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 10 180) (length 3) (name "P0.20" (effects (font (size 1 1)))) (number "22" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 7.5 180) (length 3) (name "P0.21" (effects (font (size 1 1)))) (number "23" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 5 180) (length 3) (name "P0.22" (effects (font (size 1 1)))) (number "24" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 2.5 180) (length 3) (name "P0.23" (effects (font (size 1 1)))) (number "25" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 0 180) (length 3) (name "P0.24" (effects (font (size 1 1)))) (number "26" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -2.5 180) (length 3) (name "P1.00" (effects (font (size 1 1)))) (number "27" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -5 180) (length 3) (name "D-" (effects (font (size 1 1)))) (number "28" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -7.5 180) (length 3) (name "D+" (effects (font (size 1 1)))) (number "29" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -10 180) (length 3) (name "P0.25" (effects (font (size 1 1)))) (number "30" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at 23 -12.5 180) (length 3) (name "P0.26" (effects (font (size 1 1)))) (number "31" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 23 -17.5 180) (length 3) (name "SWDIO" (effects (font (size 1 1)))) (number "33" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 23 -20 180) (length 3) (name "SWDCLK" (effects (font (size 1 1)))) (number "34" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_is25lp128f():
|
|
||||||
s = _sym_start("IS25LP128F", "U", "IS25LP128F", "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm")
|
|
||||||
s += f"""
|
|
||||||
(symbol "IS25LP128F_0_1"
|
|
||||||
(rectangle (start -7 6) (end 7 -6) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "IS25LP128F_1_1"
|
|
||||||
(pin input line (at -10 4 0) (length 3) (name "~{{CS}}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at -10 1.5 0) (length 3) (name "SO/IO1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -10 -1.5 0) (length 3) (name "~{{WP}}/IO2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -10 -4 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -4 180) (length 3) (name "SI/IO0" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -1.5 180) (length 3) (name "SCLK" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 1.5 180) (length 3) (name "~{{HOLD}}/IO3" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 10 4 180) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_pam8302a():
|
|
||||||
s = _sym_start("PAM8302A", "U", "PAM8302A", "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm")
|
|
||||||
s += f"""
|
|
||||||
(symbol "PAM8302A_0_1"
|
|
||||||
(rectangle (start -8 8) (end 8 -8) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "PAM8302A_1_1"
|
|
||||||
(pin input line (at -11 5 0) (length 3) (name "~{{SD}}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -11 2 0) (length 3) (name "VDD" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -11 -1 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -11 -4 0) (length 3) (name "A+" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -11 -7 0) (length 3) (name "A-" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at 11 2 180) (length 3) (name "VO+" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
|
|
||||||
(pin output line (at 11 -1 180) (length 3) (name "VO-" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 11 -4 180) (length 3) (name "PAD" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_tps61220():
|
|
||||||
s = _sym_start("TPS61220", "U", "TPS61220DCK", "Package_TO_SOT_SMD:SOT-353_SC-70-5")
|
|
||||||
s += f"""
|
|
||||||
(symbol "TPS61220_0_1"
|
|
||||||
(rectangle (start -7 5) (end 7 -5) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "TPS61220_1_1"
|
|
||||||
(pin power_in line (at -10 3 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at -10 -3 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at 10 -3 180) (length 3) (name "EN" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin power_out line (at 10 3 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 8 270) (length 3) (name "L" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_mcp1700():
|
|
||||||
s = _sym_start("MCP1700", "U", "MCP1700-3302E", "Package_TO_SOT_SMD:SOT-23")
|
|
||||||
s += f"""
|
|
||||||
(symbol "MCP1700_0_1"
|
|
||||||
(rectangle (start -6 4) (end 6 -4) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "MCP1700_1_1"
|
|
||||||
(pin power_in line (at -9 2 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 0 -7 90) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
(pin power_out line (at 9 2 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_generic_2pin(name, ref, value, fp):
|
|
||||||
"""Generic 2-pin symbol for caps, resistors, diodes, connectors."""
|
|
||||||
s = _sym_start(name, ref, value, fp)
|
|
||||||
s += f"""
|
|
||||||
(symbol "{name}_0_1"
|
|
||||||
(polyline (pts (xy -1.5 1) (xy 1.5 1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.5 -1) (xy 1.5 -1)) (stroke (width 0.4) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "{name}_1_1"
|
|
||||||
(pin passive line (at 0 3.5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -3.5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_usb_c():
|
|
||||||
s = _sym_start("USB_C", "J", "USB_C_Receptacle", "Connector_USB:USB_C_Receptacle_GCT_USB4085")
|
|
||||||
s += f"""
|
|
||||||
(symbol "USB_C_0_1"
|
|
||||||
(rectangle (start -6 8) (end 6 -8) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "USB_C_1_1"
|
|
||||||
(pin power_in line (at -9 6 0) (length 3) (name "VBUS" (effects (font (size 1 1)))) (number "A4" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -9 3 0) (length 3) (name "CC1" (effects (font (size 1 1)))) (number "A5" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at -9 0 0) (length 3) (name "CC2" (effects (font (size 1 1)))) (number "B5" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -9 -3 0) (length 3) (name "D+" (effects (font (size 1 1)))) (number "A6" (effects (font (size 1 1)))))
|
|
||||||
(pin bidirectional line (at -9 -6 0) (length 3) (name "D-" (effects (font (size 1 1)))) (number "A7" (effects (font (size 1 1)))))
|
|
||||||
(pin power_in line (at 9 -6 180) (length 3) (name "GND" (effects (font (size 1 1)))) (number "A1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 9 0 180) (length 3) (name "SHIELD" (effects (font (size 1 1)))) (number "S1" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_switch():
|
|
||||||
s = _sym_start("Switch", "SW", "SW", "Button_Switch_SMD:SW_SPST_TL3342")
|
|
||||||
s += f"""
|
|
||||||
(symbol "Switch_0_1"
|
|
||||||
(circle (center -2 0) (radius 0.4) (stroke (width 0) (type default)) (fill (type none)))
|
|
||||||
(circle (center 2 0) (radius 0.4) (stroke (width 0) (type default)) (fill (type none)))
|
|
||||||
(polyline (pts (xy -1.6 0) (xy 1.6 1)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Switch_1_1"
|
|
||||||
(pin passive line (at -5 0 0) (length 3) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 5 0 180) (length 3) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_nmos():
|
|
||||||
s = _sym_start("NMOS", "Q", "AO3400A", "Package_TO_SOT_SMD:SOT-23")
|
|
||||||
s += f"""
|
|
||||||
(symbol "NMOS_0_1"
|
|
||||||
(polyline (pts (xy -0.5 2) (xy -0.5 -2)) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "NMOS_1_1"
|
|
||||||
(pin passive line (at 0 5 270) (length 2.5) (name "D" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
|
|
||||||
(pin input line (at -4 0 0) (length 2.5) (name "G" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -5 90) (length 2.5) (name "S" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_inductor():
|
|
||||||
s = _sym_start("Inductor", "L", "4.7uH", "Inductor_SMD:L_0805_2012Metric")
|
|
||||||
s += f"""
|
|
||||||
(symbol "Inductor_0_1"
|
|
||||||
(arc (start 0 2.5) (mid 0.75 1.875) (end 0 1.25) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 1.25) (mid 0.75 0.625) (end 0 0) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 0) (mid 0.75 -0.625) (end 0 -1.25) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
(arc (start 0 -1.25) (mid 0.75 -1.875) (end 0 -2.5) (stroke (width 0.254) (type default)) (fill (type none)))
|
|
||||||
)
|
|
||||||
(symbol "Inductor_1_1"
|
|
||||||
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
|
|
||||||
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
|
|
||||||
)
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
def sym_conn(name, ref, npins, fp):
|
|
||||||
s = _sym_start(name, ref, name, fp)
|
|
||||||
h = npins * 2.5 + 1
|
|
||||||
s += f"""
|
|
||||||
(symbol "{name}_0_1"
|
|
||||||
(rectangle (start -3 {h}) (end 3 {-h}) (stroke (width 0.254) (type default)) (fill (type background)))
|
|
||||||
)
|
|
||||||
(symbol "{name}_1_1"
|
|
||||||
"""
|
|
||||||
for i in range(npins):
|
|
||||||
y = h - 2 - i * 2.5
|
|
||||||
s += f""" (pin passive line (at -6 {y:.1f} 0) (length 3) (name "P{i+1}" (effects (font (size 1 1)))) (number "{i+1}" (effects (font (size 1 1)))))
|
|
||||||
"""
|
|
||||||
s += """ )
|
|
||||||
)"""
|
|
||||||
return s
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# INSTANCE HELPER
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
def _inst(lib_name, ref, value, footprint, x, y, angle=0):
|
|
||||||
return f""" (symbol (lib_id "{LIB}:{lib_name}") (at {x} {y} {angle}) (unit 1)
|
|
||||||
(in_bom yes) (on_board yes) (dnp no)
|
|
||||||
(uuid "{uid()}")
|
|
||||||
(property "Reference" "{ref}" (at {x+3} {y-3} 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Value" "{value}" (at {x+3} {y+3} 0) (effects (font (size 1.27 1.27))))
|
|
||||||
(property "Footprint" "{footprint}" (at {x} {y} 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
(property "Datasheet" "" (at {x} {y} 0) (effects (font (size 1.27 1.27)) hide))
|
|
||||||
)"""
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# MAIN SCHEMATIC
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
def generate_schematic():
|
|
||||||
sch = []
|
|
||||||
sch.append(f"""(kicad_sch (version 20230121) (generator "baby_mobile_gen_v2")
|
|
||||||
|
|
||||||
(uuid "{uid()}")
|
|
||||||
(paper "A3")
|
|
||||||
|
|
||||||
(title_block
|
|
||||||
(title "Baby Mobile Audio Board v2")
|
|
||||||
(date "2026-03-09")
|
|
||||||
(rev "2.0")
|
|
||||||
(comment 1 "MDBT50Q (nRF52840) + IS25LP128F + PAM8302A")
|
|
||||||
(comment 2 "2xAA Battery + USB-C, Diode OR, TPS61220 Boost")
|
|
||||||
(comment 3 "BLE + USB mass storage for audio upload")
|
|
||||||
(comment 4 "8-ohm 0.25W Speaker, DC Motor, 8 Buttons")
|
|
||||||
)
|
|
||||||
""")
|
|
||||||
|
|
||||||
# ---- LIB_SYMBOLS ----
|
|
||||||
sch.append(" (lib_symbols")
|
|
||||||
sch.append(sym_mdbt50q())
|
|
||||||
sch.append(sym_is25lp128f())
|
|
||||||
sch.append(sym_pam8302a())
|
|
||||||
sch.append(sym_tps61220())
|
|
||||||
sch.append(sym_mcp1700())
|
|
||||||
sch.append(sym_generic_2pin("Capacitor", "C", "C", "Capacitor_SMD:C_0805_2012Metric"))
|
|
||||||
sch.append(sym_generic_2pin("Resistor", "R", "R", "Resistor_SMD:R_0805_2012Metric"))
|
|
||||||
sch.append(sym_generic_2pin("Diode_Schottky", "D", "BAT54S", "Diode_SMD:D_SOT-23_ANK"))
|
|
||||||
sch.append(sym_generic_2pin("LED", "D", "LED", "LED_SMD:LED_0805_2012Metric"))
|
|
||||||
sch.append(sym_generic_2pin("Conn_2Pin", "J", "Conn_2", "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal"))
|
|
||||||
sch.append(sym_switch())
|
|
||||||
sch.append(sym_nmos())
|
|
||||||
sch.append(sym_inductor())
|
|
||||||
sch.append(sym_usb_c())
|
|
||||||
sch.append(sym_conn("SWD_Header", "J", 4, "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical"))
|
|
||||||
sch.append(sym_conn("Serial_Header", "J", 3, "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical"))
|
|
||||||
sch.append(" )") # end lib_symbols
|
|
||||||
|
|
||||||
# ---- COMPONENT INSTANCES ----
|
|
||||||
|
|
||||||
# == POWER: Battery path ==
|
|
||||||
sch.append(_inst("Conn_2Pin", "J1", "BATTERY", "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal", 20, 40))
|
|
||||||
sch.append(_inst("Switch", "SW9", "PWR", "Button_Switch_THT:SW_SPDT_CK-JS102011SAQN", 38, 35))
|
|
||||||
sch.append(_inst("Diode_Schottky", "D1", "BAT54S", "Diode_SMD:D_SOT-23_ANK", 55, 35)) # battery diode
|
|
||||||
sch.append(_inst("Capacitor", "C1", "100uF", "Capacitor_THT:CP_Radial_D5.0mm_P2.00mm", 48, 45))
|
|
||||||
|
|
||||||
# == POWER: Boost converter TPS61220 ==
|
|
||||||
sch.append(_inst("TPS61220", "U4", "TPS61220DCK", "Package_TO_SOT_SMD:SOT-353_SC-70-5", 80, 40))
|
|
||||||
sch.append(_inst("Inductor", "L1", "4.7uH", "Inductor_SMD:L_0805_2012Metric", 80, 28))
|
|
||||||
sch.append(_inst("Capacitor", "C9", "10uF", "Capacitor_SMD:C_0805_2012Metric", 68, 45)) # boost input
|
|
||||||
sch.append(_inst("Capacitor", "C10", "10uF", "Capacitor_SMD:C_0805_2012Metric", 95, 45)) # boost output
|
|
||||||
|
|
||||||
# == POWER: USB path ==
|
|
||||||
sch.append(_inst("USB_C", "J6", "USB_C", "Connector_USB:USB_C_Receptacle_GCT_USB4085", 20, 80))
|
|
||||||
sch.append(_inst("Resistor", "R7", "5.1K", "Resistor_SMD:R_0805_2012Metric", 38, 83)) # CC1
|
|
||||||
sch.append(_inst("Resistor", "R8", "5.1K", "Resistor_SMD:R_0805_2012Metric", 38, 88)) # CC2
|
|
||||||
sch.append(_inst("Diode_Schottky", "D3", "BAT54S", "Diode_SMD:D_SOT-23_ANK", 55, 74)) # USB diode
|
|
||||||
sch.append(_inst("MCP1700", "U5", "MCP1700-3302E", "Package_TO_SOT_SMD:SOT-23", 72, 74))
|
|
||||||
sch.append(_inst("Capacitor", "C11", "1uF", "Capacitor_SMD:C_0805_2012Metric", 62, 82)) # LDO in
|
|
||||||
sch.append(_inst("Capacitor", "C12", "1uF", "Capacitor_SMD:C_0805_2012Metric", 82, 82)) # LDO out
|
|
||||||
|
|
||||||
# == MCU: MDBT50Q (nRF52840 module) ==
|
|
||||||
sch.append(_inst("MDBT50Q", "U1", "MDBT50Q-P1MV2", "RF_Module:Raytac_MDBT50Q", 160, 100))
|
|
||||||
|
|
||||||
# MCU decoupling
|
|
||||||
sch.append(_inst("Capacitor", "C2", "100nF", "Capacitor_SMD:C_0805_2012Metric", 135, 60))
|
|
||||||
sch.append(_inst("Capacitor", "C3", "10uF", "Capacitor_SMD:C_0805_2012Metric", 128, 60))
|
|
||||||
|
|
||||||
# == SPI FLASH: IS25LP128F ==
|
|
||||||
sch.append(_inst("IS25LP128F", "U2", "IS25LP128F", "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm", 260, 60))
|
|
||||||
sch.append(_inst("Capacitor", "C5", "100nF", "Capacitor_SMD:C_0805_2012Metric", 285, 50))
|
|
||||||
|
|
||||||
# == AUDIO AMP: PAM8302A ==
|
|
||||||
sch.append(_inst("PAM8302A", "U3", "PAM8302A", "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm", 260, 140))
|
|
||||||
sch.append(_inst("Resistor", "R2", "4.7K", "Resistor_SMD:R_0805_2012Metric", 220, 135)) # LPF R
|
|
||||||
sch.append(_inst("Capacitor", "C7", "10nF", "Capacitor_SMD:C_0805_2012Metric", 230, 145)) # LPF C
|
|
||||||
sch.append(_inst("Capacitor", "C6", "1uF", "Capacitor_SMD:C_0805_2012Metric", 240, 135)) # coupling
|
|
||||||
sch.append(_inst("Capacitor", "C8", "10uF", "Capacitor_SMD:C_0805_2012Metric", 285, 130)) # amp bypass
|
|
||||||
sch.append(_inst("Resistor", "R3", "100K", "Resistor_SMD:R_0805_2012Metric", 240, 155)) # SD pulldown
|
|
||||||
sch.append(_inst("Conn_2Pin", "J2", "SPEAKER", "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal", 290, 145))
|
|
||||||
|
|
||||||
# == MOTOR DRIVER ==
|
|
||||||
sch.append(_inst("NMOS", "Q1", "AO3400A", "Package_TO_SOT_SMD:SOT-23", 160, 200))
|
|
||||||
sch.append(_inst("Resistor", "R4", "100R", "Resistor_SMD:R_0805_2012Metric", 140, 200))
|
|
||||||
sch.append(_inst("Resistor", "R5", "100K", "Resistor_SMD:R_0805_2012Metric", 150, 212))
|
|
||||||
sch.append(_inst("Diode_Schottky", "D4", "SS14", "Diode_SMD:D_SMA", 175, 190, 90))
|
|
||||||
sch.append(_inst("Conn_2Pin", "J3", "MOTOR", "Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal", 180, 180))
|
|
||||||
|
|
||||||
# == 8 BUTTONS ==
|
|
||||||
for i in range(8):
|
|
||||||
y = 80 + i * 14
|
|
||||||
sch.append(_inst("Switch", f"SW{i+1}", f"BTN{i+1}", "Button_Switch_SMD:SW_SPST_TL3342", 300, y))
|
|
||||||
|
|
||||||
# == STATUS LED ==
|
|
||||||
sch.append(_inst("LED", "D2", "LED_GRN", "LED_SMD:LED_0805_2012Metric", 115, 200))
|
|
||||||
sch.append(_inst("Resistor", "R6", "1K", "Resistor_SMD:R_0805_2012Metric", 105, 200))
|
|
||||||
|
|
||||||
# == HEADERS ==
|
|
||||||
sch.append(_inst("SWD_Header", "J4", "SWD", "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical", 200, 60))
|
|
||||||
sch.append(_inst("Serial_Header", "J5", "SERIAL", "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical", 200, 30))
|
|
||||||
|
|
||||||
# ---- NET LABELS ----
|
|
||||||
labels = [
|
|
||||||
# 3.3V rail (output of boost OR LDO)
|
|
||||||
("3V3", 95, 37), ("3V3", 135, 55), ("3V3", 128, 55),
|
|
||||||
("3V3", 285, 45), ("3V3", 285, 125), ("3V3", 155, 67),
|
|
||||||
("3V3", 82, 72), ("3V3", 180, 175),
|
|
||||||
|
|
||||||
# Battery rail (pre-boost)
|
|
||||||
("VBAT", 48, 35), ("VBAT", 55, 30),
|
|
||||||
("VBAT", 68, 37),
|
|
||||||
|
|
||||||
# Boost input/output
|
|
||||||
("VBOOST_IN", 65, 37), ("VBOOST_IN", 70, 37),
|
|
||||||
("3V3", 90, 37),
|
|
||||||
|
|
||||||
# USB VBUS
|
|
||||||
("USB_VBUS", 29, 74), ("USB_VBUS", 55, 69),
|
|
||||||
("USB_LDO_OUT", 81, 72),
|
|
||||||
|
|
||||||
# GND everywhere
|
|
||||||
("GND", 48, 55), ("GND", 68, 55), ("GND", 95, 55),
|
|
||||||
("GND", 80, 50), ("GND", 155, 133),
|
|
||||||
("GND", 260, 70), ("GND", 285, 55), ("GND", 285, 155),
|
|
||||||
("GND", 160, 215), ("GND", 150, 218),
|
|
||||||
("GND", 230, 155), ("GND", 240, 165),
|
|
||||||
("GND", 62, 92), ("GND", 82, 92), ("GND", 72, 81),
|
|
||||||
("GND", 38, 93), ("GND", 38, 98),
|
|
||||||
("GND", 135, 65), ("GND", 128, 65),
|
|
||||||
|
|
||||||
# USB data
|
|
||||||
("USB_D+", 29, 77), ("USB_D+", 183, 92.5),
|
|
||||||
("USB_D-", 29, 80), ("USB_D-", 183, 95),
|
|
||||||
|
|
||||||
# USB CC (to pulldowns)
|
|
||||||
("USB_CC1", 29, 83), ("USB_CC1", 38, 78),
|
|
||||||
("USB_CC2", 29, 86), ("USB_CC2", 38, 83),
|
|
||||||
|
|
||||||
# SPI bus
|
|
||||||
("SPI_MOSI", 183, 87.5), ("SPI_MOSI", 250, 56),
|
|
||||||
("SPI_MISO", 183, 85), ("SPI_MISO", 250, 61.5),
|
|
||||||
("SPI_SCK", 183, 82.5), ("SPI_SCK", 270, 58.5),
|
|
||||||
("FLASH_CS", 183, 80), ("FLASH_CS", 250, 64),
|
|
||||||
|
|
||||||
# Audio
|
|
||||||
("AUDIO_PWM", 183, 100), ("AUDIO_PWM", 210, 135),
|
|
||||||
("AMP_SD", 183, 102.5), ("AMP_SD", 240, 150),
|
|
||||||
|
|
||||||
# Motor
|
|
||||||
("MOTOR_PWM", 137, 112.5), ("MOTOR_PWM", 130, 200),
|
|
||||||
|
|
||||||
# Buttons (directly to GPIOs)
|
|
||||||
("BTN1", 295, 80), ("BTN1", 137, 120),
|
|
||||||
("BTN2", 295, 94), ("BTN2", 137, 117.5),
|
|
||||||
("BTN3", 295, 108), ("BTN3", 137, 115),
|
|
||||||
("BTN4", 295, 122), ("BTN4", 137, 112.5),
|
|
||||||
("BTN5", 295, 136), ("BTN5", 137, 110),
|
|
||||||
("BTN6", 295, 150), ("BTN6", 137, 107.5),
|
|
||||||
("BTN7", 295, 164), ("BTN7", 137, 105),
|
|
||||||
("BTN8", 295, 178), ("BTN8", 137, 102.5),
|
|
||||||
|
|
||||||
# Button GND side
|
|
||||||
("GND", 305, 80), ("GND", 305, 94), ("GND", 305, 108), ("GND", 305, 122),
|
|
||||||
("GND", 305, 136), ("GND", 305, 150), ("GND", 305, 164), ("GND", 305, 178),
|
|
||||||
|
|
||||||
# LED
|
|
||||||
("LED_OUT", 95, 200), ("LED_OUT", 137, 100),
|
|
||||||
|
|
||||||
# SWD header
|
|
||||||
("SWDIO", 194, 55.5), ("SWDIO", 183, 82.5),
|
|
||||||
("SWDCLK", 194, 58), ("SWDCLK", 183, 80),
|
|
||||||
("3V3", 194, 53), ("GND", 194, 60.5),
|
|
||||||
|
|
||||||
# Serial header
|
|
||||||
("TXD", 194, 25.5), ("TXD", 137, 80),
|
|
||||||
("RXD", 194, 28), ("RXD", 137, 82.5),
|
|
||||||
("GND", 194, 30.5),
|
|
||||||
|
|
||||||
# Flash WP and HOLD tied to VCC
|
|
||||||
("3V3", 250, 58.5), ("3V3", 270, 61.5),
|
|
||||||
|
|
||||||
# Boost EN tied to VIN (always on when battery present)
|
|
||||||
("VBAT", 90, 43),
|
|
||||||
]
|
|
||||||
|
|
||||||
for name, x, y in labels:
|
|
||||||
sch.append(f""" (label "{name}" (at {x} {y} 0) (effects (font (size 1.27 1.27))) (uuid "{uid()}"))""")
|
|
||||||
|
|
||||||
# ---- TEXT NOTES ----
|
|
||||||
notes = [
|
|
||||||
(10, 12, "POWER: 2xAA → BAT54S → TPS61220 boost → 3.3V (1.8-3.2V input)"),
|
|
||||||
(10, 15, "USB: VBUS → BAT54S → MCP1700 LDO → 3.3V (safe with any battery chemistry)"),
|
|
||||||
(10, 18, "MCU: MDBT50Q (nRF52840) — BLE 5.0, USB 2.0, 1.7-5.5V, UF2 bootloader"),
|
|
||||||
(10, 21, "FLASH: IS25LP128F 16MB (2.3-3.6V) = ~33 min @ 8kHz 8-bit PCM"),
|
|
||||||
(10, 24, "AMP: PAM8302A Class-D, 90% eff, Vmin=2.0V, shutdown pin for power save"),
|
|
||||||
(10, 27, "MOTOR: AO3400A logic-level N-MOSFET, PWM speed control"),
|
|
||||||
(10, 230, "USB-C: Drag-and-drop audio as mass storage device"),
|
|
||||||
(10, 233, "BLE: Wireless audio upload from phone (Web Bluetooth compatible)"),
|
|
||||||
(10, 236, "FIRMWARE: UF2 bootloader — update by drag-and-drop, no programmer needed"),
|
|
||||||
(10, 239, "RUNTIME: Audio+Motor ~25h, Audio only ~167h, Sleep ~years on 2xAA"),
|
|
||||||
]
|
|
||||||
for x, y, text in notes:
|
|
||||||
sch.append(f""" (text "{text}" (at {x} {y} 0)
|
|
||||||
(effects (font (size 1.5 1.5)) (justify left))
|
|
||||||
(uuid "{uid()}")
|
|
||||||
)""")
|
|
||||||
|
|
||||||
sch.append(")") # end kicad_sch
|
|
||||||
return "\n".join(sch)
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# PROJECT FILE
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
def generate_project():
|
|
||||||
return json.dumps({
|
|
||||||
"meta": {"filename": "baby-mobile-v2.kicad_pro", "version": 1},
|
|
||||||
"board": {
|
|
||||||
"design_settings": {
|
|
||||||
"defaults": {"board_outline_line_width": 0.1, "copper_line_width": 0.2},
|
|
||||||
"rules": {"min_copper_edge_clearance": 0.3, "min_track_width": 0.2,
|
|
||||||
"min_via_diameter": 0.6, "min_via_annular_width": 0.13}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"net_settings": {
|
|
||||||
"classes": [{"name": "Default", "clearance": 0.2, "track_width": 0.3,
|
|
||||||
"via_diameter": 0.6, "via_drill": 0.3}]
|
|
||||||
},
|
|
||||||
"schematic": {"legacy_lib_dir": "", "legacy_lib_list": []},
|
|
||||||
"sheets": [["", ""]]
|
|
||||||
}, indent=2)
|
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
|
||||||
# MAIN
|
|
||||||
# ============================================================
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
outdir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
|
|
||||||
sch = generate_schematic()
|
|
||||||
sch_path = os.path.join(outdir, "baby-mobile-v2.kicad_sch")
|
|
||||||
with open(sch_path, "w") as f:
|
|
||||||
f.write(sch)
|
|
||||||
print(f"Written: {sch_path} ({len(sch)} bytes)")
|
|
||||||
|
|
||||||
proj = generate_project()
|
|
||||||
proj_path = os.path.join(outdir, "baby-mobile-v2.kicad_pro")
|
|
||||||
with open(proj_path, "w") as f:
|
|
||||||
f.write(proj)
|
|
||||||
print(f"Written: {proj_path} ({len(proj)} bytes)")
|
|
||||||
|
|
||||||
# Validate: check no sub-symbol has library prefix
|
|
||||||
import re
|
|
||||||
outer = re.findall(r'\(symbol "baby_mobile:[^"]+?"', sch)
|
|
||||||
inner_bad = re.findall(r'\(symbol "baby_mobile:[^"]+?_[01]_1"', sch)
|
|
||||||
print(f"\nValidation: {len(outer)} outer symbols, {len(inner_bad)} bad inner symbols")
|
|
||||||
if inner_bad:
|
|
||||||
print("ERROR: Found inner symbols with library prefix:")
|
|
||||||
for m in inner_bad:
|
|
||||||
print(f" {m}")
|
|
||||||
else:
|
|
||||||
print("OK: All inner sub-symbols correctly omit library prefix")
|
|
||||||
@@ -0,0 +1,505 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Generate KiCad 7 combined panel PCB for Baby Mobile project.
|
||||||
|
|
||||||
|
PANEL LAYOUT (v-score breakaway):
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ │
|
||||||
|
│ CARRIER BOARD (42mm × 24mm) │
|
||||||
|
│ ┌──────────────────────────────────────────────┐ │
|
||||||
|
│ │ ┌─────────────┐ [IS25LP128F] [JST SH 10] │ │
|
||||||
|
│ │ │ XIAO ■USB │ ●1 J1 │ │
|
||||||
|
│ │ │ nRF52840 │ [C3] [R1][C5] │ │
|
||||||
|
│ │ │ │ │ │
|
||||||
|
│ │ │ D0 .... D10│ [TPS61220] [R2] │ │
|
||||||
|
│ │ │ D1 D9 │ [L1][C1][C2] │ │
|
||||||
|
│ │ │ ... ...│ │ │
|
||||||
|
│ │ │ D6 3V3│ (M2) (M2) │ │
|
||||||
|
│ │ └─────────────┘ │ │
|
||||||
|
│ └──────────────────────────────────────────────┘ │
|
||||||
|
│ - - SNAP - - - - - - - - - - - - - - - - - - - - - │
|
||||||
|
│ ┌──────────┐ ┌────────────┐ ┌────────────┐ │
|
||||||
|
│ │ SOP-8 │ │ SOP-16N │ │ SOP-16W │ │
|
||||||
|
│ │ castell. │ │ castellated│ │ castellated│ │
|
||||||
|
│ │ [JST 8p] │ │ [JST 10p] │ │ [JST 10p] │ │
|
||||||
|
│ └──────────┘ └────────────┘ └────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
Each SOP adapter:
|
||||||
|
- Board edges cut through SOP pad centers → castellated half-holes
|
||||||
|
- Top surface: JST SH connector + pin 1 dot + pin number silk labels
|
||||||
|
- Bottom surface: nothing (sits flush on toy PCB)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import uuid, os, json
|
||||||
|
|
||||||
|
def uid():
|
||||||
|
return str(uuid.uuid4())
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Geometry Constants
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
CARRIER_W = 42.0
|
||||||
|
CARRIER_H = 24.0
|
||||||
|
ADAPTER_AREA_H = 10.0 # height for adapter strip below carrier
|
||||||
|
PANEL_W = 48.0
|
||||||
|
PANEL_H = CARRIER_H + ADAPTER_AREA_H + 2.0 # +2 for v-score margin
|
||||||
|
|
||||||
|
SOP_PITCH = 1.27
|
||||||
|
SOP8_PINS_PER_SIDE = 4
|
||||||
|
SOP16_PINS_PER_SIDE = 8
|
||||||
|
|
||||||
|
# SOP pad dimensions
|
||||||
|
PAD_W = 0.6
|
||||||
|
PAD_H = 1.5
|
||||||
|
|
||||||
|
# Castellated hole
|
||||||
|
CAST_DRILL = 0.6
|
||||||
|
CAST_PAD = 1.0
|
||||||
|
|
||||||
|
# JST SH 1.0mm pitch
|
||||||
|
JST_PITCH = 1.0
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Helpers
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
def smd(name, x, y, w, h, net, nname, layer="F.Cu", mask=True):
|
||||||
|
ml = f'"{layer}" "{layer[0]}.Paste" "{layer[0]}.Mask"' if mask else f'"{layer}"'
|
||||||
|
return f' (pad "{name}" smd rect (at {x:.3f} {y:.3f}) (size {w} {h}) (layers {ml}) (net {net} "{nname}") (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def thru(name, x, y, pd, dd, net, nname):
|
||||||
|
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size {pd} {pd}) (drill {dd}) (layers "*.Cu" "*.Mask") (net {net} "{nname}") (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def cast(name, x, y, net, nname):
|
||||||
|
"""Castellated half-hole: thru-hole pad on board edge."""
|
||||||
|
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size {CAST_PAD} {CAST_PAD}) (drill {CAST_DRILL}) (layers "*.Cu" "*.Mask") (net {net} "{nname}") (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def line(x1, y1, x2, y2, layer="Edge.Cuts", w=0.1):
|
||||||
|
return f' (gr_line (start {x1} {y1}) (end {x2} {y2}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def rect(x1, y1, x2, y2, layer="F.SilkS", w=0.15):
|
||||||
|
return f' (gr_rect (start {x1} {y1}) (end {x2} {y2}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def txt(s, x, y, sz=0.8, layer="F.SilkS", bold=False):
|
||||||
|
th = sz * 0.15
|
||||||
|
b = " bold" if bold else ""
|
||||||
|
return f' (gr_text "{s}" (at {x} {y}) (layer "{layer}") (uuid "{uid()}") (effects (font (size {sz} {sz}) (thickness {th}){b})))'
|
||||||
|
|
||||||
|
def circle_mark(x, y, r=0.3, layer="F.SilkS"):
|
||||||
|
"""Pin 1 dot marker."""
|
||||||
|
return f' (gr_circle (center {x} {y}) (end {x+r} {y}) (layer "{layer}") (width 0.15) (fill solid) (uuid "{uid()}"))'
|
||||||
|
|
||||||
|
def fp_start(name, x, y, layer="F.Cu"):
|
||||||
|
return f"""
|
||||||
|
(footprint "panel:{name}" (layer "{layer}")
|
||||||
|
(at {x} {y})
|
||||||
|
(uuid "{uid()}")
|
||||||
|
(fp_text reference "{name}" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
|
||||||
|
(fp_text value "" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
|
||||||
|
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))"""
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Generate Panel
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
def generate_panel():
|
||||||
|
ox, oy = 100, 100 # KiCad origin offset
|
||||||
|
|
||||||
|
pcb = []
|
||||||
|
|
||||||
|
# --- Header ---
|
||||||
|
pcb.append(f"""(kicad_pcb (version 20221018) (generator "panel_gen_v3")
|
||||||
|
(general (thickness 1.6))
|
||||||
|
(paper "A4")
|
||||||
|
(title_block
|
||||||
|
(title "Baby Mobile — Combined Panel")
|
||||||
|
(date "2026-03-11")
|
||||||
|
(rev "3.0")
|
||||||
|
(comment 1 "Carrier: XIAO nRF52840 + IS25LP128F + TPS61220")
|
||||||
|
(comment 2 "Breakaway: SOP-8, SOP-16N, SOP-16W castellated adapters")
|
||||||
|
(comment 3 "Order as one panel from JLCPCB with castellated holes + v-score")
|
||||||
|
)
|
||||||
|
(layers
|
||||||
|
(0 "F.Cu" signal) (31 "B.Cu" signal)
|
||||||
|
(34 "B.Paste" user) (35 "F.Paste" user)
|
||||||
|
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
|
||||||
|
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
|
||||||
|
(44 "Edge.Cuts" user) (49 "F.Fab" user "F.Fab") (48 "B.Fab" user "B.Fab")
|
||||||
|
)
|
||||||
|
(setup (pad_to_mask_clearance 0.05))
|
||||||
|
(net 0 "")
|
||||||
|
(net 1 "GND") (net 2 "VBAT") (net 3 "3V3")
|
||||||
|
(net 4 "SPI_MOSI") (net 5 "SPI_MISO") (net 6 "SPI_SCK") (net 7 "FLASH_CS")
|
||||||
|
(net 8 "BOOST_SW")
|
||||||
|
(net 9 "SIG_1") (net 10 "SIG_2") (net 11 "SIG_3") (net 12 "SIG_4")
|
||||||
|
(net 13 "SIG_5") (net 14 "SIG_6") (net 15 "SIG_7") (net 16 "SIG_8")
|
||||||
|
""")
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# PANEL OUTLINE (Edge.Cuts)
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
# Main panel rectangle
|
||||||
|
pcb.append(line(ox, oy, ox+PANEL_W, oy))
|
||||||
|
pcb.append(line(ox+PANEL_W, oy, ox+PANEL_W, oy+PANEL_H))
|
||||||
|
pcb.append(line(ox+PANEL_W, oy+PANEL_H, ox, oy+PANEL_H))
|
||||||
|
pcb.append(line(ox, oy+PANEL_H, ox, oy))
|
||||||
|
|
||||||
|
# V-score line between carrier and adapter strip
|
||||||
|
vscore_y = oy + CARRIER_H + 1.0
|
||||||
|
pcb.append(line(ox, vscore_y, ox+PANEL_W, vscore_y))
|
||||||
|
# Mark v-score on silk
|
||||||
|
pcb.append(txt("— SNAP HERE —", ox + PANEL_W/2, vscore_y, 0.6))
|
||||||
|
|
||||||
|
# V-score lines between adapters in the strip
|
||||||
|
adapt_y = vscore_y + 1.0
|
||||||
|
# Adapter positions in the strip
|
||||||
|
a8_x = ox + 1.0
|
||||||
|
a8_w = 10.0
|
||||||
|
a16n_x = a8_x + a8_w + 1.0
|
||||||
|
a16n_w = 14.0
|
||||||
|
a16w_x = a16n_x + a16n_w + 1.0
|
||||||
|
a16w_w = 14.0
|
||||||
|
|
||||||
|
pcb.append(line(a16n_x - 0.5, adapt_y, a16n_x - 0.5, oy + PANEL_H))
|
||||||
|
pcb.append(line(a16w_x - 0.5, adapt_y, a16w_x - 0.5, oy + PANEL_H))
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# CARRIER BOARD COMPONENTS
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
cx = ox + 3 # carrier area left edge (with margin)
|
||||||
|
cy = oy + 1 # carrier area top edge
|
||||||
|
|
||||||
|
# ---- XIAO SOCKET ----
|
||||||
|
xiao_cx = cx + 13
|
||||||
|
xiao_cy = cy + CARRIER_H/2
|
||||||
|
xiao_w, xiao_h = 21, 17.5
|
||||||
|
row_half = 17.78 / 2
|
||||||
|
|
||||||
|
# XIAO outline with USB-C rectangle
|
||||||
|
pcb.append(rect(xiao_cx - xiao_w/2, xiao_cy - xiao_h/2,
|
||||||
|
xiao_cx + xiao_w/2, xiao_cy + xiao_h/2))
|
||||||
|
# USB-C bump
|
||||||
|
usb_w, usb_h = 9, 3.5
|
||||||
|
pcb.append(rect(xiao_cx - xiao_w/2 - 1, xiao_cy - usb_h/2,
|
||||||
|
xiao_cx - xiao_w/2, xiao_cy + usb_h/2))
|
||||||
|
pcb.append(txt("USB-C", xiao_cx - xiao_w/2 - 3, xiao_cy, 0.5))
|
||||||
|
pcb.append(txt("XIAO nRF52840", xiao_cx, xiao_cy, 0.7, bold=True))
|
||||||
|
|
||||||
|
# Pin labels along XIAO outline
|
||||||
|
left_labels = ["D0", "D1", "D2", "D3", "D4", "D5", "D6"]
|
||||||
|
right_labels = ["D10", "D9", "D8", "D7", "3V3", "GND", "5V"]
|
||||||
|
|
||||||
|
# Left header (D0-D6 → signals from toy)
|
||||||
|
left_nets = [9, 10, 11, 12, 13, 14, 15] # SIG_1 through SIG_7
|
||||||
|
pcb.append(fp_start("XIAO_L", xiao_cx - row_half, xiao_cy))
|
||||||
|
for i in range(7):
|
||||||
|
y = -7.62 + i * 2.54
|
||||||
|
pcb.append(thru(left_labels[i], 0, y, 1.7, 1.0, left_nets[i], f"SIG_{i+1}"))
|
||||||
|
pcb.append(" )")
|
||||||
|
for i, lbl in enumerate(left_labels):
|
||||||
|
pcb.append(txt(lbl, xiao_cx - row_half - 3, xiao_cy - 7.62 + i*2.54, 0.5))
|
||||||
|
|
||||||
|
# Right header (D10,D9,D8,D7 → audio/SPI/motor; 3V3,GND,5V → power)
|
||||||
|
right_nets = [16, 6, 4, 5, 3, 1, 0]
|
||||||
|
right_nnames = ["SIG_8", "SPI_SCK", "SPI_MOSI", "SPI_MISO", "3V3", "GND", ""]
|
||||||
|
pcb.append(fp_start("XIAO_R", xiao_cx + row_half, xiao_cy))
|
||||||
|
for i in range(7):
|
||||||
|
y = -7.62 + i * 2.54
|
||||||
|
n = right_nets[i]
|
||||||
|
nn = right_nnames[i]
|
||||||
|
if n > 0:
|
||||||
|
pcb.append(thru(right_labels[i], 0, y, 1.7, 1.0, n, nn))
|
||||||
|
else:
|
||||||
|
pcb.append(f' (pad "{right_labels[i]}" thru_hole circle (at 0 {y:.2f}) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
|
||||||
|
pcb.append(" )")
|
||||||
|
for i, lbl in enumerate(right_labels):
|
||||||
|
pcb.append(txt(lbl, xiao_cx + row_half + 3, xiao_cy - 7.62 + i*2.54, 0.5))
|
||||||
|
|
||||||
|
# ---- IS25LP128F (SOIC-8) ----
|
||||||
|
fl_cx = cx + 31
|
||||||
|
fl_cy = cy + 5.5
|
||||||
|
soic_span = 5.4
|
||||||
|
|
||||||
|
# Pin 1 dot
|
||||||
|
pcb.append(circle_mark(fl_cx - 2.5, fl_cy + soic_span/2 + 0.8))
|
||||||
|
# Outline
|
||||||
|
pcb.append(rect(fl_cx - 2.5, fl_cy - 2, fl_cx + 2.5, fl_cy + 2))
|
||||||
|
pcb.append(txt("U2 IS25LP128F", fl_cx, fl_cy - 3.5, 0.5))
|
||||||
|
pcb.append(txt("●1", fl_cx - 2.5, fl_cy + soic_span/2 + 1.5, 0.4))
|
||||||
|
|
||||||
|
flash_pins = [
|
||||||
|
(1, -1.905, soic_span/2, 7, "FLASH_CS"),
|
||||||
|
(2, -0.635, soic_span/2, 5, "SPI_MISO"),
|
||||||
|
(3, 0.635, soic_span/2, 3, "3V3"),
|
||||||
|
(4, 1.905, soic_span/2, 1, "GND"),
|
||||||
|
(5, 1.905, -soic_span/2, 4, "SPI_MOSI"),
|
||||||
|
(6, 0.635, -soic_span/2, 6, "SPI_SCK"),
|
||||||
|
(7, -0.635, -soic_span/2, 3, "3V3"),
|
||||||
|
(8, -1.905, -soic_span/2, 3, "3V3"),
|
||||||
|
]
|
||||||
|
pcb.append(fp_start("IS25LP128F", fl_cx, fl_cy))
|
||||||
|
for pin, x, y, net, nn in flash_pins:
|
||||||
|
pcb.append(smd(str(pin), x, y, 0.6, 1.5, net, nn))
|
||||||
|
pcb.append(" )")
|
||||||
|
|
||||||
|
# Flash decoupling C3 (0805)
|
||||||
|
pcb.append(fp_start("C3", fl_cx + 5, fl_cy))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 3, "3V3"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("C3 100n", fl_cx + 5, fl_cy - 1.2, 0.4))
|
||||||
|
# Polarity: + mark on pin 1 side
|
||||||
|
pcb.append(txt("+", fl_cx + 3.8, fl_cy, 0.4))
|
||||||
|
|
||||||
|
# ---- Flash CS pullup R2 ----
|
||||||
|
pcb.append(fp_start("R2", fl_cx + 5, fl_cy + 3))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 7, "FLASH_CS"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 3, "3V3"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("R2 10K", fl_cx + 5, fl_cy + 1.8, 0.4))
|
||||||
|
|
||||||
|
# ---- Audio RC LPF: R1 + C5 ----
|
||||||
|
pcb.append(fp_start("R1", cx + 31, cy + 12))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 16, "SIG_8")) # from D10 (audio PWM)
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 0, "AUDIO_FILT")) # to cap & JST
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("R1 4.7K", cx+31, cy+10.8, 0.4))
|
||||||
|
|
||||||
|
pcb.append(fp_start("C5", cx + 31, cy + 14.5))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 0, "AUDIO_FILT"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("C5 10n", cx+31, cy+13.3, 0.4))
|
||||||
|
|
||||||
|
# ---- TPS61220 BOOST ----
|
||||||
|
boost_cx = cx + 31
|
||||||
|
boost_cy = cy + 19
|
||||||
|
|
||||||
|
# Pin 1 dot
|
||||||
|
pcb.append(circle_mark(boost_cx - 1.2, boost_cy + 1.5))
|
||||||
|
pcb.append(txt("U1 TPS61220", boost_cx, boost_cy - 2.5, 0.5))
|
||||||
|
pcb.append(txt("●1", boost_cx - 1.2, boost_cy + 2.2, 0.4))
|
||||||
|
|
||||||
|
pcb.append(fp_start("TPS61220", boost_cx, boost_cy))
|
||||||
|
pcb.append(smd("1", -0.65, 0.7, 0.4, 0.55, 2, "VBAT")) # VIN
|
||||||
|
pcb.append(smd("2", 0, 0.7, 0.4, 0.55, 1, "GND")) # GND
|
||||||
|
pcb.append(smd("3", 0.65, 0.7, 0.4, 0.55, 2, "VBAT")) # EN (tied to VIN)
|
||||||
|
pcb.append(smd("4", 0.65,-0.7, 0.4, 0.55, 3, "3V3")) # VOUT
|
||||||
|
pcb.append(smd("5", -0.65,-0.7, 0.4, 0.55, 8, "BOOST_SW")) # L (switch)
|
||||||
|
pcb.append(" )")
|
||||||
|
|
||||||
|
# L1 inductor (0805)
|
||||||
|
pcb.append(fp_start("L1", boost_cx - 4, boost_cy))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 8, "BOOST_SW"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 2, "VBAT"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("L1 4.7u", boost_cx - 4, boost_cy - 1.2, 0.4))
|
||||||
|
|
||||||
|
# C1 boost input (0805)
|
||||||
|
pcb.append(fp_start("C1", boost_cx - 4, boost_cy + 3))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 2, "VBAT"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("C1 10u", boost_cx - 4, boost_cy + 1.8, 0.4))
|
||||||
|
|
||||||
|
# C2 boost output (0805)
|
||||||
|
pcb.append(fp_start("C2", boost_cx + 4, boost_cy))
|
||||||
|
pcb.append(smd("1", -1.0, 0, 1.0, 1.2, 3, "3V3"))
|
||||||
|
pcb.append(smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("C2 10u", boost_cx + 4, boost_cy - 1.2, 0.4))
|
||||||
|
|
||||||
|
# ---- JST SH 10-pin connector (top-right of carrier) ----
|
||||||
|
jst_cx = cx + 38
|
||||||
|
jst_cy = cy + 10
|
||||||
|
|
||||||
|
pcb.append(txt("J1 TO TOY →", jst_cx - 5, jst_cy - 4, 0.5))
|
||||||
|
pcb.append(txt("1=VBAT 2=GND 3-10=SIG", jst_cx - 5, jst_cy + 5, 0.35))
|
||||||
|
# Pin 1 mark
|
||||||
|
pcb.append(circle_mark(jst_cx - 4.5 * JST_PITCH - 0.8, jst_cy))
|
||||||
|
|
||||||
|
jst_pin_nets = [
|
||||||
|
(1, 2, "VBAT"), (2, 1, "GND"),
|
||||||
|
(3, 9, "SIG_1"), (4, 10, "SIG_2"), (5, 11, "SIG_3"),
|
||||||
|
(6, 12, "SIG_4"), (7, 13, "SIG_5"), (8, 14, "SIG_6"),
|
||||||
|
(9, 15, "SIG_7"), (10, 16, "SIG_8"),
|
||||||
|
]
|
||||||
|
|
||||||
|
pcb.append(fp_start("J1_JST_SH10", jst_cx, jst_cy))
|
||||||
|
for pin, net, nn in jst_pin_nets:
|
||||||
|
x = -(9 * JST_PITCH / 2) + (pin - 1) * JST_PITCH
|
||||||
|
pcb.append(smd(str(pin), x, 0, 0.6, 1.2, net, nn))
|
||||||
|
# Anchor pads
|
||||||
|
pcb.append(smd("S1", -6, 2.15, 1.2, 1.8, 0, "", mask=False))
|
||||||
|
pcb.append(smd("S2", 6, 2.15, 1.2, 1.8, 0, "", mask=False))
|
||||||
|
pcb.append(" )")
|
||||||
|
|
||||||
|
# ---- Mounting holes ----
|
||||||
|
for mx, my in [(cx + 1.5, cy + 1.5), (cx + CARRIER_W - 4, cy + CARRIER_H - 2)]:
|
||||||
|
pcb.append(fp_start(f"MH", mx, my))
|
||||||
|
pcb.append(f' (pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
|
||||||
|
pcb.append(" )")
|
||||||
|
|
||||||
|
# ---- Carrier silkscreen ----
|
||||||
|
pcb.append(txt("Baby Mobile Carrier v3.0", cx + CARRIER_W/2, cy - 0.5, 0.7, bold=True))
|
||||||
|
pcb.append(txt("3V3", cx + CARRIER_W/2 + 8, cy + CARRIER_H + 0.3, 0.4))
|
||||||
|
|
||||||
|
# Back silk: wiring guide
|
||||||
|
pcb.append(txt("XIAO D0-D6 = SIG_1-7 (buttons/speaker/motor)", cx + CARRIER_W/2, cy + 5, 0.4, "B.SilkS"))
|
||||||
|
pcb.append(txt("XIAO D7=MISO D8=MOSI D9=SCK D10=AUDIO", cx + CARRIER_W/2, cy + 7, 0.4, "B.SilkS"))
|
||||||
|
pcb.append(txt("JST: 1=VBAT 2=GND 3-10=SIG_1-8", cx + CARRIER_W/2, cy + 9, 0.4, "B.SilkS"))
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# BREAKAWAY ADAPTERS
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
def make_adapter(name, cx, cy, pins_per_side, row_span, n_jst_pins):
|
||||||
|
"""
|
||||||
|
Castellated SOP adapter.
|
||||||
|
Board edges run through pad centers on both long sides.
|
||||||
|
JST SH connector on one short edge (top).
|
||||||
|
"""
|
||||||
|
total_pins = pins_per_side * 2
|
||||||
|
row_len = (pins_per_side - 1) * SOP_PITCH
|
||||||
|
|
||||||
|
# Board dimensions
|
||||||
|
bw = row_len + 2.0 # a bit wider than pin span
|
||||||
|
bh = row_span # exactly the distance between pin rows — edges at pad centers
|
||||||
|
jst_tab = 3.0 # extra tab at top for JST connector
|
||||||
|
total_h = bh + jst_tab
|
||||||
|
|
||||||
|
bx = cx - bw / 2
|
||||||
|
by = cy - total_h / 2
|
||||||
|
|
||||||
|
# Board outline
|
||||||
|
pcb.append(line(bx, by, bx + bw, by))
|
||||||
|
pcb.append(line(bx + bw, by, bx + bw, by + total_h))
|
||||||
|
pcb.append(line(bx + bw, by + total_h, bx, by + total_h))
|
||||||
|
pcb.append(line(bx, by + total_h, bx, by))
|
||||||
|
|
||||||
|
# Labels
|
||||||
|
pcb.append(txt(name, cx, by - 1.0, 0.6, bold=True))
|
||||||
|
|
||||||
|
# Castellated pads — pins 1..N on bottom edge, pins N+1..2N on top edge
|
||||||
|
# Bottom edge (y = by + total_h): pins 1 through pins_per_side
|
||||||
|
# Top edge (y = by + jst_tab): pins 2N down to pins_per_side+1 (SOP convention)
|
||||||
|
|
||||||
|
pcb.append(fp_start(f"{name}_pads", cx, cy + jst_tab/2, "B.Cu"))
|
||||||
|
|
||||||
|
for i in range(pins_per_side):
|
||||||
|
pin = i + 1
|
||||||
|
x = -row_len/2 + i * SOP_PITCH
|
||||||
|
# Bottom row castellations (pins 1..N)
|
||||||
|
pcb.append(cast(str(pin), x, bh/2, 0, f""))
|
||||||
|
# Top row castellations (pins 2N..N+1, reversed per SOP convention)
|
||||||
|
top_pin = total_pins - i
|
||||||
|
pcb.append(cast(str(top_pin), x, -bh/2, 0, f""))
|
||||||
|
|
||||||
|
pcb.append(" )")
|
||||||
|
|
||||||
|
# Pin number labels on top silk
|
||||||
|
for i in range(pins_per_side):
|
||||||
|
x = cx - row_len/2 + i * SOP_PITCH
|
||||||
|
# Bottom row labels
|
||||||
|
pcb.append(txt(str(i+1), x, cy + jst_tab/2 + bh/2 + 0.8, 0.35))
|
||||||
|
# Top row labels
|
||||||
|
pcb.append(txt(str(total_pins - i), x, cy + jst_tab/2 - bh/2 - 0.8, 0.35))
|
||||||
|
|
||||||
|
# Pin 1 dot
|
||||||
|
pcb.append(circle_mark(cx - row_len/2 - 0.6, cy + jst_tab/2 + bh/2 + 0.5, 0.25))
|
||||||
|
|
||||||
|
# JST SH connector at the top tab
|
||||||
|
jst_y = by + jst_tab / 2
|
||||||
|
pcb.append(fp_start(f"{name}_JST", cx, jst_y))
|
||||||
|
for j in range(n_jst_pins):
|
||||||
|
x = -((n_jst_pins - 1) * JST_PITCH / 2) + j * JST_PITCH
|
||||||
|
pcb.append(smd(f"J{j+1}", x, 0, 0.6, 1.0, 0, ""))
|
||||||
|
pcb.append(" )")
|
||||||
|
pcb.append(txt("JST", cx, jst_y - 1.5, 0.35))
|
||||||
|
pcb.append(circle_mark(cx - (n_jst_pins-1)*JST_PITCH/2 - 0.8, jst_y, 0.2))
|
||||||
|
|
||||||
|
# --- SOP-8 adapter ---
|
||||||
|
make_adapter("SOP-8",
|
||||||
|
ox + 6,
|
||||||
|
vscore_y + 1 + ADAPTER_AREA_H/2,
|
||||||
|
SOP8_PINS_PER_SIDE,
|
||||||
|
3.9, # 150mil narrow row span
|
||||||
|
8) # 8 JST pins (all SOP pins)
|
||||||
|
|
||||||
|
# --- SOP-16 narrow adapter ---
|
||||||
|
make_adapter("SOP-16N",
|
||||||
|
ox + 20,
|
||||||
|
vscore_y + 1 + ADAPTER_AREA_H/2,
|
||||||
|
SOP16_PINS_PER_SIDE,
|
||||||
|
6.0, # narrow SOP-16 lead span
|
||||||
|
10) # 10 JST pins (all 16 SOP + VBAT + GND → 10 JST via mapping)
|
||||||
|
|
||||||
|
# --- SOP-16 wide adapter ---
|
||||||
|
make_adapter("SOP-16W",
|
||||||
|
ox + 37,
|
||||||
|
vscore_y + 1 + ADAPTER_AREA_H/2,
|
||||||
|
SOP16_PINS_PER_SIDE,
|
||||||
|
10.3, # wide SOP-16 (300mil body) lead span
|
||||||
|
10)
|
||||||
|
|
||||||
|
# Adapter strip instructions on back silk
|
||||||
|
pcb.append(txt("Snap off adapter matching your toy's MCU. Castellations solder into SOP footprint.",
|
||||||
|
ox + PANEL_W/2, vscore_y + ADAPTER_AREA_H + 1, 0.4, "B.SilkS"))
|
||||||
|
pcb.append(txt("JST cable connects adapter to carrier board J1.",
|
||||||
|
ox + PANEL_W/2, vscore_y + ADAPTER_AREA_H + 2, 0.4, "B.SilkS"))
|
||||||
|
|
||||||
|
pcb.append(")")
|
||||||
|
return "\n".join(pcb)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Project file
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
def generate_project():
|
||||||
|
return json.dumps({
|
||||||
|
"meta": {"filename": "baby-mobile-panel.kicad_pro", "version": 1},
|
||||||
|
"board": {"design_settings": {"rules": {"min_track_width": 0.15, "min_via_diameter": 0.4}}},
|
||||||
|
"net_settings": {"classes": [
|
||||||
|
{"name": "Default", "clearance": 0.15, "track_width": 0.25},
|
||||||
|
{"name": "Power", "clearance": 0.2, "track_width": 0.5},
|
||||||
|
]},
|
||||||
|
}, indent=2)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Main
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
outdir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
pcb_text = generate_panel()
|
||||||
|
pcb_path = os.path.join(outdir, "baby-mobile-panel.kicad_pcb")
|
||||||
|
with open(pcb_path, "w") as f:
|
||||||
|
f.write(pcb_text)
|
||||||
|
print(f"Written: baby-mobile-panel.kicad_pcb ({len(pcb_text)} bytes)")
|
||||||
|
|
||||||
|
proj_text = generate_project()
|
||||||
|
with open(os.path.join(outdir, "baby-mobile-panel.kicad_pro"), "w") as f:
|
||||||
|
f.write(proj_text)
|
||||||
|
|
||||||
|
print(f"\nPanel contents:")
|
||||||
|
print(f" Carrier board: 42mm × 24mm")
|
||||||
|
print(f" - XIAO socket (2×7 TH, 2.54mm, 17.78mm apart)")
|
||||||
|
print(f" - IS25LP128F SOIC-8 with pin 1 dot")
|
||||||
|
print(f" - TPS61220 SC-70-5 with pin 1 dot")
|
||||||
|
print(f" - L1 4.7µH, C1/C2 10µF, C3 100nF, R1 4.7K, C5 10nF, R2 10K")
|
||||||
|
print(f" - JST SH 10-pin right-angle SMD (J1)")
|
||||||
|
print(f" - 2× M2 mounting holes")
|
||||||
|
print(f" Breakaway adapters:")
|
||||||
|
print(f" - SOP-8 (4+4 pins, 3.9mm span, 8-pin JST)")
|
||||||
|
print(f" - SOP-16 narrow (8+8 pins, 6.0mm span, 10-pin JST)")
|
||||||
|
print(f" - SOP-16 wide (8+8 pins, 10.3mm span, 10-pin JST)")
|
||||||
|
print(f" All adapters: castellated edges, pin 1 dots, numbered silk")
|
||||||
@@ -0,0 +1,390 @@
|
|||||||
|
/*
|
||||||
|
* Pin Discovery Tool for Toy PCB Brain Transplant
|
||||||
|
*
|
||||||
|
* Upload this to the XIAO nRF52840, then connect one breakout pin
|
||||||
|
* at a time to the PROBE_PIN. Open Serial Monitor at 115200 baud.
|
||||||
|
*
|
||||||
|
* The tool will tell you:
|
||||||
|
* - Resting voltage (VCC, GND, floating, pulled up/down)
|
||||||
|
* - Whether it responds to button presses
|
||||||
|
* - Whether it looks like an analog resistor ladder
|
||||||
|
* - Suggested function (power, button, output, NC)
|
||||||
|
*
|
||||||
|
* Workflow:
|
||||||
|
* 1. Desolder original MCU, solder SOP-16 breakout adapter
|
||||||
|
* 2. Install batteries in toy
|
||||||
|
* 3. Connect XIAO GND to toy GND (battery negative)
|
||||||
|
* 4. For each breakout pin, connect it to PROBE_PIN with a jumper
|
||||||
|
* 5. Type the pin number in Serial Monitor and press Enter
|
||||||
|
* 6. Follow prompts (press buttons when asked, etc.)
|
||||||
|
* 7. Tool builds a pin map as you go
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#define PROBE_PIN A0 // Connect test jumper here
|
||||||
|
#define NUM_MCU_PINS 16 // SOP-16
|
||||||
|
|
||||||
|
// Storage for discovered pin map
|
||||||
|
struct PinInfo {
|
||||||
|
char label[20];
|
||||||
|
float voltage;
|
||||||
|
bool discovered;
|
||||||
|
};
|
||||||
|
|
||||||
|
PinInfo pinMap[NUM_MCU_PINS + 1]; // 1-indexed
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
while (!Serial) delay(10);
|
||||||
|
|
||||||
|
memset(pinMap, 0, sizeof(pinMap));
|
||||||
|
|
||||||
|
Serial.println("╔══════════════════════════════════════════╗");
|
||||||
|
Serial.println("║ Toy PCB Pin Discovery Tool v1.0 ║");
|
||||||
|
Serial.println("║ Connect XIAO GND to toy battery GND ║");
|
||||||
|
Serial.println("║ Connect one SOP pin at a time to A0 ║");
|
||||||
|
Serial.println("╚══════════════════════════════════════════╝");
|
||||||
|
Serial.println();
|
||||||
|
Serial.println("Commands:");
|
||||||
|
Serial.println(" 1-16 = Probe that SOP pin number");
|
||||||
|
Serial.println(" map = Show current pin map");
|
||||||
|
Serial.println(" auto = Auto-detect VCC and GND pins");
|
||||||
|
Serial.println(" btn = Button detection mode (tests all states)");
|
||||||
|
Serial.println(" ladder = Resistor ladder detection");
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("> ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read voltage on probe pin (0-3.3V range)
|
||||||
|
float readVoltage() {
|
||||||
|
analogReadResolution(12); // nRF52840 supports 12-bit ADC
|
||||||
|
delay(10); // settle
|
||||||
|
|
||||||
|
// Average multiple readings
|
||||||
|
uint32_t sum = 0;
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
sum += analogRead(PROBE_PIN);
|
||||||
|
delayMicroseconds(500);
|
||||||
|
}
|
||||||
|
float raw = sum / 16.0;
|
||||||
|
return (raw / 4095.0) * 3.3; // Convert to voltage
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if pin is actively being driven or floating
|
||||||
|
String classifyVoltage(float v) {
|
||||||
|
if (v < 0.1) return "GND (hard low)";
|
||||||
|
if (v < 0.4) return "Weak pulldown or low output";
|
||||||
|
if (v > 3.1) return "VCC (hard high)";
|
||||||
|
if (v > 2.5) return "Weak pullup (~3V)";
|
||||||
|
if (v > 1.4 && v < 1.9) return "Floating (~mid-rail)";
|
||||||
|
return "Unknown voltage";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test if the pin changes state (button detection)
|
||||||
|
void testButton(int sopPin) {
|
||||||
|
Serial.println("\n--- Button Detection ---");
|
||||||
|
Serial.println("Watch the voltage while pressing each toy button.");
|
||||||
|
Serial.println("Monitoring for 10 seconds...");
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
float baseline = readVoltage();
|
||||||
|
Serial.print("Baseline: ");
|
||||||
|
Serial.print(baseline, 3);
|
||||||
|
Serial.println("V");
|
||||||
|
|
||||||
|
float minV = baseline, maxV = baseline;
|
||||||
|
unsigned long start = millis();
|
||||||
|
int changes = 0;
|
||||||
|
float lastV = baseline;
|
||||||
|
|
||||||
|
while (millis() - start < 10000) {
|
||||||
|
float v = readVoltage();
|
||||||
|
|
||||||
|
if (v < minV) minV = v;
|
||||||
|
if (v > maxV) maxV = v;
|
||||||
|
|
||||||
|
// Detect transitions
|
||||||
|
if (abs(v - lastV) > 0.3) {
|
||||||
|
changes++;
|
||||||
|
Serial.print(" Change detected! ");
|
||||||
|
Serial.print(lastV, 2);
|
||||||
|
Serial.print("V → ");
|
||||||
|
Serial.print(v, 2);
|
||||||
|
Serial.print("V at t=");
|
||||||
|
Serial.print((millis() - start) / 1000.0, 1);
|
||||||
|
Serial.println("s");
|
||||||
|
}
|
||||||
|
lastV = v;
|
||||||
|
delay(20);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("Range: ");
|
||||||
|
Serial.print(minV, 3);
|
||||||
|
Serial.print("V to ");
|
||||||
|
Serial.print(maxV, 3);
|
||||||
|
Serial.println("V");
|
||||||
|
Serial.print("Transitions detected: ");
|
||||||
|
Serial.println(changes);
|
||||||
|
|
||||||
|
if (changes > 0 && maxV - minV > 1.0) {
|
||||||
|
Serial.println("→ LIKELY A BUTTON PIN (digital, active low)");
|
||||||
|
if (sopPin > 0) {
|
||||||
|
snprintf(pinMap[sopPin].label, sizeof(pinMap[sopPin].label), "Button");
|
||||||
|
pinMap[sopPin].voltage = baseline;
|
||||||
|
pinMap[sopPin].discovered = true;
|
||||||
|
}
|
||||||
|
} else if (changes > 0 && maxV - minV > 0.2) {
|
||||||
|
Serial.println("→ POSSIBLE ANALOG INPUT or RESISTOR LADDER");
|
||||||
|
} else {
|
||||||
|
Serial.println("→ No button activity detected on this pin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect resistor ladder (multiple buttons on one analog pin)
|
||||||
|
void testResistorLadder() {
|
||||||
|
Serial.println("\n--- Resistor Ladder Detection ---");
|
||||||
|
Serial.println("Press each button ONE AT A TIME when prompted.");
|
||||||
|
Serial.println("Press Enter after pressing each button.");
|
||||||
|
Serial.println("Type 'done' when finished.");
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
float voltages[10];
|
||||||
|
String names[10];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
float baseline = readVoltage();
|
||||||
|
Serial.print("Baseline (no button): ");
|
||||||
|
Serial.print(baseline, 3);
|
||||||
|
Serial.println("V");
|
||||||
|
|
||||||
|
while (count < 10) {
|
||||||
|
Serial.print("\nPress button #");
|
||||||
|
Serial.print(count + 1);
|
||||||
|
Serial.println(" and type its name (or 'done'):");
|
||||||
|
Serial.print("> ");
|
||||||
|
|
||||||
|
while (!Serial.available()) delay(10);
|
||||||
|
String input = Serial.readStringUntil('\n');
|
||||||
|
input.trim();
|
||||||
|
|
||||||
|
if (input.equalsIgnoreCase("done")) break;
|
||||||
|
|
||||||
|
float v = readVoltage();
|
||||||
|
voltages[count] = v;
|
||||||
|
names[count] = input;
|
||||||
|
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(input);
|
||||||
|
Serial.print(": ");
|
||||||
|
Serial.print(v, 3);
|
||||||
|
Serial.println("V");
|
||||||
|
|
||||||
|
count++;
|
||||||
|
|
||||||
|
Serial.println(" Release button now.");
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > 1) {
|
||||||
|
Serial.println("\n--- Ladder Summary ---");
|
||||||
|
Serial.print("Baseline: ");
|
||||||
|
Serial.print(baseline, 3);
|
||||||
|
Serial.println("V");
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(names[i]);
|
||||||
|
Serial.print(": ");
|
||||||
|
Serial.print(voltages[i], 3);
|
||||||
|
Serial.print("V (ADC ~");
|
||||||
|
Serial.print((int)(voltages[i] / 3.3 * 4095));
|
||||||
|
Serial.println(")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if voltages are distinct enough
|
||||||
|
bool isLadder = true;
|
||||||
|
for (int i = 0; i < count - 1; i++) {
|
||||||
|
for (int j = i + 1; j < count; j++) {
|
||||||
|
if (abs(voltages[i] - voltages[j]) < 0.15) {
|
||||||
|
isLadder = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLadder && count >= 2) {
|
||||||
|
Serial.println("\n→ THIS IS A RESISTOR LADDER");
|
||||||
|
Serial.println(" Use analogRead() with thresholds to detect buttons.");
|
||||||
|
Serial.println(" Suggested thresholds (midpoints between readings):");
|
||||||
|
|
||||||
|
// Sort by voltage
|
||||||
|
for (int i = 0; i < count - 1; i++) {
|
||||||
|
for (int j = i + 1; j < count; j++) {
|
||||||
|
if (voltages[j] < voltages[i]) {
|
||||||
|
float tv = voltages[i]; voltages[i] = voltages[j]; voltages[j] = tv;
|
||||||
|
String ts = names[i]; names[i] = names[j]; names[j] = ts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
float lo = (i == 0) ? 0 : (voltages[i-1] + voltages[i]) / 2;
|
||||||
|
float hi = (i == count-1) ? 3.3 : (voltages[i] + voltages[i+1]) / 2;
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(names[i]);
|
||||||
|
Serial.print(": ");
|
||||||
|
Serial.print(lo, 2);
|
||||||
|
Serial.print("V - ");
|
||||||
|
Serial.print(hi, 2);
|
||||||
|
Serial.println("V");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Serial.println("\n→ Doesn't look like a resistor ladder");
|
||||||
|
Serial.println(" (Voltages too close together or too few buttons)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Full probe of one pin
|
||||||
|
void probePin(int sopPin) {
|
||||||
|
Serial.print("\n═══ Probing SOP-16 Pin ");
|
||||||
|
Serial.print(sopPin);
|
||||||
|
Serial.println(" ═══");
|
||||||
|
|
||||||
|
// First read as analog input (high impedance)
|
||||||
|
pinMode(PROBE_PIN, INPUT);
|
||||||
|
delay(50);
|
||||||
|
float v_floating = readVoltage();
|
||||||
|
|
||||||
|
Serial.print("Floating voltage: ");
|
||||||
|
Serial.print(v_floating, 3);
|
||||||
|
Serial.print("V → ");
|
||||||
|
Serial.println(classifyVoltage(v_floating));
|
||||||
|
|
||||||
|
// Classify
|
||||||
|
if (v_floating < 0.1) {
|
||||||
|
Serial.println("→ This is a GND pin");
|
||||||
|
snprintf(pinMap[sopPin].label, sizeof(pinMap[sopPin].label), "GND");
|
||||||
|
pinMap[sopPin].voltage = v_floating;
|
||||||
|
pinMap[sopPin].discovered = true;
|
||||||
|
}
|
||||||
|
else if (v_floating > 2.8) {
|
||||||
|
// Could be VCC or a pulled-up button pin
|
||||||
|
// Try briefly enabling internal pulldown to see if it drops
|
||||||
|
pinMode(PROBE_PIN, INPUT_PULLDOWN);
|
||||||
|
delay(50);
|
||||||
|
float v_pulldown = readVoltage();
|
||||||
|
pinMode(PROBE_PIN, INPUT);
|
||||||
|
|
||||||
|
if (v_pulldown > 2.5) {
|
||||||
|
Serial.print("With pulldown: ");
|
||||||
|
Serial.print(v_pulldown, 3);
|
||||||
|
Serial.println("V — Still high → VCC (power) pin");
|
||||||
|
snprintf(pinMap[sopPin].label, sizeof(pinMap[sopPin].label), "VCC");
|
||||||
|
pinMap[sopPin].voltage = v_floating;
|
||||||
|
pinMap[sopPin].discovered = true;
|
||||||
|
} else {
|
||||||
|
Serial.print("With pulldown: ");
|
||||||
|
Serial.print(v_pulldown, 3);
|
||||||
|
Serial.println("V — Dropped → Weak pullup (likely button input)");
|
||||||
|
Serial.println("→ Try pressing buttons to confirm. Running button test...");
|
||||||
|
testButton(sopPin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (v_floating > 0.4 && v_floating < 2.5) {
|
||||||
|
Serial.println("Mid-range voltage. Could be:");
|
||||||
|
Serial.println(" - Floating (not connected)");
|
||||||
|
Serial.println(" - Part of a resistor ladder");
|
||||||
|
Serial.println(" - An analog output");
|
||||||
|
Serial.println("→ Try pressing buttons to see if it changes...");
|
||||||
|
testButton(sopPin);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Serial.println("Low but not GND. Could be pulled-down output.");
|
||||||
|
testButton(sopPin);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print the current pin map
|
||||||
|
void showMap() {
|
||||||
|
Serial.println("\n╔════════════════════════════════════╗");
|
||||||
|
Serial.println("║ Current Pin Map ║");
|
||||||
|
Serial.println("╠════════════════════════════════════╣");
|
||||||
|
|
||||||
|
for (int i = 1; i <= NUM_MCU_PINS; i++) {
|
||||||
|
Serial.print("║ Pin ");
|
||||||
|
if (i < 10) Serial.print(" ");
|
||||||
|
Serial.print(i);
|
||||||
|
Serial.print(": ");
|
||||||
|
|
||||||
|
if (pinMap[i].discovered) {
|
||||||
|
Serial.print(pinMap[i].label);
|
||||||
|
// Pad to align
|
||||||
|
for (int j = strlen(pinMap[i].label); j < 12; j++) Serial.print(" ");
|
||||||
|
Serial.print("(");
|
||||||
|
Serial.print(pinMap[i].voltage, 2);
|
||||||
|
Serial.print("V)");
|
||||||
|
} else {
|
||||||
|
Serial.print("-- not probed -- ");
|
||||||
|
}
|
||||||
|
Serial.println(" ║");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("╚════════════════════════════════════╝");
|
||||||
|
|
||||||
|
// Count discovered
|
||||||
|
int found = 0;
|
||||||
|
for (int i = 1; i <= NUM_MCU_PINS; i++) {
|
||||||
|
if (pinMap[i].discovered) found++;
|
||||||
|
}
|
||||||
|
Serial.print("Discovered: ");
|
||||||
|
Serial.print(found);
|
||||||
|
Serial.print("/");
|
||||||
|
Serial.println(NUM_MCU_PINS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (Serial.available()) {
|
||||||
|
String input = Serial.readStringUntil('\n');
|
||||||
|
input.trim();
|
||||||
|
|
||||||
|
if (input.equalsIgnoreCase("map")) {
|
||||||
|
showMap();
|
||||||
|
}
|
||||||
|
else if (input.equalsIgnoreCase("btn")) {
|
||||||
|
Serial.println("Connect the pin you want to test to A0, then:");
|
||||||
|
testButton(0);
|
||||||
|
}
|
||||||
|
else if (input.equalsIgnoreCase("ladder")) {
|
||||||
|
testResistorLadder();
|
||||||
|
}
|
||||||
|
else if (input.equalsIgnoreCase("auto")) {
|
||||||
|
Serial.println("\n--- Auto-detect mode ---");
|
||||||
|
Serial.println("Connect each pin to A0 one at a time.");
|
||||||
|
Serial.println("Press Enter after connecting each pin.");
|
||||||
|
for (int pin = 1; pin <= NUM_MCU_PINS; pin++) {
|
||||||
|
Serial.print("\nConnect SOP pin ");
|
||||||
|
Serial.print(pin);
|
||||||
|
Serial.println(" to A0, then press Enter");
|
||||||
|
Serial.print("> ");
|
||||||
|
while (!Serial.available()) delay(10);
|
||||||
|
Serial.readStringUntil('\n');
|
||||||
|
probePin(pin);
|
||||||
|
}
|
||||||
|
showMap();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int pin = input.toInt();
|
||||||
|
if (pin >= 1 && pin <= NUM_MCU_PINS) {
|
||||||
|
probePin(pin);
|
||||||
|
} else {
|
||||||
|
Serial.println("Unknown command. Use 1-16, map, auto, btn, or ladder");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("\n> ");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user