├── .gitignore ├── model └── purple-eye.blend ├── prettier.config.js ├── .editorconfig ├── package.json ├── README.md ├── LICENSE ├── firmware ├── purple-eye-nano │ ├── nrf51servo.h │ ├── nrf51servo.cpp │ └── purple-eye-nano.ino ├── purple-eye-firmware.js └── purple-eye │ └── purple-eye.ino ├── web ├── index.html └── purple-eye.js └── pcb ├── v2 └── 1-Schematic_Purple Eye.json └── purple-eye.brd /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /model/purple-eye.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urish/purple-eye/HEAD/model/purple-eye.blend -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | arrowParens: 'always', 3 | printWidth: 100, 4 | singleQuote: true, 5 | tabWidth: 4, 6 | trailingComma: 'all', 7 | }; 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 4 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.json] 12 | indent_size = 2 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "purple-eye", 3 | "version": "1.0.0", 4 | "description": "A web-bluetooth controlled one-eyed robot", 5 | "main": "web/purple-eye.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "deploy": "gh-pages -d web" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/urish/purple-eye.git" 13 | }, 14 | "keywords": [ 15 | "ble", 16 | "bluetooth", 17 | "web bluetooth" 18 | ], 19 | "author": "Uri Shaked", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/urish/purple-eye/issues" 23 | }, 24 | "homepage": "https://github.com/urish/purple-eye#readme", 25 | "devDependencies": { 26 | "gh-pages": "0.11.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | purple-eye 2 | ========== 3 | 4 | > A web-bluetooth controlled 3d-printed dancing robot 5 | 6 | ![Purple Eye](https://farm8.staticflickr.com/7175/27083695372_878bf58031_k.jpg) 7 | 8 | ## Prerequisites 9 | 10 | The Web Interface uses [Web Bluetooth](https://medium.com/@urish/start-building-with-web-bluetooth-and-progressive-web-apps-6534835959a6) and is available on Chrome on the following platforms: 11 | 12 | * Android 6.0 or newer 13 | * Mac OS X 10.10 or newer 14 | * Recent Linux ([see here for details](https://acassis.wordpress.com/2016/06/28/how-to-get-chrome-web-bluetooth-working-on-linux/)) 15 | * Windows 10 (Chrome Canary only) 16 | * Chrome OS 17 | 18 | [Online Web Interface](https://urish.github.io/purple-eye/) 19 | 20 | ## Hardware 21 | 22 | ➡ [Read how to make your own "Purple Eye" robot](https://medium.com/@urish/making-purple-eye-diy-dancing-robot-fa03d0f658e2#.q7gzas4cq) 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Uri Shaked 4 | 5 | Portions of the code are based on AdaFruit's Bluefruit LE example code and 6 | Google Chrome Web Bluetooth samples. 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | SOFTWARE. 25 | -------------------------------------------------------------------------------- /firmware/purple-eye-nano/nrf51servo.h: -------------------------------------------------------------------------------- 1 | /** 2 | * nRF51 Servo Controller 3 | * 4 | * Copyright (C) 2016, Uri Shaked. 5 | * 6 | * License: MIT 7 | */ 8 | 9 | #ifndef _NRF_SERVO_H 10 | #define _NRF_SERVO_H 11 | 12 | #include 13 | 14 | #define MAX_SERVOS 10 15 | 16 | #define INVALID_SERVO 255 // Value representing invalid servo index 17 | 18 | // Min and max pulse length, in microseconds 19 | #define MIN_PULSE_WIDTH 544 20 | #define MAX_PULSE_WIDTH 2400 21 | 22 | #define SERVO_REFRESH_INTERVAL 10000 // Refresh servos every 10ms 23 | #define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached 24 | 25 | class Servo { 26 | private: 27 | uint8_t servoIndex; 28 | uint16_t pulseWidth; 29 | uint32_t pin; 30 | 31 | public: 32 | Servo(); 33 | ~Servo(); 34 | 35 | uint8_t attach(uint32_t pin); 36 | void detach(); 37 | 38 | void write(uint16_t value); 39 | void writeMicroseconds(uint16_t value); 40 | 41 | uint16_t read(); 42 | uint16_t readMicroseconds(); 43 | 44 | bool attached(); // return true if this servo is attached, otherwise false 45 | 46 | uint32_t getPin(); 47 | }; 48 | 49 | #endif /* _NRF_SERVO_H */ 50 | 51 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Purple Eye 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 31 | 32 | 33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 |

Connect

44 | 45 | 48 | 49 |

Control

50 | 51 | 54 | 55 | 58 | 59 | 62 | 63 |

Move!

64 | 65 | 68 | 69 | 72 | 73 | 76 | 77 | 85 |
86 |
87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /firmware/purple-eye-firmware.js: -------------------------------------------------------------------------------- 1 | const DEVICE_NAME = 'PurpleEye'; 2 | 3 | const SERVOS_PINS = [D7, D6, D8, D12]; 4 | const SERVO_EN_PIN = D13; 5 | const BATTERY_PIN = D5; 6 | let servoValues = [0, 0, 0, 0]; 7 | let servoOffsets = [0, 0, 0, 0]; 8 | 9 | // Simple Task management 10 | const tasks = {}; 11 | 12 | function startTask(name, callback, interval) { 13 | if (tasks[name] == null) { 14 | tasks[name] = setInterval(callback, interval); 15 | } 16 | } 17 | 18 | function stopTask(name) { 19 | if (tasks[name] != null) { 20 | const interval = tasks[name]; 21 | tasks[name] = null; 22 | clearInterval(interval); 23 | } 24 | } 25 | 26 | // Battery 27 | function getBatteryVoltage() { 28 | return analogRead(BATTERY_PIN) * NRF.getBattery() * 2; 29 | } 30 | 31 | function updateBattery() { 32 | const percent = Math.max(0, Math.min(100, ((getBatteryVoltage() - 3.6) / 0.6) * 100)) | 0; 33 | NRF.updateServices({ 34 | 0x180f: { 35 | 0x2a19: { 36 | value: new Uint8Array([percent]), 37 | notify: true, 38 | }, 39 | }, 40 | }); 41 | } 42 | 43 | function servoAngleToPulse(angle) { 44 | return 0.5 + (angle / 180) * 2; 45 | } 46 | 47 | // Servo 48 | function updateServos() { 49 | for (const i = 0; i < servoValues.length; i++) { 50 | if (servoValues[i]) { 51 | digitalPulse(SERVOS_PINS[i], HIGH, servoAngleToPulse(servoOffsets[i] + servoValues[i])); 52 | } 53 | } 54 | } 55 | 56 | function setServoValues(values) { 57 | for (const i = 0; i < values.length; i++) { 58 | servoValues[i] = values[i]; 59 | } 60 | if (servoValues.find((v) => v > 0)) { 61 | startTask('servo', updateServos, 50); 62 | digitalWrite(SERVO_EN_PIN, LOW); 63 | } else { 64 | stopTask('servo'); 65 | digitalWrite(SERVO_EN_PIN, HIGH); 66 | } 67 | } 68 | 69 | function setServoOffsets(values) { 70 | for (const i = 0; i < values.length; i++) { 71 | servoOffsets[i] = values[i]; 72 | } 73 | } 74 | 75 | function onInit() { 76 | const eirEntry = (type, data) => [data.length + 1, type].concat(data); 77 | NRF.setAdvertising([ 78 | eirEntry(0x9, DEVICE_NAME), 79 | ], { name: DEVICE_NAME }); 80 | NRF.setServices( 81 | { 82 | // Battery Level 83 | 0x180f: { 84 | 0x2a19: { 85 | value: new Uint8Array([0]), 86 | description: 'Battery Level', 87 | readable: true, 88 | notify: true, 89 | }, 90 | }, 91 | 92 | // Servo Control 93 | 0x5100: { 94 | 0x5200: { 95 | value: new Uint8Array(SERVOS_PINS.length), 96 | description: 'Servo positions', 97 | readable: true, 98 | writable: true, 99 | onWrite: (evt) => setServoValues(new Uint8Array(evt.data)), 100 | }, 101 | 0x5201: { 102 | description: 'Servo offsets', 103 | value: new Uint8Array(SERVOS_PINS.length * 4), 104 | readable: true, 105 | writable: true, 106 | onWrite: (evt) => setServoOffsets(new Float32Array(evt.data)), 107 | }, 108 | }, 109 | }, 110 | { 111 | advertise: ['180f', '5100'], 112 | }, 113 | ); 114 | 115 | pinMode(SERVO_EN_PIN, 'output'); 116 | digitalWrite(SERVO_EN_PIN, HIGH); 117 | 118 | NRF.on('connect', () => { 119 | updateBattery(); 120 | startTask('battery', updateBattery, 10000); 121 | }); 122 | NRF.on('disconnect', () => { 123 | stopTask('battery'); 124 | }); 125 | } 126 | -------------------------------------------------------------------------------- /firmware/purple-eye-nano/nrf51servo.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * nRF51 Servo Controller 3 | * 4 | * Copyright (C) 2016, Uri Shaked. 5 | * 6 | * License: MIT 7 | */ 8 | 9 | #include "softdevice_handler.h" 10 | #include 11 | #include 12 | 13 | #include "nrf51servo.h" 14 | 15 | #define SERVO_TIMESLOT_LENGTH 2500 // ms 16 | 17 | static mbed::Ticker servo_task; 18 | static uint8_t servo_count = 0; 19 | static uint8_t servo_index = 0; 20 | static Servo *servos[MAX_SERVOS] = {0}; 21 | 22 | static nrf_radio_signal_callback_return_param_t signal_callback_return_param = {0}; 23 | 24 | static nrf_radio_signal_callback_return_param_t * radio_callback(uint8_t signal_type) 25 | { 26 | uint16_t next_tick = 0; 27 | uint16_t servo_tick_counter = 0; 28 | 29 | switch (signal_type) 30 | { 31 | case NRF_RADIO_CALLBACK_SIGNAL_TYPE_START: 32 | signal_callback_return_param.params.request.p_next = NULL; 33 | signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END; 34 | 35 | servo_index++; 36 | if (servo_index >= servo_count) { 37 | servo_index = 0; 38 | } 39 | 40 | digitalWrite(servos[servo_index]->getPin(), HIGH); 41 | delayMicroseconds(servos[servo_index]->readMicroseconds()); 42 | digitalWrite(servos[servo_index]->getPin(), LOW); 43 | break; 44 | 45 | case NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO: 46 | signal_callback_return_param.params.request.p_next = NULL; 47 | signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE; 48 | break; 49 | 50 | case NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0: 51 | signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_END; 52 | signal_callback_return_param.params.request.p_next = NULL; 53 | break; 54 | 55 | default: 56 | signal_callback_return_param.callback_action = NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE; 57 | signal_callback_return_param.params.request.p_next = NULL; 58 | break; 59 | } 60 | return (&signal_callback_return_param); 61 | } 62 | 63 | static nrf_radio_request_t timeslot_request = {0}; 64 | static void servo_task_callback() { 65 | // Request a timeslot from the NRF firmware 66 | timeslot_request.request_type = NRF_RADIO_REQ_TYPE_EARLIEST; 67 | timeslot_request.params.earliest.hfclk = NRF_RADIO_HFCLK_CFG_DEFAULT; 68 | timeslot_request.params.earliest.priority = NRF_RADIO_PRIORITY_NORMAL; 69 | timeslot_request.params.earliest.length_us = SERVO_TIMESLOT_LENGTH; 70 | timeslot_request.params.earliest.timeout_us = 100000; 71 | sd_radio_request(×lot_request); 72 | } 73 | 74 | static void start_servo_task() { 75 | sd_radio_session_open(radio_callback); 76 | servo_task_callback(); 77 | servo_task.attach_us(servo_task_callback, SERVO_REFRESH_INTERVAL); 78 | } 79 | 80 | static void stop_servo_task() { 81 | servo_task.detach(); 82 | sd_radio_session_close(); 83 | } 84 | 85 | Servo::Servo() { 86 | this->servoIndex = INVALID_SERVO; 87 | this->pulseWidth = DEFAULT_PULSE_WIDTH; 88 | } 89 | 90 | Servo::~Servo() { 91 | this->detach(); 92 | } 93 | 94 | uint8_t Servo::attach(uint32_t pin) { 95 | bool first = (servo_count == 0); 96 | this->pin = pin; 97 | if ((this->servoIndex == INVALID_SERVO) && (servo_count < MAX_SERVOS)) { 98 | this->servoIndex = servo_count; 99 | servos[this->servoIndex] = this; 100 | servo_count++; 101 | pinMode(pin, OUTPUT); 102 | if (first) { 103 | start_servo_task(); 104 | } 105 | } 106 | return this->servoIndex; 107 | } 108 | 109 | void Servo::detach() { 110 | if (this->servoIndex != INVALID_SERVO) { 111 | for (uint8_t i = this->servoIndex + 1; i < servo_count; i++) { 112 | servos[i] = servos[i - 1]; 113 | } 114 | servo_count--; 115 | if (servo_count == 0) { 116 | stop_servo_task(); 117 | } 118 | } 119 | this->servoIndex = INVALID_SERVO; 120 | } 121 | 122 | void Servo::write(uint16_t value) { 123 | value = map(value, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); 124 | this->writeMicroseconds(value); 125 | } 126 | 127 | void Servo::writeMicroseconds(uint16_t value) { 128 | if (value < MIN_PULSE_WIDTH) { 129 | value = MIN_PULSE_WIDTH; 130 | } 131 | if (value > MAX_PULSE_WIDTH) { 132 | value = MAX_PULSE_WIDTH; 133 | } 134 | this->pulseWidth = value; 135 | } 136 | 137 | uint16_t Servo::read() { 138 | return map(this->pulseWidth, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH, 0, 180); 139 | } 140 | 141 | uint16_t Servo::readMicroseconds() { 142 | return this->pulseWidth; 143 | } 144 | 145 | bool Servo::attached() { 146 | return this->servoIndex != INVALID_SERVO; 147 | } 148 | 149 | uint32_t Servo::getPin() { 150 | return this->pin; 151 | } 152 | 153 | -------------------------------------------------------------------------------- /web/purple-eye.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | let gattServer = null; 4 | let servoCharacteristic = null; 5 | let batteryCharacteristic = null; 6 | 7 | function indicateBatteryLevel(value) { 8 | document.querySelector('.battery-level-text').textContent = value + '%'; 9 | const batteryLevelIcon = document.querySelector('.battery-level > .fa'); 10 | if (value > 85) { 11 | batteryLevelIcon.className = 'fa fa-battery-full'; 12 | } else if (value > 65) { 13 | batteryLevelIcon.className = 'fa fa-battery-three-quarters'; 14 | } else if (value > 40) { 15 | batteryLevelIcon.className = 'fa fa-battery-half'; 16 | } else if (value > 20) { 17 | batteryLevelIcon.className = 'fa fa-battery-quarter'; 18 | } else { 19 | batteryLevelIcon.className = 'fa fa-battery-empty'; 20 | } 21 | } 22 | 23 | function connect() { 24 | console.log('Requesting Bluetooth Device...'); 25 | navigator.bluetooth.requestDevice( 26 | { filters: [{ services: [0x5100] }], optionalServices: ['battery_service'] }) 27 | .then(device => { 28 | console.log('> Found ' + device.name); 29 | console.log('Connecting to GATT Server...'); 30 | return device.gatt.connect(); 31 | }) 32 | .then(server => { 33 | gattServer = server; 34 | console.log('Getting Service 0x5100 - Robot Control...'); 35 | return server.getPrimaryService(0x5100); 36 | }) 37 | .then(service => { 38 | console.log('Getting Characteristic 0x5200 - Servo Angles...'); 39 | return service.getCharacteristic(0x5200); 40 | }) 41 | .then(characteristic => { 42 | console.log('All ready!'); 43 | servoCharacteristic = characteristic; 44 | }) 45 | .then(() => { 46 | return gattServer.getPrimaryService('battery_service') 47 | }) 48 | .then(service => { 49 | return service.getCharacteristic('battery_level'); 50 | }) 51 | .then(characteristic => { 52 | batteryCharacteristic = characteristic; 53 | return batteryCharacteristic.readValue(); 54 | }).then(value => { 55 | indicateBatteryLevel(value.getUint8(0)); 56 | return batteryCharacteristic.startNotifications(); 57 | }).then(_ => { 58 | batteryCharacteristic.addEventListener('characteristicvaluechanged', e => { 59 | const batteryLevel = e.target.value.getUint8(0); 60 | indicateBatteryLevel(batteryLevel); 61 | }); 62 | console.log('> Notifications started'); 63 | }) 64 | .catch(error => { 65 | console.log('Argh! ' + error); 66 | }); 67 | } 68 | 69 | function writeServos(rightLegValue, rightFootValue, leftFootValue, leftLegValue) { 70 | var buffer = new ArrayBuffer(4); 71 | var view = new Int8Array(buffer); 72 | view[0] = rightLegValue; 73 | view[1] = rightFootValue; 74 | view[2] = leftFootValue; 75 | view[3] = leftLegValue; 76 | return servoCharacteristic.writeValue(buffer) 77 | .catch(err => console.log('Error when writing value! ', err)); 78 | } 79 | 80 | function spread() { 81 | return writeServos(110, 94, 86, 70) 82 | .then(() => console.log('Spread successful')); 83 | } 84 | 85 | function stand() { 86 | return writeServos(90, 90, 90, 90) 87 | .then(() => console.log('Stand successful')); 88 | } 89 | 90 | function rest() { 91 | stopMoving(); 92 | return writeServos(0, 0, 0, 0) 93 | .then(() => console.log('Rest successful')); 94 | } 95 | 96 | let dancing = false, 97 | shimming = false; 98 | 99 | function shimmy() { 100 | var standing = true; 101 | stopMoving(); 102 | shimming = true; 103 | 104 | function step() { 105 | var promise = standing ? stand() : spread(); 106 | standing = !standing; 107 | promise.then(() => { 108 | if (shimming) { 109 | setTimeout(step, 150); 110 | } 111 | }) 112 | } 113 | 114 | step(); 115 | } 116 | 117 | function dance() { 118 | let delta = 0, direction = 1; 119 | stopMoving(); 120 | dancing = true; 121 | 122 | function danceStep() { 123 | delta += direction * 2; 124 | if (delta > 20 || delta < -20) { 125 | direction = -direction; 126 | } 127 | writeServos(90 + delta, 90 + delta, 90 + delta, 90 + delta) 128 | .then(() => { 129 | if (dancing) { 130 | setTimeout(danceStep, 10); 131 | } 132 | }); 133 | } 134 | 135 | danceStep(); 136 | } 137 | 138 | function stopMoving() { 139 | dancing = false; 140 | shimming = false; 141 | } 142 | -------------------------------------------------------------------------------- /firmware/purple-eye/purple-eye.ino: -------------------------------------------------------------------------------- 1 | /********************************************************************* 2 | This is an example for our nRF51822 based Bluefruit LE modules 3 | 4 | Pick one up today in the adafruit shop! 5 | 6 | Adafruit invests time and resources providing this open source code, 7 | please support Adafruit and open-source hardware by purchasing 8 | products from Adafruit! 9 | 10 | MIT license, check LICENSE for more information 11 | All text above, and the splash screen below must be included in 12 | any redistribution 13 | *********************************************************************/ 14 | 15 | #include 16 | 17 | #include "Adafruit_BLE.h" 18 | #include "Adafruit_BluefruitLE_SPI.h" 19 | #include "Servo.h" 20 | 21 | #define BLUEFRUIT_SPI_CS 8 22 | #define BLUEFRUIT_SPI_IRQ 7 23 | #define BLUEFRUIT_SPI_RST 4 24 | 25 | #define RIGHT_LEG_PIN 5 26 | #define RIGHT_FOOT_PIN 11 27 | #define LEFT_FOOT_PIN 9 28 | #define LEFT_LEG_PIN 10 29 | 30 | const uint8_t BLE_ADVERTISE_PACKET[] = { 31 | // Eddystone URL Beacon. See https://www.mkompf.com/tech/eddystoneurl.html 32 | 0x07, // Length of Service List 33 | 0x03, // Param: Service List 34 | 0x00, 0x51, // Purple Eye Service ID 35 | 0x0a, 0x18, // Battery Level Service 36 | 0xAA, 0xFE, // Eddystone ID 37 | 38 | 0x11, // Length of Service Data 39 | 0x16, // Service Data 40 | 0xAA, 0xFE, // Eddystone ID 41 | 42 | 0x10, // Frame type: URL 43 | 0xF8, // Power 44 | 0x02, // http:// 45 | 'b', 46 | 'i', 47 | 't', 48 | '.', 49 | 'd', 50 | 'o', 51 | '/', 52 | 'p', 53 | 'r', 54 | 'p', 55 | 'l', 56 | }; 57 | 58 | Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); 59 | 60 | Servo rightFoot, rightLeg, leftFoot, leftLeg; 61 | int rightFootValue = 0, rightLegValue = 0, leftFootValue = 0, leftLegValue = 0; 62 | 63 | void error(const __FlashStringHelper*err) { 64 | Serial.println(err); 65 | while (1); 66 | } 67 | 68 | void updateServos() { 69 | if (leftFootValue == 0 && leftLegValue == 0 && rightFootValue == 0 && rightFootValue == 0) { 70 | rightLeg.detach(); 71 | rightFoot.detach(); 72 | leftFoot.detach(); 73 | leftLeg.detach(); 74 | } else { 75 | if (!leftFoot.attached()) { 76 | rightLeg.attach(RIGHT_LEG_PIN); 77 | rightFoot.attach(RIGHT_FOOT_PIN); 78 | leftFoot.attach(LEFT_FOOT_PIN); 79 | leftLeg.attach(LEFT_LEG_PIN); 80 | } 81 | rightFoot.write(rightFootValue + 8); 82 | rightLeg.write(rightLegValue); 83 | leftFoot.write(leftFootValue - 10); 84 | leftLeg.write(leftLegValue); 85 | } 86 | } 87 | 88 | int32_t eyebotServiceId; 89 | int32_t eyebotServosCharId; 90 | int32_t batteryServiceId; 91 | int32_t batteryLevelCharId; 92 | 93 | void setup(void) 94 | { 95 | boolean success; 96 | 97 | updateServos(); 98 | 99 | Serial.begin(115200); 100 | Serial.println("Start!"); 101 | 102 | randomSeed(micros()); 103 | 104 | /* Initialise the module */ 105 | Serial.print(F("Initialising the Bluefruit LE module: ")); 106 | 107 | if ( !ble.begin(true) ) 108 | { 109 | error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?")); 110 | } 111 | Serial.println( F("OK!") ); 112 | 113 | /* Perform a factory reset to make sure everything is in a known state */ 114 | Serial.println(F("Performing a factory reset: ")); 115 | if (! ble.factoryReset() ) { 116 | error(F("Couldn't factory reset")); 117 | } 118 | 119 | /* Disable command echo from Bluefruit */ 120 | ble.echo(false); 121 | 122 | Serial.println("Requesting Bluefruit info:"); 123 | /* Print Bluefruit information */ 124 | ble.info(); 125 | 126 | /* Change the device name to make it easier to find */ 127 | Serial.println("Setting device name"); 128 | 129 | if (! ble.sendCommandCheckOK(F("AT+GAPDEVNAME=PurpleEye")) ) { 130 | error(F("Could not set device name?")); 131 | } 132 | 133 | /* Add the Servo Service definition */ 134 | /* Service ID should be 1 */ 135 | Serial.println(F("Adding the Servo service definition (UUID = 0x5100): ")); 136 | success = ble.sendCommandWithIntReply( F("AT+GATTADDSERVICE=UUID=0x5100"), &eyebotServiceId); 137 | if (! success) { 138 | error(F("Could not add Servo service")); 139 | } 140 | 141 | /* Chars ID for Servo position should be 1 */ 142 | Serial.println(F("Adding the Servo Position characteristic (UUID = 0x5200): ")); 143 | success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID=0x5200, PROPERTIES=0x0A, MIN_LEN=4, MAX_LEN=4, VALUE=00-00-00-00"), &eyebotServosCharId); 144 | if (! success) { 145 | error(F("Could not add Servo characteristic")); 146 | } 147 | 148 | /* Add the Battery Service definition */ 149 | /* Service ID should be 1 */ 150 | Serial.println(F("Adding the service definition (UUID = 0x180F): ")); 151 | success = ble.sendCommandWithIntReply( F("AT+GATTADDSERVICE=UUID=0x180F"), &batteryServiceId); 152 | if (! success) { 153 | error(F("Could not add Battery service")); 154 | } 155 | 156 | /* Chars ID for Battery Level should be 1 */ 157 | Serial.println(F("Adding the characteristic (UUID = 0x2A19): ")); 158 | success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID=0x2A19, PROPERTIES=0x12, MIN_LEN=1, MAX_LEN=1, VALUE=00"), &batteryLevelCharId); 159 | if (! success) { 160 | error(F("Could not add Battery Level characteristic")); 161 | } 162 | 163 | /* Add the Servo Service and Eddystone Beacon to the advertising data */ 164 | Serial.println(F("Adding Servo Service UUID to the advertising payload: ")); 165 | 166 | // Encode advertise packet as hex string 167 | char bleAdvStr[sizeof(BLE_ADVERTISE_PACKET) * 3]; 168 | for (int i = 0; i < sizeof(BLE_ADVERTISE_PACKET); i++) { 169 | sprintf(&bleAdvStr[i * 3], "%02x-", BLE_ADVERTISE_PACKET[i]); 170 | }; 171 | bleAdvStr[sizeof(bleAdvStr) - 1] = 0; 172 | char cmdBuf[256]; 173 | snprintf(cmdBuf, sizeof(cmdBuf), "AT+GAPSETADVDATA=%s", bleAdvStr); 174 | ble.sendCommandCheckOK( cmdBuf ); 175 | 176 | /* Reset the device for the new service setting changes to take effect */ 177 | Serial.print(F("Performing a SW reset (service changes require a reset): ")); 178 | ble.reset(); 179 | 180 | Serial.println(); 181 | } 182 | 183 | uint8_t lastBatteryLevel = 0; 184 | void loop(void) 185 | { 186 | float voltage = analogRead(A0) * 3.3 / 512; 187 | uint8_t batteryLevel = max(0, min(100, (voltage - 3.6) / 0.6 * 100)); 188 | 189 | // Update Battery Level Charasteristic if necessary 190 | if (lastBatteryLevel != batteryLevel) { 191 | ble.print("AT+GATTCHAR="); 192 | ble.print(batteryLevelCharId); 193 | ble.print(","); 194 | ble.println(batteryLevel); 195 | ble.waitForOK(); 196 | lastBatteryLevel = batteryLevel; 197 | }; 198 | 199 | // Read servo values 200 | ble.print("AT+GATTCHAR="); 201 | ble.println(eyebotServosCharId); 202 | 203 | Serial.println(batteryLevel); 204 | 205 | char buf[100] = {0}; 206 | ble.readline(buf, sizeof(buf)); 207 | sscanf(buf, "%02x-%02x-%02x-%02x", &rightLegValue, &rightFootValue, &leftFootValue, &leftLegValue); 208 | updateServos(); 209 | } 210 | 211 | -------------------------------------------------------------------------------- /firmware/purple-eye-nano/purple-eye-nano.ino: -------------------------------------------------------------------------------- 1 | /** 2 | Purple Eye Firmware ported to [BLE Nano](http://redbearlab.com/blenano/) 3 | Copyright (C) 2016, Uri Shaked 4 | License: MIT. 5 | */ 6 | 7 | extern "C" { 8 | #include "pstorage.h" 9 | #include "fstorage.h" 10 | #include "softdevice_handler.h" 11 | } 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include "nrf51servo.h" 18 | 19 | #define DEVICE_NAME "PurpleEye" 20 | #define RIGHT_LEG_PIN D4 21 | #define RIGHT_FOOT_PIN D5 22 | #define LEFT_FOOT_PIN D6 23 | #define LEFT_LEG_PIN D7 24 | #define BATTERY_LEVEL_PIN A5 25 | 26 | // Physical Web 27 | #define EDDYSTONE_SERVICE_UUID 0xFEAA 28 | uint8_t eddystoneData[] = { 29 | 0xAA, 0xFE, // Eddystone Service Id 30 | 0x10, // Frame type: URL 31 | 0xF8, // Power 32 | 0x03, // https:// 33 | 'b', 'i', 't', '.', 'd', 'o', '/', 'p', 'r', 'p', 'l', 34 | }; 35 | 36 | // ng-beacon scanning parameters 37 | #define RSSI_THRESHOLD -50 38 | #define TARGET_DEVICE_NAME "ng-beacon" 39 | 40 | BLE ble; 41 | static const uint16_t advertisedServices[] = { GattService::UUID_BATTERY_SERVICE, 0x5100, EDDYSTONE_SERVICE_UUID }; 42 | 43 | // Servos 44 | Servo leftFoot, rightFoot, leftLeg, rightLeg; 45 | static uint8_t servoValues[4] = {0, 0, 0, 0}; 46 | GattCharacteristic servosChar(0x5200, servoValues, sizeof(servoValues), sizeof(servoValues), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); 47 | static int8_t servoOffsets[4] = {0, 0, 0, 0}; 48 | GattCharacteristic servoOffsetsChar(0x5201, (uint8_t*)servoOffsets, sizeof(servoOffsets), sizeof(servoOffsets), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); 49 | GattCharacteristic *servosChars[] = {&servosChar, &servoOffsetsChar, }; 50 | GattService servosService(0x5100, servosChars, sizeof(servosChars) / sizeof(GattCharacteristic *)); 51 | 52 | // Battery 53 | Ticker batteryTask; 54 | static uint8_t batteryLevel[1]; 55 | GattCharacteristic batteryLevelChar(GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, batteryLevel, sizeof(batteryLevel), sizeof(batteryLevel), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); 56 | GattCharacteristic *batteryServiceChars[] = {&batteryLevelChar }; 57 | GattService batteryService(GattService::UUID_BATTERY_SERVICE, batteryServiceChars, sizeof(batteryServiceChars) / sizeof(GattCharacteristic *)); 58 | 59 | // Accelerometer + Magnetometer + Gyro (IMU) 60 | LSM303 imuDevice; 61 | bool imuAvailable; 62 | L3G gyro; 63 | bool gyroAvailable; 64 | static uint16_t imuData[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; 65 | GattCharacteristic imuChar(0xff09, (uint8_t*)imuData, sizeof(imuData), sizeof(imuData), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); 66 | GattCharacteristic *imuChars[] = {&imuChar }; 67 | GattService imuService(0xff08, imuChars, sizeof(imuChars) / sizeof(GattCharacteristic *)); 68 | 69 | // Sound 70 | byte playerData[] = {0, 0, 0}; 71 | GattCharacteristic playerChar(0xff1a, (uint8_t*)playerData, sizeof(playerData), sizeof(playerData), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); 72 | GattCharacteristic *playerChars[] = {&playerChar }; 73 | GattService playerService(0xff10, playerChars, sizeof(playerChars) / sizeof(GattCharacteristic *)); 74 | 75 | // Storage 76 | bool storageAvailable = false; 77 | FS_SECTION_VARS_ADD(fs_config_t storageConfig) = { .cb = &storageCallback, .num_pages = 1, .page_order = 1 }; 78 | 79 | // Dancer 80 | Ticker danceTask; 81 | int8_t dancePosition = 0; 82 | int8_t danceDirection = 1; 83 | 84 | void updateServos() { 85 | if (servoValues[0] == 0 && servoValues[1] == 0 && servoValues[2] == 0 && servoValues[3] == 0) { 86 | rightLeg.detach(); 87 | rightFoot.detach(); 88 | leftFoot.detach(); 89 | leftLeg.detach(); 90 | } else { 91 | if (!leftFoot.attached()) { 92 | rightLeg.attach(RIGHT_LEG_PIN); 93 | rightFoot.attach(RIGHT_FOOT_PIN); 94 | leftFoot.attach(LEFT_FOOT_PIN); 95 | leftLeg.attach(LEFT_LEG_PIN); 96 | } 97 | rightLeg.write(servoValues[0] + servoOffsets[0]); 98 | rightFoot.write(servoValues[1] + servoOffsets[1]); 99 | leftFoot.write(servoValues[2] + servoOffsets[2]); 100 | leftLeg.write(servoValues[3] + servoOffsets[3]); 101 | } 102 | } 103 | 104 | static void sysEventHandler(uint32_t sys_evt) { 105 | // Delegate events to the fstorage module, as well as pstorage (used by the RBL stack) 106 | fs_sys_event_handler(sys_evt); 107 | pstorage_sys_event_handler(sys_evt); 108 | } 109 | 110 | static void storageCallback(uint8_t op_code, uint32_t result, uint32_t const * p_data, fs_length_t length) { 111 | if (op_code == FS_OP_ERASE && result == NRF_SUCCESS) { 112 | fs_store(&storageConfig, storageConfig.p_start_addr, (uint32_t*)servoOffsets, 1); // 1 words = 4 bytes 113 | } 114 | } 115 | 116 | void loadServoOffsets() { 117 | memcpy(servoOffsets, storageConfig.p_start_addr, sizeof(servoOffsets)); 118 | } 119 | 120 | void saveServoOffsets() { 121 | fs_erase(&storageConfig, storageConfig.p_start_addr, FS_PAGE_SIZE_WORDS); 122 | } 123 | 124 | void playerCommand(byte cmd, byte arg1, byte arg2) { 125 | byte data[10] = {0x7e, 0xff, 0x6, cmd, 0, arg1, arg2, 0, 0, 0xef}; 126 | int16_t checksum = 0 - data[1] - data[2] - data[3] - data[4] - data[5] - data[6]; 127 | data[7] = (checksum >> 8) & 0xff; 128 | data[8] = checksum & 0xff; 129 | Serial.write(data, sizeof(data)); 130 | } 131 | 132 | void playerCommand(byte cmd, uint16_t arg) { 133 | playerCommand(cmd, arg >> 8, arg & 0xff); 134 | } 135 | 136 | void playSound(uint16_t fileNum, byte volume) { 137 | if (volume > 0) { 138 | playerCommand(0x6, 0, volume); 139 | delay(10); 140 | } 141 | playerCommand(0x3, fileNum); 142 | } 143 | 144 | void disconnectionCallBack(const Gap::DisconnectionCallbackParams_t *params) { 145 | ble.startAdvertising(); 146 | Serial.println("Disconnected :-("); 147 | } 148 | 149 | void gattServerWriteCallBack(const GattWriteCallbackParams *params) { 150 | if (params->handle == servosChar.getValueAttribute().getHandle()) { 151 | memcpy(servoValues, params->data, params->len); 152 | updateServos(); 153 | } 154 | if (params->handle == servoOffsetsChar.getValueAttribute().getHandle()) { 155 | memcpy(servoOffsets, params->data, params->len); 156 | saveServoOffsets(); 157 | } 158 | if ((params->handle == playerChar.getValueAttribute().getHandle()) && (params->len >= 2)) { 159 | uint16_t fileId = *(uint16_t*)params->data; 160 | uint8_t volume = params->len == 3 ? params->data[2] : 0; 161 | playSound(fileId, volume); 162 | } 163 | } 164 | 165 | void sensorsCallback() { 166 | if (ble.getGapState().connected) { 167 | // Battery Level 168 | float voltage = analogRead(BATTERY_LEVEL_PIN) * 3.3 / 512; 169 | batteryLevel[0] = max(0, min(100, (int)((voltage - 3.6) / 0.6 * 100))); 170 | ble.updateCharacteristicValue(batteryLevelChar.getValueAttribute().getHandle(), batteryLevel, sizeof(batteryLevel)); 171 | 172 | // IMU 173 | if (imuAvailable) { 174 | imuDevice.read(); 175 | memset(imuData, 0, sizeof(imuData)); 176 | if (!imuDevice.timeoutOccurred()) { 177 | imuData[0] = imuDevice.a.x; 178 | imuData[1] = imuDevice.a.y; 179 | imuData[2] = imuDevice.a.z; 180 | imuData[3] = imuDevice.m.x; 181 | imuData[4] = imuDevice.m.y; 182 | imuData[5] = imuDevice.m.z; 183 | } 184 | if (gyroAvailable) { 185 | gyro.read(); 186 | if (!gyro.timeoutOccurred()) { 187 | imuData[6] = gyro.g.x; 188 | imuData[7] = gyro.g.y; 189 | imuData[8] = gyro.g.z; 190 | } 191 | } 192 | ble.updateCharacteristicValue(imuChar.getValueAttribute().getHandle(), (uint8_t*)imuData, sizeof(imuData)); 193 | } 194 | } 195 | } 196 | 197 | char *getDeviceName(const uint8_t *data, byte dlen) { 198 | static char result[16]; 199 | byte index = 0; 200 | 201 | while (index + 1 < dlen) { 202 | byte field_len = data[index]; 203 | byte field_type = data[index + 1]; 204 | const void *field_data = &data[index + 2]; 205 | index += field_len + 1; 206 | 207 | if (field_type == BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME) { 208 | field_len--; 209 | if (field_len > 15) { 210 | field_len = 15; 211 | } 212 | memcpy(result, field_data, field_len); 213 | result[field_len] = 0; 214 | return result; 215 | } 216 | } 217 | 218 | return NULL; 219 | } 220 | 221 | unsigned long beaconLastSeen = millis(); 222 | void danceCallback() { 223 | if (millis() - 2000 > beaconLastSeen) { 224 | beaconLastSeen = 0; 225 | dancePosition = 0; 226 | danceTask.detach(); 227 | } 228 | 229 | servoValues[0] = 90 + dancePosition; 230 | servoValues[1] = 90 + dancePosition; 231 | servoValues[2] = 90 + dancePosition; 232 | servoValues[3] = 90 + dancePosition; 233 | updateServos(); 234 | 235 | dancePosition += danceDirection * 2; 236 | if (dancePosition > 20 || dancePosition < -20) { 237 | danceDirection = -danceDirection; 238 | } 239 | } 240 | 241 | void scanningCallback(const Gap::AdvertisementCallbackParams_t* params) { 242 | char *deviceName = getDeviceName((const uint8_t *)params->advertisingData, params->advertisingDataLen); 243 | if ((params->rssi > RSSI_THRESHOLD) && !strcmp(deviceName, TARGET_DEVICE_NAME)) { 244 | Serial.print("Found beacon, RSSI="); 245 | Serial.println(params->rssi, DEC); 246 | 247 | if (!beaconLastSeen) { 248 | danceTask.attach(danceCallback, 0.02); 249 | } 250 | beaconLastSeen = millis(); 251 | } 252 | } 253 | 254 | void setup() { 255 | Serial.begin(9600); 256 | Serial.println("Purple Eye Nano!"); 257 | 258 | // Set up storage - to store servo offsets 259 | // Following two lines are a workaround for a bug - storageConfig is not initialized correctly for some reason. 260 | // So we set up the configuration here, and override the original one. 261 | fs_config_t storageConfig2 = { .cb = storageCallback, .num_pages = 1, .page_order = 0 }; 262 | memcpy(&storageConfig, &storageConfig2, sizeof(storageConfig)); 263 | if (fs_init() == NRF_SUCCESS) { 264 | storageAvailable = true; 265 | loadServoOffsets(); 266 | } 267 | 268 | Wire.begin(); 269 | imuAvailable = imuDevice.init(); 270 | imuDevice.setTimeout(1); 271 | imuDevice.enableDefault(); 272 | gyroAvailable = gyro.init(); 273 | gyro.setTimeout(1); 274 | gyro.enableDefault(); 275 | 276 | // LED consumes about 0.3ma, so we turn it off. 277 | pinMode(LED, OUTPUT); 278 | digitalWrite(LED, 1); 279 | 280 | pinMode(BATTERY_LEVEL_PIN, INPUT); 281 | pinMode(RIGHT_LEG_PIN, OUTPUT); 282 | pinMode(RIGHT_FOOT_PIN, OUTPUT); 283 | pinMode(LEFT_FOOT_PIN, OUTPUT); 284 | pinMode(LEFT_LEG_PIN, OUTPUT); 285 | updateServos(); 286 | 287 | ble.init(); 288 | ble.onDisconnection(disconnectionCallBack); 289 | ble.onDataWritten(gattServerWriteCallBack); 290 | 291 | // Setup advertising payload, including Eddystone data 292 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); 293 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)advertisedServices, sizeof(advertisedServices)); 294 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, (uint8_t*)eddystoneData, sizeof(eddystoneData)); 295 | ble.accumulateScanResponse(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) - 1); 296 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 297 | 298 | ble.addService(servosService); 299 | ble.addService(batteryService); 300 | ble.addService(imuService); 301 | ble.addService(playerService); 302 | ble.setDeviceName((const uint8_t *)DEVICE_NAME); 303 | ble.setTxPower(4); 304 | ble.setAdvertisingInterval(160); // (100 ms = 160 * 0.625ms.) 305 | ble.setAdvertisingTimeout(0); 306 | ble.startAdvertising(); 307 | 308 | // scanning for ng-beacons 309 | ble.setScanParams(200, 100, 0, true); 310 | ble.startScan(scanningCallback); 311 | 312 | // Battery level task 313 | batteryTask.attach(sensorsCallback, 0.1); 314 | 315 | // Override the system event handler - this is required for fstorage 316 | softdevice_sys_evt_handler_set(sysEventHandler); 317 | } 318 | 319 | void loop() { 320 | ble.waitForEvent(); 321 | } 322 | -------------------------------------------------------------------------------- /pcb/v2/1-Schematic_Purple Eye.json: -------------------------------------------------------------------------------- 1 | { 2 | "schematics": [ 3 | { 4 | "docType": 1, 5 | "title": "purple-eye", 6 | "dataStr": { 7 | "head": { 8 | "docType": "1", 9 | "editorVersion": "5.9.21", 10 | "importedFrom": "Eagle", 11 | "x": "45", 12 | "y": "visible", 13 | "portOfADImportHack": "", 14 | "importFlag": 0, 15 | "c_para": [], 16 | "transformList": "", 17 | "hasIdFlag": true, 18 | "c_spiceCmd": "null" 19 | }, 20 | "canvas": "CA~1000~1000~#FFFFFF~yes~#CCCCCC~10~1000~1000~line~5~pixel~5~0~0", 21 | "shape": [ 22 | "T~L~330~-571.014625~0~#4BA54B~~5.4pt~0.56~~text-after-edge~comment~Power~1~start~rep2~0", 23 | "LIB~490~15~package`0603`~90~0~rep27~a29ba53807cf43cab02f2f8a6393998d~~0#@$T~N~499.40625~26.625~0~#838383~~5.4pt~0.56~~text-after-edge~comment~10K~1~start~rep14~0#@$T~P~499.41~19.7885~0~#838383~~5.4pt~0.56~~text-after-edge~comment~R1~1~start~rep15~0#@$PL~490 25 486 23.5~#A54B4B~1~0~none~rep16~0#@$PL~486 23.5 494 21~#A54B4B~1~0~none~rep17~0#@$PL~494 21 486 18.5~#A54B4B~1~0~none~rep18~0#@$PL~486 18.5 494 16~#A54B4B~1~0~none~rep19~0#@$PL~494 16 486 13.5~#A54B4B~1~0~none~rep20~0#@$PL~486 13.5 494 11~#A54B4B~1~0~none~rep21~0#@$PL~494 11 486 8.5~#A54B4B~1~0~none~rep22~0#@$PL~486 8.5 494 6~#A54B4B~1~0~none~rep23~0#@$PL~494 6 490 5~#A54B4B~1~0~none~rep24~0#@$P~show~3~2~490~-5~90~rep25~0^^490~-5^^M 490 -5 v 9.842~#A54B4B^^0~492.953~14.69~270~2~end~~4.5pt~#A54B4B^^0~488.03~-1.06~270~2~start~~4.5pt~#A54B4B^^0~490~1^^0~M 487 4 L 490 7 L 493 4#@$P~show~3~1~490~35~270~rep26~0^^490~35^^M 490 35 v -9.842~#A54B4B^^0~492.953~15.32~270~1~start~~4.5pt~#A54B4B^^0~488.03~31.06~270~1~end~~4.5pt~#A54B4B^^0~490~29^^0~M 493 26 L 490 23 L 487 26", 24 | "LIB~470~30~package`0603`~90~0~rep41~a29ba53807cf43cab02f2f8a6393998d~~0#@$T~N~484.12~39.14~270~#838383~~5.4pt~0.56~~text-after-edge~comment~10K~1~~rep28~0#@$T~P~465.57~33.12~270~#838383~~5.4pt~0.56~~text-after-edge~comment~R2~1~~rep29~0#@$PL~470 40 466 38.5~#A54B4B~1~0~none~rep30~0#@$PL~466 38.5 474 36~#A54B4B~1~0~none~rep31~0#@$PL~474 36 466 33.5~#A54B4B~1~0~none~rep32~0#@$PL~466 33.5 474 31~#A54B4B~1~0~none~rep33~0#@$PL~474 31 466 28.5~#A54B4B~1~0~none~rep34~0#@$PL~466 28.5 474 26~#A54B4B~1~0~none~rep35~0#@$PL~474 26 466 23.5~#A54B4B~1~0~none~rep36~0#@$PL~466 23.5 474 21~#A54B4B~1~0~none~rep37~0#@$PL~474 21 470 20~#A54B4B~1~0~none~rep38~0#@$P~show~3~2~470~10~90~rep39~0^^470~10^^M 470 10 v 9.842~#A54B4B^^0~472.953~29.69~270~2~end~~4.5pt~#A54B4B^^0~468.03~13.94~270~2~start~~4.5pt~#A54B4B^^0~470~16^^0~M 467 19 L 470 22 L 473 19#@$P~show~3~1~470~50~270~rep40~0^^470~50^^M 470 50 v -9.842~#A54B4B^^0~472.953~30.32~270~1~start~~4.5pt~#A54B4B^^0~468.03~46.06~270~1~end~~4.5pt~#A54B4B^^0~470~44^^0~M 473 41 L 470 38 L 467 41", 25 | "LIB~160~-490~package`SWITCH-SPDT_LOCK.007S`~~0~rep53~5dcfb368ba6444bbbdc81a876f9638d8~~0#@$T~N~145~-479.999~270~#838383~~5.4pt~0.56~~text-after-edge~comment~SWITCH-SPDTPTH_LOCK~0~start~rep42~0#@$T~P~185~-482.499~270~#838383~~5.4pt~0.56~~text-after-edge~comment~S1~1~start~rep43~0#@$PL~160 -490 155 -500~#A54B4B~1~0~none~rep44~0#@$PL~170 -500 170 -502.5~#A54B4B~1~0~none~rep45~0#@$PL~150 -500 150 -502.5~#A54B4B~1~0~none~rep46~0#@$A~M 150 -501.414 A 1.41 1.41 0 1 0 150.494 -501.324~~#A54B4B~1~0~none~rep47~0#@$A~M 170 -501.414 A 1.41 1.41 0 1 0 170.494 -501.324~~#A54B4B~1~0~none~rep48~0#@$A~M 160 -491.414 A 1.41 1.41 0 1 0 160.494 -491.324~~#A54B4B~1~0~none~rep49~0#@$P~show~3~2~160~-480~270~rep50~0^^160~-480^^M 160 -480 v -9.842~#A54B4B^^0~162.952~-499.68~270~P~start~~4.5pt~#A54B4B^^0~158.031~-483.94~270~2~end~~4.5pt~#A54B4B^^0~160~-486^^0~M 163 -489 L 160 -492 L 157 -489#@$P~show~3~3~170~-510~90~rep51~0^^170~-510^^M 170 -510 v 9.842~#A54B4B^^0~172.952~-490.31~270~S~end~~4.5pt~#A54B4B^^0~168.031~-506.062~270~3~start~~4.5pt~#A54B4B^^0~170~-504^^0~M 167 -501 L 170 -498 L 173 -501#@$P~show~3~1~150~-510~90~rep52~0^^150~-510^^M 150 -510 v 9.842~#A54B4B^^0~152.952~-490.31~270~O~end~~4.5pt~#A54B4B^^0~148.031~-506.062~270~1~start~~4.5pt~#A54B4B^^0~150~-504^^0~M 147 -501 L 150 -498 L 153 -501", 26 | "F~part_netLabel_bar~100~-500~0~rep71~~0^^100~-500^^GND~#A54B4B~118.6~-489.999~270~start~1~~5.4pt^^PL~100 -500 110 -500~#A54B4B~1~0~none~rep69~0^^PL~110 -505 110 -495~#A54B4B~1~0~none~rep70~0", 27 | "LIB~50~-500~package`JST-2-PTH`~~0~rep85~d5d324077a0d412bb6b8ac3dd617416a~~0#@$T~N~40~-479.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~M02JST-PTH-2~0~start~rep75~0#@$T~P~40~-522.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~J1~1~start~rep76~0#@$PL~65 -490 40 -490~#A54B4B~1.6~0~none~rep77~0#@$PL~55 -510 60 -510~#A54B4B~2.4~0~none~rep78~0#@$PL~55 -500 60 -500~#A54B4B~2.4~0~none~rep79~0#@$PL~40 -520 40 -490~#A54B4B~1.6~0~none~rep80~0#@$PL~65 -490 65 -520~#A54B4B~1.6~0~none~rep81~0#@$PL~40 -520 65 -520~#A54B4B~1.6~0~none~rep82~0#@$P~show~3~1~80~-500~0~rep83~0^^80~-500^^M 80 -500 h -19.685~#A54B4B^^0~50.47~-497.047~0~1~end~~4.5pt~#A54B4B^^1~72.126~-501.97~0~1~start~~4.5pt~#A54B4B^^0~64~-500^^0~M 61 -503 L 58 -500 L 61 -497#@$P~show~3~2~80~-510~0~rep84~0^^80~-510^^M 80 -510 h -19.685~#A54B4B^^0~50.47~-507.047~0~2~end~~4.5pt~#A54B4B^^1~72.126~-511.97~0~2~start~~4.5pt~#A54B4B^^0~64~-510^^0~M 61 -513 L 58 -510 L 61 -507", 28 | "LIB~175~-220~package`1X03_LOCK`~~0~rep98~6c5d94cd4f034a4f95e17e5800647b52~~0#@$T~N~155.6~-243~0~#838383~~5.4pt~0.56~~text-after-edge~comment~M03LOCK~0~start~rep86~0#@$T~P~176.6~-190~0~#838383~~5.4pt~0.56~~text-after-edge~comment~J2~1~start~rep87~0#@$PL~160 -240 185 -240~#A54B4B~1.6~0~none~rep88~0#@$PL~170 -210 165 -210~#A54B4B~2.4~0~none~rep89~0#@$PL~170 -220 165 -220~#A54B4B~2.4~0~none~rep90~0#@$PL~170 -230 165 -230~#A54B4B~2.4~0~none~rep91~0#@$PL~185 -200 185 -240~#A54B4B~1.6~0~none~rep92~0#@$PL~160 -240 160 -200~#A54B4B~1.6~0~none~rep93~0#@$PL~185 -200 160 -200~#A54B4B~1.6~0~none~rep94~0#@$P~show~3~1~145~-230~180~rep95~0^^145~-230^^M 145 -230 h 19.685~#A54B4B^^0~174.528~-227.047~0~1~start~~4.5pt~#A54B4B^^1~152.874~-231.968~0~1~end~~4.5pt~#A54B4B^^0~161~-230^^0~M 164 -227 L 167 -230 L 164 -233#@$P~show~3~2~145~-220~180~rep96~0^^145~-220^^M 145 -220 h 19.685~#A54B4B^^0~174.528~-217.047~0~2~start~~4.5pt~#A54B4B^^1~152.874~-221.968~0~2~end~~4.5pt~#A54B4B^^0~161~-220^^0~M 164 -217 L 167 -220 L 164 -223#@$P~show~3~3~145~-210~180~rep97~0^^145~-210^^M 145 -210 h 19.685~#A54B4B^^0~174.528~-207.047~0~3~start~~4.5pt~#A54B4B^^1~152.874~-211.968~0~3~end~~4.5pt~#A54B4B^^0~161~-210^^0~M 164 -207 L 167 -210 L 164 -213", 29 | "LIB~175~-150~package`1X03_LOCK`~~0~rep111~6c5d94cd4f034a4f95e17e5800647b52~~0#@$T~N~155.6~-173~0~#838383~~5.4pt~0.56~~text-after-edge~comment~M03LOCK~0~start~rep99~0#@$T~P~176.6~-120~0~#838383~~5.4pt~0.56~~text-after-edge~comment~J3~1~start~rep100~0#@$PL~160 -170 185 -170~#A54B4B~1.6~0~none~rep101~0#@$PL~170 -140 165 -140~#A54B4B~2.4~0~none~rep102~0#@$PL~170 -150 165 -150~#A54B4B~2.4~0~none~rep103~0#@$PL~170 -160 165 -160~#A54B4B~2.4~0~none~rep104~0#@$PL~185 -130 185 -170~#A54B4B~1.6~0~none~rep105~0#@$PL~160 -170 160 -130~#A54B4B~1.6~0~none~rep106~0#@$PL~185 -130 160 -130~#A54B4B~1.6~0~none~rep107~0#@$P~show~3~1~145~-160~180~rep108~0^^145~-160^^M 145 -160 h 19.685~#A54B4B^^0~174.528~-157.047~0~1~start~~4.5pt~#A54B4B^^1~152.874~-161.968~0~1~end~~4.5pt~#A54B4B^^0~161~-160^^0~M 164 -157 L 167 -160 L 164 -163#@$P~show~3~2~145~-150~180~rep109~0^^145~-150^^M 145 -150 h 19.685~#A54B4B^^0~174.528~-147.047~0~2~start~~4.5pt~#A54B4B^^1~152.874~-151.968~0~2~end~~4.5pt~#A54B4B^^0~161~-150^^0~M 164 -147 L 167 -150 L 164 -153#@$P~show~3~3~145~-140~180~rep110~0^^145~-140^^M 145 -140 h 19.685~#A54B4B^^0~174.528~-137.047~0~3~start~~4.5pt~#A54B4B^^1~152.874~-141.968~0~3~end~~4.5pt~#A54B4B^^0~161~-140^^0~M 164 -137 L 167 -140 L 164 -143", 30 | "LIB~175~-80~package`1X03_LOCK`~~0~rep124~6c5d94cd4f034a4f95e17e5800647b52~~0#@$T~N~155.6~-103~0~#838383~~5.4pt~0.56~~text-after-edge~comment~M03LOCK~0~start~rep112~0#@$T~P~176.6~-50~0~#838383~~5.4pt~0.56~~text-after-edge~comment~J4~1~start~rep113~0#@$PL~160 -100 185 -100~#A54B4B~1.6~0~none~rep114~0#@$PL~170 -70 165 -70~#A54B4B~2.4~0~none~rep115~0#@$PL~170 -80 165 -80~#A54B4B~2.4~0~none~rep116~0#@$PL~170 -90 165 -90~#A54B4B~2.4~0~none~rep117~0#@$PL~185 -60 185 -100~#A54B4B~1.6~0~none~rep118~0#@$PL~160 -100 160 -60~#A54B4B~1.6~0~none~rep119~0#@$PL~185 -60 160 -60~#A54B4B~1.6~0~none~rep120~0#@$P~show~3~1~145~-90~180~rep121~0^^145~-90^^M 145 -90 h 19.685~#A54B4B^^0~174.528~-87.047~0~1~start~~4.5pt~#A54B4B^^1~152.874~-91.968~0~1~end~~4.5pt~#A54B4B^^0~161~-90^^0~M 164 -87 L 167 -90 L 164 -93#@$P~show~3~2~145~-80~180~rep122~0^^145~-80^^M 145 -80 h 19.685~#A54B4B^^0~174.528~-77.047~0~2~start~~4.5pt~#A54B4B^^1~152.874~-81.968~0~2~end~~4.5pt~#A54B4B^^0~161~-80^^0~M 164 -77 L 167 -80 L 164 -83#@$P~show~3~3~145~-70~180~rep123~0^^145~-70^^M 145 -70 h 19.685~#A54B4B^^0~174.528~-67.047~0~3~start~~4.5pt~#A54B4B^^1~152.874~-71.968~0~3~end~~4.5pt~#A54B4B^^0~161~-70^^0~M 164 -67 L 167 -70 L 164 -73", 31 | "LIB~175~-285~package`1X03_LOCK`~~0~rep137~6c5d94cd4f034a4f95e17e5800647b52~~0#@$T~N~155.6~-308~0~#838383~~5.4pt~0.56~~text-after-edge~comment~M03LOCK~0~start~rep125~0#@$T~P~176.6~-255~0~#838383~~5.4pt~0.56~~text-after-edge~comment~J5~1~start~rep126~0#@$PL~160 -305 185 -305~#A54B4B~1.6~0~none~rep127~0#@$PL~170 -275 165 -275~#A54B4B~2.4~0~none~rep128~0#@$PL~170 -285 165 -285~#A54B4B~2.4~0~none~rep129~0#@$PL~170 -295 165 -295~#A54B4B~2.4~0~none~rep130~0#@$PL~185 -265 185 -305~#A54B4B~1.6~0~none~rep131~0#@$PL~160 -305 160 -265~#A54B4B~1.6~0~none~rep132~0#@$PL~185 -265 160 -265~#A54B4B~1.6~0~none~rep133~0#@$P~show~3~1~145~-295~180~rep134~0^^145~-295^^M 145 -295 h 19.685~#A54B4B^^0~174.527~-292.047~0~1~start~~4.5pt~#A54B4B^^1~152.874~-296.97~0~1~end~~4.5pt~#A54B4B^^0~161~-295^^0~M 164 -292 L 167 -295 L 164 -298#@$P~show~3~2~145~-285~180~rep135~0^^145~-285^^M 145 -285 h 19.685~#A54B4B^^0~174.527~-282.047~0~2~start~~4.5pt~#A54B4B^^1~152.874~-286.97~0~2~end~~4.5pt~#A54B4B^^0~161~-285^^0~M 164 -282 L 167 -285 L 164 -288#@$P~show~3~3~145~-275~180~rep136~0^^145~-275^^M 145 -275 h 19.685~#A54B4B^^0~174.527~-272.047~0~3~start~~4.5pt~#A54B4B^^1~152.874~-276.97~0~3~end~~4.5pt~#A54B4B^^0~161~-275^^0~M 164 -272 L 167 -275 L 164 -278", 32 | "LIB~470~-500~package`SOT23-5`~~0~rep166~c68bbcdcc62b4ee5820ddf4a9c0a7c85~~0#@$T~N~440~-469.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~MCP73831~1~start~rep155~0#@$T~P~440~-521.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~U1~1~start~rep156~0#@$PL~440 -520 500 -520~#A54B4B~1~0~none~rep157~0#@$PL~500 -520 500 -480~#A54B4B~1~0~none~rep158~0#@$PL~500 -480 440 -480~#A54B4B~1~0~none~rep159~0#@$PL~440 -480 440 -520~#A54B4B~1~0~none~rep160~0#@$P~show~3~4~430~-510~180~rep161~0^^430~-510^^M 430 -510 h 9.842~#A54B4B^^1~449.69~-507.05~0~VIN~start~~4.5pt~#A54B4B^^1~433.937~-511.97~0~4~end~~4.5pt~#A54B4B^^0~436~-510^^0~M 439 -507 L 442 -510 L 439 -513#@$P~show~3~1~430~-490~180~rep162~0^^430~-490^^M 430 -490 h 9.842~#A54B4B^^1~449.69~-487.05~0~STAT~start~~4.5pt~#A54B4B^^1~433.937~-491.97~0~1~end~~4.5pt~#A54B4B^^0~436~-490^^0~M 439 -487 L 442 -490 L 439 -493#@$P~show~3~3~510~-510~0~rep163~0^^510~-510^^M 510 -510 h -9.842~#A54B4B^^1~490.32~-507.05~0~VBAT~end~~4.5pt~#A54B4B^^1~506.063~-511.97~0~3~start~~4.5pt~#A54B4B^^0~504~-510^^0~M 501 -513 L 498 -510 L 501 -507#@$P~show~3~5~510~-500~0~rep164~0^^510~-500^^M 510 -500 h -9.842~#A54B4B^^1~490.32~-497.05~0~PROG~end~~4.5pt~#A54B4B^^1~506.063~-501.97~0~5~start~~4.5pt~#A54B4B^^0~504~-500^^0~M 501 -503 L 498 -500 L 501 -497#@$P~show~3~2~510~-490~0~rep165~0^^510~-490^^M 510 -490 h -9.842~#A54B4B^^1~490.32~-487.05~0~VSS~end~~4.5pt~#A54B4B^^1~506.063~-491.97~0~2~start~~4.5pt~#A54B4B^^0~504~-490^^0~M 501 -493 L 498 -490 L 501 -487", 33 | "LIB~580~-500~package`0603`~~0~rep183~a29ba53807cf43cab02f2f8a6393998d~~0#@$T~N~565~-486.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~2.0k~1~start~rep170~0#@$T~P~565~-505.899~0~#838383~~5.4pt~0.56~~text-after-edge~comment~R3~1~start~rep171~0#@$PL~570 -500 571.5 -504~#A54B4B~1~0~none~rep172~0#@$PL~571.5 -504 574 -496~#A54B4B~1~0~none~rep173~0#@$PL~574 -496 576.5 -504~#A54B4B~1~0~none~rep174~0#@$PL~576.5 -504 579 -496~#A54B4B~1~0~none~rep175~0#@$PL~579 -496 581.5 -504~#A54B4B~1~0~none~rep176~0#@$PL~581.5 -504 584 -496~#A54B4B~1~0~none~rep177~0#@$PL~584 -496 586.5 -504~#A54B4B~1~0~none~rep178~0#@$PL~586.5 -504 589 -496~#A54B4B~1~0~none~rep179~0#@$PL~589 -496 590 -500~#A54B4B~1~0~none~rep180~0#@$P~show~3~2~600~-500~0~rep181~0^^600~-500^^M 600 -500 h -9.842~#A54B4B^^0~580.314~-497.05~0~2~end~~4.5pt~#A54B4B^^0~596.062~-501.97~0~2~start~~4.5pt~#A54B4B^^0~594~-500^^0~M 591 -503 L 588 -500 L 591 -497#@$P~show~3~1~560~-500~180~rep182~0^^560~-500^^M 560 -500 h 9.842~#A54B4B^^0~579.685~-497.05~0~1~start~~4.5pt~#A54B4B^^0~563.937~-501.97~0~1~end~~4.5pt~#A54B4B^^0~566~-500^^0~M 569 -497 L 572 -500 L 569 -503", 34 | "LIB~350~-510~package`0603`~~0~rep211~a29ba53807cf43cab02f2f8a6393998d~~0#@$T~N~358.5~-515.999~270~#838383~~5.4pt~0.56~~text-after-edge~comment~4.7uF~1~start~rep203~0#@$T~P~338.5~-515.999~270~#838383~~5.4pt~0.56~~text-after-edge~comment~C1~1~start~rep204~0#@$PL~340 -510 342 -510~#A54B4B~1~0~none~rep205~0#@$PL~350 -510 348 -510~#A54B4B~1~0~none~rep206~0#@$R~346~-517.999~~~2~16~#A54B4B~0.004~0~#A54B4B~rep207~0#@$R~342~-517.999~~~2~16~#A54B4B~0.004~0~#A54B4B~rep208~0#@$P~show~3~1~330~-510~180~rep209~0^^330~-510^^M 330 -510 h 9.842~#A54B4B^^0~349.685~-507.05~0~1~start~~4.5pt~#A54B4B^^0~333.937~-511.97~0~1~end~~4.5pt~#A54B4B^^0~336~-510^^0~M 339 -507 L 342 -510 L 339 -513#@$P~show~3~2~360~-510~0~rep210~0^^360~-510^^M 360 -510 h -9.842~#A54B4B^^0~340.315~-507.05~0~2~end~~4.5pt~#A54B4B^^0~356.063~-511.97~0~2~start~~4.5pt~#A54B4B^^0~354~-510^^0~M 351 -513 L 348 -510 L 351 -507", 35 | "LIB~400~-470~package`LED_0603`~~0~rep229~f02170614b7f46a1a793beb147d3af2c~~0#@$T~N~405.4~-485.499~0~#838383~~5.4pt~0.56~~text-after-edge~comment~RED~1~start~rep215~0#@$T~P~409.6~-476.999~0~#838383~~5.4pt~0.56~~text-after-edge~comment~D1~1~start~rep216~0#@$PL~400 -475 410 -470~#A54B4B~1~0~none~rep217~0#@$PL~410 -470 400 -465~#A54B4B~1~0~none~rep218~0#@$PL~410 -475 410 -470~#A54B4B~1~0~none~rep219~0#@$PL~410 -470 410 -465~#A54B4B~1~0~none~rep220~0#@$PL~400 -475 400 -470~#A54B4B~1~0~none~rep221~0#@$PL~400 -470 400 -465~#A54B4B~1~0~none~rep222~0#@$PL~403 -462 408.5 -456.5~#A54B4B~1~0~none~rep223~0#@$PL~407.5 -462.5 413 -457~#A54B4B~1~0~none~rep224~0#@$P~show~3~C~420~-470~0~rep225~0^^420~-470^^M 420 -470 h -9.842~#A54B4B^^0~400.315~-467.05~0~C~end~~4.5pt~#A54B4B^^0~416.063~-471.97~0~2~start~~4.5pt~#A54B4B^^0~414~-470^^0~M 411 -473 L 408 -470 L 411 -467#@$P~show~3~A~390~-470~180~rep226~0^^390~-470^^M 390 -470 h 9.842~#A54B4B^^0~409.685~-467.05~0~A~start~~4.5pt~#A54B4B^^0~393.937~-471.97~0~1~end~~4.5pt~#A54B4B^^0~396~-470^^0~M 399 -467 L 402 -470 L 399 -473#@$PG~408.5 -456.5 405 -458 405 -458 407 -460 407 -460 408.5 -456.5~#A54B4B~0.6~0~#A54B4B~rep227~0#@$PG~413 -457 409.5 -458.5 409.5 -458.5 411.5 -460.5 411.5 -460.5 413 -457~#A54B4B~0.6~0~#A54B4B~rep228~0", 36 | "LIB~370~-490~package`0603`~~0~rep243~a29ba53807cf43cab02f2f8a6393998d~~0#@$T~N~383~-474.999~270~#838383~~5.4pt~0.56~~text-after-edge~comment~4.7K~1~start~rep230~0#@$T~P~364.1~-474.999~270~#838383~~5.4pt~0.56~~text-after-edge~comment~R4~1~start~rep231~0#@$PL~370 -480 366 -481.5~#A54B4B~1~0~none~rep232~0#@$PL~366 -481.5 374 -484~#A54B4B~1~0~none~rep233~0#@$PL~374 -484 366 -486.5~#A54B4B~1~0~none~rep234~0#@$PL~366 -486.5 374 -489~#A54B4B~1~0~none~rep235~0#@$PL~374 -489 366 -491.5~#A54B4B~1~0~none~rep236~0#@$PL~366 -491.5 374 -494~#A54B4B~1~0~none~rep237~0#@$PL~374 -494 366 -496.5~#A54B4B~1~0~none~rep238~0#@$PL~366 -496.5 374 -499~#A54B4B~1~0~none~rep239~0#@$PL~374 -499 370 -500~#A54B4B~1~0~none~rep240~0#@$P~show~3~2~370~-510~90~rep241~0^^370~-510^^M 370 -510 v 9.842~#A54B4B^^0~372.953~-490.31~270~2~end~~4.5pt~#A54B4B^^0~368.031~-506.062~270~2~start~~4.5pt~#A54B4B^^0~370~-504^^0~M 367 -501 L 370 -498 L 373 -501#@$P~show~3~1~370~-470~270~rep242~0^^370~-470^^M 370 -470 v -9.842~#A54B4B^^0~372.953~-489.68~270~1~start~~4.5pt~#A54B4B^^0~368.031~-473.94~270~1~end~~4.5pt~#A54B4B^^0~370~-476^^0~M 373 -479 L 370 -482 L 367 -479", 37 | "W~470 65 470 50~#4BA54B~1~0~none~rep244~0", 38 | "W~100 -500 80 -500~#4BA54B~1~0~none~rep245~0", 39 | "W~130 -300 130 -295 145 -295~#4BA54B~1~0~none~rep250~0", 40 | "W~510 -490 540 -490~#4BA54B~1~0~none~rep251~0", 41 | "W~600 -500 610 -500~#4BA54B~1~0~none~rep252~0", 42 | "W~330 -500 330 -510~#4BA54B~1~0~none~rep255~0", 43 | "W~145 -285 120 -285~#4BA54B~1~0~none~rep258~0", 44 | "W~160 -480 205 -480~#4BA54B~1~0~none~rep259~0", 45 | "W~490 35 490 65~#4BA54B~1~0~none~rep262~0", 46 | "W~470 10 470 -55~#4BA54B~1~0~none~rep270~0", 47 | "W~490 -5 470 -5~#4BA54B~1~0~none~rep272~0", 48 | "W~145 -70 120 -70~#4BA54B~1~0~none~rep274~0", 49 | "N~120~-70~0~#838383~S1~rep276~left~120~-71.4~Verdana~5.4pt~0", 50 | "W~145 -140 120 -140~#4BA54B~1~0~none~rep278~0", 51 | "N~120~-140~0~#838383~S2~rep280~left~120~-141.4~Verdana~5.4pt~0", 52 | "W~145 -210 120 -210~#4BA54B~1~0~none~rep282~0", 53 | "N~120~-210~0~#838383~S3~rep284~left~120~-211.4~Verdana~5.4pt~0", 54 | "W~145 -275 125 -275~#4BA54B~1~0~none~rep286~0", 55 | "N~125~-275~0~#838383~S4~rep288~left~125~-276.4~Verdana~5.4pt~0", 56 | "W~510 -510 550 -510~#4BA54B~1~0~none~rep289~0", 57 | "W~80 -510 150 -510~#4BA54B~1~0~none~rep290~0", 58 | "N~530~-510~0~#838383~VBAT~rep291~left~530~-511.399~Verdana~5.4pt~0", 59 | "N~90~-510~0~#838383~VBAT~rep292~left~90~-511.399~Verdana~5.4pt~0", 60 | "W~510 -500 560 -500~#4BA54B~1~0~none~rep293~0", 61 | "W~430 -510 370 -510 360 -510~#4BA54B~1~0~none~rep295~0", 62 | "N~125~-420~0~#838383~VBUS~rep297~left~125~-421.399~Verdana~5.4pt~0", 63 | "N~400~-510~0~#838383~VBUS~rep298~left~400~-511.399~Verdana~5.4pt~0", 64 | "W~390 -470 370 -470~#4BA54B~1~0~none~rep299~0", 65 | "W~430 -490 430 -470 420 -470~#4BA54B~1~0~none~rep300~0", 66 | "LIB~380~-265~package`MDBT42`Contributor`ruslan.khudyakov`BOM_Manufacturer Part`?`spicePre`M`~~0~gge2598~43799bb0bd7747f4b5fe75ca3753eb72~119812af5756408e8ae9c6c1dd8a3043~0#@$T~N~439~-278.015625~0~#000080~Arial~~~~~comment~MDBT42~1~start~gge2600~0#@$T~P~439.0078125~-287.140625~0~#000080~Arial~~~~~comment~MDBT421~1~start~gge2602~0#@$PL~380.32 -275 540.32 -275~#A54B4B~1~0~none~gge2604~0#@$PL~540.32 -275 540.32 -75~#A54B4B~1~0~none~gge2605~0#@$PL~540.32 -75 380.32 -75~#A54B4B~1~0~none~gge2606~0#@$PL~380.32 -75 380.32 -275~#A54B4B~1~0~none~gge2607~0#@$P~show~3~1~360~-265~180~gge2608~0^^360~-265^^M 360 -265 h 19.685~#A54B4B^^1~389.84~-262.047~0~GND~start~~4.5pt~#A54B4B^^1~368.19~-266.97~0~1~end~~4.5pt~#A54B4B^^0~376~-265^^0~M 379 -262 L 382 -265 L 379 -268#@$P~show~3~2~360~-255~180~gge2615~0^^360~-255^^M 360 -255 h 19.685~#A54B4B^^1~389.84~-252.05~0~P0.23~start~~4.5pt~#A54B4B^^1~368.19~-256.97~0~2~end~~4.5pt~#A54B4B^^0~376~-255^^0~M 379 -252 L 382 -255 L 379 -258#@$P~show~3~3~360~-245~180~gge2622~0^^360~-245^^M 360 -245 h 19.685~#A54B4B^^1~389.84~-242.05~0~P0.22~start~~4.5pt~#A54B4B^^1~368.19~-246.97~0~3~end~~4.5pt~#A54B4B^^0~376~-245^^0~M 379 -242 L 382 -245 L 379 -248#@$P~show~3~4~360~-235~180~gge2629~0^^360~-235^^M 360 -235 h 19.685~#A54B4B^^1~389.84~-232.05~0~SWCLK~start~~4.5pt~#A54B4B^^1~368.19~-236.97~0~4~end~~4.5pt~#A54B4B^^0~376~-235^^0~M 379 -232 L 382 -235 L 379 -238#@$P~show~3~5~360~-225~180~gge2636~0^^360~-225^^M 360 -225 h 19.685~#A54B4B^^1~389.84~-222.05~0~SWDIO~start~~4.5pt~#A54B4B^^1~368.19~-226.97~0~5~end~~4.5pt~#A54B4B^^0~376~-225^^0~M 379 -222 L 382 -225 L 379 -228#@$P~show~3~6~360~-215~180~gge2643~0^^360~-215^^M 360 -215 h 19.685~#A54B4B^^1~389.84~-212.05~0~P0.21/RESET~start~~4.5pt~#A54B4B^^1~368.19~-216.97~0~6~end~~4.5pt~#A54B4B^^0~376~-215^^0~M 379 -212 L 382 -215 L 379 -218#@$P~show~3~7~360~-205~180~gge2650~0^^360~-205^^M 360 -205 h 19.685~#A54B4B^^1~389.84~-202.05~0~P0.18~start~~4.5pt~#A54B4B^^1~368.19~-206.97~0~7~end~~4.5pt~#A54B4B^^0~376~-205^^0~M 379 -202 L 382 -205 L 379 -208#@$P~show~3~8~360~-195~180~gge2657~0^^360~-195^^M 360 -195 h 19.685~#A54B4B^^1~389.84~-192.05~0~P0.17~start~~4.5pt~#A54B4B^^1~368.19~-196.97~0~8~end~~4.5pt~#A54B4B^^0~376~-195^^0~M 379 -192 L 382 -195 L 379 -198#@$P~show~3~9~360~-185~180~gge2664~0^^360~-185^^M 360 -185 h 19.685~#A54B4B^^1~389.84~-182.05~0~P0.15~start~~4.5pt~#A54B4B^^1~368.19~-186.97~0~9~end~~4.5pt~#A54B4B^^0~376~-185^^0~M 379 -182 L 382 -185 L 379 -188#@$P~show~3~10~360~-175~180~gge2671~0^^360~-175^^M 360 -175 h 19.685~#A54B4B^^1~389.84~-172.05~0~P0.13~start~~4.5pt~#A54B4B^^1~368.19~-176.97~0~10~end~~4.5pt~#A54B4B^^0~376~-175^^0~M 379 -172 L 382 -175 L 379 -178#@$P~show~3~11~360~-165~180~gge2678~0^^360~-165^^M 360 -165 h 19.685~#A54B4B^^1~389.84~-162.05~0~P0.12~start~~4.5pt~#A54B4B^^1~368.19~-166.97~0~11~end~~4.5pt~#A54B4B^^0~376~-165^^0~M 379 -162 L 382 -165 L 379 -168#@$P~show~3~12~360~-155~180~gge2685~0^^360~-155^^M 360 -155 h 19.685~#A54B4B^^1~389.84~-152.05~0~P0.10~start~~4.5pt~#A54B4B^^1~368.19~-156.97~0~12~end~~4.5pt~#A54B4B^^0~376~-155^^0~M 379 -152 L 382 -155 L 379 -158#@$P~show~3~13~360~-145~180~gge2692~0^^360~-145^^M 360 -145 h 19.685~#A54B4B^^1~389.84~-142.05~0~P0.09~start~~4.5pt~#A54B4B^^1~368.19~-146.97~0~13~end~~4.5pt~#A54B4B^^0~376~-145^^0~M 379 -142 L 382 -145 L 379 -148#@$P~show~3~38~360~-115~180~gge2699~0^^360~-115^^M 360 -115 h 19.685~#A54B4B^^1~389.84~-112.05~0~P0.24~start~~4.5pt~#A54B4B^^1~368.19~-116.97~0~38~end~~4.5pt~#A54B4B^^0~376~-115^^0~M 379 -112 L 382 -115 L 379 -118#@$P~show~3~39~360~-105~180~gge2706~0^^360~-105^^M 360 -105 h 19.685~#A54B4B^^1~389.84~-102.05~0~P0.20~start~~4.5pt~#A54B4B^^1~368.19~-106.97~0~39~end~~4.5pt~#A54B4B^^0~376~-105^^0~M 379 -102 L 382 -105 L 379 -108#@$P~show~3~40~360~-95~180~gge2713~0^^360~-95^^M 360 -95 h 19.685~#A54B4B^^1~389.84~-92.05~0~P0.16~start~~4.5pt~#A54B4B^^1~368.19~-96.97~0~40~end~~4.5pt~#A54B4B^^0~376~-95^^0~M 379 -92 L 382 -95 L 379 -98#@$P~show~3~41~360~-85~180~gge2720~0^^360~-85^^M 360 -85 h 19.685~#A54B4B^^1~389.84~-82.05~0~P0.14~start~~4.5pt~#A54B4B^^1~368.19~-86.97~0~41~end~~4.5pt~#A54B4B^^0~376~-85^^0~M 379 -82 L 382 -85 L 379 -88#@$P~show~3~14~420~-55~270~gge2727~0^^420~-55^^M 420 -55 v -19.685~#A54B4B^^1~423.27~-84.53~270~GND~start~~4.5pt~#A54B4B^^1~418.346~-62.87~270~14~end~~4.5pt~#A54B4B^^0~420~-71^^0~M 423 -74 L 420 -77 L 417 -74#@$P~show~3~15~430~-55~270~gge2734~0^^430~-55^^M 430 -55 v -19.685~#A54B4B^^1~433.27~-84.53~270~VDD~start~~4.5pt~#A54B4B^^1~428.346~-62.87~270~15~end~~4.5pt~#A54B4B^^0~430~-71^^0~M 433 -74 L 430 -77 L 427 -74#@$P~show~3~16~440~-55~270~gge2741~0^^440~-55^^M 440 -55 v -19.685~#A54B4B^^1~443.27~-84.53~270~P0.08~start~~4.5pt~#A54B4B^^1~438.346~-62.87~270~16~end~~4.5pt~#A54B4B^^0~440~-71^^0~M 443 -74 L 440 -77 L 437 -74#@$P~show~3~17~450~-55~270~gge2748~0^^450~-55^^M 450 -55 v -19.685~#A54B4B^^1~453.27~-84.53~270~P0.06~start~~4.5pt~#A54B4B^^1~448.346~-62.87~270~17~end~~4.5pt~#A54B4B^^0~450~-71^^0~M 453 -74 L 450 -77 L 447 -74#@$P~show~3~18~460~-55~270~gge2755~0^^460~-55^^M 460 -55 v -19.685~#A54B4B^^1~463.27~-84.53~270~P0.07~start~~4.5pt~#A54B4B^^1~458.346~-62.87~270~18~end~~4.5pt~#A54B4B^^0~460~-71^^0~M 463 -74 L 460 -77 L 457 -74#@$P~show~3~19~470~-55~270~gge2762~0^^470~-55^^M 470 -55 v -19.685~#A54B4B^^1~473.27~-84.53~270~P0.05~start~~4.5pt~#A54B4B^^1~468.346~-62.87~270~19~end~~4.5pt~#A54B4B^^0~470~-71^^0~M 473 -74 L 470 -77 L 467 -74#@$P~show~3~20~480~-55~270~gge2769~0^^480~-55^^M 480 -55 v -19.685~#A54B4B^^1~483.27~-84.53~270~P0.00/XL1~start~~4.5pt~#A54B4B^^1~478.346~-62.87~270~20~end~~4.5pt~#A54B4B^^0~480~-71^^0~M 483 -74 L 480 -77 L 477 -74#@$P~show~3~21~490~-55~270~gge2776~0^^490~-55^^M 490 -55 v -19.685~#A54B4B^^1~493.27~-84.53~270~P0.01/XL2~start~~4.5pt~#A54B4B^^1~488.346~-62.87~270~21~end~~4.5pt~#A54B4B^^0~490~-71^^0~M 493 -74 L 490 -77 L 487 -74#@$P~show~3~22~500~-55~270~gge2783~0^^500~-55^^M 500 -55 v -19.685~#A54B4B^^1~503.27~-84.53~270~P0.04~start~~4.5pt~#A54B4B^^1~498.346~-62.87~270~22~end~~4.5pt~#A54B4B^^0~500~-71^^0~M 503 -74 L 500 -77 L 497 -74#@$P~show~3~23~510~-55~270~gge2790~0^^510~-55^^M 510 -55 v -19.685~#A54B4B^^1~513.27~-84.53~270~P0.03~start~~4.5pt~#A54B4B^^1~508.346~-62.87~270~23~end~~4.5pt~#A54B4B^^0~510~-71^^0~M 513 -74 L 510 -77 L 507 -74#@$P~show~3~24~520~-55~270~gge2797~0^^520~-55^^M 520 -55 v -19.685~#A54B4B^^1~523.27~-84.53~270~P0.02~start~~4.5pt~#A54B4B^^1~518.346~-62.87~270~24~end~~4.5pt~#A54B4B^^0~520~-71^^0~M 523 -74 L 520 -77 L 517 -74#@$P~show~3~25~530~-55~270~gge2804~0^^530~-55^^M 530 -55 v -19.685~#A54B4B^^1~533.27~-84.53~270~GND~start~~4.5pt~#A54B4B^^1~528.346~-62.87~270~25~end~~4.5pt~#A54B4B^^0~530~-71^^0~M 533 -74 L 530 -77 L 527 -74#@$P~show~3~37~560~-265~0~gge2811~0^^560~-265^^M 560 -265 h -19.685~#A54B4B^^1~530.79~-262.047~0~GND~end~~4.5pt~#A54B4B^^1~552.44~-266.97~0~37~start~~4.5pt~#A54B4B^^0~544~-265^^0~M 541 -268 L 538 -265 L 541 -262#@$P~show~3~36~560~-245~0~gge2818~0^^560~-245^^M 560 -245 h -19.685~#A54B4B^^1~530.79~-242.05~0~P0.19~end~~4.5pt~#A54B4B^^1~552.44~-246.97~0~36~start~~4.5pt~#A54B4B^^0~544~-245^^0~M 541 -248 L 538 -245 L 541 -242#@$P~show~3~35~560~-235~0~gge2825~0^^560~-235^^M 560 -235 h -19.685~#A54B4B^^1~530.79~-232.05~0~P0.26~end~~4.5pt~#A54B4B^^1~552.44~-236.97~0~35~start~~4.5pt~#A54B4B^^0~544~-235^^0~M 541 -238 L 538 -235 L 541 -232#@$P~show~3~34~560~-225~0~gge2832~0^^560~-225^^M 560 -225 h -19.685~#A54B4B^^1~530.79~-222.05~0~P0.11~end~~4.5pt~#A54B4B^^1~552.44~-226.97~0~34~start~~4.5pt~#A54B4B^^0~544~-225^^0~M 541 -228 L 538 -225 L 541 -222#@$P~show~3~33~560~-215~0~gge2839~0^^560~-215^^M 560 -215 h -19.685~#A54B4B^^1~530.79~-212.05~0~P0.28~end~~4.5pt~#A54B4B^^1~552.44~-216.97~0~33~start~~4.5pt~#A54B4B^^0~544~-215^^0~M 541 -218 L 538 -215 L 541 -212#@$P~show~3~32~560~-205~0~gge2846~0^^560~-205^^M 560 -205 h -19.685~#A54B4B^^1~530.79~-202.05~0~P0.29~end~~4.5pt~#A54B4B^^1~552.44~-206.97~0~32~start~~4.5pt~#A54B4B^^0~544~-205^^0~M 541 -208 L 538 -205 L 541 -202#@$P~show~3~31~560~-195~0~gge2853~0^^560~-195^^M 560 -195 h -19.685~#A54B4B^^1~530.79~-192.05~0~P0.30~end~~4.5pt~#A54B4B^^1~552.44~-196.97~0~31~start~~4.5pt~#A54B4B^^0~544~-195^^0~M 541 -198 L 538 -195 L 541 -192#@$P~show~3~30~560~-185~0~gge2860~0^^560~-185^^M 560 -185 h -19.685~#A54B4B^^1~530.79~-182.05~0~P0.25~end~~4.5pt~#A54B4B^^1~552.44~-186.97~0~30~start~~4.5pt~#A54B4B^^0~544~-185^^0~M 541 -188 L 538 -185 L 541 -182#@$P~show~3~29~560~-175~0~gge2867~0^^560~-175^^M 560 -175 h -19.685~#A54B4B^^1~530.79~-172.05~0~P0.27~end~~4.5pt~#A54B4B^^1~552.44~-176.97~0~29~start~~4.5pt~#A54B4B^^0~544~-175^^0~M 541 -178 L 538 -175 L 541 -172#@$P~show~3~28~560~-165~0~gge2874~0^^560~-165^^M 560 -165 h -19.685~#A54B4B^^1~530.79~-162.05~0~P0.31~end~~4.5pt~#A54B4B^^1~552.44~-166.97~0~28~start~~4.5pt~#A54B4B^^0~544~-165^^0~M 541 -168 L 538 -165 L 541 -162#@$P~show~3~27~560~-155~0~gge2881~0^^560~-155^^M 560 -155 h -19.685~#A54B4B^^1~530.79~-152.05~0~DEC4~end~~4.5pt~#A54B4B^^1~552.44~-156.97~0~27~start~~4.5pt~#A54B4B^^0~544~-155^^0~M 541 -158 L 538 -155 L 541 -152#@$P~show~3~26~560~-145~0~gge2888~0^^560~-145^^M 560 -145 h -19.685~#A54B4B^^1~530.79~-142.05~0~DCC~end~~4.5pt~#A54B4B^^1~552.44~-146.97~0~26~start~~4.5pt~#A54B4B^^0~544~-145^^0~M 541 -148 L 538 -145 L 541 -142", 67 | "F~part_netLabel_bar~585~-265~0~gge3194~~0^^585~-265^^GND~#A54B4B~603.6~-255~270~start~1~~5.4pt^^PL~585 -265 595 -265~#A54B4B~1~0~none~gge3197~0^^PL~595 -270 595 -260~#A54B4B~1~0~none~gge3198~0", 68 | "F~part_netLabel_bar~530~-20~270~gge3200~~0^^530~-20^^GND~#A54B4B~520~-1.41~0~start~1~~5.4pt^^PL~530 -20 530 -10~#A54B4B~1~0~none~gge3203~0^^PL~535 -10 525 -10~#A54B4B~1~0~none~gge3204~0", 69 | "F~part_netLabel_bar~415~-35~180~gge3206~~0^^415~-35^^GND~#A54B4B~401.97~-45.04~270~end~1~~5.4pt^^PL~415 -35 405 -35~#A54B4B~1~0~none~gge3209~0^^PL~405 -30 405 -40~#A54B4B~1~0~none~gge3210~0", 70 | "F~part_netLabel_bar~315~-265~180~gge3212~~0^^315~-265^^GND~#A54B4B~301.91~-275~270~end~1~~5.4pt^^PL~315 -265 305 -265~#A54B4B~1~0~none~gge3215~0^^PL~305 -260 305 -270~#A54B4B~1~0~none~gge3216~0", 71 | "W~315 -265 360 -265~#008800~1~0~none~gge3217~0", 72 | "W~585 -265 560 -265~#008800~1~0~none~gge3218~0", 73 | "W~530 -20 530 -55~#008800~1~0~none~gge3220~0", 74 | "W~420 -55 420 -35 415 -35~#008800~1~0~none~gge3235~0", 75 | "W~270 -235 305 -235 360 -235~#008800~1~0~none~gge3238~0", 76 | "W~270 -225 305 -225 360 -225~#008800~1~0~none~gge3239~0", 77 | "N~305~-225~0~#0000ff~SWDIO~gge3244~start~307~-227.5~Times New Roman~7pt~0", 78 | "N~305~-235~0~#0000ff~SWCLK~gge3247~start~307~-237.5~Times New Roman~7pt~0", 79 | "LIB~470~-390~package`SOT-23-5`BOM_Supplier`LCSC`BOM_Manufacturer`RICHTEK`BOM_Manufacturer Part`RT9013-33GB`image`//image.lceda.cn/szlcsc/C47773.jpg`BOM_Supplier Part`C47773`spicePre`U`~~0~gge3253~e7041b0916854febbe4a29aa83ef9999~807e7f8820e44053bf509dc8cac2244e~0#@$T~N~464.03125~-423~0~#000080~Arial~~~~~comment~RT9013-33GB~1~start~gge3255~0#@$T~P~464.0390625~-432.140625~0~#000080~Arial~~~~~comment~U2~1~start~gge3257~0#@$R~445~-420~2~2~50~60~#880000~1~0~none~gge3259~0#@$P~show~0~1~425~-410~180~gge3260~0^^425~-410^^M 425 -410 h 20~#880000^^1~447~-407~0~VIN~start~~~#0000FF^^1~440~-411~0~1~end~~~#0000FF^^0~442~-410^^0~M 445 -407 L 448 -410 L 445 -413#@$P~show~0~2~425~-390~180~gge3267~0^^425~-390^^M 425 -390 h 20~#880000^^1~447~-387~0~GND~start~~~#0000FF^^1~440~-391~0~2~end~~~#0000FF^^0~442~-390^^0~M 445 -387 L 448 -390 L 445 -393#@$P~show~0~3~425~-370~180~gge3274~0^^425~-370^^M 425 -370 h 20~#880000^^1~447~-367~0~EN~start~~~#0000FF^^1~440~-371~0~3~end~~~#0000FF^^0~442~-370^^0~M 445 -367 L 448 -370 L 445 -373#@$P~show~0~4~515~-380~0~gge3281~0^^515~-380^^M 515 -380 h -20~#880000^^1~493~-377~0~NC~end~~~#0000FF^^1~500~-381~0~4~start~~~#0000FF^^0~498~-380^^0~M 495 -383 L 492 -380 L 495 -377#@$P~show~0~5~515~-400~0~gge3288~0^^515~-400^^M 515 -400 h -20~#880000^^1~493~-397~0~VOUT~end~~~#0000FF^^1~500~-401~0~5~start~~~#0000FF^^0~498~-400^^0~M 495 -403 L 492 -400 L 495 -397", 80 | "W~425 -390 355 -390~#008800~1~0~none~gge3348~0", 81 | "F~part_netLabel_gnD~355~-390~270~gge3349~~0^^355~-390^^GND~#000000~329~-403~270~end~0~Times New Roman~9pt^^PL~345 -390 355 -390~#000000~1~0~none~gge3352~0^^PL~345 -399 345 -381~#000000~1~0~none~gge3353~0^^PL~343 -396 343 -384~#000000~1~0~none~gge3354~0^^PL~341 -393 341 -387~#000000~1~0~none~gge3355~0^^PL~339 -391 339 -389~#000000~1~0~none~gge3356~0", 82 | "O~515~-380~gge3365~M 511 -384 L 519 -376 M 519 -384 L 511 -376~#33cc33~0", 83 | "W~515 -400 570 -400~#008800~1~0~none~gge3370~0", 84 | "F~part_netLabel_VCC~570~-400~270~gge3377~~0^^570~-400^^3V3~#000000~590.13~-412.03~270~end~1~Times New Roman~9pt^^PL~580 -400 570 -400~#000000~1~0~none~gge3380~0^^PL~580 -405 580 -395~#000000~1~0~none~gge3381~0", 85 | "F~part_netLabel_VCC~430~-20~180~gge3388~~0^^430~-20^^3V3~#000000~442.02~0.12~0~end~1~Times New Roman~9pt^^PL~430 -10 430 -20~#000000~1~0~none~gge3391~0^^PL~435 -10 425 -10~#000000~1~0~none~gge3392~0", 86 | "W~430 -55 430 -20~#008800~1~0~none~gge3393~0", 87 | "N~315~-165~0~#0000ff~S1~gge3399~start~317~-167.5~Times New Roman~7pt~0", 88 | "N~440~-30~270~#0000ff~S2~gge3406~start~437.5~-32~Times New Roman~7pt~0", 89 | "N~450~-30~270~#0000ff~S3~gge3410~start~447.5~-32~Times New Roman~7pt~0", 90 | "N~460~-30~270~#0000ff~S4~gge3425~start~457.5~-32~Times New Roman~7pt~0", 91 | "LIB~845~-435~package`HTSSOP-16`BOM_Supplier`LCSC`BOM_Manufacturer`TI`BOM_Manufacturer Part`TPS61032PWPR`BOM_Supplier Part`C88716`spicePre`U`~~0~gge4152~fdab13177bd24c29b5c9505ce40f6624~d5d6aaa2520e418d896feac4429f44ef~0#@$T~N~839.03125~-488.015625~0~#000080~Arial~~~~~comment~TPS61032PWPR~1~start~gge4154~0#@$T~P~839.0390625~-496.84375~0~#000080~Arial~~~~~comment~U3~1~start~gge4156~0#@$R~805~-485~~~80~100~#880000~1~0~none~gge4158~0#@$P~show~0~1~785~-465~0~gge4159~0^^785~-465^^M 785 -465 h 20~#880000^^1~807~-462~0~SW~start~~~#0000FF^^1~800~-466~0~1~end~~~#0000FF^^0~808~-465^^0~M 805 -468 L 802 -465 L 805 -462#@$P~show~0~2~785~-455~0~gge4166~0^^785~-455^^M 785 -455 h 20~#880000^^1~807~-452~0~SW~start~~~#0000FF^^1~800~-456~0~2~end~~~#0000FF^^0~808~-455^^0~M 805 -458 L 802 -455 L 805 -452#@$P~show~0~3~785~-445~0~gge4173~0^^785~-445^^M 785 -445 h 20~#880000^^1~807~-442~0~PGND~start~~~#0000FF^^1~800~-446~0~3~end~~~#0000FF^^0~808~-445^^0~M 805 -448 L 802 -445 L 805 -442#@$P~show~0~4~785~-435~0~gge4180~0^^785~-435^^M 785 -435 h 20~#880000^^1~807~-432~0~PGND~start~~~#0000FF^^1~800~-436~0~4~end~~~#0000FF^^0~808~-435^^0~M 805 -438 L 802 -435 L 805 -432#@$P~show~0~5~785~-425~0~gge4187~0^^785~-425^^M 785 -425 h 20~#880000^^1~807~-422~0~PGND~start~~~#0000FF^^1~800~-426~0~5~end~~~#0000FF^^0~808~-425^^0~M 805 -428 L 802 -425 L 805 -422#@$P~show~0~6~785~-415~0~gge4194~0^^785~-415^^M 785 -415 h 20~#880000^^1~807~-412~0~VBAT~start~~~#0000FF^^1~800~-416~0~6~end~~~#0000FF^^0~808~-415^^0~M 805 -418 L 802 -415 L 805 -412#@$P~show~0~7~785~-405~0~gge4201~0^^785~-405^^M 785 -405 h 20~#880000^^1~807~-402~0~LBI~start~~~#0000FF^^1~800~-406~0~7~end~~~#0000FF^^0~808~-405^^0~M 805 -408 L 802 -405 L 805 -402#@$P~show~0~8~785~-395~0~gge4208~0^^785~-395^^M 785 -395 h 20~#880000^^1~807~-392~0~SYNC~start~~~#0000FF^^1~800~-396~0~8~end~~~#0000FF^^0~808~-395^^0~M 805 -398 L 802 -395 L 805 -392#@$P~show~0~9~905~-395~180~gge4215~0^^905~-395^^M 905 -395 h -20~#880000^^1~883~-392~0~EN~end~~~#0000FF^^1~890~-396~0~9~start~~~#0000FF^^0~882~-395^^0~M 885 -392 L 888 -395 L 885 -398#@$P~show~0~10~905~-405~180~gge4222~0^^905~-405^^M 905 -405 h -20~#880000^^1~883~-402~0~LBO~end~~~#0000FF^^1~890~-406~0~10~start~~~#0000FF^^0~882~-405^^0~M 885 -402 L 888 -405 L 885 -408#@$P~show~0~11~905~-415~180~gge4229~0^^905~-415^^M 905 -415 h -20~#880000^^1~883~-412~0~GND~end~~~#0000FF^^1~890~-416~0~11~start~~~#0000FF^^0~882~-415^^0~M 885 -412 L 888 -415 L 885 -418#@$P~show~0~12~905~-425~180~gge4236~0^^905~-425^^M 905 -425 h -20~#880000^^1~883~-422~0~FB~end~~~#0000FF^^1~890~-426~0~12~start~~~#0000FF^^0~882~-425^^0~M 885 -422 L 888 -425 L 885 -428#@$P~show~0~13~905~-435~180~gge4243~0^^905~-435^^M 905 -435 h -20~#880000^^1~883~-432~0~VOUT~end~~~#0000FF^^1~890~-436~0~13~start~~~#0000FF^^0~882~-435^^0~M 885 -432 L 888 -435 L 885 -438#@$P~show~0~14~905~-445~180~gge4250~0^^905~-445^^M 905 -445 h -20~#880000^^1~883~-442~0~VOUT~end~~~#0000FF^^1~890~-446~0~14~start~~~#0000FF^^0~882~-445^^0~M 885 -442 L 888 -445 L 885 -448#@$P~show~0~15~905~-455~180~gge4257~0^^905~-455^^M 905 -455 h -20~#880000^^1~883~-452~0~VOUT~end~~~#0000FF^^1~890~-456~0~15~start~~~#0000FF^^0~882~-455^^0~M 885 -452 L 888 -455 L 885 -458#@$P~show~0~16~905~-465~180~gge4264~0^^905~-465^^M 905 -465 h -20~#880000^^1~883~-462~0~NC~end~~~#0000FF^^1~890~-466~0~16~start~~~#0000FF^^0~882~-465^^0~M 885 -462 L 888 -465 L 885 -468#@$P~show~0~17~905~-475~180~gge4271~0^^905~-475^^M 905 -475 h -20~#880000^^1~883~-472~0~EP~end~~~#0000FF^^1~890~-476~0~17~start~~~#0000FF^^0~882~-475^^0~M 885 -472 L 888 -475 L 885 -478", 92 | "O~905~-465~gge4405~M 901 -469 L 909 -461 M 909 -469 L 901 -461~#33cc33~0", 93 | "F~part_netLabel_+5V~1005~-450~270~gge4413~~0^^1005~-450^^+5V~#000000~1024.99~-459.64~270~end~1~Times New Roman~9pt^^PL~1015 -450 1005 -450~#000000~1~0~none~gge4416~0^^PL~1015 -455 1015 -445~#000000~1~0~none~gge4417~0", 94 | "W~695 -480 785 -480 785 -455~#008800~1~0~none~gge4423~0", 95 | "LIB~695~-460~package`CDRH103`BOM_Supplier`LCSC`BOM_Manufacturer`Sumida`BOM_Manufacturer Part`CDRH103RNP-6R8NC-B`nameAlias`Inductance`Contributor`LCSC`BOM_Supplier Part`C167253`spicePre`L`spiceSymbolName`CDRH103RNP-6R8NC-B`~90~0~gge4552~818563789584495c829bf91e58fe305b~3e92cb9b378d41bbac48657f3bd9f98a~0#@$T~N~698.484375~-447.828125~0~#000080~Arial~~~~~comment~6.8uH~1~start~gge4554~0#@$T~P~698.49~-456.67~0~#000080~Arial~~~~~comment~L1~1~start~gge4556~0#@$P~show~0~2~695~-480~90~gge4558~0^^695~-480^^M 695 -480 v 3~#800^^0~695~-473~270~2~end~~~#800^^0~691~-481~270~2~start~~~#800^^0~695~-480^^0~M 692 -477 L 695 -474 L 698 -477#@$P~show~0~1~695~-440~270~gge4565~0^^695~-440^^M 695 -440 v -3~#800^^0~695~-447~270~1~start~~~#800^^0~691~-439~270~1~end~~~#800^^0~695~-440^^0~M 698 -443 L 695 -446 L 692 -443#@$A~M 694.932 -443.117 A 3.9 4 0 1 1 694.936 -451.082~~#880000~1~0~none~gge4572~0#@$A~M 694.929 -451.6 A 3.9 4 0 1 1 694.934 -459.565~~#880000~1~0~none~gge4573~0#@$A~M 694.929 -460.067 A 3.9 4 0 1 1 694.934 -468.032~~#880000~1~0~none~gge4574~0#@$A~M 694.931 -468.7 A 3.9 4 0 1 1 694.936 -476.665~~#880000~1~0~none~gge4575~0", 96 | "W~785 -415 695 -415 695 -440~#008800~1~0~none~gge4612~0", 97 | "W~785 -425 785 -435 785 -445~#008800~1~0~none~gge4614~0", 98 | "W~740 -460 740 -445 785 -445~#008800~1~0~none~gge4618~0", 99 | "F~part_netLabel_gnD~740~-455~180~gge4619~~0^^740~-455^^GND~#000000~753~-481~0~end~0~Times New Roman~9pt^^PL~740 -465 740 -455~#000000~1~0~none~gge4622~0^^PL~749 -465 731 -465~#000000~1~0~none~gge4623~0^^PL~746 -467 734 -467~#000000~1~0~none~gge4624~0^^PL~743 -469 737 -469~#000000~1~0~none~gge4625~0^^PL~741 -471 739 -471~#000000~1~0~none~gge4626~0", 100 | "F~part_netLabel_gnD~695~-375~0~gge4636~~0^^695~-375^^GND~#000000~682~-349~0~start~0~Times New Roman~9pt^^PL~695 -365 695 -375~#000000~1~0~none~gge4639~0^^PL~686 -365 704 -365~#000000~1~0~none~gge4640~0^^PL~689 -363 701 -363~#000000~1~0~none~gge4641~0^^PL~692 -361 698 -361~#000000~1~0~none~gge4642~0^^PL~694 -359 696 -359~#000000~1~0~none~gge4643~0", 101 | "F~part_netLabel_gnD~1010~-405~0~gge4728~~0^^1010~-405^^GND~#000000~997~-379~0~start~0~Times New Roman~9pt^^PL~1010 -395 1010 -405~#000000~1~0~none~gge4731~0^^PL~1001 -395 1019 -395~#000000~1~0~none~gge4732~0^^PL~1004 -393 1016 -393~#000000~1~0~none~gge4733~0^^PL~1007 -391 1013 -391~#000000~1~0~none~gge4734~0^^PL~1009 -389 1011 -389~#000000~1~0~none~gge4735~0", 102 | "W~1010 -405 1010 -415 905 -415~#008800~1~0~none~gge4736~0", 103 | "W~905 -395 940 -395~#008800~1~0~none~gge4784~0", 104 | "N~905~-395~0~#0000ff~SERVOEN~gge4785~start~907~-397.5~Times New Roman~7pt~0", 105 | "N~315~-175~0~#0000ff~SERVOEN~gge4793~start~317~-177.5~Times New Roman~7pt~0", 106 | "W~360 -175 315 -175~#008800~1~0~none~gge4798~0", 107 | "F~part_netLabel_+5V~120~-285~90~gge4803~~0^^120~-285^^+5V~#000000~108.13~-275.37~270~start~1~Times New Roman~9pt^^PL~110 -285 120 -285~#000000~1~0~none~gge4806~0^^PL~110 -280 110 -290~#000000~1~0~none~gge4807~0", 108 | "W~130 -235 130 -230 145 -230~#4BA54B~1~0~none~gge4834~0", 109 | "W~145 -220 120 -220~#4BA54B~1~0~none~gge4835~0", 110 | "F~part_netLabel_+5V~120~-220~90~gge4836~~0^^120~-220^^+5V~#000000~108.13~-210.37~270~start~1~Times New Roman~9pt^^PL~110 -220 120 -220~#000000~1~0~none~gge4839~0^^PL~110 -215 110 -225~#000000~1~0~none~gge4840~0", 111 | "W~130 -165 130 -160 145 -160~#4BA54B~1~0~none~gge4848~0", 112 | "W~145 -150 120 -150~#4BA54B~1~0~none~gge4849~0", 113 | "F~part_netLabel_+5V~120~-150~90~gge4850~~0^^120~-150^^+5V~#000000~108.13~-140.37~270~start~1~Times New Roman~9pt^^PL~110 -150 120 -150~#000000~1~0~none~gge4853~0^^PL~110 -145 110 -155~#000000~1~0~none~gge4854~0", 114 | "W~130 -95 130 -90 145 -90~#4BA54B~1~0~none~gge4861~0", 115 | "W~145 -80 120 -80~#4BA54B~1~0~none~gge4862~0", 116 | "F~part_netLabel_+5V~120~-80~90~gge4863~~0^^120~-80^^+5V~#000000~108.13~-70.37~270~start~1~Times New Roman~9pt^^PL~110 -80 120 -80~#000000~1~0~none~gge4866~0^^PL~110 -75 110 -85~#000000~1~0~none~gge4867~0", 117 | "W~935 -485 935 -475 905 -475~#008800~1~0~none~gge4873~0", 118 | "F~part_netLabel_gnD~935~-485~180~gge4879~~0^^935~-485^^GND~#000000~948~-511~0~end~0~Times New Roman~9pt^^PL~935 -495 935 -485~#000000~1~0~none~gge4882~0^^PL~944 -495 926 -495~#000000~1~0~none~gge4883~0^^PL~941 -497 929 -497~#000000~1~0~none~gge4884~0^^PL~938 -499 932 -499~#000000~1~0~none~gge4885~0^^PL~936 -501 934 -501~#000000~1~0~none~gge4886~0", 119 | "W~905 -425 905 -450 1005 -450~#008800~1~0~none~gge5024~0", 120 | "O~905~-405~gge5040~M 901 -409 L 909 -401 M 909 -409 L 901 -401~#33cc33~0", 121 | "LIB~930~-430~package`0603`BOM_Supplier`LCSC`BOM_Manufacturer Part`CL10A225KP8NNNC`BOM_Manufacturer`SAMSUNG`nameAlias`Capacitance`BOM_Supplier Part`C1607`spicePre`C`spiceSymbolName`CL10A225KP8NNNC`~90~0~gge5351~a29ba53807cf43cab02f2f8a6393998d~f1549c770793539019d53089980f6627~0#@$T~N~940~-417.8125~0~#000080~Arial~~~~~comment~2.2uF~1~start~gge5353~0#@$T~P~940.0078125~-426.6640625~0~#000080~Arial~~~~~comment~C3~1~start~gge5355~0#@$PL~922 -428 938 -428~#880000~1~0~none~gge5357~0#@$PL~922 -432 938 -432~#880000~1~0~none~gge5358~0#@$P~show~1~1~930~-415~270~gge5359~0^^930~-415^^M 930 -415 v -10~#000000^^0~933~-430~270~1~start~~~#000000^^0~929~-420~270~1~end~~~#000000^^0~930~-422^^0~M 933 -425 L 930 -428 L 927 -425#@$P~show~1~2~930~-445~90~gge5366~0^^930~-445^^M 930 -445 v 10~#000000^^0~933~-430~270~2~end~~~#000000^^0~929~-440~270~2~start~~~#000000^^0~930~-438^^0~M 927 -435 L 930 -432 L 933 -435#@$PL~930 -425 930 -428~#880000~1~0~none~gge5373~0#@$PL~930 -432 930 -435~#880000~1~0~none~gge5374~0", 122 | "W~930 -445 930 -450~#008800~1~0~none~gge5400~0", 123 | "LIB~980~-430~package`CASE-C_6032`BOM_Supplier`LCSC`BOM_Manufacturer`KEMET`BOM_Manufacturer Part`T491C227K006AT`nameAlias`Capacitance`Contributor`LCSC`BOM_Supplier Part`C117035`spicePre`C`spiceSymbolName`T491C227K006AT`~270~0~gge5480~aea4b3c4e5ca46d99ba8f2513bcf18a9~7b53b9e39c814caab82e3c34417284e1~0#@$T~N~990~-417.828125~0~#000080~Arial~~~~~comment~220uF~1~start~gge5482~0#@$T~P~990~-426.671875~0~#000080~Arial~~~~~comment~C4~1~start~gge5484~0#@$PL~988 -432 972 -432~#880000~1~0~none~gge5486~0#@$P~show~1~1~980~-445~90~gge5487~0^^980~-445^^M 980 -445 v 10~#000000^^0~983~-430~270~1~end~~~#000000^^0~979~-440~270~1~start~~~#000000^^0~980~-438^^0~M 977 -435 L 980 -432 L 983 -435#@$P~show~1~2~980~-415~270~gge5494~0^^980~-415^^M 980 -415 v -10~#000000^^0~983~-430~270~2~start~~~#000000^^0~979~-420~270~2~end~~~#000000^^0~980~-422^^0~M 983 -425 L 980 -428 L 977 -425#@$PL~980 -435 980 -432~#880000~1~0~none~gge5501~0#@$PL~980 -428 980 -425~#880000~1~0~none~gge5502~0#@$A~M 987.667 -424.778 A 10 9 0 0 0 972.807 -425.253~~#880000~1~0~none~gge5503~0#@$PL~983 -440 983 -436~#880000~1~0~none~gge5504~0#@$PL~985 -438 981 -438~#880000~1~0~none~gge5505~0", 124 | "W~980 -445 980 -450~#008800~1~0~none~gge5533~0", 125 | "LIB~740~-430~package`0603`BOM_Supplier`LCSC`BOM_Manufacturer`KEMET`BOM_Manufacturer Part`C0603C104K5RACTU`nameAlias`Capacitance`Contributor`LCSC`BOM_Supplier Part`C127833`spicePre`C`spiceSymbolName`C0603C104K5RACTU`~270~0~gge5589~a29ba53807cf43cab02f2f8a6393998d~58141ab14c3140d1b8057dd11b31026b~0#@$T~N~750~-417.828125~0~#000080~Arial~~~~~comment~100nF~1~start~gge5591~0#@$T~P~750~-426.671875~0~#000080~Arial~~~~~comment~C5~1~start~gge5593~0#@$PL~748 -432 732 -432~#880000~1~0~none~gge5595~0#@$PL~748 -428 732 -428~#880000~1~0~none~gge5596~0#@$P~show~1~1~740~-445~90~gge5597~0^^740~-445^^M 740 -445 v 10~#000000^^0~743~-430~270~1~end~~~#000000^^0~739~-440~270~1~start~~~#000000^^0~740~-438^^0~M 737 -435 L 740 -432 L 743 -435#@$P~show~1~2~740~-415~270~gge5604~0^^740~-415^^M 740 -415 v -10~#000000^^0~743~-430~270~2~start~~~#000000^^0~739~-420~270~2~end~~~#000000^^0~740~-422^^0~M 743 -425 L 740 -428 L 737 -425#@$PL~740 -435 740 -432~#880000~1~0~none~gge5611~0#@$PL~740 -428 740 -425~#880000~1~0~none~gge5612~0", 126 | "LIB~695~-400~package`0603`BOM_Supplier`LCSC`BOM_Manufacturer`SAMSUNG`BOM_Manufacturer Part`CL10A475MQ8NNNC`nameAlias`Capacitance`Contributor`LCSC`BOM_Supplier Part`C154959`spicePre`C`spiceSymbolName`CL10A475MQ8NNNC`~90~0~gge5639~a29ba53807cf43cab02f2f8a6393998d~6e35c657823d4516be9cb768537a13dc~0#@$T~N~705~-387.8125~0~#000080~Arial~~~~~comment~10uF~1~start~gge5641~0#@$T~P~705.0078125~-396.6640625~0~#000080~Arial~~~~~comment~C2~1~start~gge5643~0#@$PL~687 -398 703 -398~#880000~1~0~none~gge5645~0#@$PL~687 -402 703 -402~#880000~1~0~none~gge5646~0#@$P~show~1~1~695~-385~270~gge5647~0^^695~-385^^M 695 -385 v -10~#000000^^0~698~-400~270~1~start~~~#000000^^0~694~-390~270~1~end~~~#000000^^0~695~-392^^0~M 698 -395 L 695 -398 L 692 -395#@$P~show~1~2~695~-415~90~gge5654~0^^695~-415^^M 695 -415 v 10~#000000^^0~698~-400~270~2~end~~~#000000^^0~694~-410~270~2~start~~~#000000^^0~695~-408^^0~M 692 -405 L 695 -402 L 698 -405#@$PL~695 -395 695 -398~#880000~1~0~none~gge5661~0#@$PL~695 -402 695 -405~#880000~1~0~none~gge5662~0", 127 | "W~695 -385 695 -375~#008800~1~0~none~gge5671~0", 128 | "W~695 -380 785 -380 785 -395 785 -405~#008800~1~0~none~gge5672~0", 129 | "W~660 -430 695 -430~#008800~1~0~none~gge5684~0", 130 | "R~300~-600~~~755~260~#000000~1~0~none~gge5688~0", 131 | "W~450 -55 450 -30~#008800~1~0~none~gge5717~0", 132 | "W~360 -165 315 -165~#008800~1~0~none~gge5719~0", 133 | "W~460 -55 460 -30~#008800~1~0~none~gge5713~0", 134 | "W~440 -55 440 -30~#008800~1~0~none~gge5718~0", 135 | "LIB~250~-230~package`1X04_LOCK`description`Header 4`Contributor`SparkFun`BOM_Manufacturer Part`?`spicePre`J`~~0~gge5888~652f999b8271431fb67af46e380ddc89~b242223cbc284afb97b3e10361f75c20~0#@$T~N~242.96875~-258.015625~0~#000080~Arial~~~~~comment~PROG~1~start~gge5890~0#@$T~P~242.96875~-267.140625~0~#000080~Arial~~~~~comment~JP1~1~start~gge5892~0#@$PL~255 -205 230 -205~#8D2323~2~0~none~gge5894~0#@$PL~245 -235 250 -235~#8D2323~2~0~none~gge5895~0#@$PL~245 -225 250 -225~#8D2323~2~0~none~gge5896~0#@$PL~245 -215 250 -215~#8D2323~2~0~none~gge5897~0#@$PL~230 -255 230 -205~#8D2323~2~0~none~gge5898~0#@$PL~255 -205 255 -255~#8D2323~2~0~none~gge5899~0#@$PL~230 -255 255 -255~#8D2323~2~0~none~gge5900~0#@$PL~245 -245 250 -245~#8D2323~2~0~none~gge5901~0#@$P~show~0~1~270~-215~0~gge5902~0^^270~-215^^M 270 -215 h -20~#8D2323^^0~247~-212~0~1~end~~~#8D2323^^1~256~-216~0~1~start~~~#8D2323^^0~253~-215^^0~M 250 -218 L 247 -215 L 250 -212#@$P~show~0~2~270~-225~0~gge5909~0^^270~-225^^M 270 -225 h -20~#8D2323^^0~247~-222~0~2~end~~~#8D2323^^1~256~-226~0~2~start~~~#8D2323^^0~253~-225^^0~M 250 -228 L 247 -225 L 250 -222#@$P~show~0~3~270~-235~0~gge5916~0^^270~-235^^M 270 -235 h -20~#8D2323^^0~247~-232~0~3~end~~~#8D2323^^1~256~-236~0~3~start~~~#8D2323^^0~253~-235^^0~M 250 -238 L 247 -235 L 250 -232#@$P~show~0~4~270~-245~0~gge5923~0^^270~-245^^M 270 -245 h -20~#8D2323^^0~247~-242~0~4~end~~~#8D2323^^1~256~-246~0~4~start~~~#8D2323^^0~253~-245^^0~M 250 -248 L 247 -245 L 250 -242", 136 | "W~270 -245 330 -245 330 -265~#008800~1~0~none~gge5979~0", 137 | "F~part_netLabel_VCC~280~-205~180~gge5982~~0^^280~-205^^3V3~#000000~292.02~-184.88~0~end~1~Times New Roman~9pt^^PL~280 -195 280 -205~#000000~1~0~none~gge5985~0^^PL~285 -195 275 -195~#000000~1~0~none~gge5986~0", 138 | "W~270 -215 280 -215 280 -205~#008800~1~0~none~gge5988~0", 139 | "F~part_netLabel_VCC~660~-430~90~gge5997~~0^^660~-430^^VCC~#000000~648~-418.01~270~start~1~Times New Roman~9pt^^PL~650 -430 660 -430~#000000~1~0~none~gge6000~0^^PL~650 -425 650 -435~#000000~1~0~none~gge6001~0", 140 | "F~part_netLabel_VCC~205~-480~270~gge6007~~0^^205~-480^^VCC~#000000~224.85~-492.15~270~end~1~Times New Roman~9pt^^PL~215 -480 205 -480~#000000~1~0~none~gge6010~0^^PL~215 -485 215 -475~#000000~1~0~none~gge6011~0", 141 | "F~part_netLabel_VCC~490~65~270~gge6018~~0^^490~65^^VCC~#000000~509.89~52.88~270~end~1~Times New Roman~9pt^^PL~500 65 490 65~#000000~1~0~none~gge6021~0^^PL~500 60 500 70~#000000~1~0~none~gge6022~0", 142 | "F~part_netLabel_gnD~470~65~0~gge6029~~0^^470~65^^GND~#000000~457~91~0~start~0~Times New Roman~9pt^^PL~470 75 470 65~#000000~1~0~none~gge6032~0^^PL~461 75 479 75~#000000~1~0~none~gge6033~0^^PL~464 77 476 77~#000000~1~0~none~gge6034~0^^PL~467 79 473 79~#000000~1~0~none~gge6035~0^^PL~469 81 471 81~#000000~1~0~none~gge6036~0", 143 | "F~part_netLabel_gnD~130~-300~180~gge6045~~0^^130~-300^^GND~#000000~143~-326~0~end~0~Times New Roman~9pt^^PL~130 -310 130 -300~#000000~1~0~none~gge6048~0^^PL~139 -310 121 -310~#000000~1~0~none~gge6049~0^^PL~136 -312 124 -312~#000000~1~0~none~gge6050~0^^PL~133 -314 127 -314~#000000~1~0~none~gge6051~0^^PL~131 -316 129 -316~#000000~1~0~none~gge6052~0", 144 | "F~part_netLabel_gnD~130~-235~180~gge6053~~0^^130~-235^^GND~#000000~143~-261~0~end~0~Times New Roman~9pt^^PL~130 -245 130 -235~#000000~1~0~none~gge6056~0^^PL~139 -245 121 -245~#000000~1~0~none~gge6057~0^^PL~136 -247 124 -247~#000000~1~0~none~gge6058~0^^PL~133 -249 127 -249~#000000~1~0~none~gge6059~0^^PL~131 -251 129 -251~#000000~1~0~none~gge6060~0", 145 | "F~part_netLabel_gnD~130~-165~180~gge6061~~0^^130~-165^^GND~#000000~143~-191~0~end~0~Times New Roman~9pt^^PL~130 -175 130 -165~#000000~1~0~none~gge6064~0^^PL~139 -175 121 -175~#000000~1~0~none~gge6065~0^^PL~136 -177 124 -177~#000000~1~0~none~gge6066~0^^PL~133 -179 127 -179~#000000~1~0~none~gge6067~0^^PL~131 -181 129 -181~#000000~1~0~none~gge6068~0", 146 | "F~part_netLabel_gnD~130~-95~180~gge6069~~0^^130~-95^^GND~#000000~143~-121~0~end~0~Times New Roman~9pt^^PL~130 -105 130 -95~#000000~1~0~none~gge6072~0^^PL~139 -105 121 -105~#000000~1~0~none~gge6073~0^^PL~136 -107 124 -107~#000000~1~0~none~gge6074~0^^PL~133 -109 127 -109~#000000~1~0~none~gge6075~0^^PL~131 -111 129 -111~#000000~1~0~none~gge6076~0", 147 | "F~part_netLabel_VCC~355~-420~90~gge6085~~0^^355~-420^^VCC~#000000~343.09~-408.41~270~start~1~Times New Roman~9pt^^PL~345 -420 355 -420~#000000~1~0~none~gge6088~0^^PL~345 -415 345 -425~#000000~1~0~none~gge6089~0", 148 | "F~part_netLabel_VCC~405~-370~90~gge6090~~0^^405~-370^^VCC~#000000~393.12~-358.41~270~start~1~Times New Roman~9pt^^PL~395 -370 405 -370~#000000~1~0~none~gge6093~0^^PL~395 -365 395 -375~#000000~1~0~none~gge6094~0", 149 | "W~425 -370 405 -370~#008800~1~0~none~gge6101~0", 150 | "LIB~370~-405~package`0603`BOM_Supplier`LCSC`BOM_Manufacturer`WTC`BOM_Manufacturer Part`0603B105K160`nameAlias`Value`Contributor`LCSC`BOM_Supplier Part`C108463`spicePre`C`spiceSymbolName`0603B105K160`~90~0~gge6127~a29ba53807cf43cab02f2f8a6393998d~47adcebdabc74d8cb4779b9a4639d48d~0#@$T~N~380~-392.8125~0~#000080~Arial~~~~~comment~1uF(105)~1~start~gge6129~0#@$T~P~380.0078125~-401.6640625~0~#000080~Arial~~~~~comment~C6~1~start~gge6131~0#@$PL~362 -403 378 -403~#880000~1~0~none~gge6133~0#@$PL~362 -407 378 -407~#880000~1~0~none~gge6134~0#@$P~show~1~1~370~-390~270~gge6135~0^^370~-390^^M 370 -390 v -10~#000000^^0~373~-405~270~1~start~~~#000000^^0~369~-395~270~1~end~~~#000000^^0~370~-397^^0~M 373 -400 L 370 -403 L 367 -400#@$P~show~1~2~370~-420~90~gge6142~0^^370~-420^^M 370 -420 v 10~#000000^^0~373~-405~270~2~end~~~#000000^^0~369~-415~270~2~start~~~#000000^^0~370~-413^^0~M 367 -410 L 370 -407 L 373 -410#@$PL~370 -400 370 -403~#880000~1~0~none~gge6149~0#@$PL~370 -407 370 -410~#880000~1~0~none~gge6150~0", 151 | "W~355 -420 370 -420 405 -420 405 -410 425 -410~#008800~1~0~none~gge6183~0", 152 | "LIB~550~-385~package`0603`BOM_Supplier`LCSC`BOM_Manufacturer`WTC`BOM_Manufacturer Part`0603B105K160`nameAlias`Value`Contributor`LCSC`BOM_Supplier Part`C108463`spicePre`C`spiceSymbolName`0603B105K160`~90~0~gge6194~a29ba53807cf43cab02f2f8a6393998d~47adcebdabc74d8cb4779b9a4639d48d~0#@$T~N~560~-372.8125~0~#000080~Arial~~~~~comment~1uF(105)~1~start~gge6196~0#@$T~P~560.0078125~-381.6640625~0~#000080~Arial~~~~~comment~C7~1~start~gge6198~0#@$PL~542 -383 558 -383~#880000~1~0~none~gge6200~0#@$PL~542 -387 558 -387~#880000~1~0~none~gge6201~0#@$P~show~1~1~550~-370~270~gge6202~0^^550~-370^^M 550 -370 v -10~#000000^^0~553~-385~270~1~start~~~#000000^^0~549~-375~270~1~end~~~#000000^^0~550~-377^^0~M 553 -380 L 550 -383 L 547 -380#@$P~show~1~2~550~-400~90~gge6209~0^^550~-400^^M 550 -400 v 10~#000000^^0~553~-385~270~2~end~~~#000000^^0~549~-395~270~2~start~~~#000000^^0~550~-393^^0~M 547 -390 L 550 -387 L 553 -390#@$PL~550 -380 550 -383~#880000~1~0~none~gge6216~0#@$PL~550 -387 550 -390~#880000~1~0~none~gge6217~0", 153 | "F~part_netLabel_gnD~610~-500~0~gge6224~~0^^610~-500^^GND~#000000~597~-474~0~start~0~Times New Roman~9pt^^PL~610 -490 610 -500~#000000~1~0~none~gge6227~0^^PL~601 -490 619 -490~#000000~1~0~none~gge6228~0^^PL~604 -488 616 -488~#000000~1~0~none~gge6229~0^^PL~607 -486 613 -486~#000000~1~0~none~gge6230~0^^PL~609 -484 611 -484~#000000~1~0~none~gge6231~0", 154 | "F~part_netLabel_gnD~330~-500~0~gge6233~~0^^330~-500^^GND~#000000~317~-474~0~start~0~Times New Roman~9pt^^PL~330 -490 330 -500~#000000~1~0~none~gge6236~0^^PL~321 -490 339 -490~#000000~1~0~none~gge6237~0^^PL~324 -488 336 -488~#000000~1~0~none~gge6238~0^^PL~327 -486 333 -486~#000000~1~0~none~gge6239~0^^PL~329 -484 331 -484~#000000~1~0~none~gge6240~0", 155 | "F~part_netLabel_gnD~540~-490~0~gge6242~~0^^540~-490^^GND~#000000~527~-464~0~start~0~Times New Roman~9pt^^PL~540 -480 540 -490~#000000~1~0~none~gge6245~0^^PL~531 -480 549 -480~#000000~1~0~none~gge6246~0^^PL~534 -478 546 -478~#000000~1~0~none~gge6247~0^^PL~537 -476 543 -476~#000000~1~0~none~gge6248~0^^PL~539 -474 541 -474~#000000~1~0~none~gge6249~0", 156 | "F~part_netLabel_gnD~550~-370~0~gge6251~~0^^550~-370^^GND~#000000~537~-344~0~start~0~Times New Roman~9pt^^PL~550 -360 550 -370~#000000~1~0~none~gge6254~0^^PL~541 -360 559 -360~#000000~1~0~none~gge6255~0^^PL~544 -358 556 -358~#000000~1~0~none~gge6256~0^^PL~547 -356 553 -356~#000000~1~0~none~gge6257~0^^PL~549 -354 551 -354~#000000~1~0~none~gge6258~0", 157 | "LIB~80~-400~package`MICRO-USB-1`BOM_Supplier`LCSC`BOM_Manufacturer`ValuePro`BOM_Manufacturer Part`micro USBFemale`image`//image.lceda.cn/szlcsc/C10418.jpg`BOM_Supplier Part`C10418`spicePre`U`~~0~gge6260~cb64c470f535448eabc5daaeefefb40c~146e75363251e035203be60c60650418~0#@$T~N~-30.6875~-388~0~#000080~Arial~~~~~comment~micro USBFemale~1~start~gge6262~0#@$T~P~-30.6875~-397~0~#000080~Arial~~~~~comment~J7~1~start~gge6264~0#@$R~45~-440~~~50~80~#880000~1~0~#EFEFEF~gge6266~0#@$P~show~1~0~65~-340~270~gge6267~0^^65~-340^^M 65 -340 v -20~#880000^^1~68~-365~270~MTN4~start~~~#0000FF^^0~64~-355~270~0~end~~~#0000FF^^0~65~-357^^0~M 68 -360 L 65 -363 L 62 -360#@$P~show~1~0~55~-340~270~gge6274~0^^55~-340^^M 55 -340 v -20~#880000^^1~58~-365~270~MTN3~start~~~#0000FF^^0~54~-355~270~0~end~~~#0000FF^^0~55~-357^^0~M 58 -360 L 55 -363 L 52 -360#@$P~show~1~0~65~-460~90~gge6281~0^^65~-460^^M 65 -460 v 20~#880000^^1~68~-435~270~MTN2~end~~~#0000FF^^0~64~-445~270~0~start~~~#0000FF^^0~65~-443^^0~M 62 -440 L 65 -437 L 68 -440#@$P~show~1~0~55~-460~90~gge6288~0^^55~-460^^M 55 -460 v 20~#880000^^1~58~-435~270~MTN1~end~~~#0000FF^^0~54~-445~270~0~start~~~#0000FF^^0~55~-443^^0~M 52 -440 L 55 -437 L 58 -440#@$P~show~0~1~115~-420~0~gge6295~0^^115~-420^^M 115 -420 h -20~#880000^^1~93~-417~0~1~end~~~#0000FF^^1~100~-421~0~1~start~~~#0000FF^^0~98~-420^^0~M 95 -423 L 92 -420 L 95 -417#@$P~show~0~2~115~-410~0~gge6302~0^^115~-410^^M 115 -410 h -20~#880000^^1~93~-407~0~2~end~~~#0000FF^^1~100~-411~0~2~start~~~#0000FF^^0~98~-410^^0~M 95 -413 L 92 -410 L 95 -407#@$P~show~0~3~115~-400~0~gge6309~0^^115~-400^^M 115 -400 h -20~#880000^^1~93~-397~0~3~end~~~#0000FF^^1~100~-401~0~3~start~~~#0000FF^^0~98~-400^^0~M 95 -403 L 92 -400 L 95 -397#@$P~show~0~4~115~-390~0~gge6316~0^^115~-390^^M 115 -390 h -20~#880000^^1~93~-387~0~4~end~~~#0000FF^^1~100~-391~0~4~start~~~#0000FF^^0~98~-390^^0~M 95 -393 L 92 -390 L 95 -387#@$P~show~0~5~115~-380~0~gge6323~0^^115~-380^^M 115 -380 h -20~#880000^^1~93~-377~0~5~end~~~#0000FF^^1~100~-381~0~5~start~~~#0000FF^^0~98~-380^^0~M 95 -383 L 92 -380 L 95 -377", 158 | "F~part_netLabel_GNd~150~-380~90~gge6339~~0^^150~-380^^GND~#0000FF~158~-381~270~start~0~Times New Roman~9pt^^PL~160 -380 150 -380~#000000~1~0~none~gge6342~0^^PL~160 -380 160 -390 166 -380 160 -370 160 -380~#000000~1~0~none~gge6343~0", 159 | "O~115~-400~gge6345~M 111 -404 L 119 -396 M 119 -404 L 111 -396~#33cc33~0", 160 | "O~115~-410~gge6347~M 111 -414 L 119 -406 M 119 -414 L 111 -406~#33cc33~0", 161 | "O~115~-390~gge6349~M 111 -394 L 119 -386 M 119 -394 L 111 -386~#33cc33~0", 162 | "O~65~-340~gge6351~M 61 -344 L 69 -336 M 69 -344 L 61 -336~#33cc33~0", 163 | "O~55~-340~gge6353~M 51 -344 L 59 -336 M 59 -344 L 51 -336~#33cc33~0", 164 | "O~65~-460~gge6355~M 61 -464 L 69 -456 M 69 -464 L 61 -456~#33cc33~0", 165 | "O~55~-460~gge6357~M 51 -464 L 59 -456 M 59 -464 L 51 -456~#33cc33~0", 166 | "W~145 -420 115 -420~#008800~1~0~none~gge6361~0", 167 | "W~115 -380 150 -380~#008800~1~0~none~gge6362~0", 168 | "J~695~-415~2.5~#CC0000~gge5666~0", 169 | "J~930~-450~2.5~#CC0000~gge5401~0", 170 | "J~785~-465~2.5~#CC0000~gge4425~0", 171 | "J~740~-455~2.5~#CC0000~gge5239~0", 172 | "J~785~-445~2.5~#CC0000~gge5238~0", 173 | "J~370~-510~2.5~#CC0000~rep303~0", 174 | "J~470~-5~2.5~#CC0000~rep302~0", 175 | "J~785~-435~2.5~#CC0000~gge4616~0", 176 | "J~905~-445~2.5~#CC0000~gge5075~0", 177 | "J~905~-435~2.5~#CC0000~gge5077~0", 178 | "J~980~-450~2.5~#CC0000~gge5534~0", 179 | "J~740~-445~2.5~#CC0000~gge5667~0", 180 | "J~740~-415~2.5~#CC0000~gge5668~0", 181 | "J~695~-380~2.5~#CC0000~gge5674~0", 182 | "J~785~-395~2.5~#CC0000~gge5675~0", 183 | "J~930~-415~2.5~#CC0000~gge5686~0", 184 | "J~980~-415~2.5~#CC0000~gge5687~0", 185 | "J~695~-430~2.5~#CC0000~gge5685~0", 186 | "J~330~-265~2.5~#CC0000~gge5980~0", 187 | "J~370~-390~2.5~#CC0000~gge6179~0", 188 | "J~370~-420~2.5~#CC0000~gge6191~0", 189 | "J~550~-400~2.5~#CC0000~gge6221~0" 190 | ], 191 | "BBox": { "x": -30.7, "y": -600, "width": 1085.7, "height": 681 }, 192 | "colors": [] 193 | } 194 | } 195 | ], 196 | "docType": 5, 197 | "title": "Purple Eye", 198 | "name": "Purple Eye" 199 | } 200 | -------------------------------------------------------------------------------- /pcb/purple-eye.brd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | + 152 | + 153 | - 154 | - 155 | Purple 156 | Eye 157 | 158 | 159 | 160 | <h3>SparkFun Electronics' preferred foot prints</h3> 161 | In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br> 162 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 163 | <br><br> 164 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 165 | <br><br> 166 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 167 | 168 | 169 | 170 | 171 | >Name 172 | >Value 173 | + 174 | - 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | >NAME 201 | >VALUE 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | >NAME 230 | >VALUE 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | >NAME 274 | >VALUE 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | Micro USB Package 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | >NAME 318 | >VALUE 319 | 320 | 321 | 322 | 323 | 324 | 325 | <h3>SparkFun Electronics' preferred foot prints</h3> 326 | In this library you'll find anything that moves- switches, relays, buttons, potentiometers. Also, anything that goes on a board but isn't electrical in nature- screws, standoffs, etc.<br><br> 327 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 328 | <br><br> 329 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 330 | <br><br> 331 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | >NAME 342 | >VALUE 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | <h3>SparkFun Electronics' preferred foot prints</h3> 351 | In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> 352 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 353 | <br><br> 354 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 355 | <br><br> 356 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | >NAME 368 | >VALUE 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | <h3>SparkFun Electronics' preferred foot prints</h3> 378 | In this library you'll find drivers, regulators, and amplifiers.<br><br> 379 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 380 | <br><br> 381 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 382 | <br><br> 383 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 384 | 385 | 386 | <b>Small Outline Transistor</b> 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | >NAME 405 | >VALUE 406 | 407 | 408 | 409 | 410 | 411 | <h3>SparkFun Electronics' preferred foot prints</h3> 412 | In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.<br><br> 413 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 414 | <br><br> 415 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 416 | <br><br> 417 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | >NAME 430 | >VALUE 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | <h3>SparkFun Electronics' preferred foot prints</h3> 439 | In this library you'll find discrete LEDs for illumination or indication, but no displays.<br><br> 440 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com. 441 | <br><br> 442 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ 443 | <br><br> 444 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | >NAME 454 | >VALUE 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | <b>EAGLE Design Rules</b> 469 | <p> 470 | Die Standard-Design-Rules sind so gewählt, dass sie für 471 | die meisten Anwendungen passen. Sollte ihre Platine 472 | besondere Anforderungen haben, treffen Sie die erforderlichen 473 | Einstellungen hier und speichern die Design Rules unter 474 | einem neuen Namen ab. 475 | <b>EAGLE Design Rules</b> 476 | <p> 477 | The default Design Rules have been set to cover 478 | a wide range of applications. Your particular design 479 | may have different requirements, so please make the 480 | necessary adjustments and save your customized 481 | design rules under a new name. 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | --------------------------------------------------------------------------------