├── CAD ├── head.SLDPRT ├── pelvis.SLDPRT ├── screen.SLDPRT ├── torso.SLDPRT ├── left-arm.SLDPRT ├── left-leg.SLDPRT ├── test-jig.SLDPRT ├── tyrobot.SLDASM ├── head-plate.SLDPRT ├── left-foot.SLDASM ├── left-foot.SLDPRT ├── right-arm.SLDPRT ├── right-foot.SLDPRT ├── right-leg.SLDASM ├── right-leg.SLDPRT ├── back-of-board.SLDPRT ├── head-bracket.SLDPRT ├── head-plateV2.SLDPRT ├── 3d-printable │ ├── head.STL │ ├── pelvis.STL │ ├── torso.STL │ ├── left-arm.STL │ ├── left-leg.STL │ ├── test-jig.STL │ ├── head-plate.STL │ ├── left-foot.STL │ ├── right-arm.STL │ ├── right-foot.STL │ ├── right-leg.STL │ ├── back-of-board.STL │ ├── head-bracket.STL │ ├── head-plateV2.STL │ └── TyroBot-3D-models.zip └── servo TOWER PRO 9g SG90.SLDPRT ├── firmware ├── TyroBot.zip ├── TyroBot │ ├── README.md │ ├── examples │ │ └── original-firmware │ │ │ └── original-firmware.ino │ ├── TyroBot.h │ └── TyroBot.cpp ├── wifi │ └── wifi.ino └── background.svg ├── pcb ├── rev-A-gerbers.zip ├── fp-lib-table ├── mcp73831.lib ├── components.pretty │ ├── JST2.kicad_mod │ ├── micro-usb-molex.kicad_mod │ ├── 18p-ili9341.kicad_mod │ ├── micro-usb-fci.kicad_mod │ ├── LGA-16-3x3.kicad_mod │ ├── servo7.kicad_mod │ └── LGA-16.kicad_mod ├── servo.pretty │ ├── progatsam.kicad_mod │ └── servo7.kicad_mod ├── gerbers │ ├── revA-Edge.Cuts.gbr │ ├── revA-B.SilkS.gbr │ ├── revA-B.Mask.gbr │ ├── revA.drl │ ├── revA-F.Paste.gbr │ └── revA-F.Mask.gbr ├── ili9341-18p.lib ├── revA ├── revA.pro ├── revA-cache.lib └── revA.net ├── README.md ├── .gitattributes ├── .gitignore ├── credits.md └── LICENSE /CAD/head.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/head.SLDPRT -------------------------------------------------------------------------------- /CAD/pelvis.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/pelvis.SLDPRT -------------------------------------------------------------------------------- /CAD/screen.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/screen.SLDPRT -------------------------------------------------------------------------------- /CAD/torso.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/torso.SLDPRT -------------------------------------------------------------------------------- /CAD/left-arm.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/left-arm.SLDPRT -------------------------------------------------------------------------------- /CAD/left-leg.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/left-leg.SLDPRT -------------------------------------------------------------------------------- /CAD/test-jig.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/test-jig.SLDPRT -------------------------------------------------------------------------------- /CAD/tyrobot.SLDASM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/tyrobot.SLDASM -------------------------------------------------------------------------------- /CAD/head-plate.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/head-plate.SLDPRT -------------------------------------------------------------------------------- /CAD/left-foot.SLDASM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/left-foot.SLDASM -------------------------------------------------------------------------------- /CAD/left-foot.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/left-foot.SLDPRT -------------------------------------------------------------------------------- /CAD/right-arm.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/right-arm.SLDPRT -------------------------------------------------------------------------------- /CAD/right-foot.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/right-foot.SLDPRT -------------------------------------------------------------------------------- /CAD/right-leg.SLDASM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/right-leg.SLDASM -------------------------------------------------------------------------------- /CAD/right-leg.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/right-leg.SLDPRT -------------------------------------------------------------------------------- /firmware/TyroBot.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/firmware/TyroBot.zip -------------------------------------------------------------------------------- /pcb/rev-A-gerbers.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/pcb/rev-A-gerbers.zip -------------------------------------------------------------------------------- /CAD/back-of-board.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/back-of-board.SLDPRT -------------------------------------------------------------------------------- /CAD/head-bracket.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/head-bracket.SLDPRT -------------------------------------------------------------------------------- /CAD/head-plateV2.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/head-plateV2.SLDPRT -------------------------------------------------------------------------------- /CAD/3d-printable/head.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/head.STL -------------------------------------------------------------------------------- /CAD/3d-printable/pelvis.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/pelvis.STL -------------------------------------------------------------------------------- /CAD/3d-printable/torso.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/torso.STL -------------------------------------------------------------------------------- /CAD/3d-printable/left-arm.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/left-arm.STL -------------------------------------------------------------------------------- /CAD/3d-printable/left-leg.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/left-leg.STL -------------------------------------------------------------------------------- /CAD/3d-printable/test-jig.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/test-jig.STL -------------------------------------------------------------------------------- /CAD/3d-printable/head-plate.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/head-plate.STL -------------------------------------------------------------------------------- /CAD/3d-printable/left-foot.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/left-foot.STL -------------------------------------------------------------------------------- /CAD/3d-printable/right-arm.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/right-arm.STL -------------------------------------------------------------------------------- /CAD/3d-printable/right-foot.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/right-foot.STL -------------------------------------------------------------------------------- /CAD/3d-printable/right-leg.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/right-leg.STL -------------------------------------------------------------------------------- /CAD/3d-printable/back-of-board.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/back-of-board.STL -------------------------------------------------------------------------------- /CAD/3d-printable/head-bracket.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/head-bracket.STL -------------------------------------------------------------------------------- /CAD/3d-printable/head-plateV2.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/head-plateV2.STL -------------------------------------------------------------------------------- /CAD/servo TOWER PRO 9g SG90.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/servo TOWER PRO 9g SG90.SLDPRT -------------------------------------------------------------------------------- /CAD/3d-printable/TyroBot-3D-models.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TyroElectronics/TyroBot/HEAD/CAD/3d-printable/TyroBot-3D-models.zip -------------------------------------------------------------------------------- /pcb/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name user)(type KiCad)(uri C:\Users\User1\Documents\GitHub\kicad-libraries-master\more-libs\kicad-library-master\user.pretty)(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TyroBot 2 | copyright :copyright: 2016 Tyro Electronics
3 | GPL General Public License 3.0
4 | https://tyroelectronics.com 5 | 6 | ## Build 7 | Complete building Instructions coming soon! 8 | ## Code 9 | Full library documentation coming soon! 10 | ## Repeat 11 | Customize your TyroBot!(coming soon) 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /pcb/mcp73831.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # MCP73831 5 | # 6 | DEF MCP73831 U 0 40 Y Y 1 F N 7 | F0 "U" 0 0 60 H V C CNN 8 | F1 "MCP73831" -50 700 60 H V C CNN 9 | F2 "" 0 0 60 H V C CNN 10 | F3 "" 0 0 60 H V C CNN 11 | DRAW 12 | S -250 600 200 100 0 1 0 N 13 | X STAT 1 -450 200 200 R 50 50 1 1 I 14 | X VSS 2 400 200 200 L 50 50 1 1 I 15 | X VBAT 3 400 500 200 L 50 50 1 1 I 16 | X VDD 4 -450 500 200 R 50 50 1 1 I 17 | X PROG 5 400 350 200 L 50 50 1 1 I 18 | ENDDRAW 19 | ENDDEF 20 | # 21 | #End Library 22 | -------------------------------------------------------------------------------- /firmware/TyroBot/README.md: -------------------------------------------------------------------------------- 1 | # TyroBot 2 | copyright :copyright: 2016 Tyro Electronics
3 | GPL General Public License 3.0
4 | http://tyroelectronics.com 5 | 6 | ## Build 7 | Build your TyroBot by visiting: 8 | http://tyroelectronics.com/build/ 9 | Or follow our video tutorial: 10 | (coming soon) 11 | ## Code 12 | Check out our library documentation: 13 | http://tyroelectronics.com/docs/ 14 | ## Repeat 15 | Customize your TyroBot!(coming soon) 16 | 17 | Special thanks to all of our kickstarter backers, especially Alex, Takashi Peluso, and Dimitris Platis! 18 | -------------------------------------------------------------------------------- /pcb/components.pretty/JST2.kicad_mod: -------------------------------------------------------------------------------- 1 | (module JST2 (layer F.Cu) (tedit 57A27028) 2 | (fp_text reference REF** (at 3.75 9.5) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value JST2 (at 3.25 0) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (pad 2 smd rect (at 0 0) (size 1.5 3.4) (layers F.Cu F.Paste F.Mask)) 9 | (pad 2 smd rect (at 2.35 5.55) (size 1 3.5) (layers F.Cu F.Paste F.Mask)) 10 | (pad 1 smd rect (at 4.35 5.55) (size 1 3.5) (layers F.Cu F.Paste F.Mask)) 11 | (pad 2 smd rect (at 6.7 0) (size 1.5 3.4) (layers F.Cu F.Paste F.Mask)) 12 | ) 13 | -------------------------------------------------------------------------------- /pcb/servo.pretty/progatsam.kicad_mod: -------------------------------------------------------------------------------- 1 | (module progatsam (layer F.Cu) (tedit 58716FDA) 2 | (fp_text reference REF** (at 0 4.064) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value progatsam (at 0 -5.588) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (pad 1 smd rect (at -2.54 0) (size 2 2) (layers F.Cu F.Paste F.Mask)) 9 | (pad 2 smd rect (at -0.254 0) (size 2 2) (layers F.Cu F.Paste F.Mask)) 10 | (pad 3 smd rect (at 2.032 0) (size 2 2) (layers F.Cu F.Paste F.Mask)) 11 | (pad 4 smd rect (at 4.318 0) (size 2 2) (layers F.Cu F.Paste F.Mask)) 12 | ) 13 | -------------------------------------------------------------------------------- /pcb/gerbers/revA-Edge.Cuts.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Profile,NP* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.2-stable) date 9/14/2017 6:50:28 PM* 5 | %MOMM*% 6 | G01* 7 | G04 APERTURE LIST* 8 | %ADD10C,0.100000*% 9 | %ADD11C,0.150000*% 10 | G04 APERTURE END LIST* 11 | D10* 12 | D11* 13 | X173100000Y-49125000D02* 14 | X173100000Y-49550000D01* 15 | X105100000Y-49125000D02* 16 | X105100000Y-49450000D01* 17 | X173100000Y-49125000D02* 18 | X105100000Y-49125000D01* 19 | X173100000Y-98450000D02* 20 | X173100000Y-49450000D01* 21 | X105100000Y-98450000D02* 22 | X173100000Y-98450000D01* 23 | X105100000Y-49450000D02* 24 | X105100000Y-98450000D01* 25 | M02* 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | #3D Printer files 12 | *.gcode 13 | 14 | # Windows Installer files 15 | *.cab 16 | *.msi 17 | *.msm 18 | *.msp 19 | 20 | # Windows shortcuts 21 | *.lnk 22 | 23 | # ========================= 24 | # Operating System Files 25 | # ========================= 26 | 27 | # OSX 28 | # ========================= 29 | 30 | .DS_Store 31 | .AppleDouble 32 | .LSOverride 33 | 34 | # Thumbnails 35 | ._* 36 | 37 | # Files that might appear in the root of a volume 38 | .DocumentRevisions-V100 39 | .fseventsd 40 | .Spotlight-V100 41 | .TemporaryItems 42 | .Trashes 43 | .VolumeIcon.icns 44 | 45 | # Directories potentially created on remote AFP share 46 | .AppleDB 47 | .AppleDesktop 48 | Network Trash Folder 49 | Temporary Items 50 | .apdisk 51 | -------------------------------------------------------------------------------- /credits.md: -------------------------------------------------------------------------------- 1 | ## Firmware 2 | * Written by Tyler Spadgenske (https://github.com/spadgenske) 3 | ### Dependencies 4 | * Adafruit_ILI9341 (https://github.com/adafruit/Adafruit_ILI9341) 5 | * Adafruit_LIS3DH (https://github.com/adafruit/Adafruit_LIS3DH) 6 | * ESP-To-IFTTT (https://github.com/mylob/ESP-To-IFTTT) 7 | ## CAD 8 | Very roughly based off of: 9 | * BoB the Biped (https://www.thingiverse.com/thing:43708)
10 | ## Schematic
11 | Based off of: 12 | * Adafruit Feather M0 (https://learn.adafruit.com/adafruit-feather-m0-basic-proto/overview) 13 | * JACK Cortex Kit (https://hackaday.io/project/6062-jack) 14 | * Arduino Zero
15 | ## PCB
16 | * ESP8266 symbol and footprint from https://github.com/jdunmire/kicad-ESP8266 licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. 17 | * LIS3DH footprint from https://github.com/Tinkerforge/kicad-libraries 18 | * Crystal footprint from https://github.com/kylemanna/kicad-library/tree/master/user.pretty under the Apache license 19 | -------------------------------------------------------------------------------- /pcb/ili9341-18p.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # ili9341-18p 5 | # 6 | DEF ili9341-18p U 0 40 Y Y 1 F N 7 | F0 "U" 0 -100 60 H V C CNN 8 | F1 "ili9341-18p" 100 850 60 H V C CNN 9 | F2 "" 0 0 60 H V C CNN 10 | F3 "" 0 0 60 H V C CNN 11 | DRAW 12 | S -100 750 250 -1050 0 1 0 N 13 | X GND 1 450 700 200 L 50 50 1 1 I 14 | X RST 2 450 600 200 L 50 50 1 1 I 15 | X SCL 3 450 500 200 L 50 50 1 1 I 16 | X RS 4 450 400 200 L 50 50 1 1 I 17 | X CS 5 450 300 200 L 50 50 1 1 I 18 | X SDA 6 450 200 200 L 50 50 1 1 I 19 | X SDO 7 450 100 200 L 50 50 1 1 I 20 | X GND 8 450 0 200 L 50 50 1 1 I 21 | X VCC 9 450 -100 200 L 50 50 1 1 I 22 | X A 10 450 -200 200 L 50 50 1 1 I 23 | X K1 11 450 -300 200 L 50 50 1 1 I 24 | X K2 12 450 -400 200 L 50 50 1 1 I 25 | X K3 13 450 -500 200 L 50 50 1 1 I 26 | X K4 14 450 -600 200 L 50 50 1 1 I 27 | X XL 15 450 -700 200 L 50 50 1 1 I 28 | X YU 16 450 -800 200 L 50 50 1 1 I 29 | X XR 17 450 -900 200 L 50 50 1 1 I 30 | X YD 18 450 -1000 200 L 50 50 1 1 I 31 | ENDDRAW 32 | ENDDEF 33 | # 34 | #End Library 35 | -------------------------------------------------------------------------------- /pcb/gerbers/revA-B.SilkS.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Legend,Bot* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.2-stable) date 9/14/2017 6:50:28 PM* 5 | %MOMM*% 6 | G01* 7 | G04 APERTURE LIST* 8 | %ADD10C,0.100000*% 9 | %ADD11C,0.300000*% 10 | G04 APERTURE END LIST* 11 | D10* 12 | D11* 13 | X170946428Y-97003571D02* 14 | X171446428Y-96289286D01* 15 | X171803571Y-97003571D02* 16 | X171803571Y-95503571D01* 17 | X171232143Y-95503571D01* 18 | X171089285Y-95575000D01* 19 | X171017857Y-95646429D01* 20 | X170946428Y-95789286D01* 21 | X170946428Y-96003571D01* 22 | X171017857Y-96146429D01* 23 | X171089285Y-96217857D01* 24 | X171232143Y-96289286D01* 25 | X171803571Y-96289286D01* 26 | X170303571Y-96217857D02* 27 | X169803571Y-96217857D01* 28 | X169589285Y-97003571D02* 29 | X170303571Y-97003571D01* 30 | X170303571Y-95503571D01* 31 | X169589285Y-95503571D01* 32 | X169160714Y-95503571D02* 33 | X168660714Y-97003571D01* 34 | X168160714Y-95503571D01* 35 | X166589286Y-96575000D02* 36 | X165875000Y-96575000D01* 37 | X166732143Y-97003571D02* 38 | X166232143Y-95503571D01* 39 | X165732143Y-97003571D01* 40 | M02* 41 | -------------------------------------------------------------------------------- /firmware/TyroBot/examples/original-firmware/original-firmware.ino: -------------------------------------------------------------------------------- 1 | /* TyroBot Demo Code v1.0.0 2 | * copyright (c) 2017 Tyro Electronics 3 | * written by Tyler Spadgenske 4 | * GNU General Public License 3.0 5 | * http://tyroelectronics.com 6 | */ 7 | 8 | #include //include this library whenever using TyroBot 9 | 10 | char ssid[] = "ssid"; //Wifi SSID 11 | char pass[] = "password"; //Wifi password 12 | 13 | Adafruit_LIS3DH lis = Adafruit_LIS3DH(); //Setup the Accelerometer 14 | Adafruit_ILI9341 tft = Adafruit_ILI9341(4, 9, 23, 24, -1, 22); //CS, DC, MOSI, CLK, RST, MISO (Setup the display) 15 | 16 | TyroBot bot = TyroBot(&tft, &lis); //Create the TyroBot object 17 | 18 | void setup() 19 | { 20 | bot.connectWifi(ssid, pass); 21 | } 22 | 23 | 24 | void loop() 25 | { 26 | bot.connectAccel(); //Connect to the accelerometer 27 | bot.menu(); //display the default splash screen on startup 28 | 29 | //Any code below runs when "run program" is tapped in TyroBot's menu 30 | bot.token = "b8354jvkbG7ZSitd6ygT4z"; //IFTT Key (you will need to use your own) 31 | bot.IFTT("test");//event trigger 32 | bot.shakeHead(); 33 | bot.waveRightArm(1); 34 | bot.waveLeftArm(1); 35 | bot.forward(4); 36 | bot.turnRight(2); 37 | bot.shakeHead(); 38 | bot.liftRightFoot(); 39 | } 40 | -------------------------------------------------------------------------------- /pcb/components.pretty/micro-usb-molex.kicad_mod: -------------------------------------------------------------------------------- 1 | (module micro-usb-molex (layer F.Cu) (tedit 56E9BA34) 2 | (fp_text reference USB (at 3 6) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value micro-usb-molex (at 2.5 -3.5) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -2 -1.5) (end -2 4.5) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start -2 4.5) (end 8 4.5) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 8 4.5) (end 8 -1.5) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start 8 -1.5) (end -2 -1.5) (layer F.SilkS) (width 0.15)) 12 | (pad 5 smd rect (at 0 0) (size 2.375 1.9) (layers F.Cu F.Paste F.Mask)) 13 | (pad 5 smd rect (at 2.075 0) (size 1.175 1.9) (layers F.Cu F.Paste F.Mask)) 14 | (pad 5 smd rect (at 5.825 0) (size 2.375 1.9) (layers F.Cu F.Paste F.Mask)) 15 | (pad 5 smd rect (at 3.75 0) (size 1.175 1.9) (layers F.Cu F.Paste F.Mask)) 16 | (pad 5 smd rect (at 0.45 2.3) (size 1.475 2.1) (layers F.Cu F.Paste F.Mask)) 17 | (pad 5 smd rect (at 5.375 2.3) (size 1.475 2.1) (layers F.Cu F.Paste F.Mask)) 18 | (pad 5 smd rect (at 1.6125 2.66) (size 0.45 1.38) (layers F.Cu F.Paste F.Mask)) 19 | (pad 4 smd rect (at 2.2625 2.66) (size 0.45 1.38) (layers F.Cu F.Paste F.Mask)) 20 | (pad 3 smd rect (at 2.9125 2.66) (size 0.45 1.38) (layers F.Cu F.Paste F.Mask)) 21 | (pad 2 smd rect (at 3.5625 2.66) (size 0.45 1.38) (layers F.Cu F.Paste F.Mask)) 22 | (pad 1 smd rect (at 4.2125 2.66) (size 0.45 1.38) (layers F.Cu F.Paste F.Mask)) 23 | ) 24 | -------------------------------------------------------------------------------- /pcb/revA: -------------------------------------------------------------------------------- 1 | Reference, Value, Footprint, Datasheet 2 | U2,SAMD20G18A-M,Housings_QFP:TQFP-48_7x7mm_Pitch0.5mm, 3 | C3,1uF,Resistors_SMD:R_0805, 4 | Y1,32.768,user:FC-135, 5 | C6,22pF,Resistors_SMD:R_0805, 6 | C7,22pF,Resistors_SMD:R_0805, 7 | P5,SAMD-PROG,servo:progatsam, 8 | P1,USB_OTG,components:micro-usb-fci, 9 | U5,ESP-12E,ESP8266:ESP-12E, 10 | R3,10K,Resistors_SMD:R_0805, 11 | R6,1K,Resistors_SMD:R_0805, 12 | D1,LED,LEDs:LED_0805, 13 | R7,1K,Resistors_SMD:R_0805, 14 | R8,1K,Resistors_SMD:R_0805, 15 | R9,1K,Resistors_SMD:R_0805, 16 | U6,LIS3DH,components:LGA-16-3x3, 17 | C8,10uF,Resistors_SMD:R_0805, 18 | R4,10K,Resistors_SMD:R_0805, 19 | R5,10K,Resistors_SMD:R_0805, 20 | C9,0.1uF,Resistors_SMD:R_0805, 21 | U3,MCP73831,TO_SOT_Packages_SMD:SOT-23-5, 22 | R2,2K,Resistors_SMD:R_0805, 23 | C5,10uF,Resistors_SMD:R_0805, 24 | P4,BAT,components:JST2, 25 | R1,470,Resistors_SMD:R_0805, 26 | D2,Charge,LEDs:LED_0805, 27 | U4,7servo,servo:servo7, 28 | U1,AP2112K-3.3,TO_SOT_Packages_SMD:SOT-23-5, 29 | R10,100K,Resistors_SMD:R_0805, 30 | C1,10uF,Capacitors_SMD:C_0805, 31 | C2,10uF,Capacitors_SMD:C_0805, 32 | C10,1uF,Capacitors_SMD:C_0805, 33 | C4,10uF,Capacitors_SMD:C_0805, 34 | R14,10K,Resistors_SMD:R_0805, 35 | R15,10K,Resistors_SMD:R_0805, 36 | SW1,SPST,user:eg1224, 37 | D3,LED,LEDs:LED_0805, 38 | R13,1K,Resistors_SMD:R_0805, 39 | R11,10K,Resistors_SMD:R_0805, 40 | R12,10K,Resistors_SMD:R_0805, 41 | U7,ili9341-18p,components:18p-ili9341, 42 | P2,EXP,Connectors_JST:JST_PH_B5B-PH-SM4-TB_05x2.00mm_Straight, 43 | P3,espprog,Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm, 44 | C11,1uF,Capacitors_SMD:C_0805, 45 | P6,SPI-EXPANSION,Connectors_JST:JST_PH_B6B-PH-SM4-TB_06x2.00mm_Straight, 46 | -------------------------------------------------------------------------------- /pcb/components.pretty/18p-ili9341.kicad_mod: -------------------------------------------------------------------------------- 1 | (module 18p-ili9341 (layer F.Cu) (tedit 58503172) 2 | (fp_text reference REF** (at 7.75 3.25) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value 18p-ili9341 (at 7.25 -3.75) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (pad 1 smd rect (at 0 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 9 | (pad 2 smd rect (at 0.8 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 10 | (pad 3 smd rect (at 1.6 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 11 | (pad 4 smd rect (at 2.4 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 12 | (pad 5 smd rect (at 3.2 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 13 | (pad 6 smd rect (at 4 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 14 | (pad 7 smd rect (at 4.8 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 15 | (pad 8 smd rect (at 5.6 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 16 | (pad 9 smd rect (at 6.4 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 17 | (pad 10 smd rect (at 7.2 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 18 | (pad 11 smd rect (at 8 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 19 | (pad 12 smd rect (at 8.8 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 20 | (pad 13 smd rect (at 9.6 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 21 | (pad 14 smd rect (at 10.4 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 22 | (pad 15 smd rect (at 11.2 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 23 | (pad 16 smd rect (at 12 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 24 | (pad 17 smd rect (at 12.8 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 25 | (pad 18 smd rect (at 13.6 0) (size 0.4 4) (layers F.Cu F.Paste F.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /pcb/components.pretty/micro-usb-fci.kicad_mod: -------------------------------------------------------------------------------- 1 | (module micro-usb-fci (layer F.Cu) (tedit 56EB4B31) 2 | (solder_mask_margin 0.0762) 3 | (fp_text reference P2 (at 0.7 -4.4) (layer F.SilkS) hide 4 | (effects (font (size 1 1) (thickness 0.15))) 5 | ) 6 | (fp_text value USB_OTG (at 2.5 -3.5) (layer F.SilkS) hide 7 | (effects (font (size 1 1) (thickness 0.15))) 8 | ) 9 | (fp_line (start -5.29 3.03) (end -5.79 3.03) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start -5.79 3.03) (end -5.79 -2.47) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -5.79 -2.47) (end 4.71 -2.47) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start 4.71 -2.47) (end 4.71 3.03) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 4.71 3.03) (end -5.29 3.03) (layer F.SilkS) (width 0.15)) 14 | (pad 6 smd rect (at -4.3875 -1.015) (size 1.8 1.9) (layers F.Cu F.Paste F.Mask)) 15 | (pad 6 smd rect (at 3.2125 -1.015) (size 1.8 1.9) (layers F.Cu F.Paste F.Mask)) 16 | (pad 6 smd rect (at -1.7375 -1.015) (size 1.8 1.9) (layers F.Cu F.Paste F.Mask)) 17 | (pad 5 smd rect (at -1.8875 1.66) (size 0.4 1.35) (layers F.Cu F.Paste F.Mask)) 18 | (pad 4 smd rect (at -1.2375 1.66) (size 0.4 1.35) (layers F.Cu F.Paste F.Mask)) 19 | (pad 3 smd rect (at -0.5875 1.66) (size 0.4 1.35) (layers F.Cu F.Paste F.Mask)) 20 | (pad 2 smd rect (at 0.0625 1.66) (size 0.4 1.35) (layers F.Cu F.Paste F.Mask)) 21 | (pad 1 smd rect (at 0.7125 1.66) (size 0.4 1.35) (layers F.Cu F.Paste F.Mask)) 22 | (pad 6 smd rect (at 2.5125 1.535) (size 2.1 1.6) (layers F.Cu F.Paste F.Mask)) 23 | (pad 6 smd rect (at -3.6875 1.535) (size 2.1 1.6) (layers F.Cu F.Paste F.Mask)) 24 | (pad 6 smd rect (at 0.5625 -1.015) (size 1.8 1.9) (layers F.Cu F.Paste F.Mask)) 25 | ) 26 | -------------------------------------------------------------------------------- /pcb/revA.pro: -------------------------------------------------------------------------------- 1 | update=10/7/2017 11:07:32 AM 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [general] 24 | version=1 25 | [cvpcb] 26 | version=1 27 | NetIExt=net 28 | [eeschema] 29 | version=1 30 | LibDir= 31 | [eeschema/libraries] 32 | LibName1=power 33 | LibName2=device 34 | LibName3=transistors 35 | LibName4=conn 36 | LibName5=linear 37 | LibName6=regul 38 | LibName7=74xx 39 | LibName8=cmos4000 40 | LibName9=adc-dac 41 | LibName10=memory 42 | LibName11=xilinx 43 | LibName12=microcontrollers 44 | LibName13=dsp 45 | LibName14=microchip 46 | LibName15=analog_switches 47 | LibName16=motorola 48 | LibName17=texas 49 | LibName18=intel 50 | LibName19=audio 51 | LibName20=interface 52 | LibName21=digital-audio 53 | LibName22=philips 54 | LibName23=display 55 | LibName24=cypress 56 | LibName25=siliconi 57 | LibName26=opto 58 | LibName27=atmel 59 | LibName28=contrib 60 | LibName29=valves 61 | LibName30=C:/Users/User1/Documents/GitHub/ESP8266/kicad-ESP8266-master/ESP8266 62 | LibName31=C:/Users/User1/Documents/GitHub/misc-ics/kicad_libs-master/lis3dh 63 | LibName32=mcp73831 64 | LibName33=ili9341-18p 65 | [schematic_editor] 66 | version=1 67 | PageLayoutDescrFile= 68 | PlotDirectoryName= 69 | SubpartIdSeparator=0 70 | SubpartFirstId=65 71 | NetFmtName=Pcbnew 72 | SpiceForceRefPrefix=0 73 | SpiceUseNetNumbers=0 74 | LabSize=60 75 | -------------------------------------------------------------------------------- /pcb/gerbers/revA-B.Mask.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Soldermask,Bot* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.2-stable) date 9/14/2017 6:50:28 PM* 5 | %MOMM*% 6 | G01* 7 | G04 APERTURE LIST* 8 | %ADD10C,0.100000*% 9 | %ADD11R,4.152400X0.552400*% 10 | %ADD12O,1.879600X2.184400*% 11 | %ADD13C,1.652400*% 12 | %ADD14C,0.952400*% 13 | %ADD15R,1.852400X1.852400*% 14 | %ADD16O,1.852400X1.852400*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | D11* 18 | X156150000Y-67775000D03* 19 | X156150000Y-68575000D03* 20 | X156150000Y-69375000D03* 21 | X156150000Y-70175000D03* 22 | X156150000Y-70975000D03* 23 | X156150000Y-71775000D03* 24 | X156150000Y-72575000D03* 25 | X156150000Y-73375000D03* 26 | X156150000Y-74175000D03* 27 | X156150000Y-74975000D03* 28 | X156150000Y-75775000D03* 29 | X156150000Y-76575000D03* 30 | X156150000Y-77375000D03* 31 | X156150000Y-78175000D03* 32 | X156150000Y-78975000D03* 33 | X156150000Y-79775000D03* 34 | X156150000Y-80575000D03* 35 | X156150000Y-81375000D03* 36 | D12* 37 | X133110000Y-96070000D03* 38 | X135650000Y-96070000D03* 39 | X138190000Y-96070000D03* 40 | X140730000Y-96070000D03* 41 | X143270000Y-96070000D03* 42 | X145810000Y-96070000D03* 43 | X148350000Y-96070000D03* 44 | X148350000Y-93530000D03* 45 | X145810000Y-93530000D03* 46 | X143270000Y-93530000D03* 47 | X140730000Y-93530000D03* 48 | X138190000Y-93530000D03* 49 | X135650000Y-93530000D03* 50 | X133110000Y-93530000D03* 51 | X133110000Y-90990000D03* 52 | X135650000Y-90990000D03* 53 | X138190000Y-90990000D03* 54 | X140730000Y-90990000D03* 55 | X143270000Y-90990000D03* 56 | X145810000Y-90990000D03* 57 | X148350000Y-90990000D03* 58 | D13* 59 | X106225000Y-75700000D03* 60 | X106225000Y-87700000D03* 61 | X112225000Y-87700000D03* 62 | X112225000Y-75700000D03* 63 | D14* 64 | X110475000Y-85700000D03* 65 | X110475000Y-81700000D03* 66 | X110475000Y-77700000D03* 67 | D15* 68 | X169375000Y-79125000D03* 69 | D16* 70 | X169375000Y-81665000D03* 71 | X169375000Y-84205000D03* 72 | X169375000Y-86745000D03* 73 | M02* 74 | -------------------------------------------------------------------------------- /pcb/components.pretty/LGA-16-3x3.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LGA-16-3x3 (layer F.Cu) (tedit 54EB2680) 2 | (fp_text reference U2 (at 0 -0.70104) (layer F.SilkS) 3 | (effects (font (size 0.29972 0.29972) (thickness 0.06604))) 4 | ) 5 | (fp_text value LIS3DSH (at 0 0.29972) (layer F.SilkS) 6 | (effects (font (size 0.29972 0.29972) (thickness 0.06604))) 7 | ) 8 | (fp_circle (center -0.8 -0.9) (end -0.7 -0.8) (layer F.SilkS) (width 0.05)) 9 | (fp_line (start -1.5 -1.5) (end 1.5 -1.5) (layer F.SilkS) (width 0.05)) 10 | (fp_line (start 1.5 -1.5) (end 1.5 1.5) (layer F.SilkS) (width 0.05)) 11 | (fp_line (start 1.5 1.5) (end -1.5 1.5) (layer F.SilkS) (width 0.05)) 12 | (fp_line (start -1.5 1.5) (end -1.5 -1.5) (layer F.SilkS) (width 0.05)) 13 | (pad 1 smd rect (at -1.475 -1) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 14 | (pad 2 smd rect (at -1.475 -0.5) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 15 | (pad 3 smd rect (at -1.475 0) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 16 | (pad 4 smd rect (at -1.475 0.5) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 17 | (pad 5 smd rect (at -1.475 1) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 18 | (pad 6 smd rect (at -0.5 1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 19 | (pad 7 smd rect (at 0 1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 20 | (pad 8 smd rect (at 0.5 1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 21 | (pad 9 smd rect (at 1.475 1) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 22 | (pad 10 smd rect (at 1.475 0.5) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 23 | (pad 11 smd rect (at 1.475 0) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 24 | (pad 12 smd rect (at 1.475 -0.5) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 25 | (pad 13 smd rect (at 1.475 -1) (size 0.85 0.25) (layers F.Cu F.Paste F.Mask)) 26 | (pad 14 smd rect (at 0.5 -1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 27 | (pad 15 smd rect (at 0 -1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 28 | (pad 16 smd rect (at -0.5 -1.475) (size 0.25 0.85) (layers F.Cu F.Paste F.Mask)) 29 | ) 30 | -------------------------------------------------------------------------------- /pcb/servo.pretty/servo7.kicad_mod: -------------------------------------------------------------------------------- 1 | (module servo7 (layer F.Cu) (tedit 58715E9D) 2 | (fp_text reference REF** (at -5.08 2.54) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value servo7 (at -5.08 -17.78) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -8.75 -16.5) (end -1.5 -16.5) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start -1.5 -16.5) (end -1.5 1.25) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start -1.5 1.25) (end -8.75 1.25) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -8.75 1.25) (end -8.75 -16.5) (layer F.SilkS) (width 0.15)) 12 | (pad 1 thru_hole oval (at -7.62 -15.24) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 13 | (pad 2 thru_hole oval (at -7.62 -12.7) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 14 | (pad 3 thru_hole oval (at -7.62 -10.16) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 15 | (pad 4 thru_hole oval (at -7.62 -7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 16 | (pad 5 thru_hole oval (at -7.62 -5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 17 | (pad 6 thru_hole oval (at -7.62 -2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 18 | (pad 7 thru_hole oval (at -7.62 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 19 | (pad 8 thru_hole oval (at -5.08 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 20 | (pad 9 thru_hole oval (at -5.08 -2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 21 | (pad 10 thru_hole oval (at -5.08 -5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 22 | (pad 11 thru_hole oval (at -5.08 -7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 23 | (pad 12 thru_hole oval (at -5.08 -10.16) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 24 | (pad 13 thru_hole oval (at -5.08 -12.7) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 25 | (pad 14 thru_hole oval (at -5.08 -15.24) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 26 | (pad 15 thru_hole oval (at -2.54 -15.24) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 27 | (pad 16 thru_hole oval (at -2.54 -12.7) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 28 | (pad 17 thru_hole oval (at -2.54 -10.16) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 29 | (pad 18 thru_hole oval (at -2.54 -7.62) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 30 | (pad 19 thru_hole oval (at -2.54 -5.08) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 31 | (pad 20 thru_hole oval (at -2.54 -2.54) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 32 | (pad 21 thru_hole oval (at -2.54 0) (size 2.032 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)) 33 | ) 34 | -------------------------------------------------------------------------------- /pcb/components.pretty/servo7.kicad_mod: -------------------------------------------------------------------------------- 1 | (module servo7 (layer F.Cu) (tedit 577BE500) 2 | (fp_text reference REF** (at -5.08 2.54) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value servo7 (at -5.08 -17.78) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -8.75 -16.5) (end -1.5 -16.5) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start -1.5 -16.5) (end -1.5 1.25) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start -1.5 1.25) (end -8.75 1.25) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -8.75 1.25) (end -8.75 -16.5) (layer F.SilkS) (width 0.15)) 12 | (pad 1 thru_hole circle (at -7.62 -15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 13 | (pad 2 thru_hole circle (at -7.62 -12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 14 | (pad 3 thru_hole circle (at -7.62 -10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 15 | (pad 4 thru_hole circle (at -7.62 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 16 | (pad 5 thru_hole circle (at -7.62 -5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 17 | (pad 6 thru_hole circle (at -7.62 -2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 18 | (pad 7 thru_hole circle (at -7.62 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 19 | (pad 8 thru_hole circle (at -5.08 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 20 | (pad 9 thru_hole circle (at -5.08 -2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 21 | (pad 10 thru_hole circle (at -5.08 -5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 22 | (pad 11 thru_hole circle (at -5.08 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 23 | (pad 12 thru_hole circle (at -5.08 -10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 24 | (pad 13 thru_hole circle (at -5.08 -12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 25 | (pad 14 thru_hole circle (at -5.08 -15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 26 | (pad 15 thru_hole circle (at -2.54 -15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 27 | (pad 16 thru_hole circle (at -2.54 -12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 28 | (pad 17 thru_hole circle (at -2.54 -10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 29 | (pad 18 thru_hole circle (at -2.54 -7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 30 | (pad 19 thru_hole circle (at -2.54 -5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 31 | (pad 20 thru_hole circle (at -2.54 -2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 32 | (pad 21 thru_hole circle (at -2.54 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask F.SilkS)) 33 | ) 34 | -------------------------------------------------------------------------------- /pcb/components.pretty/LGA-16.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LGA-16 (layer F.Cu) (tedit 4C4EBA79) 2 | (fp_text reference Test (at 0 -0.70104) (layer F.SilkS) 3 | (effects (font (size 0.29972 0.29972) (thickness 0.06604))) 4 | ) 5 | (fp_text value VAL** (at 0 0.29972) (layer F.SilkS) 6 | (effects (font (size 0.29972 0.29972) (thickness 0.06604))) 7 | ) 8 | (fp_line (start -1.99898 -1.99898) (end -1.24968 -1.99898) (layer F.SilkS) (width 0.14986)) 9 | (fp_line (start 1.24968 -1.99898) (end 1.99898 -1.99898) (layer F.SilkS) (width 0.14986)) 10 | (fp_line (start 1.99898 -1.99898) (end 1.99898 -1.24968) (layer F.SilkS) (width 0.14986)) 11 | (fp_line (start 1.99898 1.24968) (end 1.99898 1.99898) (layer F.SilkS) (width 0.14986)) 12 | (fp_line (start -1.99898 1.99898) (end -1.24968 1.99898) (layer F.SilkS) (width 0.14986)) 13 | (fp_line (start 1.24968 1.99898) (end 1.99898 1.99898) (layer F.SilkS) (width 0.14986)) 14 | (fp_line (start -1.99898 -1.99898) (end -1.99898 -1.24968) (layer F.SilkS) (width 0.14986)) 15 | (fp_line (start -1.99898 1.24968) (end -1.99898 1.99898) (layer F.SilkS) (width 0.14986)) 16 | (fp_line (start -1.24968 1.4732) (end -0.6985 1.4732) (layer F.SilkS) (width 0.14986)) 17 | (fp_line (start -1.24968 2.2225) (end -0.6985 2.2225) (layer F.SilkS) (width 0.14986)) 18 | (fp_line (start -1.24968 1.4732) (end -1.24968 2.2225) (layer F.SilkS) (width 0.14986)) 19 | (pad 1 smd rect (at -0.97282 1.84912 180) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 20 | (pad 2 smd rect (at -0.32258 1.84912 180) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 21 | (pad 3 smd rect (at 0.32258 1.84912 180) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 22 | (pad 4 smd rect (at 0.97282 1.84912 180) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 23 | (pad 5 smd rect (at 1.84912 0.97282 270) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 24 | (pad 6 smd rect (at 1.84912 0.32258 270) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 25 | (pad 7 smd rect (at 1.84912 -0.32258 270) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 26 | (pad 8 smd rect (at 1.84912 -0.97282 270) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 27 | (pad 9 smd rect (at 0.97282 -1.84912) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 28 | (pad 10 smd rect (at 0.32258 -1.84912) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 29 | (pad 11 smd rect (at -0.32258 -1.84912) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 30 | (pad 12 smd rect (at -0.97282 -1.84912) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 31 | (pad 13 smd rect (at -1.84912 -0.97282 90) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 32 | (pad 14 smd rect (at -1.84912 -0.32258 90) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 33 | (pad 15 smd rect (at -1.84912 0.32258 90) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 34 | (pad 16 smd rect (at -1.84912 0.97282 90) (size 0.39878 0.59944) (layers F.Cu F.Paste F.Mask)) 35 | ) 36 | -------------------------------------------------------------------------------- /firmware/TyroBot/TyroBot.h: -------------------------------------------------------------------------------- 1 | /* TyroBot v1.0.0 2 | * copyright (c) 2017 Tyro Electronics 3 | * written by Tyler Spadgenske 4 | * GNU General Public License 3.0 5 | */ 6 | 7 | #ifndef TyroBot_h 8 | #define TyroBot_h 9 | #include "Arduino.h" 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | class TyroBot 18 | { 19 | public: 20 | TyroBot(Adafruit_ILI9341 * tft, Adafruit_LIS3DH * lis); 21 | 22 | //Setup Accelerometer 23 | Adafruit_LIS3DH * _lis; 24 | 25 | //touchscreen 26 | bool checkForPress(); 27 | void getPoints(int &y, int &x); 28 | 29 | bool cali; 30 | 31 | int x; 32 | int y; 33 | int xVal; 34 | int yVal; 35 | int TS_MINX; 36 | int TS_MINY; 37 | int TS_MAXX; 38 | int TS_MAXY; 39 | 40 | int mode; 41 | 42 | //battery variables 43 | float voltage; 44 | int batMode; 45 | long theTime; 46 | long timeMultiple; 47 | 48 | //self program variables 49 | uint32_t colors[5]; 50 | int program[8]; 51 | int key; 52 | int y_coord; 53 | 54 | //FUNctions 55 | void face(); 56 | void TyroBotMenu(); 57 | void TyroBotWifi(char dbm[]); 58 | void TyroBotBattery(int level); 59 | void enterBootloader(); 60 | void batteryLevel(); 61 | void selfProgram(); 62 | void runProgram(); 63 | int upTriangle(int x, int y); 64 | int downTriangle(int x, int y); 65 | int leftTriangle(int x, int y); 66 | int rightTriangle(int x, int y); 67 | void menu(); 68 | void connectWifi(char ssid[], char pass[]); 69 | void settings(); 70 | 71 | Adafruit_ILI9341 * _tft; 72 | 73 | void forward(int steps); 74 | void shakeHead(); 75 | void lookLeft(); 76 | void lookRight(); 77 | bool checkAccel(); 78 | void checkForFall(); 79 | void calibrate(); 80 | void liftRightFoot(); 81 | void rightFootForward(); 82 | void liftLeftFoot(); 83 | void footDown(); 84 | void leftFootForward(); 85 | void connectAccel(); 86 | void leftFootBackward(); 87 | void backward(int steps); 88 | void rightFootBackward(); 89 | void turnRight(int turns); 90 | void turnLeft(int turns); 91 | void waveRightArm(int times); 92 | void waveLeftArm(int times); 93 | void IFTT(char event[]); 94 | 95 | //Setup Servos 96 | Servo ll; 97 | Servo lf; 98 | Servo rl; 99 | Servo rf; 100 | Servo head; 101 | Servo leftArm; 102 | Servo rightArm; 103 | 104 | //wifi 105 | char ip[50]; 106 | char rssi[50]; 107 | bool connection; 108 | 109 | //IFTT 110 | String token; 111 | 112 | private: 113 | //Servo Pins 114 | int LEFT_LEG; 115 | int LEFT_FOOT; 116 | int RIGHT_LEG; 117 | int RIGHT_FOOT; 118 | int HEAD; 119 | int LEFT_ARM; 120 | int RIGHT_ARM; 121 | 122 | //Step Constants 123 | int LIFT_HEIGHT; 124 | int STEP_DISTANCE; 125 | int STEP_SPEED; 126 | 127 | int LEFT_TRIM; 128 | int RIGHT_TRIM; 129 | 130 | //Servo Positions when robot is at rest 131 | int LL_CENTER; 132 | int LF_CENTER; 133 | int RL_CENTER; 134 | int RF_CENTER; 135 | int HEAD_CENTER; 136 | int RIGHT_ARM_CENTER; 137 | int LEFT_ARM_CENTER; 138 | 139 | //Accelerometer 140 | int maxX; 141 | int minX; 142 | int TIMEOUT; 143 | bool level; 144 | }; 145 | #endif 146 | -------------------------------------------------------------------------------- /pcb/gerbers/revA.drl: -------------------------------------------------------------------------------- 1 | M48 2 | INCH,TZ 3 | T1C0.016 4 | T2C0.024 5 | T3C0.039 6 | T4C0.040 7 | % 8 | G90 9 | G05 10 | T1 11 | X41969Y-28524 12 | X42923Y-28120 13 | X43346Y-28917 14 | X43563Y-23130 15 | X43632Y-26988 16 | X43723Y-26620 17 | X43740Y-26093 18 | X44764Y-28937 19 | X44823Y-27244 20 | X45123Y-30520 21 | X45246Y-24163 22 | X45669Y-26693 23 | X45837Y-22963 24 | X46299Y-25079 25 | X46358Y-23150 26 | X46423Y-29120 27 | X46594Y-28130 28 | X46693Y-22618 29 | X46693Y-23504 30 | X46988Y-25472 31 | X47156Y-27215 32 | X47500Y-22736 33 | X47500Y-24370 34 | X47539Y-34646 35 | X47623Y-29920 36 | X47648Y-25600 37 | X47785Y-26417 38 | X47854Y-23435 39 | X47923Y-32559 40 | X48061Y-22766 41 | X48061Y-37195 42 | X48120Y-24518 43 | X48346Y-24764 44 | X48583Y-27628 45 | X48750Y-23986 46 | X48888Y-28356 47 | X49035Y-26703 48 | X49055Y-29606 49 | X49075Y-26388 50 | X49173Y-22953 51 | X49252Y-30197 52 | X49341Y-25217 53 | X49449Y-30886 54 | X49469Y-26693 55 | X49537Y-37165 56 | X49547Y-27146 57 | X49606Y-34980 58 | X49675Y-24931 59 | X49675Y-25846 60 | X49715Y-23780 61 | X49783Y-31624 62 | X49793Y-25285 63 | X49941Y-23258 64 | X50246Y-26870 65 | X50266Y-30246 66 | X50413Y-23415 67 | X50423Y-26120 68 | X50738Y-25246 69 | X50748Y-23622 70 | X50974Y-25531 71 | X51112Y-27234 72 | X51437Y-22805 73 | X51467Y-28258 74 | X51673Y-20148 75 | X51673Y-21142 76 | X51673Y-24311 77 | X51713Y-28917 78 | X51752Y-30758 79 | X51850Y-27825 80 | X51988Y-27539 81 | X51998Y-21417 82 | X52283Y-28996 83 | X52461Y-27067 84 | X52470Y-22490 85 | X52490Y-26693 86 | X52539Y-23110 87 | X52766Y-26142 88 | X52805Y-30797 89 | X52835Y-31841 90 | X52933Y-27923 91 | X53248Y-23622 92 | X53287Y-30118 93 | X53327Y-20098 94 | X54016Y-30098 95 | X54242Y-31368 96 | X54429Y-30374 97 | X54636Y-24065 98 | X54715Y-28268 99 | X54882Y-20059 100 | X54911Y-29488 101 | X55167Y-26289 102 | X55246Y-24931 103 | X55561Y-26299 104 | X55679Y-30177 105 | X55699Y-23022 106 | X55728Y-26998 107 | X55738Y-20187 108 | X55738Y-25118 109 | X56014Y-23799 110 | X56014Y-24675 111 | X56299Y-26339 112 | X56368Y-31486 113 | X56388Y-29931 114 | X56683Y-26919 115 | X56713Y-25640 116 | X56742Y-22234 117 | X56850Y-26299 118 | X56978Y-24272 119 | X57077Y-25915 120 | X57136Y-33711 121 | X57283Y-34134 122 | X57313Y-21703 123 | X57648Y-32274 124 | X57736Y-22943 125 | X57992Y-31575 126 | X57992Y-32904 127 | X58543Y-33730 128 | X58661Y-29636 129 | X58740Y-24596 130 | X58770Y-27795 131 | X58967Y-22333 132 | X59006Y-34154 133 | X59114Y-26211 134 | X59154Y-29006 135 | X59213Y-27746 136 | X59291Y-22618 137 | X59370Y-33376 138 | X59409Y-33711 139 | X59469Y-29331 140 | X59567Y-27392 141 | X59665Y-25384 142 | X59862Y-21949 143 | X59970Y-22343 144 | X60177Y-26762 145 | X60384Y-29262 146 | X60472Y-27303 147 | X60886Y-35561 148 | X60925Y-33691 149 | X61516Y-25453 150 | X61555Y-22687 151 | X61624Y-32333 152 | X61939Y-22008 153 | X62195Y-20157 154 | X62411Y-34616 155 | X62559Y-28602 156 | X62579Y-28140 157 | X62598Y-32264 158 | X62756Y-21604 159 | X62756Y-24587 160 | X63100Y-34744 161 | X63140Y-25945 162 | X63346Y-20157 163 | X63533Y-34734 164 | X63583Y-24774 165 | X63593Y-28642 166 | X63681Y-20787 167 | X63701Y-32224 168 | X63878Y-33524 169 | X64094Y-32323 170 | X64114Y-24616 171 | X64724Y-28907 172 | X65118Y-21860 173 | X65443Y-31191 174 | X65846Y-31407 175 | T2 176 | X43494Y-30591 177 | X43494Y-32165 178 | X43494Y-33740 179 | T3 180 | X41821Y-29803 181 | X41821Y-34528 182 | X44183Y-29803 183 | X44183Y-34528 184 | X66683Y-31152 185 | X66683Y-32152 186 | X66683Y-33152 187 | X66683Y-34152 188 | T4 189 | X52406Y-35823 190 | X52406Y-36823 191 | X52406Y-37823 192 | X53406Y-35823 193 | X53406Y-36823 194 | X53406Y-37823 195 | X54406Y-35823 196 | X54406Y-36823 197 | X54406Y-37823 198 | X55406Y-35823 199 | X55406Y-36823 200 | X55406Y-37823 201 | X56406Y-35823 202 | X56406Y-36823 203 | X56406Y-37823 204 | X57406Y-35823 205 | X57406Y-36823 206 | X57406Y-37823 207 | X58406Y-35823 208 | X58406Y-36823 209 | X58406Y-37823 210 | T0 211 | M30 212 | -------------------------------------------------------------------------------- /firmware/wifi/wifi.ino: -------------------------------------------------------------------------------- 1 | /*TyroBoard WiFi Module Code 2 | copyright (c) 2017 Tyro Electronics 3 | written by Tyler Spadgenske 4 | Licensed under GPL 3.0 5 | */ 6 | 7 | #include 8 | #include 9 | 10 | ESP8266WiFiMulti WiFiMulti; 11 | 12 | int data = -1; //the magic number 13 | 14 | int ind1; 15 | String ssidStr; 16 | String passStr; 17 | String keyStr; 18 | String eventStr; 19 | 20 | //IFTT 21 | String value1, value2, value3 = ""; 22 | bool dataAvailable; 23 | String postData; 24 | WiFiClient client; 25 | 26 | void enterBootloader() { 27 | pinMode(4, OUTPUT); 28 | digitalWrite(4, LOW); 29 | delay(10); 30 | pinMode(4, INPUT); 31 | delay(10); 32 | pinMode(4, OUTPUT); 33 | digitalWrite(4, LOW); 34 | delay(10); 35 | pinMode(4, INPUT); 36 | } 37 | 38 | void setup() { 39 | pinMode(0, OUTPUT); 40 | digitalWrite(0, 1); 41 | Serial.begin(9600); 42 | } 43 | 44 | void loop() { 45 | if (Serial.available()) { 46 | delay(100); //allows all serial sent to be received together 47 | char data = Serial.read(); 48 | //Serial.println(data); 49 | if (data == 0) { 50 | enterBootloader(); 51 | data = -1; 52 | } 53 | //get SSID from host 54 | if (data == 1) { 55 | delay(100); 56 | data = -1; 57 | String credentials = Serial.readString(); 58 | ind1 = credentials.indexOf(','); 59 | ssidStr = credentials.substring(0, ind1); 60 | passStr = credentials.substring(ind1 + 1); 61 | char ssid[50]; 62 | char pass[50]; 63 | ssidStr.toCharArray(ssid, 50); 64 | passStr.toCharArray(pass, 50); 65 | WiFiMulti.addAP(ssid, pass); // connect to network 66 | //check for connection 67 | if((WiFiMulti.run() == WL_CONNECTED)) { 68 | long rssiInt = WiFi.RSSI(); 69 | String rssiStr = String(rssiInt); 70 | char rssi[4]; 71 | rssiStr.toCharArray(rssi, 4); 72 | 73 | Serial.write(rssi); 74 | Serial.write(","); 75 | IPAddress ipStr = WiFi.localIP(); 76 | String ipString = String(ipStr[0]); 77 | for (byte octet = 1; octet < 4; ++octet) { 78 | ipString += '.' + String(ipStr[octet]); 79 | } 80 | char ip[20]; 81 | ipString.toCharArray(ip, 20); 82 | Serial.write(ip); 83 | } 84 | else { 85 | Serial.write("Not connected."); 86 | digitalWrite(0, 0); 87 | } 88 | } 89 | //IFTT mode 90 | if (data == 2) { 91 | delay(100); 92 | data = -1; 93 | String IFTTdata = Serial.readString(); 94 | ind1 = IFTTdata.indexOf(','); 95 | keyStr = IFTTdata.substring(0, ind1); 96 | eventStr = IFTTdata.substring(ind1 + 1); 97 | Serial.println(keyStr); 98 | Serial.println(eventStr); 99 | if (connectIFTT()) { 100 | post(keyStr,eventStr); 101 | } 102 | } 103 | } 104 | 105 | if((WiFiMulti.run() == WL_CONNECTED)) { 106 | 107 | } else { 108 | //Serial.println("Not connected"); 109 | delay(1000); 110 | } 111 | } 112 | 113 | bool connectIFTT() 114 | { 115 | if (client.connect("maker.ifttt.com", 80)) 116 | return true; 117 | else return false; 118 | } 119 | 120 | void post(String privateKey, String event) 121 | { 122 | compileData(); 123 | client.print("POST /trigger/"); 124 | client.print(event); 125 | client.print("/with/key/"); 126 | client.print(privateKey); 127 | client.println(" HTTP/1.1"); 128 | 129 | client.println("Host: maker.ifttt.com"); 130 | client.println("User-Agent: Arduino/1.0"); 131 | client.println("Connection: close"); 132 | if (dataAvailable) 133 | { // append json values if available 134 | client.println("Content-Type: application/json"); 135 | client.print("Content-Length: "); 136 | client.println(postData.length()); 137 | client.println(); 138 | client.println(postData); 139 | } 140 | else 141 | client.println(); 142 | } 143 | 144 | bool setValue(int valueToSet, String value) 145 | { 146 | switch (valueToSet) 147 | { 148 | case 1: 149 | value1 = value; 150 | break; 151 | case 2: 152 | value2 = value; 153 | break; 154 | case 3: 155 | value3 = value; 156 | break; 157 | default: 158 | return false; 159 | break; 160 | } 161 | return true; 162 | } 163 | 164 | void compileData() 165 | { 166 | if (value1 != "" || value2 != "" || value3 != "") 167 | { 168 | dataAvailable = true; 169 | bool valueEntered = false; 170 | postData = "{"; 171 | if (value1 != "") 172 | { 173 | postData.concat("\"value1\":\""); 174 | postData.concat(value1); 175 | valueEntered = true; 176 | } 177 | if (value2 != "") 178 | { 179 | if (valueEntered)postData.concat("\","); 180 | postData.concat("\"value2\":\""); 181 | postData.concat(value2); 182 | valueEntered = true; 183 | } 184 | if (value3 != "") 185 | { 186 | if (valueEntered)postData.concat("\","); 187 | postData.concat("\"value3\":\""); 188 | postData.concat(value3); 189 | } 190 | postData.concat("\"}"); 191 | } 192 | else dataAvailable = false; 193 | } 194 | -------------------------------------------------------------------------------- /pcb/gerbers/revA-F.Paste.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Paste,Top* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.2-stable) date 9/14/2017 6:50:28 PM* 5 | %MOMM*% 6 | G01* 7 | G04 APERTURE LIST* 8 | %ADD10C,0.100000*% 9 | %ADD11O,2.400000X1.100000*% 10 | %ADD12R,1.100000X2.400000*% 11 | %ADD13O,1.100000X2.400000*% 12 | %ADD14R,0.700000X1.300000*% 13 | %ADD15R,0.250000X1.300000*% 14 | %ADD16R,1.300000X0.250000*% 15 | %ADD17R,1.300000X0.700000*% 16 | %ADD18R,0.850000X0.250000*% 17 | %ADD19R,0.250000X0.850000*% 18 | %ADD20R,1.800000X1.000000*% 19 | %ADD21R,1.250000X1.000000*% 20 | %ADD22R,1.060000X0.650000*% 21 | %ADD23R,1.500000X3.400000*% 22 | %ADD24R,1.000000X3.500000*% 23 | %ADD25R,1.900000X1.800000*% 24 | %ADD26R,1.350000X0.400000*% 25 | %ADD27R,1.600000X2.100000*% 26 | %ADD28R,1.200000X1.200000*% 27 | %ADD29R,1.000000X5.500000*% 28 | %ADD30R,1.600000X3.000000*% 29 | G04 APERTURE END LIST* 30 | D10* 31 | D11* 32 | X147025000Y-63440000D03* 33 | X147025000Y-65440000D03* 34 | X147025000Y-67440000D03* 35 | X147025000Y-69440000D03* 36 | X147025000Y-71440000D03* 37 | X147025000Y-73440000D03* 38 | D12* 39 | X162775000Y-60450000D03* 40 | D13* 41 | X160775000Y-60450000D03* 42 | X158775000Y-60450000D03* 43 | X156775000Y-60450000D03* 44 | X154775000Y-60450000D03* 45 | X152775000Y-60450000D03* 46 | X150775000Y-60450000D03* 47 | X148775000Y-60450000D03* 48 | X148775000Y-76450000D03* 49 | X150775000Y-76450000D03* 50 | X152775000Y-76450000D03* 51 | X154775000Y-76450000D03* 52 | X156775000Y-76450000D03* 53 | X158775000Y-76450000D03* 54 | X160775000Y-76450000D03* 55 | X162775000Y-76450000D03* 56 | D14* 57 | X152825000Y-80275000D03* 58 | X154725000Y-80275000D03* 59 | D15* 60 | X130000000Y-61900000D03* 61 | X129500000Y-61900000D03* 62 | X129000000Y-61900000D03* 63 | X128500000Y-61900000D03* 64 | X128000000Y-61900000D03* 65 | X127500000Y-61900000D03* 66 | X127000000Y-61900000D03* 67 | X126500000Y-61900000D03* 68 | X126000000Y-61900000D03* 69 | X125500000Y-61900000D03* 70 | X125000000Y-61900000D03* 71 | X124500000Y-61900000D03* 72 | D16* 73 | X122900000Y-63500000D03* 74 | X122900000Y-64000000D03* 75 | X122900000Y-64500000D03* 76 | X122900000Y-65000000D03* 77 | X122900000Y-65500000D03* 78 | X122900000Y-66000000D03* 79 | X122900000Y-66500000D03* 80 | X122900000Y-67000000D03* 81 | X122900000Y-67500000D03* 82 | X122900000Y-68000000D03* 83 | X122900000Y-68500000D03* 84 | X122900000Y-69000000D03* 85 | D15* 86 | X124500000Y-70600000D03* 87 | X125000000Y-70600000D03* 88 | X125500000Y-70600000D03* 89 | X126000000Y-70600000D03* 90 | X126500000Y-70600000D03* 91 | X127000000Y-70600000D03* 92 | X127500000Y-70600000D03* 93 | X128000000Y-70600000D03* 94 | X128500000Y-70600000D03* 95 | X129000000Y-70600000D03* 96 | X129500000Y-70600000D03* 97 | X130000000Y-70600000D03* 98 | D16* 99 | X131600000Y-69000000D03* 100 | X131600000Y-68500000D03* 101 | X131600000Y-68000000D03* 102 | X131600000Y-67500000D03* 103 | X131600000Y-67000000D03* 104 | X131600000Y-66500000D03* 105 | X131600000Y-66000000D03* 106 | X131600000Y-65500000D03* 107 | X131600000Y-65000000D03* 108 | X131600000Y-64500000D03* 109 | X131600000Y-64000000D03* 110 | X131600000Y-63500000D03* 111 | D17* 112 | X134500000Y-62800000D03* 113 | X134500000Y-64700000D03* 114 | X117500000Y-67050000D03* 115 | X117500000Y-68950000D03* 116 | X143500000Y-52550000D03* 117 | X143500000Y-54450000D03* 118 | X140250000Y-52550000D03* 119 | X140250000Y-54450000D03* 120 | D14* 121 | X146550000Y-83500000D03* 122 | X148450000Y-83500000D03* 123 | X152700000Y-83500000D03* 124 | X150800000Y-83500000D03* 125 | D17* 126 | X119438000Y-71490000D03* 127 | X119438000Y-73390000D03* 128 | X113250000Y-72450000D03* 129 | X113250000Y-70550000D03* 130 | D14* 131 | X159575000Y-83575000D03* 132 | X161475000Y-83575000D03* 133 | D17* 134 | X135250000Y-75200000D03* 135 | X135250000Y-73300000D03* 136 | X137500000Y-75200000D03* 137 | X137500000Y-73300000D03* 138 | D14* 139 | X149100000Y-80275000D03* 140 | X151000000Y-80275000D03* 141 | X155550000Y-83500000D03* 142 | X157450000Y-83500000D03* 143 | X144450000Y-78650000D03* 144 | X146350000Y-78650000D03* 145 | D18* 146 | X135525000Y-68000000D03* 147 | X135525000Y-68500000D03* 148 | X135525000Y-69000000D03* 149 | X135525000Y-69500000D03* 150 | X135525000Y-70000000D03* 151 | D19* 152 | X136500000Y-70475000D03* 153 | X137000000Y-70475000D03* 154 | X137500000Y-70475000D03* 155 | D18* 156 | X138475000Y-70000000D03* 157 | X138475000Y-69500000D03* 158 | X138475000Y-69000000D03* 159 | X138475000Y-68500000D03* 160 | X138475000Y-68000000D03* 161 | D19* 162 | X137500000Y-67525000D03* 163 | X137000000Y-67525000D03* 164 | X136500000Y-67525000D03* 165 | D20* 166 | X135250000Y-60000000D03* 167 | X135250000Y-57500000D03* 168 | D21* 169 | X116390000Y-77504000D03* 170 | X116390000Y-75504000D03* 171 | D17* 172 | X119850000Y-83650000D03* 173 | X119850000Y-81750000D03* 174 | D22* 175 | X122750000Y-81750000D03* 176 | X122750000Y-82700000D03* 177 | X122750000Y-83650000D03* 178 | X124950000Y-83650000D03* 179 | X124950000Y-81750000D03* 180 | D23* 181 | X127100000Y-94450000D03* 182 | D24* 183 | X124750000Y-88900000D03* 184 | X122750000Y-88900000D03* 185 | D23* 186 | X120400000Y-94450000D03* 187 | D21* 188 | X113342000Y-61534000D03* 189 | X113342000Y-63534000D03* 190 | D25* 191 | X106485000Y-70731500D03* 192 | X106485000Y-63131500D03* 193 | X106485000Y-68081500D03* 194 | D26* 195 | X109160000Y-68231500D03* 196 | X109160000Y-67581500D03* 197 | X109160000Y-66931500D03* 198 | X109160000Y-66281500D03* 199 | X109160000Y-65631500D03* 200 | D27* 201 | X109035000Y-63831500D03* 202 | X109035000Y-70031500D03* 203 | D25* 204 | X106485000Y-65781500D03* 205 | D21* 206 | X119438000Y-75250000D03* 207 | X119438000Y-77250000D03* 208 | X116390000Y-73440000D03* 209 | X116390000Y-71440000D03* 210 | D28* 211 | X108700000Y-57700000D03* 212 | X106500000Y-57700000D03* 213 | X108700000Y-73450000D03* 214 | X106500000Y-73450000D03* 215 | X108700000Y-59950000D03* 216 | X106500000Y-59950000D03* 217 | D29* 218 | X164100000Y-91825000D03* 219 | X162100000Y-91825000D03* 220 | X160100000Y-91825000D03* 221 | X158100000Y-91825000D03* 222 | X156100000Y-91825000D03* 223 | D30* 224 | X166500000Y-94075000D03* 225 | X153700000Y-94075000D03* 226 | D17* 227 | X118600000Y-60250000D03* 228 | X118600000Y-62150000D03* 229 | X118600000Y-55000000D03* 230 | X118600000Y-56900000D03* 231 | D14* 232 | X112400000Y-59450000D03* 233 | X114300000Y-59450000D03* 234 | D17* 235 | X130600000Y-77150000D03* 236 | X130600000Y-75250000D03* 237 | X132850000Y-77150000D03* 238 | X132850000Y-75250000D03* 239 | D22* 240 | X114600000Y-67950000D03* 241 | X114600000Y-67000000D03* 242 | X114600000Y-66050000D03* 243 | X112400000Y-66050000D03* 244 | X112400000Y-67950000D03* 245 | D21* 246 | X144125000Y-58075000D03* 247 | X144125000Y-60075000D03* 248 | D29* 249 | X153750000Y-54800000D03* 250 | X155750000Y-54800000D03* 251 | X157750000Y-54800000D03* 252 | X159750000Y-54800000D03* 253 | X161750000Y-54800000D03* 254 | X163750000Y-54800000D03* 255 | D30* 256 | X151350000Y-52550000D03* 257 | X166150000Y-52550000D03* 258 | M02* 259 | -------------------------------------------------------------------------------- /pcb/gerbers/revA-F.Mask.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Soldermask,Top* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.2-stable) date 9/14/2017 6:50:28 PM* 5 | %MOMM*% 6 | G01* 7 | G04 APERTURE LIST* 8 | %ADD10C,0.100000*% 9 | %ADD11O,2.552400X1.252400*% 10 | %ADD12R,1.252400X2.552400*% 11 | %ADD13O,1.252400X2.552400*% 12 | %ADD14R,0.852400X1.452400*% 13 | %ADD15R,0.402400X1.452400*% 14 | %ADD16R,1.452400X0.402400*% 15 | %ADD17R,1.452400X0.852400*% 16 | %ADD18R,1.002400X0.402400*% 17 | %ADD19R,0.402400X1.002400*% 18 | %ADD20R,1.952400X1.152400*% 19 | %ADD21R,1.402400X1.152400*% 20 | %ADD22R,1.212400X0.802400*% 21 | %ADD23R,1.652400X3.552400*% 22 | %ADD24R,1.152400X3.652400*% 23 | %ADD25R,2.052400X1.952400*% 24 | %ADD26R,1.502400X0.552400*% 25 | %ADD27R,1.752400X2.252400*% 26 | %ADD28R,1.352400X1.352400*% 27 | %ADD29R,1.152400X5.652400*% 28 | %ADD30R,1.752400X3.152400*% 29 | %ADD31O,1.879600X2.184400*% 30 | %ADD32R,2.152400X2.152400*% 31 | %ADD33C,1.652400*% 32 | %ADD34C,0.952400*% 33 | %ADD35R,1.852400X1.852400*% 34 | %ADD36O,1.852400X1.852400*% 35 | G04 APERTURE END LIST* 36 | D10* 37 | D11* 38 | X147025000Y-63440000D03* 39 | X147025000Y-65440000D03* 40 | X147025000Y-67440000D03* 41 | X147025000Y-69440000D03* 42 | X147025000Y-71440000D03* 43 | X147025000Y-73440000D03* 44 | D12* 45 | X162775000Y-60450000D03* 46 | D13* 47 | X160775000Y-60450000D03* 48 | X158775000Y-60450000D03* 49 | X156775000Y-60450000D03* 50 | X154775000Y-60450000D03* 51 | X152775000Y-60450000D03* 52 | X150775000Y-60450000D03* 53 | X148775000Y-60450000D03* 54 | X148775000Y-76450000D03* 55 | X150775000Y-76450000D03* 56 | X152775000Y-76450000D03* 57 | X154775000Y-76450000D03* 58 | X156775000Y-76450000D03* 59 | X158775000Y-76450000D03* 60 | X160775000Y-76450000D03* 61 | X162775000Y-76450000D03* 62 | D14* 63 | X152825000Y-80275000D03* 64 | X154725000Y-80275000D03* 65 | D15* 66 | X130000000Y-61900000D03* 67 | X129500000Y-61900000D03* 68 | X129000000Y-61900000D03* 69 | X128500000Y-61900000D03* 70 | X128000000Y-61900000D03* 71 | X127500000Y-61900000D03* 72 | X127000000Y-61900000D03* 73 | X126500000Y-61900000D03* 74 | X126000000Y-61900000D03* 75 | X125500000Y-61900000D03* 76 | X125000000Y-61900000D03* 77 | X124500000Y-61900000D03* 78 | D16* 79 | X122900000Y-63500000D03* 80 | X122900000Y-64000000D03* 81 | X122900000Y-64500000D03* 82 | X122900000Y-65000000D03* 83 | X122900000Y-65500000D03* 84 | X122900000Y-66000000D03* 85 | X122900000Y-66500000D03* 86 | X122900000Y-67000000D03* 87 | X122900000Y-67500000D03* 88 | X122900000Y-68000000D03* 89 | X122900000Y-68500000D03* 90 | X122900000Y-69000000D03* 91 | D15* 92 | X124500000Y-70600000D03* 93 | X125000000Y-70600000D03* 94 | X125500000Y-70600000D03* 95 | X126000000Y-70600000D03* 96 | X126500000Y-70600000D03* 97 | X127000000Y-70600000D03* 98 | X127500000Y-70600000D03* 99 | X128000000Y-70600000D03* 100 | X128500000Y-70600000D03* 101 | X129000000Y-70600000D03* 102 | X129500000Y-70600000D03* 103 | X130000000Y-70600000D03* 104 | D16* 105 | X131600000Y-69000000D03* 106 | X131600000Y-68500000D03* 107 | X131600000Y-68000000D03* 108 | X131600000Y-67500000D03* 109 | X131600000Y-67000000D03* 110 | X131600000Y-66500000D03* 111 | X131600000Y-66000000D03* 112 | X131600000Y-65500000D03* 113 | X131600000Y-65000000D03* 114 | X131600000Y-64500000D03* 115 | X131600000Y-64000000D03* 116 | X131600000Y-63500000D03* 117 | D17* 118 | X134500000Y-62800000D03* 119 | X134500000Y-64700000D03* 120 | X117500000Y-67050000D03* 121 | X117500000Y-68950000D03* 122 | X143500000Y-52550000D03* 123 | X143500000Y-54450000D03* 124 | X140250000Y-52550000D03* 125 | X140250000Y-54450000D03* 126 | D14* 127 | X146550000Y-83500000D03* 128 | X148450000Y-83500000D03* 129 | X152700000Y-83500000D03* 130 | X150800000Y-83500000D03* 131 | D17* 132 | X119438000Y-71490000D03* 133 | X119438000Y-73390000D03* 134 | X113250000Y-72450000D03* 135 | X113250000Y-70550000D03* 136 | D14* 137 | X159575000Y-83575000D03* 138 | X161475000Y-83575000D03* 139 | D17* 140 | X135250000Y-75200000D03* 141 | X135250000Y-73300000D03* 142 | X137500000Y-75200000D03* 143 | X137500000Y-73300000D03* 144 | D14* 145 | X149100000Y-80275000D03* 146 | X151000000Y-80275000D03* 147 | X155550000Y-83500000D03* 148 | X157450000Y-83500000D03* 149 | X144450000Y-78650000D03* 150 | X146350000Y-78650000D03* 151 | D18* 152 | X135525000Y-68000000D03* 153 | X135525000Y-68500000D03* 154 | X135525000Y-69000000D03* 155 | X135525000Y-69500000D03* 156 | X135525000Y-70000000D03* 157 | D19* 158 | X136500000Y-70475000D03* 159 | X137000000Y-70475000D03* 160 | X137500000Y-70475000D03* 161 | D18* 162 | X138475000Y-70000000D03* 163 | X138475000Y-69500000D03* 164 | X138475000Y-69000000D03* 165 | X138475000Y-68500000D03* 166 | X138475000Y-68000000D03* 167 | D19* 168 | X137500000Y-67525000D03* 169 | X137000000Y-67525000D03* 170 | X136500000Y-67525000D03* 171 | D20* 172 | X135250000Y-60000000D03* 173 | X135250000Y-57500000D03* 174 | D21* 175 | X116390000Y-77504000D03* 176 | X116390000Y-75504000D03* 177 | D17* 178 | X119850000Y-83650000D03* 179 | X119850000Y-81750000D03* 180 | D22* 181 | X122750000Y-81750000D03* 182 | X122750000Y-82700000D03* 183 | X122750000Y-83650000D03* 184 | X124950000Y-83650000D03* 185 | X124950000Y-81750000D03* 186 | D23* 187 | X127100000Y-94450000D03* 188 | D24* 189 | X124750000Y-88900000D03* 190 | X122750000Y-88900000D03* 191 | D23* 192 | X120400000Y-94450000D03* 193 | D21* 194 | X113342000Y-61534000D03* 195 | X113342000Y-63534000D03* 196 | D25* 197 | X106485000Y-70731500D03* 198 | X106485000Y-63131500D03* 199 | X106485000Y-68081500D03* 200 | D26* 201 | X109160000Y-68231500D03* 202 | X109160000Y-67581500D03* 203 | X109160000Y-66931500D03* 204 | X109160000Y-66281500D03* 205 | X109160000Y-65631500D03* 206 | D27* 207 | X109035000Y-63831500D03* 208 | X109035000Y-70031500D03* 209 | D25* 210 | X106485000Y-65781500D03* 211 | D21* 212 | X119438000Y-75250000D03* 213 | X119438000Y-77250000D03* 214 | X116390000Y-73440000D03* 215 | X116390000Y-71440000D03* 216 | D28* 217 | X108700000Y-57700000D03* 218 | X106500000Y-57700000D03* 219 | X108700000Y-73450000D03* 220 | X106500000Y-73450000D03* 221 | X108700000Y-59950000D03* 222 | X106500000Y-59950000D03* 223 | D29* 224 | X164100000Y-91825000D03* 225 | X162100000Y-91825000D03* 226 | X160100000Y-91825000D03* 227 | X158100000Y-91825000D03* 228 | X156100000Y-91825000D03* 229 | D30* 230 | X166500000Y-94075000D03* 231 | X153700000Y-94075000D03* 232 | D17* 233 | X118600000Y-60250000D03* 234 | X118600000Y-62150000D03* 235 | X118600000Y-55000000D03* 236 | X118600000Y-56900000D03* 237 | D14* 238 | X112400000Y-59450000D03* 239 | X114300000Y-59450000D03* 240 | D17* 241 | X130600000Y-77150000D03* 242 | X130600000Y-75250000D03* 243 | X132850000Y-77150000D03* 244 | X132850000Y-75250000D03* 245 | D22* 246 | X114600000Y-67950000D03* 247 | X114600000Y-67000000D03* 248 | X114600000Y-66050000D03* 249 | X112400000Y-66050000D03* 250 | X112400000Y-67950000D03* 251 | D31* 252 | X133110000Y-96070000D03* 253 | X135650000Y-96070000D03* 254 | X138190000Y-96070000D03* 255 | X140730000Y-96070000D03* 256 | X143270000Y-96070000D03* 257 | X145810000Y-96070000D03* 258 | X148350000Y-96070000D03* 259 | X148350000Y-93530000D03* 260 | X145810000Y-93530000D03* 261 | X143270000Y-93530000D03* 262 | X140730000Y-93530000D03* 263 | X138190000Y-93530000D03* 264 | X135650000Y-93530000D03* 265 | X133110000Y-93530000D03* 266 | X133110000Y-90990000D03* 267 | X135650000Y-90990000D03* 268 | X138190000Y-90990000D03* 269 | X140730000Y-90990000D03* 270 | X143270000Y-90990000D03* 271 | X145810000Y-90990000D03* 272 | X148350000Y-90990000D03* 273 | D32* 274 | X124385000Y-57050000D03* 275 | X126671000Y-57050000D03* 276 | X128957000Y-57050000D03* 277 | X131243000Y-57050000D03* 278 | D21* 279 | X144125000Y-58075000D03* 280 | X144125000Y-60075000D03* 281 | D33* 282 | X106225000Y-75700000D03* 283 | X106225000Y-87700000D03* 284 | X112225000Y-87700000D03* 285 | X112225000Y-75700000D03* 286 | D34* 287 | X110475000Y-85700000D03* 288 | X110475000Y-81700000D03* 289 | X110475000Y-77700000D03* 290 | D29* 291 | X153750000Y-54800000D03* 292 | X155750000Y-54800000D03* 293 | X157750000Y-54800000D03* 294 | X159750000Y-54800000D03* 295 | X161750000Y-54800000D03* 296 | X163750000Y-54800000D03* 297 | D30* 298 | X151350000Y-52550000D03* 299 | X166150000Y-52550000D03* 300 | D35* 301 | X169375000Y-79125000D03* 302 | D36* 303 | X169375000Y-81665000D03* 304 | X169375000Y-84205000D03* 305 | X169375000Y-86745000D03* 306 | M02* 307 | -------------------------------------------------------------------------------- /firmware/background.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 24 | 31 | 32 | 35 | 42 | 43 | 44 | 62 | 64 | 65 | 67 | image/svg+xml 68 | 70 | 71 | 72 | 73 | 74 | 78 | 88 | 98 | 108 | 116 | 119 | 126 | 130 | 135 | 136 | 137 | Created by Gregor Cresnar 144 | from the Noun Project 151 | 152 | 163 | 173 | 182 | 192 | 198 | 200 | 204 | 205 | 209 | 210 | 214 | 215 | 216 | 220 | 221 | 229 | 232 | 237 | 242 | 247 | 252 | 253 | 258 | Created by Federico Panzano 265 | from the Noun Project 272 | 273 | 274 | 275 | -------------------------------------------------------------------------------- /pcb/revA-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # +3V3 5 | # 6 | DEF +3V3 #PWR 0 0 Y Y 1 F P 7 | F0 "#PWR" 0 -150 50 H I C CNN 8 | F1 "+3V3" 0 140 50 H V C CNN 9 | F2 "" 0 0 50 H V C CNN 10 | F3 "" 0 0 50 H V C CNN 11 | ALIAS +3.3V 12 | DRAW 13 | P 2 0 1 0 -30 50 0 100 N 14 | P 2 0 1 0 0 0 0 100 N 15 | P 2 0 1 0 0 100 30 50 N 16 | X +3V3 1 0 0 0 U 50 50 1 1 W N 17 | ENDDRAW 18 | ENDDEF 19 | # 20 | # 7servo 21 | # 22 | DEF 7servo U 0 40 Y Y 1 F N 23 | F0 "U" 250 400 60 H V C CNN 24 | F1 "7servo" 0 400 60 H V C CNN 25 | F2 "" 0 0 60 H V C CNN 26 | F3 "" 0 0 60 H V C CNN 27 | DRAW 28 | S -300 -400 400 -550 0 1 0 N 29 | S -200 300 250 -400 0 1 0 N 30 | X GND 1 450 250 200 L 50 50 1 1 I 31 | X GND 2 450 150 200 L 50 50 1 1 I 32 | X GND 3 450 50 200 L 50 50 1 1 I 33 | X GND 4 450 -50 200 L 50 50 1 1 I 34 | X GND 5 450 -150 200 L 50 50 1 1 I 35 | X GND 6 450 -250 200 L 50 50 1 1 I 36 | X GND 7 450 -350 200 L 50 50 1 1 I 37 | X VCC 8 -400 250 200 R 50 50 1 1 I 38 | X VCC 9 -400 150 200 R 50 50 1 1 I 39 | X VCC 10 -400 50 200 R 50 50 1 1 I 40 | X S6 20 250 -750 200 U 50 50 1 1 I 41 | X VCC 11 -400 -50 200 R 50 50 1 1 I 42 | X S7 21 350 -750 200 U 50 50 1 1 I 43 | X VCC 12 -400 -150 200 R 50 50 1 1 I 44 | X VCC 13 -400 -250 200 R 50 50 1 1 I 45 | X VCC 14 -400 -350 200 R 50 50 1 1 I 46 | X S1 15 -250 -750 200 U 50 50 1 1 I 47 | X S2 16 -150 -750 200 U 50 50 1 1 I 48 | X S3 17 -50 -750 200 U 50 50 1 1 I 49 | X S4 18 50 -750 200 U 50 50 1 1 I 50 | X S5 19 150 -750 200 U 50 50 1 1 I 51 | ENDDRAW 52 | ENDDEF 53 | # 54 | # AP2112K-3.3 55 | # 56 | DEF AP2112K-3.3 U 0 40 Y Y 1 F N 57 | F0 "U" 0 0 60 H V C CNN 58 | F1 "AP2112K-3.3" 0 1250 60 H V C CNN 59 | F2 "" 0 0 60 H V C CNN 60 | F3 "" 0 0 60 H V C CNN 61 | DRAW 62 | S -400 1050 300 450 0 1 0 N 63 | X IN 1 -600 950 200 R 50 50 1 1 I 64 | X GND 2 -600 550 200 R 50 50 1 1 I 65 | X EN 3 -600 750 200 R 50 50 1 1 I 66 | X P4 4 500 550 200 L 50 50 1 1 I 67 | X OUT 5 500 950 200 L 50 50 1 1 I 68 | ENDDRAW 69 | ENDDEF 70 | # 71 | # C 72 | # 73 | DEF C C 0 10 N Y 1 F N 74 | F0 "C" 25 100 50 H V L CNN 75 | F1 "C" 25 -100 50 H V L CNN 76 | F2 "" 38 -150 50 H V C CNN 77 | F3 "" 0 0 50 H V C CNN 78 | $FPLIST 79 | C? 80 | C_????_* 81 | C_???? 82 | SMD*_c 83 | Capacitor* 84 | $ENDFPLIST 85 | DRAW 86 | P 2 0 1 20 -80 -30 80 -30 N 87 | P 2 0 1 20 -80 30 80 30 N 88 | X ~ 1 0 150 110 D 40 40 1 1 P 89 | X ~ 2 0 -150 110 U 40 40 1 1 P 90 | ENDDRAW 91 | ENDDEF 92 | # 93 | # CONN_01X02 94 | # 95 | DEF CONN_01X02 P 0 40 Y N 1 F N 96 | F0 "P" 0 150 50 H V C CNN 97 | F1 "CONN_01X02" 100 0 50 V V C CNN 98 | F2 "" 0 0 50 H V C CNN 99 | F3 "" 0 0 50 H V C CNN 100 | $FPLIST 101 | Pin_Header_Straight_1X02 102 | Pin_Header_Angled_1X02 103 | Socket_Strip_Straight_1X02 104 | Socket_Strip_Angled_1X02 105 | $ENDFPLIST 106 | DRAW 107 | S -50 -45 10 -55 0 1 0 N 108 | S -50 55 10 45 0 1 0 N 109 | S -50 100 50 -100 0 1 0 N 110 | X P1 1 -200 50 150 R 50 50 1 1 P 111 | X P2 2 -200 -50 150 R 50 50 1 1 P 112 | ENDDRAW 113 | ENDDEF 114 | # 115 | # CONN_01X04 116 | # 117 | DEF CONN_01X04 P 0 40 Y N 1 F N 118 | F0 "P" 0 250 50 H V C CNN 119 | F1 "CONN_01X04" 100 0 50 V V C CNN 120 | F2 "" 0 0 50 H V C CNN 121 | F3 "" 0 0 50 H V C CNN 122 | $FPLIST 123 | Pin_Header_Straight_1X04 124 | Pin_Header_Angled_1X04 125 | Socket_Strip_Straight_1X04 126 | Socket_Strip_Angled_1X04 127 | $ENDFPLIST 128 | DRAW 129 | S -50 -145 10 -155 0 1 0 N 130 | S -50 -45 10 -55 0 1 0 N 131 | S -50 55 10 45 0 1 0 N 132 | S -50 155 10 145 0 1 0 N 133 | S -50 200 50 -200 0 1 0 N 134 | X P1 1 -200 150 150 R 50 50 1 1 P 135 | X P2 2 -200 50 150 R 50 50 1 1 P 136 | X P3 3 -200 -50 150 R 50 50 1 1 P 137 | X P4 4 -200 -150 150 R 50 50 1 1 P 138 | ENDDRAW 139 | ENDDEF 140 | # 141 | # CONN_01X05 142 | # 143 | DEF CONN_01X05 P 0 40 Y N 1 F N 144 | F0 "P" 0 300 50 H V C CNN 145 | F1 "CONN_01X05" 100 0 50 V V C CNN 146 | F2 "" 0 0 50 H V C CNN 147 | F3 "" 0 0 50 H V C CNN 148 | $FPLIST 149 | Pin_Header_Straight_1X05 150 | Pin_Header_Angled_1X05 151 | Socket_Strip_Straight_1X05 152 | Socket_Strip_Angled_1X05 153 | $ENDFPLIST 154 | DRAW 155 | S -50 -195 10 -205 0 1 0 N 156 | S -50 -95 10 -105 0 1 0 N 157 | S -50 5 10 -5 0 1 0 N 158 | S -50 105 10 95 0 1 0 N 159 | S -50 205 10 195 0 1 0 N 160 | S -50 250 50 -250 0 1 0 N 161 | X P1 1 -200 200 150 R 50 50 1 1 P 162 | X P2 2 -200 100 150 R 50 50 1 1 P 163 | X P3 3 -200 0 150 R 50 50 1 1 P 164 | X P4 4 -200 -100 150 R 50 50 1 1 P 165 | X P5 5 -200 -200 150 R 50 50 1 1 P 166 | ENDDRAW 167 | ENDDEF 168 | # 169 | # CONN_01X06 170 | # 171 | DEF CONN_01X06 P 0 40 Y N 1 F N 172 | F0 "P" 0 350 50 H V C CNN 173 | F1 "CONN_01X06" 100 0 50 V V C CNN 174 | F2 "" 0 0 50 H V C CNN 175 | F3 "" 0 0 50 H V C CNN 176 | $FPLIST 177 | Pin_Header_Straight_1X06 178 | Pin_Header_Angled_1X06 179 | Socket_Strip_Straight_1X06 180 | Socket_Strip_Angled_1X06 181 | $ENDFPLIST 182 | DRAW 183 | S -50 -245 10 -255 0 1 0 N 184 | S -50 -145 10 -155 0 1 0 N 185 | S -50 -45 10 -55 0 1 0 N 186 | S -50 55 10 45 0 1 0 N 187 | S -50 155 10 145 0 1 0 N 188 | S -50 255 10 245 0 1 0 N 189 | S -50 300 50 -300 0 1 0 N 190 | X P1 1 -200 250 150 R 50 50 1 1 P 191 | X P2 2 -200 150 150 R 50 50 1 1 P 192 | X P3 3 -200 50 150 R 50 50 1 1 P 193 | X P4 4 -200 -50 150 R 50 50 1 1 P 194 | X P5 5 -200 -150 150 R 50 50 1 1 P 195 | X P6 6 -200 -250 150 R 50 50 1 1 P 196 | ENDDRAW 197 | ENDDEF 198 | # 199 | # Crystal 200 | # 201 | DEF Crystal Y 0 40 N N 1 F N 202 | F0 "Y" 0 150 50 H V C CNN 203 | F1 "Crystal" 0 -150 50 H V C CNN 204 | F2 "" 0 0 50 H V C CNN 205 | F3 "" 0 0 50 H V C CNN 206 | $FPLIST 207 | Crystal_* 208 | $ENDFPLIST 209 | DRAW 210 | S -50 100 50 -100 0 1 12 N 211 | P 2 0 1 12 -100 -50 -100 50 N 212 | P 2 0 1 12 100 -50 100 50 N 213 | X 1 1 -150 0 50 R 40 40 1 1 P 214 | X 2 2 150 0 50 L 40 40 1 1 P 215 | ENDDRAW 216 | ENDDEF 217 | # 218 | # D 219 | # 220 | DEF D D 0 40 N N 1 F N 221 | F0 "D" 0 100 50 H V C CNN 222 | F1 "D" 0 -100 50 H V C CNN 223 | F2 "" 0 0 50 H V C CNN 224 | F3 "" 0 0 50 H V C CNN 225 | $FPLIST 226 | Diode_* 227 | D-Pak_TO252AA 228 | *SingleDiode 229 | *_Diode_* 230 | *SingleDiode* 231 | $ENDFPLIST 232 | DRAW 233 | P 2 0 1 6 -50 50 -50 -50 N 234 | P 3 0 1 0 50 50 -50 0 50 -50 F 235 | X K 1 -150 0 100 R 50 50 1 1 P 236 | X A 2 150 0 100 L 50 50 1 1 P 237 | ENDDRAW 238 | ENDDEF 239 | # 240 | # ESP-12E 241 | # 242 | DEF ESP-12E U 0 40 Y Y 1 F N 243 | F0 "U" 0 -100 50 H V C CNN 244 | F1 "ESP-12E" 0 100 50 H V C CNN 245 | F2 "" 0 0 50 H I C CNN 246 | F3 "" 0 0 50 H I C CNN 247 | $FPLIST 248 | ESP-12E 249 | $ENDFPLIST 250 | DRAW 251 | S -600 -600 600 600 1 0 0 N 252 | X REST 1 -900 300 300 R 50 50 1 1 I 253 | X ADC 2 -900 200 300 R 50 50 1 1 P 254 | X CH_PD 3 -900 100 300 R 50 50 1 1 I 255 | X GPIO16 4 -900 0 300 R 50 50 1 1 B 256 | X GPIO14 5 -900 -100 300 R 50 50 1 1 B 257 | X GPIO12 6 -900 -200 300 R 50 50 1 1 B 258 | X GPIO13 7 -900 -300 300 R 50 50 1 1 B 259 | X VCC 8 -900 -400 300 R 50 50 1 1 W 260 | X CS0 9 -250 -900 300 U 50 50 1 1 B 261 | X MISO 10 -150 -900 300 U 50 50 1 1 B 262 | X GPIO5 20 900 100 300 L 50 50 1 1 B 263 | X GPIO9 11 -50 -900 300 U 50 50 1 1 B 264 | X RXD 21 900 200 300 L 50 50 1 1 I 265 | X GPIO10 12 50 -900 300 U 50 50 1 1 B 266 | X TXD 22 900 300 300 L 50 50 1 1 O 267 | X MOSI 13 150 -900 300 U 50 50 1 1 B 268 | X SCLK 14 250 -900 300 U 50 50 1 1 B 269 | X GND 15 900 -400 300 L 50 50 1 1 W 270 | X GPIO15 16 900 -300 300 L 50 50 1 1 B 271 | X GPIO2 17 900 -200 300 L 50 50 1 1 B 272 | X GPIO0 18 900 -100 300 L 50 50 1 1 B 273 | X GPIO4 19 900 0 300 L 50 50 1 1 B 274 | ENDDRAW 275 | ENDDEF 276 | # 277 | # GND 278 | # 279 | DEF GND #PWR 0 0 Y Y 1 F P 280 | F0 "#PWR" 0 -250 50 H I C CNN 281 | F1 "GND" 0 -150 50 H V C CNN 282 | F2 "" 0 0 50 H V C CNN 283 | F3 "" 0 0 50 H V C CNN 284 | DRAW 285 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 286 | X GND 1 0 0 0 D 50 50 1 1 W N 287 | ENDDRAW 288 | ENDDEF 289 | # 290 | # LED 291 | # 292 | DEF LED D 0 40 Y N 1 F N 293 | F0 "D" 0 100 50 H V C CNN 294 | F1 "LED" 0 -100 50 H V C CNN 295 | F2 "" 0 0 50 H V C CNN 296 | F3 "" 0 0 50 H V C CNN 297 | $FPLIST 298 | LED-3MM 299 | LED-5MM 300 | LED-10MM 301 | LED-0603 302 | LED-0805 303 | LED-1206 304 | LEDV 305 | $ENDFPLIST 306 | DRAW 307 | P 2 0 1 0 -50 50 -50 -50 N 308 | P 3 0 1 0 -80 -25 -125 -65 -120 -40 N 309 | P 3 0 1 0 -65 -40 -110 -80 -105 -55 N 310 | P 3 0 1 0 50 50 -50 0 50 -50 F 311 | X K 1 -200 0 150 R 40 40 1 1 P 312 | X A 2 200 0 150 L 40 40 1 1 P 313 | ENDDRAW 314 | ENDDEF 315 | # 316 | # LIS3DH 317 | # 318 | DEF LIS3DH U 0 40 Y Y 1 F N 319 | F0 "U" 50 250 60 H V C CNN 320 | F1 "LIS3DH" -450 250 60 H V C CNN 321 | F2 "" -275 0 60 H V C CNN 322 | F3 "" -275 0 60 H V C CNN 323 | DRAW 324 | S -425 150 475 -525 0 1 0 N 325 | X Vdd_IO 1 -625 75 200 R 50 50 1 1 W 326 | X NC 2 -625 0 200 R 50 50 1 1 N 327 | X NC 3 -625 -75 200 R 50 50 1 1 N 328 | X SCL/SPC 4 -625 -150 200 R 50 50 1 1 B 329 | X GND 5 -625 -225 200 R 50 50 1 1 W 330 | X SDA/SDI/SDO 6 -625 -300 200 R 50 50 1 1 B 331 | X SDO/SA0 7 -625 -375 200 R 50 50 1 1 B 332 | X CS 8 -625 -450 200 R 50 50 1 1 B 333 | X INT2 9 675 -450 200 L 50 50 1 1 B 334 | X RES 10 675 -375 200 L 50 50 1 1 B 335 | X INT1 11 675 -300 200 L 50 50 1 1 B 336 | X GND 12 675 -225 200 L 50 50 1 1 W 337 | X ADC3 13 675 -150 200 L 50 50 1 1 B 338 | X Vdd 14 675 -75 200 L 50 50 1 1 W 339 | X ADC2 15 675 0 200 L 50 50 1 1 B 340 | X ADC1 16 675 75 200 L 50 50 1 1 B 341 | ENDDRAW 342 | ENDDEF 343 | # 344 | # MCP73831 345 | # 346 | DEF MCP73831 U 0 40 Y Y 1 F N 347 | F0 "U" 0 0 60 H V C CNN 348 | F1 "MCP73831" -50 700 60 H V C CNN 349 | F2 "" 0 0 60 H V C CNN 350 | F3 "" 0 0 60 H V C CNN 351 | DRAW 352 | S -250 600 200 100 0 1 0 N 353 | X STAT 1 -450 200 200 R 50 50 1 1 I 354 | X VSS 2 400 200 200 L 50 50 1 1 I 355 | X VBAT 3 400 500 200 L 50 50 1 1 I 356 | X VDD 4 -450 500 200 R 50 50 1 1 I 357 | X PROG 5 400 350 200 L 50 50 1 1 I 358 | ENDDRAW 359 | ENDDEF 360 | # 361 | # R 362 | # 363 | DEF R R 0 0 N Y 1 F N 364 | F0 "R" 80 0 50 V V C CNN 365 | F1 "R" 0 0 50 V V C CNN 366 | F2 "" -70 0 50 V V C CNN 367 | F3 "" 0 0 50 H V C CNN 368 | $FPLIST 369 | R_* 370 | Resistor_* 371 | $ENDFPLIST 372 | DRAW 373 | S -40 -100 40 100 0 1 10 N 374 | X ~ 1 0 150 50 D 50 50 1 1 P 375 | X ~ 2 0 -150 50 U 50 50 1 1 P 376 | ENDDRAW 377 | ENDDEF 378 | # 379 | # SAMD20G14A-M 380 | # 381 | DEF SAMD20G14A-M U 0 40 Y Y 1 F N 382 | F0 "U" -1650 1650 50 H V C CNN 383 | F1 "SAMD20G14A-M" 1450 -1650 50 H V C CNN 384 | F2 "QFN48" 0 -1150 50 H V C CIN 385 | F3 "" 0 250 50 H V C CNN 386 | ALIAS SAMD20G15A-M SAMD20G16A-M SAMD20G17A-M SAMD20G18A-M 387 | $FPLIST 388 | QFN48 389 | $ENDFPLIST 390 | DRAW 391 | S -1700 1600 1700 -1600 0 1 10 f 392 | X XIN32/TC2WO0/SERCOM1P0/PA00 1 1850 1450 150 L 40 40 1 1 B 393 | X XOUT32/TC2WO1/SERCOM1P1/PA01 2 1850 1350 150 L 40 40 1 1 B 394 | X VOUT/Y0/AIN0/PA02 3 1850 1250 150 L 40 40 1 1 B 395 | X Y1/AIN1/VREFA/VREFP/PA03 4 1850 1150 150 L 40 40 1 1 B 396 | X GNDANA 5 250 -1750 150 U 40 40 1 1 W 397 | X VDDANA 6 250 1750 150 D 40 40 1 1 W 398 | X PB08/AIN2/Y14/SERCOM4P0/TC4WO0 7 -1850 1050 150 R 40 40 1 1 B 399 | X PB09/AIN3/Y15/SERCOM4P1/TC4WO1 8 -1850 950 150 R 40 40 1 1 B 400 | X TC0WO0/SERCOM0P0/Y2/AIN0/AIN4/VREFB/PA04 9 1850 1050 150 L 40 40 1 1 B 401 | X TC0W01/SERCOM0P1/Y3/AIN1/AIN5/PA05 10 1850 950 150 L 40 40 1 1 B 402 | X PB11/SERCOM4P3/TC5WO1/GCLKIO5 20 -1850 750 150 R 40 40 1 1 B 403 | X GCLKIO5/TC7WO1/SERCOM3P3/SERCOM5P3/X9/PA21 30 1850 -650 150 L 40 40 1 1 B 404 | X ~RESET~ 40 -1850 1450 150 R 40 40 1 1 I 405 | X TC1WO0/SERCOM0P2/Y4/AIN2/AIN6/PA06 11 1850 850 150 L 40 40 1 1 B 406 | X ACCMP0/TC2WO0/SERCOM4P0/SERCOM2P0/PA12 21 1850 250 150 L 40 40 1 1 B 407 | X GCLKIO6/TC4WO0/SERCOM5P0/SERCOM3P0/X10/PA22 31 1850 -750 150 L 40 40 1 1 B 408 | X GCLKIO0/PA28 41 1850 -1250 150 L 40 40 1 1 B 409 | X TC1WO1/SERCOM0P3/Y5/AIN3/AIN7/PA07 12 1850 750 150 L 40 40 1 1 B 410 | X ACCMP1/TC2WO1/SERCOM4P1/SERCOM2P1/PA13 22 1850 150 150 L 40 40 1 1 B 411 | X GCLKIO7/TC4WO1/SERCOM5P1/SERCOM3P1/X11/PA23 32 1850 -850 150 L 40 40 1 1 B 412 | X GND 42 -100 -1750 150 U 40 40 1 1 W 413 | X TC0WO0/SERCOM2P0/SERCOM0P0/X0/AIN16/NMI/PA08 13 1850 650 150 L 40 40 1 1 B 414 | X XIN/GCLKIO0/TC3WO0/SERCOM4P2/SERCOM2P2/PA14 23 1850 50 150 L 40 40 1 1 B 415 | X TC5WO0/SERCOM5P2/SERCOM3P2/PA24 33 1850 -950 150 L 40 40 1 1 B 416 | X VDDCORE 43 -400 1750 150 D 40 40 1 1 P 417 | X TC0WO1/SERCOM2P1/SERCOM0P1/X1/AIN17/PA09 14 1850 550 150 L 40 40 1 1 B 418 | X XOUT/GCLKIO1/TC3WO1/SERCOM4P3/SERCOM2P3/PA15 24 1850 -50 150 L 40 40 1 1 B 419 | X TC5WO1/SERCOM5P3/SERCOM3P3/PA25 34 1850 -1050 150 L 40 40 1 1 B 420 | X VDDIN 44 -600 1750 150 D 40 40 1 1 W 421 | X GCLKIO4/TC1WO0/SERCOM2P2/SERCOM0P2/X2/AIN18/PA10 15 1850 450 150 L 40 40 1 1 B 422 | X GCLKIO2/TC2WO0/SERCOM3P0/SERCOM1P0/X4/PA16 25 1850 -150 150 L 40 40 1 1 B 423 | X GND 35 -200 -1750 150 U 40 40 1 1 W 424 | X GCLKIO0/SWCLK/TC1WO0/SERCOM1P2/PA30 45 1850 -1350 150 L 40 40 1 1 B 425 | X GCLKIO5/TC1WO1/SERCOM2P3/SERCOM0P3/X3/AIN19/PA11 16 1850 350 150 L 40 40 1 1 B 426 | X GCLKIO3/TC2WO1/SERCOM3P1/SERCOM1P1/X5/PA17 26 1850 -250 150 L 40 40 1 1 B 427 | X VDDIO 36 -100 1750 150 D 40 40 1 1 W 428 | X SWDIO/TC1WO1/SERCOM1P3/PA31 46 1850 -1450 150 L 40 40 1 1 B 429 | X VDDIO 17 -200 1750 150 D 40 40 1 1 W 430 | X ACCMP0/TC3WO0/SERCOM3P2/SERCOM1P2/X6/PA18 27 1850 -350 150 L 40 40 1 1 B 431 | X PB22/SERCOM5P2/TC7WO0/GCLKIO0 37 -1850 650 150 R 40 40 1 1 B 432 | X PB02/AIN10/Y8/SERCOM5P0/TC6WO0 47 -1850 1250 150 R 40 40 1 1 B 433 | X GND 18 -300 -1750 150 U 40 40 1 1 W 434 | X ACCMP1/TC3WO1/SERCOM3P3/SERCOM1P3/X7/PA19 28 1850 -450 150 L 40 40 1 1 B 435 | X PB23/SERCOM5P3/TC7WO1/GCLKIO1 38 -1850 550 150 R 40 40 1 1 B 436 | X PB03/AIN11/Y9/SERCOM5P1/TC6WO1 48 -1850 1150 150 R 40 40 1 1 B 437 | X PB10/SECOM4P2/TC5WO0/GCLKIO4 19 -1850 850 150 R 40 40 1 1 B 438 | X GCLKIO4/TC7WO0/SERCOM3P2/SERCOM5P2/X8/PA20 29 1850 -550 150 L 40 40 1 1 B 439 | X GCLKIO0/PA27 39 1850 -1150 150 L 40 40 1 1 B 440 | ENDDRAW 441 | ENDDEF 442 | # 443 | # SPST 444 | # 445 | DEF SPST SW 0 0 N Y 1 F N 446 | F0 "SW" 0 100 50 H V C CNN 447 | F1 "SPST" 0 -100 50 H V C CNN 448 | F2 "" 0 0 50 H V C CNN 449 | F3 "" 0 0 50 H V C CNN 450 | DRAW 451 | C -150 0 50 0 0 0 N 452 | C 150 0 50 0 0 0 N 453 | P 2 0 0 0 -100 0 100 100 N 454 | X 1 1 -500 0 300 R 50 50 1 1 I 455 | X 2 2 500 0 300 L 50 50 1 1 I 456 | ENDDRAW 457 | ENDDEF 458 | # 459 | # USB_OTG 460 | # 461 | DEF USB_OTG P 0 40 Y Y 1 F N 462 | F0 "P" 325 -125 50 H V C CNN 463 | F1 "USB_OTG" 0 200 50 H V C CNN 464 | F2 "" -50 -100 50 V V C CNN 465 | F3 "" -50 -100 50 V V C CNN 466 | $FPLIST 467 | USB* 468 | $ENDFPLIST 469 | DRAW 470 | S -250 -150 250 150 0 1 0 N 471 | S -205 -150 -195 -120 0 1 0 N 472 | S -105 -150 -95 -120 0 1 0 N 473 | S -5 -150 5 -120 0 1 0 N 474 | S 95 -150 105 -120 0 1 0 N 475 | S 195 -150 205 -120 0 1 0 N 476 | X VCC 1 -200 -300 150 U 50 50 1 1 w 477 | X D- 2 -100 -300 150 U 50 50 1 1 P 478 | X D+ 3 0 -300 150 U 50 50 1 1 P 479 | X ID 4 100 -300 150 U 50 50 1 1 W 480 | X GND 5 200 -300 150 U 50 50 1 1 W 481 | X shield 6 400 100 150 L 50 50 1 1 P 482 | ENDDRAW 483 | ENDDEF 484 | # 485 | # ili9341-18p 486 | # 487 | DEF ili9341-18p U 0 40 Y Y 1 F N 488 | F0 "U" 0 -100 60 H V C CNN 489 | F1 "ili9341-18p" 100 850 60 H V C CNN 490 | F2 "" 0 0 60 H V C CNN 491 | F3 "" 0 0 60 H V C CNN 492 | DRAW 493 | S -100 750 250 -1050 0 1 0 N 494 | X GND 1 450 700 200 L 50 50 1 1 I 495 | X RST 2 450 600 200 L 50 50 1 1 I 496 | X SCL 3 450 500 200 L 50 50 1 1 I 497 | X RS 4 450 400 200 L 50 50 1 1 I 498 | X CS 5 450 300 200 L 50 50 1 1 I 499 | X SDA 6 450 200 200 L 50 50 1 1 I 500 | X SDO 7 450 100 200 L 50 50 1 1 I 501 | X GND 8 450 0 200 L 50 50 1 1 I 502 | X VCC 9 450 -100 200 L 50 50 1 1 I 503 | X A 10 450 -200 200 L 50 50 1 1 I 504 | X K1 11 450 -300 200 L 50 50 1 1 I 505 | X K2 12 450 -400 200 L 50 50 1 1 I 506 | X K3 13 450 -500 200 L 50 50 1 1 I 507 | X K4 14 450 -600 200 L 50 50 1 1 I 508 | X XL 15 450 -700 200 L 50 50 1 1 I 509 | X YU 16 450 -800 200 L 50 50 1 1 I 510 | X XR 17 450 -900 200 L 50 50 1 1 I 511 | X YD 18 450 -1000 200 L 50 50 1 1 I 512 | ENDDRAW 513 | ENDDEF 514 | # 515 | #End Library 516 | -------------------------------------------------------------------------------- /firmware/TyroBot/TyroBot.cpp: -------------------------------------------------------------------------------- 1 | /* TyroBot v1.0.0 2 | * copyright (c) 2017 Tyro Electronics 3 | * written by Tyler Spadgenske 4 | * GNU General Public License 3.0 5 | */ 6 | 7 | #include "Arduino.h" 8 | #include "TyroBot.h" 9 | 10 | TyroBot::TyroBot(Adafruit_ILI9341 *tft, Adafruit_LIS3DH *lis) 11 | { 12 | _tft = tft; 13 | _lis = lis; 14 | 15 | int mode = 1; 16 | //battery variables 17 | float voltage = 0; 18 | int batMode = 3; 19 | long theTime = 0; 20 | long timeMultiple = 1; 21 | 22 | //self program variables 23 | uint32_t colors[5] = {ILI9341_ORANGE, ILI9341_ORANGE, ILI9341_ORANGE, ILI9341_ORANGE, ILI9341_RED}; 24 | int program[8] = {0, 0, 0, 0, 0, 0, 0, 0}; 25 | int key = 0; 26 | 27 | //touchscreen 28 | x = 0; 29 | y = 0; 30 | xVal = 0; 31 | yVal = 0; 32 | TS_MINX = 700; 33 | TS_MINY = 805; 34 | TS_MAXX = 218; 35 | TS_MAXY = 155; 36 | 37 | //Servo Pins 38 | LEFT_LEG = 5; 39 | LEFT_FOOT = 11; 40 | RIGHT_LEG = 13; 41 | RIGHT_FOOT = 10; 42 | HEAD = 2; 43 | RIGHT_ARM = 12; 44 | LEFT_ARM = 6; 45 | 46 | //Step Constants 47 | LIFT_HEIGHT = 6;//Decrease if steps are too big and the robot is falling over. Increase of the robot is dragging his feet 48 | STEP_DISTANCE = 25; //Decrease if robot is tipping over or not walking straight increase of robot is taking too tiny steps 49 | STEP_SPEED = 250; //in milliseconds 50 | 51 | LEFT_TRIM = 50; //If the robot is walking to the left decrease this number in multiples of 5 52 | RIGHT_TRIM = 140; //If the robot is walking to the right decrease this number in multiples of 5 53 | 54 | //Servo Positions when robot is at rest 55 | LL_CENTER = 90; 56 | LF_CENTER = 80; 57 | RL_CENTER = 110; 58 | RF_CENTER = 70; 59 | HEAD_CENTER = 50; 60 | RIGHT_ARM_CENTER = 90; 61 | LEFT_ARM_CENTER = 90; 62 | 63 | //Setup Servos 64 | Servo ll; 65 | Servo lf; 66 | Servo rl; 67 | Servo rf; 68 | Servo head; 69 | Servo leftArm; 70 | Servo rightArm; 71 | 72 | cali = true; 73 | 74 | //Accelerometer 75 | maxX = 1500; 76 | minX = -1000; 77 | level = false; 78 | 79 | //wifi 80 | char ip[50]; 81 | char rssi[50]; 82 | bool connection = false; 83 | 84 | //IFTT 85 | char token; 86 | } 87 | 88 | void TyroBot::settings() { 89 | SerialUSB.println("settings"); 90 | _tft->begin(); 91 | _tft->setRotation(1); 92 | _tft->fillScreen(ILI9341_BLACK); 93 | //draw text 94 | _tft->setCursor(10, 10); 95 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(2); 96 | _tft->println("Settings"); 97 | _tft->drawLine(0, 35, 320, 35, ILI9341_WHITE); 98 | _tft->setCursor(10, 50); 99 | _tft->println("IP:"); 100 | _tft->setCursor(55, 50); 101 | _tft->println(ip); 102 | _tft->drawLine(0, 75, 320, 75, ILI9341_WHITE); 103 | _tft->setCursor(10, 90); 104 | _tft->println("dbm:"); 105 | _tft->setCursor(70, 90); 106 | _tft->println(rssi); 107 | _tft->drawLine(0, 115, 320, 115, ILI9341_WHITE); 108 | _tft->setCursor(10, 130); 109 | _tft->println("Firmware:"); 110 | _tft->setCursor(140, 130); 111 | _tft->println("v1.0.0"); 112 | _tft->drawLine(0, 160, 320, 160, ILI9341_WHITE); 113 | while (1) { 114 | if (checkForPress() == true) { 115 | TyroBotMenu(); 116 | return; 117 | } 118 | } 119 | } 120 | 121 | void TyroBot::connectWifi(char ssid[], char pass[]) { 122 | _tft->begin(); 123 | _tft->setRotation(1); 124 | _tft->fillScreen(ILI9341_BLACK); 125 | //draw text 126 | _tft->setCursor(5, 5); 127 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(1); 128 | _tft->println("Starting..."); 129 | SerialUSB.begin(9600); //Open up the serial port for the console 130 | SerialUSB.println("TyroBot"); 131 | delay(1000); 132 | Serial.begin(9600); //open up the serial port for the wifi module 133 | Serial.write(1); 134 | Serial.write(ssid); 135 | Serial.write(","); 136 | Serial.write(pass); 137 | while (1) { 138 | if (Serial.available()) { 139 | delay(100); //allows all serial sent to be received together 140 | String credentials = Serial.readString(); 141 | if (credentials[0] == 'N') { 142 | SerialUSB.print("Could not connect to "); 143 | SerialUSB.println(ssid); 144 | connection = false; 145 | rssi[1] = '0'; 146 | ip[0] = 'N'; 147 | ip[1] = 'o'; 148 | ip[2] = ' '; 149 | ip[3] = 'c'; 150 | ip[4] = 'o'; 151 | ip[5] = 'n'; 152 | ip[6] = 'n'; 153 | ip[7] = 'e'; 154 | ip[8] = 'c'; 155 | ip[9] = 't'; 156 | ip[10] = 'i'; 157 | ip[11] = 'o'; 158 | ip[12] = 'n'; 159 | break; 160 | } 161 | else { 162 | int ind1; 163 | String rssiStr; 164 | String ipStr; 165 | ind1 = credentials.indexOf(','); 166 | rssiStr = credentials.substring(0, ind1); 167 | ipStr = credentials.substring(ind1 + 1); 168 | ipStr.toCharArray(ip, 50); 169 | rssiStr.toCharArray(rssi, 50); 170 | SerialUSB.print("IP:"); 171 | SerialUSB.println(ip); 172 | SerialUSB.print("RSSI:"); 173 | SerialUSB.println(rssi); 174 | connection = true; 175 | pinMode(8, OUTPUT); 176 | digitalWrite(8,1); 177 | break; 178 | } 179 | } 180 | } 181 | } 182 | void TyroBot::face() { 183 | _tft->begin(); 184 | _tft->setRotation(2); 185 | _tft->fillScreen(ILI9341_BLACK); 186 | _tft->fillCircle(100, 60, 40, ILI9341_ORANGE); 187 | _tft->fillCircle(100, 250, 40, ILI9341_ORANGE); 188 | } 189 | 190 | void TyroBot::TyroBotMenu() { 191 | _tft->begin(); 192 | _tft->setRotation(1); 193 | 194 | //draw outline boxes 195 | _tft->fillScreen(ILI9341_BLACK); 196 | _tft->fillRect(0, 0, 160, 155, ILI9341_BLUE); 197 | _tft->fillRect(160, 0, 160, 155, ILI9341_RED); 198 | _tft->fillRect(240, 155, 80, 85, ILI9341_DARKGREY); 199 | _tft->fillRect(0, 155, 80, 85, ILI9341_WHITE); 200 | 201 | //draw text 202 | _tft->setCursor(27, 25); 203 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(6); 204 | _tft->println(""); 205 | _tft->setCursor(15, 100); 206 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(2); 207 | _tft->println("Run Program"); 208 | 209 | //draw arrows 210 | _tft->fillRect(232, 20, 16, 40, ILI9341_WHITE); 211 | _tft->fillRect(232, 90, 16, 40, ILI9341_WHITE); 212 | _tft->fillRect(185, 68, 40, 16, ILI9341_WHITE); 213 | _tft->fillRect(254, 68, 40, 16, ILI9341_WHITE); 214 | _tft->fillTriangle(240, 12, 256, 28, 224, 28, ILI9341_WHITE); 215 | _tft->fillTriangle(240, 140, 256, 124, 224, 124, ILI9341_WHITE); 216 | _tft->fillTriangle(176, 75, 192, 91, 192, 59, ILI9341_WHITE); 217 | _tft->fillTriangle(302, 75, 286, 91, 286, 59, ILI9341_WHITE); 218 | 219 | //draw settings 220 | _tft->fillRect(254, 173, 54, 4, ILI9341_BLACK); 221 | _tft->fillRect(254, 187, 54, 4, ILI9341_BLACK); 222 | _tft->fillRect(254, 201, 54, 4, ILI9341_BLACK); 223 | _tft->fillCircle(264, 175, 5, ILI9341_BLACK); 224 | _tft->fillCircle(294, 189, 5, ILI9341_BLACK); 225 | _tft->fillCircle(273, 203, 5, ILI9341_BLACK); 226 | _tft->setCursor(258, 218); 227 | _tft->setTextColor(ILI9341_BLACK); _tft->setTextSize(1); 228 | _tft->println("Settings"); 229 | 230 | //draw exit 231 | _tft->fillCircle(40, 197, 30, ILI9341_RED); 232 | _tft->setCursor(18, 190); 233 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(2); 234 | _tft->println("Exit"); 235 | 236 | TyroBotWifi(rssi); 237 | TyroBotBattery(batMode); 238 | } 239 | 240 | void TyroBot::TyroBotBattery(int level) { 241 | _tft->fillRect(185, 180, 30, 50, ILI9341_WHITE); 242 | _tft->fillRect(190, 172, 20, 15, ILI9341_WHITE); 243 | _tft->setCursor(175, 231); 244 | _tft->setTextColor(ILI9341_BLACK); _tft->setTextSize(1); 245 | _tft->println("Complete."); 246 | if (level >= 4) { 247 | _tft->fillRect(185, 180, 30, 50, ILI9341_GREEN); 248 | _tft->fillRect(190, 172, 20, 15, ILI9341_GREEN); 249 | _tft->setCursor(175, 231); 250 | _tft->setTextColor(ILI9341_GREEN); _tft->setTextSize(1); 251 | _tft->println("Complete."); 252 | } 253 | if (level >= 3) { 254 | _tft->fillRect(188, 187, 24, 6, ILI9341_GREEN); 255 | } 256 | if (level >= 2) { 257 | _tft->fillRect(188, 197, 24, 6, ILI9341_GREEN); 258 | } 259 | if (level >= 1) { 260 | _tft->fillRect(188, 207, 24, 6, ILI9341_GREEN); 261 | } 262 | if (level > 0) { 263 | _tft->fillRect(188, 217, 24, 6, ILI9341_GREEN); 264 | } 265 | if (level == 0) { 266 | _tft->fillRect(188, 217, 24, 6, ILI9341_RED); 267 | } 268 | } 269 | 270 | void TyroBot::TyroBotWifi(char dbm[]) { 271 | SerialUSB.println(dbm[1]); 272 | if (dbm[1] == '7') { 273 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 274 | } 275 | if (dbm[1] == '6') { 276 | _tft->fillRect(101, 210, 6, 20, ILI9341_WHITE); 277 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 278 | } 279 | if (dbm[1] == '5') { 280 | _tft->fillRect(112, 200, 6, 30, ILI9341_WHITE); 281 | _tft->fillRect(101, 210, 6, 20, ILI9341_WHITE); 282 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 283 | } 284 | if (dbm[1] == '4') { 285 | _tft->fillRect(123, 190, 6, 40, ILI9341_WHITE); 286 | _tft->fillRect(112, 200, 6, 30, ILI9341_WHITE); 287 | _tft->fillRect(101, 210, 6, 20, ILI9341_WHITE); 288 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 289 | } 290 | if (dbm[1] == '3') { 291 | _tft->fillRect(134, 180, 6, 50, ILI9341_WHITE); 292 | _tft->fillRect(123, 190, 6, 40, ILI9341_WHITE); 293 | _tft->fillRect(112, 200, 6, 30, ILI9341_WHITE); 294 | _tft->fillRect(101, 210, 6, 20, ILI9341_WHITE); 295 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 296 | } 297 | if (dbm[1] == '0') { 298 | _tft->fillRect(134, 180, 6, 50, ILI9341_WHITE); 299 | _tft->fillRect(123, 190, 6, 40, ILI9341_WHITE); 300 | _tft->fillRect(112, 200, 6, 30, ILI9341_WHITE); 301 | _tft->fillRect(101, 210, 6, 20, ILI9341_WHITE); 302 | _tft->fillRect(90, 220, 6, 10, ILI9341_WHITE); 303 | _tft->setCursor(90, 195); 304 | _tft->setTextColor(ILI9341_RED); _tft->setTextSize(4); 305 | _tft->println("X"); 306 | } 307 | } 308 | 309 | void TyroBot::enterBootloader() { 310 | _tft->setRotation(1); 311 | _tft->fillScreen(ILI9341_BLACK); 312 | _tft->setCursor(20, 70); 313 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(3); 314 | _tft->println("Bootloader mode"); 315 | 316 | for (int i = 0; i < 301; i++) { 317 | if (checkForPress() == true) { 318 | TyroBotMenu(); 319 | return; 320 | } 321 | delay(10); 322 | } 323 | int d = 0; 324 | Serial.write(d); 325 | } 326 | 327 | void TyroBot::batteryLevel() { 328 | pinMode(A4, INPUT); 329 | voltage = analogRead(A4); 330 | voltage = voltage * ((3.3 / 1023.0) * 2); 331 | if (voltage > 4.19) { 332 | batMode = 4; 333 | } 334 | else if (voltage > 4.0) { 335 | batMode = 3; 336 | } 337 | else if (voltage > 3.8) { 338 | batMode = 2; 339 | } 340 | else if (voltage > 3.6) { 341 | batMode = 1; 342 | } 343 | else { 344 | batMode = 0; 345 | } 346 | 347 | theTime = millis() / 1000; 348 | if (timeMultiple - theTime <= 0) { 349 | timeMultiple += 60; 350 | TyroBotBattery(batMode); 351 | } 352 | } 353 | 354 | void TyroBot::selfProgram() { 355 | uint32_t colors[5] = {ILI9341_GREEN, ILI9341_BLUE, ILI9341_YELLOW, ILI9341_PURPLE, ILI9341_RED}; 356 | int program[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 357 | int key = 0; 358 | 359 | _tft->begin(); 360 | _tft->setRotation(1); 361 | 362 | //draw program boxes 363 | _tft->fillScreen(ILI9341_BLACK); 364 | for (int i = 0; i <= 4; i++) { 365 | _tft->fillRect(i * 62 + 12, 182, 50, 50, colors[i]); 366 | } 367 | upTriangle(0 * 62 + 37, 197); 368 | downTriangle(3 * 62 + 37, 197); 369 | rightTriangle(1 * 62 + 37, 197); 370 | leftTriangle(2 * 62 + 37, 197); 371 | _tft->setCursor(273, 190); 372 | _tft->setTextColor(ILI9341_WHITE); _tft->setTextSize(5); 373 | _tft->println("X"); 374 | 375 | //START AND BACK BUTTONS 376 | _tft->fillRect(176, 134, 124, 36, ILI9341_GREEN); 377 | _tft->fillRect(178, 136, 120, 32, ILI9341_BLACK); 378 | _tft->setCursor(180, 138); 379 | _tft->setTextColor(ILI9341_GREEN); _tft->setTextSize(4); 380 | _tft->println("Start"); 381 | 382 | _tft->fillRect(16, 134, 100, 36, ILI9341_RED); 383 | _tft->fillRect(18, 136, 96, 32, ILI9341_BLACK); 384 | _tft->setCursor(20, 138); 385 | _tft->setTextColor(ILI9341_RED); _tft->setTextSize(4); 386 | _tft->println("Home"); 387 | 388 | while (1) { 389 | if (checkForPress() == true) { 390 | int x = 0; 391 | int y = 0; 392 | getPoints(y, x); 393 | 394 | //start and home buttons 395 | if (x < 106 and x > 70) { 396 | if (y > 12 and y < 112) { 397 | TyroBotMenu(); 398 | break; 399 | } 400 | if (y > 174 and y < 300) { 401 | face(); 402 | for (int i = 0; i <= 9; i++) { 403 | if (program[i] == 1) { 404 | SerialUSB.println("forward"); 405 | if (program[i + 1] == 1) { 406 | cali = true; 407 | } 408 | else { 409 | cali = false; 410 | } 411 | forward(2); 412 | 413 | } 414 | else if (program[i] == 2) { 415 | SerialUSB.println("right"); 416 | turnRight(2); 417 | } 418 | else if (program[i] == 3) { 419 | SerialUSB.println("left"); 420 | turnLeft(2); 421 | } 422 | else if (program[i] == 4) { 423 | SerialUSB.println("backward"); 424 | if (program[i + 1] == 4) { 425 | cali = true; 426 | } 427 | else { 428 | cali = false; 429 | } 430 | backward(2); 431 | } 432 | } 433 | calibrate(); 434 | TyroBotMenu(); 435 | break; 436 | } 437 | } 438 | 439 | if (x < 58) { 440 | if (y > 12 and y < 62) { 441 | program[key] = 1; 442 | key += 1; 443 | } 444 | else if (y > 74 and y < 124) { 445 | program[key] = 2; 446 | key += 1; 447 | } 448 | else if (y > 136 and y < 186) { 449 | program[key] = 3; 450 | key += 1; 451 | } 452 | else if (y > 198 and y < 248) { 453 | program[key] = 4; 454 | key += 1; 455 | } 456 | else if (y > 256 and y < 306) { 457 | program[key] = 0; 458 | key -= 1; 459 | if (key < 0){ 460 | key = 0; 461 | } 462 | } 463 | if (key > 9) { 464 | key = 9; 465 | } 466 | 467 | for (int w = 0; w <= 4; w++) { 468 | if (program[w] == 0) { 469 | _tft->fillRect(w * 62 + 12, 12, 50, 50, ILI9341_BLACK); 470 | } 471 | if (program[w] == 2) { 472 | _tft->fillRect(w * 62 + 12, 12, 50, 50, colors[1]); 473 | rightTriangle(w * 62 + 37, 27); 474 | } 475 | if (program[w] == 1) { 476 | _tft->fillRect(w * 62 + 12, 12, 50, 50, colors[0]); 477 | upTriangle(w * 62 + 37, 27); 478 | } 479 | if (program[w] == 3) { 480 | _tft->fillRect(w * 62 + 12, 12, 50, 50, colors[2]); 481 | leftTriangle(w * 62 + 37, 27); 482 | } 483 | if (program[w] == 4) { 484 | _tft->fillRect(w * 62 + 12, 12, 50, 50, colors[3]); 485 | downTriangle(w * 62 + 37, 27); 486 | } 487 | } 488 | for (int r = 0; r <= 4; r++) { 489 | if (program[r + 5] == 0) { 490 | _tft->fillRect(r * 62 + 12, 74, 50, 50, ILI9341_BLACK); 491 | } 492 | if (program[r + 5] == 2) { 493 | _tft->fillRect(r * 62 + 12, 74, 50, 50, colors[1]); 494 | rightTriangle(r * 62 + 37, 89); 495 | } 496 | if (program[r + 5] == 1) { 497 | _tft->fillRect(r * 62 + 12, 74, 50, 50, colors[0]); 498 | upTriangle(r * 62 + 37, 89); 499 | } 500 | if (program[r + 5] == 3) { 501 | _tft->fillRect(r * 62 + 12, 74, 50, 50, colors[2]); 502 | leftTriangle(r * 62 + 37, 89); 503 | } 504 | if (program[r + 5] == 4) { 505 | _tft->fillRect(r * 62 + 12, 74, 50, 50, colors[3]); 506 | downTriangle(r * 62 + 37, 89); 507 | } 508 | } 509 | delay(300); 510 | } 511 | } 512 | } 513 | } 514 | 515 | int TyroBot::upTriangle(int x, int y) { 516 | _tft->fillTriangle(x, y, x + 16, y + 16, x - 16, y + 16, ILI9341_WHITE); 517 | } 518 | 519 | int TyroBot::downTriangle(int x, int y) { 520 | _tft->fillTriangle(x, y + 21, x + 16, y + 5, x - 16, y + 5, ILI9341_WHITE); 521 | } 522 | 523 | int TyroBot::rightTriangle(int x, int y) { 524 | _tft->fillTriangle(x - 5, y - 5, x + 11, y + 11, x - 5, y + 27, ILI9341_WHITE); 525 | } 526 | 527 | int TyroBot::leftTriangle(int x, int y) { 528 | _tft->fillTriangle(x + 6, y - 5, x - 10, y + 11, x + 6, y + 27, ILI9341_WHITE); 529 | } 530 | 531 | 532 | void TyroBot::runProgram() { 533 | face(); 534 | } 535 | 536 | void TyroBot::menu() 537 | { 538 | calibrate(); 539 | TyroBotMenu(); 540 | while (1) { 541 | mode = 1; 542 | batteryLevel(); 543 | 544 | int data = 0; 545 | 546 | //poll touchscreen 547 | if (checkForPress() == true) { 548 | int x = 0; 549 | int y = 0; 550 | getPoints(x, y); 551 | SerialUSB.print(x); 552 | SerialUSB.print(","); 553 | SerialUSB.println(y); 554 | if (x < 80 and y < 85) { 555 | mode = 0; 556 | } 557 | if (x < 155 and y > 85) { 558 | runProgram(); 559 | break; 560 | } 561 | if (x > 155 and y > 85) { 562 | selfProgram(); 563 | } 564 | if (x > 240 and y < 85) { 565 | settings(); 566 | } 567 | } 568 | 569 | //ESP8266 Communication 570 | if (mode == 0) { 571 | mode = 1; 572 | enterBootloader(); 573 | } 574 | } 575 | } 576 | 577 | bool TyroBot::checkForPress() { 578 | pinMode(A2, OUTPUT); 579 | digitalWrite(A2, 0); 580 | pinMode(7, OUTPUT); 581 | digitalWrite(7, LOW); 582 | 583 | pinMode(3, INPUT); 584 | pinMode(A3, INPUT); 585 | digitalWrite(3, 1); 586 | digitalWrite(A3, 1); 587 | 588 | pinMode(A2, OUTPUT); 589 | pinMode(7, OUTPUT); 590 | 591 | int val = analogRead(A3); 592 | if (val < 50) { 593 | return true; 594 | } 595 | else { 596 | return false; 597 | } 598 | } 599 | 600 | void TyroBot::getPoints(int &y, int &x) { 601 | if (checkForPress()) { 602 | 603 | pinMode(A2, INPUT_PULLUP); 604 | 605 | pinMode(7, INPUT_PULLUP); 606 | digitalWrite(A2, LOW); 607 | digitalWrite(7, LOW); 608 | 609 | pinMode(3, OUTPUT); 610 | digitalWrite(3, HIGH); 611 | pinMode(A3, OUTPUT); 612 | digitalWrite(A3, LOW); 613 | 614 | xVal = analogRead(A2); 615 | 616 | // Set up the analog pins in preparation for reading the Y value 617 | // from the touchscreen 618 | pinMode(3, INPUT_PULLUP); 619 | pinMode(A3, INPUT_PULLUP); 620 | digitalWrite(3, LOW); 621 | digitalWrite(A3, LOW); 622 | 623 | pinMode(A2, OUTPUT); 624 | digitalWrite(A2, HIGH); 625 | pinMode(7, OUTPUT); 626 | digitalWrite(7, LOW); 627 | 628 | yVal = analogRead(A3); 629 | 630 | // Scale from ~0->1000 to tft.width using the calibration #'s 631 | x = map(xVal, TS_MINX, TS_MAXX, 0, 240); 632 | y = map(yVal, TS_MINY, TS_MAXY, 0, 320); 633 | } 634 | } 635 | 636 | void TyroBot::shakeHead() { 637 | head.attach(HEAD); 638 | head.write(30); 639 | delay(500); 640 | head.write(150); 641 | delay(500); 642 | head.write(90); 643 | delay(500); 644 | head.detach(); 645 | } 646 | 647 | void TyroBot::lookRight() { 648 | head.attach(HEAD); 649 | head.write(30); 650 | delay(1000); 651 | head.detach(); 652 | } 653 | 654 | void TyroBot::lookLeft() { 655 | head.attach(HEAD); 656 | head.write(150); 657 | delay(1000); 658 | head.detach(); 659 | } 660 | 661 | void TyroBot::connectAccel() { 662 | //Setup Accelerometer 663 | if (! _lis->begin(0x18)) { // change this to 0x19 for alternative i2c address 664 | Serial.println("Could not connect to accelerometer"); 665 | } 666 | _lis->setRange(LIS3DH_RANGE_4_G); 667 | _lis->read(); 668 | //SerialUSB.print(_lis->x); 669 | //SerialUSB.print(","); 670 | // SerialUSB.print(_lis->y); 671 | } 672 | 673 | bool TyroBot::checkAccel() { 674 | _lis->read(); 675 | if (_lis->x > maxX or _lis->x < minX) { 676 | return false; 677 | } 678 | else { 679 | return true; 680 | } 681 | } 682 | 683 | void TyroBot::checkForFall() { 684 | _lis->read(); 685 | if (_lis->y < 3000) { 686 | SerialUSB.print("I've fallen and i cant get up!"); 687 | calibrate(); 688 | while (1); 689 | } 690 | } 691 | 692 | void TyroBot::calibrate() { 693 | _lis->read(); 694 | rf.detach(); 695 | ll.detach(); 696 | lf.detach(); 697 | rl.detach(); 698 | 699 | ll.attach(LEFT_LEG); 700 | ll.write(LL_CENTER); 701 | delay(STEP_SPEED); 702 | ll.detach(); 703 | 704 | lf.attach(LEFT_FOOT); 705 | lf.write(LF_CENTER); 706 | delay(STEP_SPEED); 707 | lf.detach(); 708 | 709 | rl.attach(RIGHT_LEG); 710 | rl.write(RL_CENTER); 711 | delay(STEP_SPEED); 712 | rl.detach(); 713 | 714 | rf.attach(RIGHT_FOOT); 715 | rf.write(RF_CENTER); 716 | delay(STEP_SPEED); 717 | rf.detach(); 718 | 719 | head.attach(HEAD); 720 | head.write(HEAD_CENTER); 721 | delay(STEP_SPEED); 722 | head.detach(); 723 | 724 | _lis->read(); 725 | } 726 | 727 | //Lift right foot off the ground 728 | void TyroBot::liftRightFoot() { 729 | rf.attach(RIGHT_FOOT); 730 | lf.attach(LEFT_FOOT); 731 | rf.write(RF_CENTER - LIFT_HEIGHT*3); 732 | delay(50); 733 | lf.write(LF_CENTER - LIFT_HEIGHT*3); 734 | delay(STEP_SPEED); 735 | } 736 | 737 | //Move right foot forward 738 | void TyroBot::rightFootForward() { 739 | ll.attach(LEFT_LEG); 740 | rl.attach(RIGHT_LEG); 741 | ll.write(LL_CENTER + STEP_DISTANCE); 742 | delay(500); 743 | rl.write(RL_CENTER + STEP_DISTANCE); 744 | delay(STEP_SPEED); 745 | } 746 | 747 | void TyroBot::liftLeftFoot() { 748 | //Lift left foot off the ground 749 | rf.attach(RIGHT_FOOT); 750 | lf.attach(LEFT_FOOT); 751 | lf.write(LF_CENTER + LIFT_HEIGHT * 3); 752 | delay(50); 753 | rf.write(RF_CENTER + LIFT_HEIGHT * 3); 754 | delay(STEP_SPEED); 755 | } 756 | 757 | void TyroBot::leftFootForward() { 758 | ll.attach(LEFT_LEG); 759 | rl.attach(RIGHT_LEG); 760 | rl.write(RL_CENTER - STEP_DISTANCE); 761 | delay(500); 762 | ll.write(LL_CENTER - STEP_DISTANCE); 763 | delay(STEP_SPEED); 764 | } 765 | 766 | void TyroBot::leftFootBackward() { 767 | ll.attach(LEFT_LEG); 768 | rl.attach(RIGHT_LEG); 769 | rl.write(RL_CENTER + STEP_DISTANCE); 770 | delay(500); 771 | ll.write(LL_CENTER + STEP_DISTANCE); 772 | delay(STEP_SPEED); 773 | } 774 | 775 | void TyroBot::rightFootBackward() { 776 | ll.attach(LEFT_LEG); 777 | rl.attach(RIGHT_LEG); 778 | ll.write(LL_CENTER - STEP_DISTANCE); 779 | delay(500); 780 | rl.write(RL_CENTER - STEP_DISTANCE); 781 | delay(STEP_SPEED); 782 | } 783 | 784 | void TyroBot::footDown() { 785 | rf.attach(RIGHT_FOOT); 786 | lf.attach(LEFT_FOOT); 787 | rf.write(RF_CENTER); 788 | lf.write(LF_CENTER); 789 | delay(STEP_SPEED); 790 | } 791 | 792 | void TyroBot::forward(int steps) { //Take a step forward 793 | for (int i = 0; i < steps; i++) { 794 | liftRightFoot(); 795 | checkForFall(); 796 | rightFootForward(); 797 | checkForFall(); 798 | footDown(); 799 | checkForFall(); 800 | liftLeftFoot(); 801 | checkForFall(); 802 | leftFootForward(); 803 | checkForFall(); 804 | footDown(); 805 | checkForFall(); 806 | } 807 | if (cali == false) { 808 | liftRightFoot(); 809 | calibrate(); 810 | delay(STEP_SPEED*2); 811 | } 812 | } 813 | 814 | void TyroBot::backward(int steps) { 815 | for (int i = 0; i < steps; i++) { 816 | liftLeftFoot(); 817 | checkForFall(); 818 | leftFootBackward(); 819 | checkForFall(); 820 | footDown(); 821 | checkForFall(); 822 | liftRightFoot(); 823 | checkForFall(); 824 | rightFootBackward(); 825 | checkForFall(); 826 | footDown(); 827 | checkForFall(); 828 | } 829 | if (cali == false) { 830 | calibrate(); 831 | delay(STEP_SPEED*2); 832 | } 833 | } 834 | 835 | void TyroBot::turnRight(int turns) { 836 | for (int i = 0; i < turns; i++) { 837 | liftLeftFoot(); 838 | rl.attach(RIGHT_LEG); 839 | rl.write(RL_CENTER - STEP_DISTANCE*2); 840 | delay(500); 841 | delay(STEP_SPEED); 842 | footDown(); 843 | rf.detach(); 844 | lf.detach(); 845 | liftRightFoot(); 846 | rl.write(RL_CENTER); 847 | checkForFall(); 848 | calibrate(); 849 | } 850 | } 851 | 852 | void TyroBot::turnLeft(int turns) { 853 | for (int i = 0; i < turns; i++) { 854 | liftRightFoot(); 855 | ll.attach(LEFT_LEG); 856 | ll.write(LL_CENTER + STEP_DISTANCE*2); 857 | delay(500); 858 | delay(STEP_SPEED); 859 | footDown(); 860 | rf.detach(); 861 | lf.detach(); 862 | liftLeftFoot(); 863 | ll.write(LL_CENTER); 864 | checkForFall(); 865 | calibrate(); 866 | } 867 | } 868 | 869 | void TyroBot::waveRightArm(int times) { 870 | for (int i = 0; i < times; i++) { 871 | rightArm.attach(RIGHT_ARM); 872 | rightArm.write(180); 873 | delay(500); 874 | rightArm.write(0); 875 | delay(1000); 876 | rightArm.write(RIGHT_ARM_CENTER); 877 | delay(500); 878 | rightArm.detach(); 879 | } 880 | } 881 | 882 | void TyroBot::waveLeftArm(int times) { 883 | for (int i = 0; i < times; i++) { 884 | leftArm.attach(LEFT_ARM); 885 | leftArm.write(0); 886 | delay(500); 887 | leftArm.write(180); 888 | delay(1000); 889 | leftArm.write(LEFT_ARM_CENTER); 890 | delay(500); 891 | leftArm.detach(); 892 | } 893 | } 894 | 895 | void TyroBot::IFTT(char event[]) { 896 | Serial.write(2); 897 | char tokenChar[50]; 898 | token.toCharArray(tokenChar, 50); 899 | Serial.write(tokenChar); 900 | Serial.write(","); 901 | Serial.write(event); 902 | } 903 | -------------------------------------------------------------------------------- /pcb/revA.net: -------------------------------------------------------------------------------- 1 | (export (version D) 2 | (design 3 | (source C:/Users/User1/Documents/GitHub/tyrobot/pcb/revA.sch) 4 | (date "9/8/2017 2:45:06 PM") 5 | (tool "Eeschema 4.0.2-stable") 6 | (sheet (number 1) (name /) (tstamps /) 7 | (title_block 8 | (title TyroBot) 9 | (company "Tyler Spadgenske") 10 | (rev D) 11 | (date 2017-01-06) 12 | (source revA.sch) 13 | (comment (number 1) (value "")) 14 | (comment (number 2) (value "")) 15 | (comment (number 3) (value "")) 16 | (comment (number 4) (value ""))))) 17 | (components 18 | (comp (ref U2) 19 | (value SAMD20G18A-M) 20 | (footprint Housings_QFP:TQFP-48_7x7mm_Pitch0.5mm) 21 | (libsource (lib atmel) (part SAMD20G18A-M)) 22 | (sheetpath (names /) (tstamps /)) 23 | (tstamp 576C0A6A)) 24 | (comp (ref C3) 25 | (value 1uF) 26 | (footprint Resistors_SMD:R_0805) 27 | (libsource (lib device) (part C)) 28 | (sheetpath (names /) (tstamps /)) 29 | (tstamp 576C0BB4)) 30 | (comp (ref Y1) 31 | (value 32.768) 32 | (footprint user:FC-135) 33 | (libsource (lib device) (part Crystal)) 34 | (sheetpath (names /) (tstamps /)) 35 | (tstamp 576C0E24)) 36 | (comp (ref C6) 37 | (value 22pF) 38 | (footprint Resistors_SMD:R_0805) 39 | (libsource (lib device) (part C)) 40 | (sheetpath (names /) (tstamps /)) 41 | (tstamp 576C0F3C)) 42 | (comp (ref C7) 43 | (value 22pF) 44 | (footprint Resistors_SMD:R_0805) 45 | (libsource (lib device) (part C)) 46 | (sheetpath (names /) (tstamps /)) 47 | (tstamp 576C0F61)) 48 | (comp (ref P5) 49 | (value SAMD-PROG) 50 | (footprint servo:progatsam) 51 | (libsource (lib conn) (part CONN_01X04)) 52 | (sheetpath (names /) (tstamps /)) 53 | (tstamp 576C1AD3)) 54 | (comp (ref P1) 55 | (value USB_OTG) 56 | (footprint components:micro-usb-fci) 57 | (libsource (lib conn) (part USB_OTG)) 58 | (sheetpath (names /) (tstamps /)) 59 | (tstamp 576C2987)) 60 | (comp (ref U5) 61 | (value ESP-12E) 62 | (footprint ESP8266:ESP-12E) 63 | (libsource (lib ESP8266) (part ESP-12E)) 64 | (sheetpath (names /) (tstamps /)) 65 | (tstamp 576D924D)) 66 | (comp (ref R3) 67 | (value 10K) 68 | (footprint Resistors_SMD:R_0805) 69 | (libsource (lib device) (part R)) 70 | (sheetpath (names /) (tstamps /)) 71 | (tstamp 576DC96C)) 72 | (comp (ref R6) 73 | (value 1K) 74 | (footprint Resistors_SMD:R_0805) 75 | (libsource (lib device) (part R)) 76 | (sheetpath (names /) (tstamps /)) 77 | (tstamp 576DCB98)) 78 | (comp (ref D1) 79 | (value LED) 80 | (footprint LEDs:LED_0805) 81 | (libsource (lib device) (part LED)) 82 | (sheetpath (names /) (tstamps /)) 83 | (tstamp 576DCCFD)) 84 | (comp (ref R7) 85 | (value 1K) 86 | (footprint Resistors_SMD:R_0805) 87 | (libsource (lib device) (part R)) 88 | (sheetpath (names /) (tstamps /)) 89 | (tstamp 576DD3F8)) 90 | (comp (ref R8) 91 | (value 1K) 92 | (footprint Resistors_SMD:R_0805) 93 | (libsource (lib device) (part R)) 94 | (sheetpath (names /) (tstamps /)) 95 | (tstamp 576DD6E6)) 96 | (comp (ref R9) 97 | (value 1K) 98 | (footprint Resistors_SMD:R_0805) 99 | (libsource (lib device) (part R)) 100 | (sheetpath (names /) (tstamps /)) 101 | (tstamp 576DD844)) 102 | (comp (ref U6) 103 | (value LIS3DH) 104 | (footprint components:LGA-16-3x3) 105 | (libsource (lib lis3dh) (part LIS3DH)) 106 | (sheetpath (names /) (tstamps /)) 107 | (tstamp 576E1076)) 108 | (comp (ref C8) 109 | (value 10uF) 110 | (footprint Resistors_SMD:R_0805) 111 | (libsource (lib device) (part C)) 112 | (sheetpath (names /) (tstamps /)) 113 | (tstamp 576E1444)) 114 | (comp (ref R4) 115 | (value 10K) 116 | (footprint Resistors_SMD:R_0805) 117 | (libsource (lib device) (part R)) 118 | (sheetpath (names /) (tstamps /)) 119 | (tstamp 576E1CDA)) 120 | (comp (ref R5) 121 | (value 10K) 122 | (footprint Resistors_SMD:R_0805) 123 | (libsource (lib device) (part R)) 124 | (sheetpath (names /) (tstamps /)) 125 | (tstamp 576E1F58)) 126 | (comp (ref C9) 127 | (value 0.1uF) 128 | (footprint Resistors_SMD:R_0805) 129 | (libsource (lib device) (part C)) 130 | (sheetpath (names /) (tstamps /)) 131 | (tstamp 576E25BF)) 132 | (comp (ref U3) 133 | (value MCP73831) 134 | (footprint TO_SOT_Packages_SMD:SOT-23-5) 135 | (libsource (lib mcp73831) (part MCP73831)) 136 | (sheetpath (names /) (tstamps /)) 137 | (tstamp 5779B22A)) 138 | (comp (ref R2) 139 | (value 2K) 140 | (footprint Resistors_SMD:R_0805) 141 | (libsource (lib device) (part R)) 142 | (sheetpath (names /) (tstamps /)) 143 | (tstamp 5779BF39)) 144 | (comp (ref C5) 145 | (value 10uF) 146 | (footprint Resistors_SMD:R_0805) 147 | (libsource (lib device) (part C)) 148 | (sheetpath (names /) (tstamps /)) 149 | (tstamp 5779CB38)) 150 | (comp (ref P4) 151 | (value BAT) 152 | (footprint components:JST2) 153 | (libsource (lib conn) (part CONN_01X02)) 154 | (sheetpath (names /) (tstamps /)) 155 | (tstamp 5779D408)) 156 | (comp (ref R1) 157 | (value 470) 158 | (footprint Resistors_SMD:R_0805) 159 | (libsource (lib device) (part R)) 160 | (sheetpath (names /) (tstamps /)) 161 | (tstamp 5779DD3C)) 162 | (comp (ref D2) 163 | (value Charge) 164 | (footprint LEDs:LED_0805) 165 | (libsource (lib device) (part D)) 166 | (sheetpath (names /) (tstamps /)) 167 | (tstamp 5779DEC4)) 168 | (comp (ref U4) 169 | (value 7servo) 170 | (footprint servo:servo7) 171 | (libsource (lib ESP8266) (part 7servo)) 172 | (sheetpath (names /) (tstamps /)) 173 | (tstamp 577AF40B)) 174 | (comp (ref U1) 175 | (value AP2112K-3.3) 176 | (footprint TO_SOT_Packages_SMD:SOT-23-5) 177 | (libsource (lib ESP8266) (part AP2112K-3.3)) 178 | (sheetpath (names /) (tstamps /)) 179 | (tstamp 57A0BDE4)) 180 | (comp (ref R10) 181 | (value 100K) 182 | (footprint Resistors_SMD:R_0805) 183 | (libsource (lib device) (part R)) 184 | (sheetpath (names /) (tstamps /)) 185 | (tstamp 57A0D270)) 186 | (comp (ref C1) 187 | (value 10uF) 188 | (footprint Capacitors_SMD:C_0805) 189 | (libsource (lib device) (part C)) 190 | (sheetpath (names /) (tstamps /)) 191 | (tstamp 57A0D59C)) 192 | (comp (ref C2) 193 | (value 10uF) 194 | (footprint Capacitors_SMD:C_0805) 195 | (libsource (lib device) (part C)) 196 | (sheetpath (names /) (tstamps /)) 197 | (tstamp 57A0D91A)) 198 | (comp (ref C10) 199 | (value 1uF) 200 | (footprint Capacitors_SMD:C_0805) 201 | (libsource (lib device) (part C)) 202 | (sheetpath (names /) (tstamps /)) 203 | (tstamp 57A0D9C0)) 204 | (comp (ref C4) 205 | (value 10uF) 206 | (footprint Capacitors_SMD:C_0805) 207 | (libsource (lib device) (part C)) 208 | (sheetpath (names /) (tstamps /)) 209 | (tstamp 57AA00C7)) 210 | (comp (ref R14) 211 | (value 10K) 212 | (footprint Resistors_SMD:R_0805) 213 | (libsource (lib device) (part R)) 214 | (sheetpath (names /) (tstamps /)) 215 | (tstamp 587013A7)) 216 | (comp (ref R15) 217 | (value 10K) 218 | (footprint Resistors_SMD:R_0805) 219 | (libsource (lib device) (part R)) 220 | (sheetpath (names /) (tstamps /)) 221 | (tstamp 587014A3)) 222 | (comp (ref SW1) 223 | (value SPST) 224 | (footprint user:eg1224) 225 | (libsource (lib device) (part SPST)) 226 | (sheetpath (names /) (tstamps /)) 227 | (tstamp 5870A22A)) 228 | (comp (ref D3) 229 | (value LED) 230 | (footprint LEDs:LED_0805) 231 | (libsource (lib device) (part LED)) 232 | (sheetpath (names /) (tstamps /)) 233 | (tstamp 5870BDBE)) 234 | (comp (ref R13) 235 | (value 1K) 236 | (footprint Resistors_SMD:R_0805) 237 | (libsource (lib device) (part R)) 238 | (sheetpath (names /) (tstamps /)) 239 | (tstamp 5870C0E0)) 240 | (comp (ref R11) 241 | (value 10K) 242 | (footprint Resistors_SMD:R_0805) 243 | (libsource (lib device) (part R)) 244 | (sheetpath (names /) (tstamps /)) 245 | (tstamp 587112FF)) 246 | (comp (ref R12) 247 | (value 10K) 248 | (footprint Resistors_SMD:R_0805) 249 | (libsource (lib device) (part R)) 250 | (sheetpath (names /) (tstamps /)) 251 | (tstamp 58711ABE)) 252 | (comp (ref U7) 253 | (value ili9341-18p) 254 | (footprint components:18p-ili9341) 255 | (libsource (lib ili9341-18p) (part ili9341-18p)) 256 | (sheetpath (names /) (tstamps /)) 257 | (tstamp 58716314)) 258 | (comp (ref P2) 259 | (value EXP) 260 | (footprint Connectors_JST:JST_PH_B5B-PH-SM4-TB_05x2.00mm_Straight) 261 | (libsource (lib conn) (part CONN_01X05)) 262 | (sheetpath (names /) (tstamps /)) 263 | (tstamp 5871F031)) 264 | (comp (ref P3) 265 | (value espprog) 266 | (footprint Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm) 267 | (libsource (lib conn) (part CONN_01X04)) 268 | (sheetpath (names /) (tstamps /)) 269 | (tstamp 58728A0B)) 270 | (comp (ref C11) 271 | (value 1uF) 272 | (footprint Capacitors_SMD:C_0805) 273 | (libsource (lib device) (part C)) 274 | (sheetpath (names /) (tstamps /)) 275 | (tstamp 58EC0DA5)) 276 | (comp (ref P6) 277 | (value SPI-EXPANSION) 278 | (footprint Connectors_JST:JST_PH_B6B-PH-SM4-TB_06x2.00mm_Straight) 279 | (libsource (lib conn) (part CONN_01X06)) 280 | (sheetpath (names /) (tstamps /)) 281 | (tstamp 591CABEF))) 282 | (libparts 283 | (libpart (lib ESP8266) (part 7servo) 284 | (fields 285 | (field (name Reference) U) 286 | (field (name Value) 7servo)) 287 | (pins 288 | (pin (num 1) (name GND) (type input)) 289 | (pin (num 2) (name GND) (type input)) 290 | (pin (num 3) (name GND) (type input)) 291 | (pin (num 4) (name GND) (type input)) 292 | (pin (num 5) (name GND) (type input)) 293 | (pin (num 6) (name GND) (type input)) 294 | (pin (num 7) (name GND) (type input)) 295 | (pin (num 8) (name VCC) (type input)) 296 | (pin (num 9) (name VCC) (type input)) 297 | (pin (num 10) (name VCC) (type input)) 298 | (pin (num 11) (name VCC) (type input)) 299 | (pin (num 12) (name VCC) (type input)) 300 | (pin (num 13) (name VCC) (type input)) 301 | (pin (num 14) (name VCC) (type input)) 302 | (pin (num 15) (name S1) (type input)) 303 | (pin (num 16) (name S2) (type input)) 304 | (pin (num 17) (name S3) (type input)) 305 | (pin (num 18) (name S4) (type input)) 306 | (pin (num 19) (name S5) (type input)) 307 | (pin (num 20) (name S6) (type input)) 308 | (pin (num 21) (name S7) (type input)))) 309 | (libpart (lib ESP8266) (part AP2112K-3.3) 310 | (fields 311 | (field (name Reference) U) 312 | (field (name Value) AP2112K-3.3)) 313 | (pins 314 | (pin (num 1) (name IN) (type input)) 315 | (pin (num 2) (name GND) (type input)) 316 | (pin (num 3) (name EN) (type input)) 317 | (pin (num 4) (name P4) (type input)) 318 | (pin (num 5) (name OUT) (type input)))) 319 | (libpart (lib device) (part C) 320 | (description "Unpolarized capacitor") 321 | (footprints 322 | (fp C?) 323 | (fp C_????_*) 324 | (fp C_????) 325 | (fp SMD*_c) 326 | (fp Capacitor*)) 327 | (fields 328 | (field (name Reference) C) 329 | (field (name Value) C)) 330 | (pins 331 | (pin (num 1) (name ~) (type passive)) 332 | (pin (num 2) (name ~) (type passive)))) 333 | (libpart (lib conn) (part CONN_01X02) 334 | (description "Connector 01x02") 335 | (footprints 336 | (fp Pin_Header_Straight_1X02) 337 | (fp Pin_Header_Angled_1X02) 338 | (fp Socket_Strip_Straight_1X02) 339 | (fp Socket_Strip_Angled_1X02)) 340 | (fields 341 | (field (name Reference) P) 342 | (field (name Value) CONN_01X02)) 343 | (pins 344 | (pin (num 1) (name P1) (type passive)) 345 | (pin (num 2) (name P2) (type passive)))) 346 | (libpart (lib conn) (part CONN_01X04) 347 | (description "Connector 01x04") 348 | (footprints 349 | (fp Pin_Header_Straight_1X04) 350 | (fp Pin_Header_Angled_1X04) 351 | (fp Socket_Strip_Straight_1X04) 352 | (fp Socket_Strip_Angled_1X04)) 353 | (fields 354 | (field (name Reference) P) 355 | (field (name Value) CONN_01X04)) 356 | (pins 357 | (pin (num 1) (name P1) (type passive)) 358 | (pin (num 2) (name P2) (type passive)) 359 | (pin (num 3) (name P3) (type passive)) 360 | (pin (num 4) (name P4) (type passive)))) 361 | (libpart (lib conn) (part CONN_01X05) 362 | (description "Connector 01x05") 363 | (footprints 364 | (fp Pin_Header_Straight_1X05) 365 | (fp Pin_Header_Angled_1X05) 366 | (fp Socket_Strip_Straight_1X05) 367 | (fp Socket_Strip_Angled_1X05)) 368 | (fields 369 | (field (name Reference) P) 370 | (field (name Value) CONN_01X05)) 371 | (pins 372 | (pin (num 1) (name P1) (type passive)) 373 | (pin (num 2) (name P2) (type passive)) 374 | (pin (num 3) (name P3) (type passive)) 375 | (pin (num 4) (name P4) (type passive)) 376 | (pin (num 5) (name P5) (type passive)))) 377 | (libpart (lib conn) (part CONN_01X06) 378 | (description "Connector 01x06") 379 | (footprints 380 | (fp Pin_Header_Straight_1X06) 381 | (fp Pin_Header_Angled_1X06) 382 | (fp Socket_Strip_Straight_1X06) 383 | (fp Socket_Strip_Angled_1X06)) 384 | (fields 385 | (field (name Reference) P) 386 | (field (name Value) CONN_01X06)) 387 | (pins 388 | (pin (num 1) (name P1) (type passive)) 389 | (pin (num 2) (name P2) (type passive)) 390 | (pin (num 3) (name P3) (type passive)) 391 | (pin (num 4) (name P4) (type passive)) 392 | (pin (num 5) (name P5) (type passive)) 393 | (pin (num 6) (name P6) (type passive)))) 394 | (libpart (lib device) (part Crystal) 395 | (description "Two pin crystal") 396 | (footprints 397 | (fp Crystal_*)) 398 | (fields 399 | (field (name Reference) Y) 400 | (field (name Value) Crystal)) 401 | (pins 402 | (pin (num 1) (name 1) (type passive)) 403 | (pin (num 2) (name 2) (type passive)))) 404 | (libpart (lib device) (part D) 405 | (description Diode) 406 | (footprints 407 | (fp Diode_*) 408 | (fp D-Pak_TO252AA) 409 | (fp *SingleDiode) 410 | (fp *_Diode_*) 411 | (fp *SingleDiode*)) 412 | (fields 413 | (field (name Reference) D) 414 | (field (name Value) D)) 415 | (pins 416 | (pin (num 1) (name K) (type passive)) 417 | (pin (num 2) (name A) (type passive)))) 418 | (libpart (lib ESP8266) (part ESP-12E) 419 | (description "ESP8622 ESP-12E module, 22 pins, 2mm, PCB antenna") 420 | (docs http://l0l.org.uk/2014/12/esp8266-modules-hardware-guide-gotta-catch-em-all/) 421 | (footprints 422 | (fp ESP-12E)) 423 | (fields 424 | (field (name Reference) U) 425 | (field (name Value) ESP-12E)) 426 | (pins 427 | (pin (num 1) (name REST) (type input)) 428 | (pin (num 2) (name ADC) (type passive)) 429 | (pin (num 3) (name CH_PD) (type input)) 430 | (pin (num 4) (name GPIO16) (type BiDi)) 431 | (pin (num 5) (name GPIO14) (type BiDi)) 432 | (pin (num 6) (name GPIO12) (type BiDi)) 433 | (pin (num 7) (name GPIO13) (type BiDi)) 434 | (pin (num 8) (name VCC) (type power_in)) 435 | (pin (num 9) (name CS0) (type BiDi)) 436 | (pin (num 10) (name MISO) (type BiDi)) 437 | (pin (num 11) (name GPIO9) (type BiDi)) 438 | (pin (num 12) (name GPIO10) (type BiDi)) 439 | (pin (num 13) (name MOSI) (type BiDi)) 440 | (pin (num 14) (name SCLK) (type BiDi)) 441 | (pin (num 15) (name GND) (type power_in)) 442 | (pin (num 16) (name GPIO15) (type BiDi)) 443 | (pin (num 17) (name GPIO2) (type BiDi)) 444 | (pin (num 18) (name GPIO0) (type BiDi)) 445 | (pin (num 19) (name GPIO4) (type BiDi)) 446 | (pin (num 20) (name GPIO5) (type BiDi)) 447 | (pin (num 21) (name RXD) (type input)) 448 | (pin (num 22) (name TXD) (type output)))) 449 | (libpart (lib device) (part LED) 450 | (footprints 451 | (fp LED-3MM) 452 | (fp LED-5MM) 453 | (fp LED-10MM) 454 | (fp LED-0603) 455 | (fp LED-0805) 456 | (fp LED-1206) 457 | (fp LEDV)) 458 | (fields 459 | (field (name Reference) D) 460 | (field (name Value) LED)) 461 | (pins 462 | (pin (num 1) (name K) (type passive)) 463 | (pin (num 2) (name A) (type passive)))) 464 | (libpart (lib lis3dh) (part LIS3DH) 465 | (fields 466 | (field (name Reference) U) 467 | (field (name Value) LIS3DH)) 468 | (pins 469 | (pin (num 1) (name Vdd_IO) (type power_in)) 470 | (pin (num 2) (name NC) (type NotConnected)) 471 | (pin (num 3) (name NC) (type NotConnected)) 472 | (pin (num 4) (name SCL/SPC) (type BiDi)) 473 | (pin (num 5) (name GND) (type power_in)) 474 | (pin (num 6) (name SDA/SDI/SDO) (type BiDi)) 475 | (pin (num 7) (name SDO/SA0) (type BiDi)) 476 | (pin (num 8) (name CS) (type BiDi)) 477 | (pin (num 9) (name INT2) (type BiDi)) 478 | (pin (num 10) (name RES) (type BiDi)) 479 | (pin (num 11) (name INT1) (type BiDi)) 480 | (pin (num 12) (name GND) (type power_in)) 481 | (pin (num 13) (name ADC3) (type BiDi)) 482 | (pin (num 14) (name Vdd) (type power_in)) 483 | (pin (num 15) (name ADC2) (type BiDi)) 484 | (pin (num 16) (name ADC1) (type BiDi)))) 485 | (libpart (lib mcp73831) (part MCP73831) 486 | (fields 487 | (field (name Reference) U) 488 | (field (name Value) MCP73831)) 489 | (pins 490 | (pin (num 1) (name STAT) (type input)) 491 | (pin (num 2) (name VSS) (type input)) 492 | (pin (num 3) (name VBAT) (type input)) 493 | (pin (num 4) (name VDD) (type input)) 494 | (pin (num 5) (name PROG) (type input)))) 495 | (libpart (lib device) (part R) 496 | (description Resistor) 497 | (footprints 498 | (fp R_*) 499 | (fp Resistor_*)) 500 | (fields 501 | (field (name Reference) R) 502 | (field (name Value) R)) 503 | (pins 504 | (pin (num 1) (name ~) (type passive)) 505 | (pin (num 2) (name ~) (type passive)))) 506 | (libpart (lib atmel) (part SAMD20G14A-M) 507 | (aliases 508 | (alias SAMD20G15A-M) 509 | (alias SAMD20G16A-M) 510 | (alias SAMD20G17A-M) 511 | (alias SAMD20G18A-M)) 512 | (description "QFN48, 16K Flash, 2K RAM, 48MHz, CortexM0+") 513 | (docs http://www.atmel.com/Images/Atmel-42129-SAM-D20_Datasheet.pdf) 514 | (footprints 515 | (fp QFN48)) 516 | (fields 517 | (field (name Reference) U) 518 | (field (name Value) SAMD20G14A-M) 519 | (field (name Footprint) QFN48)) 520 | (pins 521 | (pin (num 1) (name XIN32/TC2WO0/SERCOM1P0/PA00) (type BiDi)) 522 | (pin (num 2) (name XOUT32/TC2WO1/SERCOM1P1/PA01) (type BiDi)) 523 | (pin (num 3) (name VOUT/Y0/AIN0/PA02) (type BiDi)) 524 | (pin (num 4) (name Y1/AIN1/VREFA/VREFP/PA03) (type BiDi)) 525 | (pin (num 5) (name GNDANA) (type power_in)) 526 | (pin (num 6) (name VDDANA) (type power_in)) 527 | (pin (num 7) (name PB08/AIN2/Y14/SERCOM4P0/TC4WO0) (type BiDi)) 528 | (pin (num 8) (name PB09/AIN3/Y15/SERCOM4P1/TC4WO1) (type BiDi)) 529 | (pin (num 9) (name TC0WO0/SERCOM0P0/Y2/AIN0/AIN4/VREFB/PA04) (type BiDi)) 530 | (pin (num 10) (name TC0W01/SERCOM0P1/Y3/AIN1/AIN5/PA05) (type BiDi)) 531 | (pin (num 11) (name TC1WO0/SERCOM0P2/Y4/AIN2/AIN6/PA06) (type BiDi)) 532 | (pin (num 12) (name TC1WO1/SERCOM0P3/Y5/AIN3/AIN7/PA07) (type BiDi)) 533 | (pin (num 13) (name TC0WO0/SERCOM2P0/SERCOM0P0/X0/AIN16/NMI/PA08) (type BiDi)) 534 | (pin (num 14) (name TC0WO1/SERCOM2P1/SERCOM0P1/X1/AIN17/PA09) (type BiDi)) 535 | (pin (num 15) (name GCLKIO4/TC1WO0/SERCOM2P2/SERCOM0P2/X2/AIN18/PA10) (type BiDi)) 536 | (pin (num 16) (name GCLKIO5/TC1WO1/SERCOM2P3/SERCOM0P3/X3/AIN19/PA11) (type BiDi)) 537 | (pin (num 17) (name VDDIO) (type power_in)) 538 | (pin (num 18) (name GND) (type power_in)) 539 | (pin (num 19) (name PB10/SECOM4P2/TC5WO0/GCLKIO4) (type BiDi)) 540 | (pin (num 20) (name PB11/SERCOM4P3/TC5WO1/GCLKIO5) (type BiDi)) 541 | (pin (num 21) (name ACCMP0/TC2WO0/SERCOM4P0/SERCOM2P0/PA12) (type BiDi)) 542 | (pin (num 22) (name ACCMP1/TC2WO1/SERCOM4P1/SERCOM2P1/PA13) (type BiDi)) 543 | (pin (num 23) (name XIN/GCLKIO0/TC3WO0/SERCOM4P2/SERCOM2P2/PA14) (type BiDi)) 544 | (pin (num 24) (name XOUT/GCLKIO1/TC3WO1/SERCOM4P3/SERCOM2P3/PA15) (type BiDi)) 545 | (pin (num 25) (name GCLKIO2/TC2WO0/SERCOM3P0/SERCOM1P0/X4/PA16) (type BiDi)) 546 | (pin (num 26) (name GCLKIO3/TC2WO1/SERCOM3P1/SERCOM1P1/X5/PA17) (type BiDi)) 547 | (pin (num 27) (name ACCMP0/TC3WO0/SERCOM3P2/SERCOM1P2/X6/PA18) (type BiDi)) 548 | (pin (num 28) (name ACCMP1/TC3WO1/SERCOM3P3/SERCOM1P3/X7/PA19) (type BiDi)) 549 | (pin (num 29) (name GCLKIO4/TC7WO0/SERCOM3P2/SERCOM5P2/X8/PA20) (type BiDi)) 550 | (pin (num 30) (name GCLKIO5/TC7WO1/SERCOM3P3/SERCOM5P3/X9/PA21) (type BiDi)) 551 | (pin (num 31) (name GCLKIO6/TC4WO0/SERCOM5P0/SERCOM3P0/X10/PA22) (type BiDi)) 552 | (pin (num 32) (name GCLKIO7/TC4WO1/SERCOM5P1/SERCOM3P1/X11/PA23) (type BiDi)) 553 | (pin (num 33) (name TC5WO0/SERCOM5P2/SERCOM3P2/PA24) (type BiDi)) 554 | (pin (num 34) (name TC5WO1/SERCOM5P3/SERCOM3P3/PA25) (type BiDi)) 555 | (pin (num 35) (name GND) (type power_in)) 556 | (pin (num 36) (name VDDIO) (type power_in)) 557 | (pin (num 37) (name PB22/SERCOM5P2/TC7WO0/GCLKIO0) (type BiDi)) 558 | (pin (num 38) (name PB23/SERCOM5P3/TC7WO1/GCLKIO1) (type BiDi)) 559 | (pin (num 39) (name GCLKIO0/PA27) (type BiDi)) 560 | (pin (num 40) (name ~RESET~) (type input)) 561 | (pin (num 41) (name GCLKIO0/PA28) (type BiDi)) 562 | (pin (num 42) (name GND) (type power_in)) 563 | (pin (num 43) (name VDDCORE) (type passive)) 564 | (pin (num 44) (name VDDIN) (type power_in)) 565 | (pin (num 45) (name GCLKIO0/SWCLK/TC1WO0/SERCOM1P2/PA30) (type BiDi)) 566 | (pin (num 46) (name SWDIO/TC1WO1/SERCOM1P3/PA31) (type BiDi)) 567 | (pin (num 47) (name PB02/AIN10/Y8/SERCOM5P0/TC6WO0) (type BiDi)) 568 | (pin (num 48) (name PB03/AIN11/Y9/SERCOM5P1/TC6WO1) (type BiDi)))) 569 | (libpart (lib device) (part SPST) 570 | (description "Interrupteur simple") 571 | (fields 572 | (field (name Reference) SW) 573 | (field (name Value) SPST)) 574 | (pins 575 | (pin (num 1) (name 1) (type input)) 576 | (pin (num 2) (name 2) (type input)))) 577 | (libpart (lib conn) (part USB_OTG) 578 | (description "micro/mini connector") 579 | (footprints 580 | (fp USB*)) 581 | (fields 582 | (field (name Reference) P) 583 | (field (name Value) USB_OTG)) 584 | (pins 585 | (pin (num 1) (name VCC) (type power_out)) 586 | (pin (num 2) (name D-) (type passive)) 587 | (pin (num 3) (name D+) (type passive)) 588 | (pin (num 4) (name ID) (type power_in)) 589 | (pin (num 5) (name GND) (type power_in)) 590 | (pin (num 6) (name shield) (type passive)))) 591 | (libpart (lib ili9341-18p) (part ili9341-18p) 592 | (fields 593 | (field (name Reference) U) 594 | (field (name Value) ili9341-18p)) 595 | (pins 596 | (pin (num 1) (name GND) (type input)) 597 | (pin (num 2) (name RST) (type input)) 598 | (pin (num 3) (name SCL) (type input)) 599 | (pin (num 4) (name RS) (type input)) 600 | (pin (num 5) (name CS) (type input)) 601 | (pin (num 6) (name SDA) (type input)) 602 | (pin (num 7) (name SDO) (type input)) 603 | (pin (num 8) (name GND) (type input)) 604 | (pin (num 9) (name VCC) (type input)) 605 | (pin (num 10) (name A) (type input)) 606 | (pin (num 11) (name K1) (type input)) 607 | (pin (num 12) (name K2) (type input)) 608 | (pin (num 13) (name K3) (type input)) 609 | (pin (num 14) (name K4) (type input)) 610 | (pin (num 15) (name XL) (type input)) 611 | (pin (num 16) (name YU) (type input)) 612 | (pin (num 17) (name XR) (type input)) 613 | (pin (num 18) (name YD) (type input))))) 614 | (libraries 615 | (library (logical atmel) 616 | (uri "C:\\Program Files\\KiCad\\share\\kicad\\library\\atmel.lib")) 617 | (library (logical ESP8266) 618 | (uri C:\Users\User1\Documents\GitHub\ESP8266\kicad-ESP8266-master\ESP8266.lib)) 619 | (library (logical lis3dh) 620 | (uri C:\Users\User1\Documents\GitHub\misc-ics\kicad_libs-master\lis3dh.lib)) 621 | (library (logical mcp73831) 622 | (uri C:\Users\User1\Documents\GitHub\tyrobot\pcb\mcp73831.lib)) 623 | (library (logical ili9341-18p) 624 | (uri C:\Users\User1\Documents\GitHub\tyrobot\pcb\ili9341-18p.lib)) 625 | (library (logical device) 626 | (uri "C:\\Program Files\\KiCad\\share\\kicad\\library\\device.lib")) 627 | (library (logical conn) 628 | (uri "C:\\Program Files\\KiCad\\share\\kicad\\library\\conn.lib"))) 629 | (nets 630 | (net (code 1) (name "Net-(R4-Pad2)") 631 | (node (ref R4) (pin 2)) 632 | (node (ref U6) (pin 7))) 633 | (net (code 2) (name "Net-(R5-Pad2)") 634 | (node (ref R5) (pin 2)) 635 | (node (ref U6) (pin 8))) 636 | (net (code 3) (name /GPIO15) 637 | (node (ref R9) (pin 2)) 638 | (node (ref U5) (pin 16))) 639 | (net (code 4) (name /CH_PD) 640 | (node (ref U5) (pin 3)) 641 | (node (ref R8) (pin 2))) 642 | (net (code 5) (name /SDA) 643 | (node (ref U6) (pin 6)) 644 | (node (ref R14) (pin 2)) 645 | (node (ref U2) (pin 31))) 646 | (net (code 6) (name /SCL) 647 | (node (ref U6) (pin 4)) 648 | (node (ref U2) (pin 32)) 649 | (node (ref R15) (pin 2))) 650 | (net (code 7) (name /~RESET) 651 | (node (ref P5) (pin 1)) 652 | (node (ref U5) (pin 19)) 653 | (node (ref U2) (pin 40))) 654 | (net (code 8) (name "Net-(R2-Pad2)") 655 | (node (ref R2) (pin 2)) 656 | (node (ref U3) (pin 5))) 657 | (net (code 9) (name /GPIO2) 658 | (node (ref R7) (pin 2)) 659 | (node (ref U5) (pin 17))) 660 | (net (code 10) (name /RXD) 661 | (node (ref U5) (pin 21)) 662 | (node (ref P3) (pin 2)) 663 | (node (ref U2) (pin 37))) 664 | (net (code 11) (name "Net-(C11-Pad2)") 665 | (node (ref U2) (pin 4)) 666 | (node (ref C11) (pin 2))) 667 | (net (code 12) (name "Net-(C3-Pad2)") 668 | (node (ref C3) (pin 2)) 669 | (node (ref U2) (pin 43))) 670 | (net (code 13) (name GND) 671 | (node (ref U7) (pin 1)) 672 | (node (ref U3) (pin 2)) 673 | (node (ref U7) (pin 8)) 674 | (node (ref U7) (pin 11)) 675 | (node (ref C9) (pin 2)) 676 | (node (ref P6) (pin 6)) 677 | (node (ref P1) (pin 5)) 678 | (node (ref R4) (pin 1)) 679 | (node (ref C8) (pin 2)) 680 | (node (ref U6) (pin 12)) 681 | (node (ref R2) (pin 1)) 682 | (node (ref C6) (pin 1)) 683 | (node (ref U1) (pin 2)) 684 | (node (ref D3) (pin 1)) 685 | (node (ref U5) (pin 15)) 686 | (node (ref U6) (pin 5)) 687 | (node (ref U6) (pin 10)) 688 | (node (ref R9) (pin 1)) 689 | (node (ref U2) (pin 35)) 690 | (node (ref C4) (pin 1)) 691 | (node (ref C7) (pin 1)) 692 | (node (ref U2) (pin 42)) 693 | (node (ref C1) (pin 1)) 694 | (node (ref U2) (pin 5)) 695 | (node (ref C3) (pin 1)) 696 | (node (ref U2) (pin 18)) 697 | (node (ref P5) (pin 4)) 698 | (node (ref P1) (pin 6)) 699 | (node (ref R12) (pin 1)) 700 | (node (ref U7) (pin 12)) 701 | (node (ref U7) (pin 14)) 702 | (node (ref U7) (pin 13)) 703 | (node (ref C10) (pin 1)) 704 | (node (ref C2) (pin 1)) 705 | (node (ref U4) (pin 3)) 706 | (node (ref U4) (pin 4)) 707 | (node (ref U4) (pin 5)) 708 | (node (ref U4) (pin 2)) 709 | (node (ref U4) (pin 6)) 710 | (node (ref U4) (pin 7)) 711 | (node (ref P2) (pin 5)) 712 | (node (ref U4) (pin 1)) 713 | (node (ref C11) (pin 1)) 714 | (node (ref P4) (pin 2)) 715 | (node (ref C5) (pin 2))) 716 | (net (code 14) (name /YU) 717 | (node (ref U2) (pin 8)) 718 | (node (ref U7) (pin 16))) 719 | (net (code 15) (name /XL) 720 | (node (ref U7) (pin 15)) 721 | (node (ref U2) (pin 14))) 722 | (net (code 16) (name /YD) 723 | (node (ref U2) (pin 30)) 724 | (node (ref U7) (pin 18))) 725 | (net (code 17) (name /XR) 726 | (node (ref U7) (pin 17)) 727 | (node (ref U2) (pin 9))) 728 | (net (code 18) (name +3V3) 729 | (node (ref R5) (pin 1)) 730 | (node (ref P6) (pin 1)) 731 | (node (ref D1) (pin 2)) 732 | (node (ref R7) (pin 1)) 733 | (node (ref C9) (pin 1)) 734 | (node (ref C2) (pin 2)) 735 | (node (ref U5) (pin 8)) 736 | (node (ref U1) (pin 5)) 737 | (node (ref U6) (pin 14)) 738 | (node (ref C8) (pin 1)) 739 | (node (ref U6) (pin 1)) 740 | (node (ref R15) (pin 1)) 741 | (node (ref U4) (pin 13)) 742 | (node (ref U4) (pin 9)) 743 | (node (ref U4) (pin 10)) 744 | (node (ref U2) (pin 6)) 745 | (node (ref U4) (pin 12)) 746 | (node (ref U4) (pin 14)) 747 | (node (ref U4) (pin 11)) 748 | (node (ref R8) (pin 1)) 749 | (node (ref R14) (pin 1)) 750 | (node (ref U2) (pin 44)) 751 | (node (ref U2) (pin 36)) 752 | (node (ref U2) (pin 17)) 753 | (node (ref U4) (pin 8)) 754 | (node (ref U7) (pin 10)) 755 | (node (ref U7) (pin 9)) 756 | (node (ref C10) (pin 2)) 757 | (node (ref U7) (pin 2)) 758 | (node (ref P2) (pin 1)) 759 | (node (ref R3) (pin 1))) 760 | (net (code 19) (name /DAC) 761 | (node (ref P2) (pin 2)) 762 | (node (ref U2) (pin 3))) 763 | (net (code 20) (name /TX2) 764 | (node (ref U2) (pin 15)) 765 | (node (ref P2) (pin 3))) 766 | (net (code 21) (name /RX2) 767 | (node (ref U2) (pin 16)) 768 | (node (ref P2) (pin 4))) 769 | (net (code 22) (name /D+) 770 | (node (ref U2) (pin 34)) 771 | (node (ref P1) (pin 3))) 772 | (net (code 23) (name /TXD) 773 | (node (ref U5) (pin 22)) 774 | (node (ref P3) (pin 1)) 775 | (node (ref U2) (pin 38))) 776 | (net (code 24) (name /ESP-GPIO0) 777 | (node (ref R6) (pin 2)) 778 | (node (ref P3) (pin 4)) 779 | (node (ref U5) (pin 18))) 780 | (net (code 25) (name /ESP-~RESET) 781 | (node (ref R3) (pin 2)) 782 | (node (ref P3) (pin 3)) 783 | (node (ref U5) (pin 1))) 784 | (net (code 26) (name "Net-(D1-Pad1)") 785 | (node (ref R6) (pin 1)) 786 | (node (ref D1) (pin 1))) 787 | (net (code 27) (name "Net-(P5-Pad3)") 788 | (node (ref P5) (pin 3)) 789 | (node (ref U2) (pin 46))) 790 | (net (code 28) (name "Net-(P5-Pad2)") 791 | (node (ref U2) (pin 45)) 792 | (node (ref P5) (pin 2))) 793 | (net (code 29) (name /D-) 794 | (node (ref U2) (pin 33)) 795 | (node (ref P1) (pin 2))) 796 | (net (code 30) (name /VBUS) 797 | (node (ref R1) (pin 2)) 798 | (node (ref C4) (pin 2)) 799 | (node (ref U3) (pin 4)) 800 | (node (ref P1) (pin 1))) 801 | (net (code 31) (name /A4) 802 | (node (ref P6) (pin 5)) 803 | (node (ref U2) (pin 7))) 804 | (net (code 32) (name /SCK) 805 | (node (ref P6) (pin 2)) 806 | (node (ref U7) (pin 3)) 807 | (node (ref U2) (pin 20))) 808 | (net (code 33) (name /MISO) 809 | (node (ref U2) (pin 21)) 810 | (node (ref P6) (pin 3)) 811 | (node (ref U7) (pin 7))) 812 | (net (code 34) (name /MOSI) 813 | (node (ref U7) (pin 6)) 814 | (node (ref U2) (pin 19)) 815 | (node (ref P6) (pin 4))) 816 | (net (code 35) (name /BAT_VCC) 817 | (node (ref R12) (pin 2)) 818 | (node (ref R11) (pin 1)) 819 | (node (ref U2) (pin 10))) 820 | (net (code 36) (name /VBAT) 821 | (node (ref R11) (pin 2)) 822 | (node (ref U3) (pin 3)) 823 | (node (ref P4) (pin 1)) 824 | (node (ref C5) (pin 1)) 825 | (node (ref SW1) (pin 1))) 826 | (net (code 37) (name "Net-(R10-Pad1)") 827 | (node (ref U1) (pin 3)) 828 | (node (ref R10) (pin 1))) 829 | (net (code 38) (name "Net-(C1-Pad2)") 830 | (node (ref SW1) (pin 2)) 831 | (node (ref R10) (pin 2)) 832 | (node (ref U1) (pin 1)) 833 | (node (ref C1) (pin 2))) 834 | (net (code 39) (name /HEAD-SERVO) 835 | (node (ref U4) (pin 21)) 836 | (node (ref U2) (pin 23))) 837 | (net (code 40) (name /LL-SERVO) 838 | (node (ref U4) (pin 20)) 839 | (node (ref U2) (pin 24))) 840 | (net (code 41) (name /LF-SERVO) 841 | (node (ref U4) (pin 19)) 842 | (node (ref U2) (pin 25))) 843 | (net (code 42) (name /RL-SERVO) 844 | (node (ref U2) (pin 26)) 845 | (node (ref U4) (pin 18))) 846 | (net (code 43) (name /RF-SERVO) 847 | (node (ref U2) (pin 27)) 848 | (node (ref U4) (pin 17))) 849 | (net (code 44) (name /LA-SERVO) 850 | (node (ref U4) (pin 16)) 851 | (node (ref U2) (pin 28))) 852 | (net (code 45) (name /RA-SERVO) 853 | (node (ref U2) (pin 29)) 854 | (node (ref U4) (pin 15))) 855 | (net (code 46) (name "Net-(D2-Pad2)") 856 | (node (ref R1) (pin 1)) 857 | (node (ref D2) (pin 2))) 858 | (net (code 47) (name "Net-(R13-Pad2)") 859 | (node (ref U2) (pin 11)) 860 | (node (ref R13) (pin 2))) 861 | (net (code 48) (name "Net-(D3-Pad2)") 862 | (node (ref D3) (pin 2)) 863 | (node (ref R13) (pin 1))) 864 | (net (code 49) (name /DC) 865 | (node (ref U7) (pin 4)) 866 | (node (ref U2) (pin 12))) 867 | (net (code 50) (name /CS) 868 | (node (ref U2) (pin 13)) 869 | (node (ref U7) (pin 5))) 870 | (net (code 51) (name "Net-(D2-Pad1)") 871 | (node (ref U3) (pin 1)) 872 | (node (ref D2) (pin 1))) 873 | (net (code 52) (name "Net-(U5-Pad20)") 874 | (node (ref U5) (pin 20))) 875 | (net (code 53) (name "Net-(U5-Pad2)") 876 | (node (ref U5) (pin 2))) 877 | (net (code 54) (name "Net-(U5-Pad4)") 878 | (node (ref U5) (pin 4))) 879 | (net (code 55) (name "Net-(U5-Pad5)") 880 | (node (ref U5) (pin 5))) 881 | (net (code 56) (name "Net-(U5-Pad6)") 882 | (node (ref U5) (pin 6))) 883 | (net (code 57) (name "Net-(U5-Pad7)") 884 | (node (ref U5) (pin 7))) 885 | (net (code 58) (name "Net-(U5-Pad9)") 886 | (node (ref U5) (pin 9))) 887 | (net (code 59) (name "Net-(U5-Pad10)") 888 | (node (ref U5) (pin 10))) 889 | (net (code 60) (name "Net-(U5-Pad11)") 890 | (node (ref U5) (pin 11))) 891 | (net (code 61) (name "Net-(U5-Pad12)") 892 | (node (ref U5) (pin 12))) 893 | (net (code 62) (name "Net-(U5-Pad13)") 894 | (node (ref U5) (pin 13))) 895 | (net (code 63) (name "Net-(U5-Pad14)") 896 | (node (ref U5) (pin 14))) 897 | (net (code 64) (name "Net-(U6-Pad2)") 898 | (node (ref U6) (pin 2))) 899 | (net (code 65) (name "Net-(U6-Pad3)") 900 | (node (ref U6) (pin 3))) 901 | (net (code 66) (name "Net-(U6-Pad9)") 902 | (node (ref U6) (pin 9))) 903 | (net (code 67) (name "Net-(U2-Pad47)") 904 | (node (ref U2) (pin 47))) 905 | (net (code 68) (name "Net-(U2-Pad41)") 906 | (node (ref U2) (pin 41))) 907 | (net (code 69) (name "Net-(U2-Pad22)") 908 | (node (ref U2) (pin 22))) 909 | (net (code 70) (name "Net-(P1-Pad4)") 910 | (node (ref P1) (pin 4))) 911 | (net (code 71) (name "Net-(U2-Pad48)") 912 | (node (ref U2) (pin 48))) 913 | (net (code 72) (name "Net-(U2-Pad39)") 914 | (node (ref U2) (pin 39))) 915 | (net (code 73) (name "Net-(U6-Pad11)") 916 | (node (ref U6) (pin 11))) 917 | (net (code 74) (name "Net-(C6-Pad2)") 918 | (node (ref U2) (pin 1)) 919 | (node (ref Y1) (pin 1)) 920 | (node (ref C6) (pin 2))) 921 | (net (code 75) (name "Net-(C7-Pad2)") 922 | (node (ref Y1) (pin 2)) 923 | (node (ref C7) (pin 2)) 924 | (node (ref U2) (pin 2))) 925 | (net (code 76) (name "Net-(U1-Pad4)") 926 | (node (ref U1) (pin 4))) 927 | (net (code 77) (name "Net-(U6-Pad13)") 928 | (node (ref U6) (pin 13))) 929 | (net (code 78) (name "Net-(U6-Pad15)") 930 | (node (ref U6) (pin 15))) 931 | (net (code 79) (name "Net-(U6-Pad16)") 932 | (node (ref U6) (pin 16))))) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | --------------------------------------------------------------------------------