From c378b6a813f59a2c0b5ef3567c0bd5d449f4e5d3 Mon Sep 17 00:00:00 2001 From: panda Date: Wed, 22 Oct 2025 00:50:46 -0700 Subject: [PATCH] Initial commit --- .github/rename.py | 41 + .../report_processing/process_bom_files.py | 46 + .github/report_processing/process_drc_json.py | 57 + .github/report_processing/process_erc_json.py | 53 + .../report_processing/process_json_reports.py | 50 + .../report_processing/process_output_files.py | 94 + .github/report_processing/requirements.txt | 3 + .github/report_processing/violation.py | 18 + .../bom_report_template.mustache | 29 + .../drc_report_template.mustache | 133 + .../erc_report_template.mustache | 73 + .../report_templates/how_templates_work.md | 5 + .github/report_templates/readme.mustache | 153 ++ .github/workflows/main.yaml | 539 ++++ .gitignore | 31 + Hardware/tempalate_project/template.kicad_pcb | 2392 +++++++++++++++++ Hardware/tempalate_project/template.kicad_pro | 669 +++++ Hardware/tempalate_project/template.kicad_sch | 1376 ++++++++++ README.md | 115 + docs/BOM/.gitkeep | 0 docs/BOM/template_bill_of_materials.csv | 4 + docs/BOM/template_bom_report.md | 12 + docs/template_schematic.pdf | Bin 0 -> 22251 bytes pcbs/.gitkeep | 0 pcbs/template_gerber.zip | Bin 0 -> 31212 bytes project_settings.yaml | 45 + res/image-1.png | Bin 0 -> 105685 bytes res/image-2.png | Bin 0 -> 76014 bytes res/image-3.png | Bin 0 -> 73866 bytes res/image-4.png | Bin 0 -> 50615 bytes res/image-5.png | Bin 0 -> 187830 bytes res/image-6.png | Bin 0 -> 14627 bytes res/image-7.png | Bin 0 -> 134491 bytes res/image.png | Bin 0 -> 65409 bytes 34 files changed, 5938 insertions(+) create mode 100644 .github/rename.py create mode 100644 .github/report_processing/process_bom_files.py create mode 100644 .github/report_processing/process_drc_json.py create mode 100644 .github/report_processing/process_erc_json.py create mode 100644 .github/report_processing/process_json_reports.py create mode 100644 .github/report_processing/process_output_files.py create mode 100644 .github/report_processing/requirements.txt create mode 100644 .github/report_processing/violation.py create mode 100644 .github/report_templates/bom_report_template.mustache create mode 100644 .github/report_templates/drc_report_template.mustache create mode 100644 .github/report_templates/erc_report_template.mustache create mode 100644 .github/report_templates/how_templates_work.md create mode 100644 .github/report_templates/readme.mustache create mode 100644 .github/workflows/main.yaml create mode 100644 .gitignore create mode 100644 Hardware/tempalate_project/template.kicad_pcb create mode 100644 Hardware/tempalate_project/template.kicad_pro create mode 100644 Hardware/tempalate_project/template.kicad_sch create mode 100644 README.md create mode 100644 docs/BOM/.gitkeep create mode 100644 docs/BOM/template_bill_of_materials.csv create mode 100644 docs/BOM/template_bom_report.md create mode 100644 docs/template_schematic.pdf create mode 100644 pcbs/.gitkeep create mode 100644 pcbs/template_gerber.zip create mode 100644 project_settings.yaml create mode 100644 res/image-1.png create mode 100644 res/image-2.png create mode 100644 res/image-3.png create mode 100644 res/image-4.png create mode 100644 res/image-5.png create mode 100644 res/image-6.png create mode 100644 res/image-7.png create mode 100644 res/image.png diff --git a/.github/rename.py b/.github/rename.py new file mode 100644 index 0000000..42229e6 --- /dev/null +++ b/.github/rename.py @@ -0,0 +1,41 @@ +from pathlib import Path +import os +import sys +from ruamel.yaml import YAML + +# renames the main project in the template dir and in the project settings +def rename_project(project_name, new_name = "template"): + """renames the kicad project""" + project_path = str(Path(f"Hardware/{project_name}_PROJECT")) + files = os.listdir(project_path) + + for index, file in enumerate(files): + print(file) + os.rename(os.path.join(project_path, file), os.path.join(project_path, file.replace(project_name, new_name))) + + os.rename(project_path, project_path.replace(project_name, new_name)) + + pcb_path = str(Path(f"Hardware/{project_name}_PCB")) + os.rename(pcb_path, pcb_path.replace(project_name, new_name)) + + doc_path = str(Path(f"Hardware/{project_name}_DOCS")) + os.rename(doc_path, doc_path.replace(project_name, new_name)) + +def main(): + yaml : YAML = YAML() + with open(Path("project_settings.yaml"), "r") as yaml_file: + settings = yaml.load(yaml_file) + + print(f"{settings['project_name']=}") + print(f"{settings=}") + rename_project(settings["project_name"], sys.argv[1]) + settings["project_name"] = sys.argv[1] + settings["needs_setup"] = False + # have to just print it out a rewrite over .project_settings because this guy + # is dumb and doesnt just let you write these out to string + with open(Path("project_settings.yaml"), "w", encoding=("utf-8")) as file: + yaml.dump(settings, file) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/report_processing/process_bom_files.py b/.github/report_processing/process_bom_files.py new file mode 100644 index 0000000..50217ed --- /dev/null +++ b/.github/report_processing/process_bom_files.py @@ -0,0 +1,46 @@ +# look it would be piss easy to just keep it as a CSV but we can post process to add cool things like cost to each of the parts +import csv +import sys +import chevron +import datetime +from pprint import pprint + +file_path_delimter = "\\" if sys.platform == "win32" else "/" + +def load_bom(filename : str) -> dict: + out_dict = { + "parts" : [], + "time" : str(datetime.datetime.now().time()), + "date" : str(datetime.datetime.now().date().strftime("%d-%m-%Y")), + "total_cost" : 0, + "total_parts" : 0, + "project_name" : filename.strip(".csv").strip("bom").split(file_path_delimter)[-1] + } + + with open(filename, "r") as csv_file: + for row in csv.DictReader(csv_file): + part_cost = 0 + out_dict["total_parts"] += 1 + out_dict["parts"].append( + { + "Reference" : row["Refs"], + "Value" : row["Value"], + "Quantity" : row["Qty"], + "part_number" : row["Footprint"], + "cost" : part_cost, # add some API call somewhere here + } + ) + return out_dict + +def main(): + report_hash = load_bom(sys.argv[1]) + # pprint(report_hash) + with open(sys.argv[2], "r") as txt: + out = chevron.render(txt.read(), report_hash) + with open(sys.argv[3], "w") as md: + md.write(out) + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/report_processing/process_drc_json.py b/.github/report_processing/process_drc_json.py new file mode 100644 index 0000000..a83eef3 --- /dev/null +++ b/.github/report_processing/process_drc_json.py @@ -0,0 +1,57 @@ +from violation import Violation +import datetime +import json +from pprint import pprint + + + +def process_violation_list(drc_json : dict, list_name : str) -> None: + if list_name in drc_json.keys(): + unconnected_items_errors = [] + unconnected_items_warns = [] + number_of_errors = 0 + number_of_warns = 0 + for violation in drc_json[list_name]: + v = Violation(violation, "drc") + if (v.violation_type == "error"): + unconnected_items_errors.append(v) + number_of_errors += 1 + if (v.violation_type == "warn"): + unconnected_items_warns.append(v) + number_of_warns += 1 + + drc_json[list_name] = { + "errors" : unconnected_items_errors, + "warns" : unconnected_items_warns, + "number_of_errors" : number_of_errors, + "number_of_warns" : number_of_warns, + } + else: + drc_json.setdefault(list_name, {}) + drc_json[list_name].setdefault("number_of_errors", 0) + drc_json[list_name].setdefault("number_of_warns", 0) + +def process_report(report : str) -> dict: + out_dict : dict = json.loads(report) + number_of_errors = 0; + number_of_errors = 0; + + process_violation_list(out_dict, "unconnected_items") + process_violation_list(out_dict, "violations") + process_violation_list(out_dict, "schematic_parity") + + out_dict.setdefault( + "total_errors", + out_dict["unconnected_items"]["number_of_errors"] + + out_dict["violations"]["number_of_errors"] + + out_dict["schematic_parity"]["number_of_errors"] + ) + + out_dict.setdefault( + "total_warns", + out_dict["unconnected_items"]["number_of_warns"] + + out_dict["violations"]["number_of_warns"] + + out_dict["schematic_parity"]["number_of_warns"] + ) + + return out_dict \ No newline at end of file diff --git a/.github/report_processing/process_erc_json.py b/.github/report_processing/process_erc_json.py new file mode 100644 index 0000000..b7d76f6 --- /dev/null +++ b/.github/report_processing/process_erc_json.py @@ -0,0 +1,53 @@ +from violation import Violation +import datetime +import json + +class Sheet: + def __init__(self, json_obj : dict) -> None: + self.name : str = json_obj["path"] + self.name_md : str = self.name.replace(" ", "-") + self.number_of_errors : int = 0 + self.number_of_warns : int = 0 + self.errors : list[Violation] = list() + self.warns : list[Violation] = list() + + for violation in json_obj["violations"]: + v = Violation(violation, "erc") + if (v.violation_type == "error"): + self.errors.append(v) + self.number_of_errors += 1 + if (v.violation_type == "warn"): + self.warns.append(v) + self.number_of_warns += 1 + + def to_dict(self) -> dict: + out_dict = self.__dict__ + errors_strings = [] + warns_strings = [] + + for error in out_dict["errors"]: + errors_strings.append(error.__dict__) + out_dict["errors"] = errors_strings + + for warn in out_dict["warns"]: + warns_strings.append(warn.__dict__) + out_dict["warns"] = warns_strings + + return out_dict + +def process_report(report : str) -> dict: + out_dict : dict = json.loads(report) + + sheets = [Sheet(sheet) for sheet in out_dict["sheets"]] + out_dict["sheets"] = [sheet.to_dict() for sheet in sheets] + + out_dict.setdefault( + "total_errors", + sum(sheet.number_of_errors for sheet in sheets) + ) + out_dict.setdefault( + "total_warns", + sum(sheet.number_of_warns for sheet in sheets) + ) + + return out_dict \ No newline at end of file diff --git a/.github/report_processing/process_json_reports.py b/.github/report_processing/process_json_reports.py new file mode 100644 index 0000000..732a2b3 --- /dev/null +++ b/.github/report_processing/process_json_reports.py @@ -0,0 +1,50 @@ +# usage: python process_json_reports.py report.json template.mustache outfile.md project_name +import chevron +import sys +import datetime +import json +import process_erc_json +import process_drc_json +from pprint import pprint + + +def load_report(filename : str, project_name : str) -> dict: + out_dict : dict = {} + with open(filename, "r") as js: + if ("erc" in filename.lower()): + out_dict = process_erc_json.process_report(js.read()) + if ("drc" in filename.lower()): + out_dict = process_drc_json.process_report(js.read()) + + out_dict.setdefault( + "time", + str(datetime.datetime.now().time()) + ) + + out_dict.setdefault( + "date", + str(datetime.datetime.now().date().strftime("%d-%m-%Y")) + ) + + out_dict.setdefault( + "project_name", + project_name + ) + + out_dict.setdefault( + "has_violations", + True if out_dict["total_warns"] + out_dict["total_errors"] else None + ) + + return out_dict + +def main(): + report_hash = load_report(sys.argv[1], sys.argv[4]) + # pprint(report_hash) + with open(sys.argv[2], "r") as txt: + out = chevron.render(txt.read(), report_hash) + with open(sys.argv[3], "w") as md: + md.write(out) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/report_processing/process_output_files.py b/.github/report_processing/process_output_files.py new file mode 100644 index 0000000..6ed2a4d --- /dev/null +++ b/.github/report_processing/process_output_files.py @@ -0,0 +1,94 @@ +import chevron +import sys +import datetime +import json +import glob +from pathlib import Path + +from pprint import pprint + + +# erc +# { +# "project_name" : "string", +# "passing_erc" : "bool", +# "erc_summary_link" : "link", +# } + +# drc +# { +# "project_name" : "string", +# "passing_drc" : "bool", +# "drc_summary_link" : "link", +# } + +# project +# { +# "project_name" : "string", +# "project_link" : "link", +# "schematic_link" : "link", +# "gerber_link" : "link", +# "bom_report_link" : "link", +# "bom_csv_link" : "link" +# } + +EXTRAS_FILENAME = "readme_extras.json" + +def load_json_file(filename : str) -> dict: + with open(Path(f"{filename}/{filename}"), "r") as js: + return json.loads(js.read()) + +def create_hash(filenames : list[str]) -> dict: + report_outs = filenames + report_outs.remove("readme_extras.json") + + extras = {} + with open("readme_extras.json", "r") as js: + extras = json.loads(js.read()) + + reports_dicts : list[dict] = [] + for report_name in report_outs: + reports_dicts.append(load_json_file(report_name)) + + readme_hash = { + **extras, + "projects" : [], + "did_error" : False, + "multiple_projects" : None + } + for report in reports_dicts: + for project in readme_hash["projects"]: + if project["project_name"] == report["project_name"]: + for key in report.keys(): + project.setdefault(key, report[key]) + break + else: + readme_hash["projects"].append(report) + + pprint(readme_hash) + + for project in readme_hash["projects"]: + readme_hash["did_error"] |= not project["passing_erc"] + readme_hash["did_error"] |= not project["passing_drc"] + project.setdefault("passing_erc_emoji", "βœ…" if project["passing_erc"] == "true" else "❌") + project.setdefault("passing_drc_emoji", "βœ…" if project["passing_drc"] == "true" else "❌") + + readme_hash["multiple_projects"] = True if len(readme_hash["projects"]) > 1 else None + + pprint(readme_hash) + return readme_hash + +def main(): + print(sys.argv) + + readme_template, *args = sys.argv[1:] + + report_hash = create_hash(args) + + with open(readme_template, "r") as txt: + out = chevron.render(txt.read(), report_hash) + with open("README.md", "w") as md: + md.write(out) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.github/report_processing/requirements.txt b/.github/report_processing/requirements.txt new file mode 100644 index 0000000..b73c523 --- /dev/null +++ b/.github/report_processing/requirements.txt @@ -0,0 +1,3 @@ +chevron +pathlib +ruamel.yaml \ No newline at end of file diff --git a/.github/report_processing/violation.py b/.github/report_processing/violation.py new file mode 100644 index 0000000..a32b77c --- /dev/null +++ b/.github/report_processing/violation.py @@ -0,0 +1,18 @@ +class Violation: + def __init__(self, violation : dict, violation_report_type : str = ["erc", "drc"]) -> None: + self.violation_type : str = \ + "warn" if violation["severity"] == "warning" else "error" + self.name : str = violation["description"] + self.content : str = "" + + # this violation_report_type purely exists because of a bug + # in kicads json output format where json output on erc reports + # the position in decimeters + for item in violation["items"]: + item_string = item["description"] + x : float = float(item["pos"]["x"]) * (100.0 if (violation_report_type == "erc") else 1.0) + y : float = float(item["pos"]["y"]) * (100.0 if (violation_report_type == "erc") else 1.0) + # print(f"{x=}") + + item_string += f" at [x = {x:.4}mm, y = {y:.4}mm]\n" + self.content += item_string diff --git a/.github/report_templates/bom_report_template.mustache b/.github/report_templates/bom_report_template.mustache new file mode 100644 index 0000000..94ec368 --- /dev/null +++ b/.github/report_templates/bom_report_template.mustache @@ -0,0 +1,29 @@ +{{! hash schema }} +{{! { + "project_name" : "the name of the project", + "time" : "the name of the project", + "date" : "the name of the project", + "total_parts" : "number", + "total_cost" : "number", + "parts" : [ + { + "Reference" : "part_reference" , + "Value" : "the value of the part" , + "Quantity" : "number" , + "part_number" : "the part number" , + "cost" : "number" + } + ] +} }} +# πŸ“„ BOM for {{project_name}} πŸ“„ + +report created at {{time}} on {{date}}. + +{{project_name}} has a total of {{total_parts}} parts with a cost of ${{total_cost}}. + +| Reference | Value | Quantity | part number | cost | +| --------- | ----- | -------- | ----------- | ---- | +{{#parts}} +| {{Reference}} | {{Value}} | {{Quantity}} | {{part_number}} | ${{cost}} | +{{/parts}} +| | total | {{total_parts}} | total | ${{total_cost}} | diff --git a/.github/report_templates/drc_report_template.mustache b/.github/report_templates/drc_report_template.mustache new file mode 100644 index 0000000..8b236be --- /dev/null +++ b/.github/report_templates/drc_report_template.mustache @@ -0,0 +1,133 @@ +{{! hash schema }} +{{! { + "date" : "the date of creation", + "time" : "the time of creation", + "total_warns" : "number", + "total_errors" : "number", + "has_violations" : "flag to say if the project has a violation", + "violations" : { + "number_of_errors" : "number", + "number_of_warns" : "number", + "warns" : [ + { + "name" : "string", + "content" : "string" + } + ], + "errors" : [ + { + "name" : "string", + "content" : "string" + } + ] + }, + "unconnected_items" : { + "number_of_errors" : "number", + "number_of_warns" : "number", + "warns" : [ + { + "name" : "string", + "content" : "string" + } + ], + "errors" : [ + { + "name" : "string", + "content" : "string" + } + ] + }, + "schematic_parity" :{ + "number_of_errors" : "number", + "number_of_warns" : "number", + "warns" : [ + { + "name" : "string", + "content" : "string" + } + ], + "errors" : [ + { + "name" : "string", + "content" : "string" + } + ] + } +} }} + +# πŸ“Ÿ {{project_name}} DRC report πŸ“Ÿ + +report created at {{time}} πŸ•§ on {{date}} πŸ—“οΈ. + +the design rule check found: +- {{total_errors}} errors in your design 😱 +- {{total_warns}} warns in your design 🫨 + +{{#has_violations}} + +number of errors and warns breakdown per sheet: +| error type | number of errors πŸ”΄ | number of warns 🟠 | +| ----------------------------------------- | -------------------------------------- | ------------------------------------- | +| [violations](#violations) ❌ | {{violations.number_of_errors}} | {{violations.number_of_warns}} | +| [unconnected items](#unconnected-items) ⛓️‍πŸ’₯| {{unconnected_items.number_of_errors}} | {{unconnected_items.number_of_warns}} | +| [schematic parity](#schematic-parity) πŸ”— | {{schematic_parity.number_of_errors}} | {{schematic_parity.number_of_warns}} | +| total | {{total_errors}} | {{total_warns}} | + +below is a more in-depth breakdown of the errors and warns per error type. +note you should only use this for quickly checking that the project +you uploaded has no error or warn. YOU SHOULD *NOT* use this to actually +run the drc in kicad so you can see where is erroring. + + +# violations + +## errors : {{violations.number_of_errors}} +{{#violations.errors}} +### {{name}} +{{content}} +{{loction}} +{{/violations.errors}} + +## warns : {{violations.number_of_warns}} +{{#violations.warns}} +### {{name}} +{{content}} +{{loction}} +{{/violations.warns}} + +# unconnected items + +## errors : {{unconnected_items.number_of_errors}} +{{#unconnected_items.errors}} +### {{name}} +{{content}} +{{loction}} +{{/unconnected_items.errors}} + +## warns : {{unconnected_items.number_of_warns}} +{{#unconnected_items.warns}} +### {{name}} +{{content}} +{{loction}} +{{/unconnected_items.warns}} + +# schematic parity + +## errors : {{schematic_parity.number_of_errors}} +{{#schematic_parity.errors}} +### {{name}} +{{content}} +{{loction}} +{{/schematic_parity.errors}} + +## warns : {{schematic_parity.number_of_warns}} +{{#schematic_parity.warns}} +### {{name}} +{{content}} +{{loction}} +{{/schematic_parity.warns}} + +{{/has_violations}} +{{^has_violations}} +the design had no errors or warns, good job. βœ…βœ… +{{/has_violations}} diff --git a/.github/report_templates/erc_report_template.mustache b/.github/report_templates/erc_report_template.mustache new file mode 100644 index 0000000..5c5ec0b --- /dev/null +++ b/.github/report_templates/erc_report_template.mustache @@ -0,0 +1,73 @@ +{{! hash schema }} +{{! { + "date" : "the date of creation", + "time" : "the time of creation", + "total_warns" : "number", + "total_errors" : "number", + "has_violations" : "flag to say if the project has a violation", + "sheets" : [ + { + "name" : "string", + "name_md" : "just name but i replaced the spaces with hyphens", + "number_of_errors" : "number", + "number_of_warns" : "number", + "warns" : [ + { + "name" : "string", + "content" : "string" + } + ], + "errors" : [ + { + "name" : "string", + "content" : "string" + } + ] + } + ] +} }} +# ⚑{{project_name}} ERC report ⚑ + +report created at {{time}} πŸ•§ on {{date}} πŸ—“οΈ. + +the electronic rules check found: +- {{total_errors}} errors in your design 😱 +- {{total_warns}} warns in your design 🫨 + +{{#has_violations}} + + +number of errors and warns breakdown per sheet: +| sheet name πŸ“„| number of errors πŸ”΄ | number of warns 🟠 | +| ---------- | ---------------- | --------------- | +{{#sheets}} +| [{{name}}](#{{name_md}}) | {{number_of_errors}} | {{number_of_warns}} | +{{/sheets}} +| total | {{total_errors}}| {{total_warns}}| + +below is a more in-depth breakdown of the errors and warn per sheets. +note you should only use this for quickly checking that the project +you uploaded has no error or warn. YOU SHOULD *NOT* use this to actually +run your ERC in kicad so you can see where is erroring. + +{{#sheets}} + +# {{name}} +## errors : {{number_of_errors}} +{{#errors}} +### {{name}} +{{content}} +{{/errors}} + +## warns : {{number_of_warns}} +{{#warns}} +### {{name}} +{{content}} +{{/warns}} + +{{/sheets}} + +{{/has_violations}} +{{^has_violations}} +the design had no errors or warns, good job. βœ…βœ… +{{/has_violations}} \ No newline at end of file diff --git a/.github/report_templates/how_templates_work.md b/.github/report_templates/how_templates_work.md new file mode 100644 index 0000000..d52b322 --- /dev/null +++ b/.github/report_templates/how_templates_work.md @@ -0,0 +1,5 @@ +# how the templates work + +templates work by using a json file to fill in the templating spots. for more information on the templates checkout [mustache templates](https://mustache.github.io/). these templates use a json file format as what they call a "hash" to fill out the templates. the hashs for each of these templates are layout at the top of each of the `.mustache` files in a comment. These are also the hashes outputted by the processing scripts. usages for these scripts are at the top of the file. + +if any schema says bool this actually means the value is either something or either doesnt exist/null. \ No newline at end of file diff --git a/.github/report_templates/readme.mustache b/.github/report_templates/readme.mustache new file mode 100644 index 0000000..6ba1f6c --- /dev/null +++ b/.github/report_templates/readme.mustache @@ -0,0 +1,153 @@ +{{! hash schema }} +{{! { + "badge" : "the ci badge", + "lastest_action_run_link" : "link to the lastest action", + "did_error" : "to check if errors occured in the pipeline", + "title" : "the tiltle of the project, can be set in project_settings or it will use the repo name", + "multiple_projects" : "bool", + "projects" : [ + { + "project_name" : "string", + "project_link" : "link", + "passing_erc" : "bool", + "passing_erc_emoji" : "string", + "erc_summary_link" : "link", + "passing_drc" : "bool", + "passing_drc_emoji" : "string", + "drc_summary_link" : "link", + "gerber_link" : "link", + "schematic_link" : "link", + "bom_report_link" : "link", + "bom_csv_link" : "link" + } + ] +} }} +# kicad project {{title}} +{{badge}} +{{! [![.github/workflows/main.yaml](https://github.com/sirlilpanda/kicad-project-template/actions/workflows/main.yaml/badge.svg)](https://github.com/sirlilpanda/kicad-project-template/actions/workflows/main.yaml) }} + +a cool table showing the workflow of all the kicad projects. +| project_name | DRC | ERC | +| ------------ | --- | --- | +{{#projects}} +| {{project_name}} | [{{passing_erc_emoji}}]({{erc_summary_link}})| [{{passing_drc_emoji}}]({{drc_summary_link}}) | +{{/projects}} + +for a quick guide check [project setup](#project-setup) + +This is a simple project template for new kicad projects. This template has some basic setup already completed such as workflows for auto creating all the things you forget when creating a kicad project such as: + +{{^multiple_projects}} +{{#projects}} +- [gerbers]({{gerber_link}}) +- [bom]({{bom_report_link}}) +- [schematic pdf]({{schematic_link}}) +{{/projects}} +{{/multiple_projects}} + +{{#multiple_projects}} +| project_name | schematic | bom | bom report | gerbers | +| ------------ | --------- | --- | ---------- | ------- | +{{#projects}} +| [{{project_name}}]({{project_link}}) | [{{project_name}}_schematic.pdf]({{schematic_link}}) | [{{project_name}}_bill_of_materials.csv]({{bom_csv_link}}) | [{{project_name}}_bom_report.md]({{bom_report_link}}) | [{{project_name}}_grbr.zip]({{gerber_link}}) | +{{/projects}} +{{/multiple_projects}} + +This workflow will also run the design rules check on the PCB and schematic to ensure that you upload a working PCB. These reports are uploaded as summaries within the github [actions tab]({{lastest_action_run_link}}). This template has a simple schematic PCB in it (because DRC fails on an empty PCB). Shown below is the example PCB. + +![example pcb with battery diode and resistor](res/image.png) + +besides from that the project also has: + +- common predefined trace widths +- smallest vias size [JLCPBC allows](https://jlcpcb.com/capabilities/Capabilities#Drilling) +- custom net colours in the schematic editor + - `red` for +V + - `blue` for -V + - `grey` for ground + +to create a repo from this template follow this [guide](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) + +contained in this template are: +--- +- `.github/` : all files relating to github actions and other admin see [here](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions) for more example of what can be placed in it + - `report_processing` : where the python scripts are stored for processing the json report data from kicad + - `report_templates` : where the template for said reports are stored + - `workflows/` : this is where the github actions are kept + - `main.yaml` : the main github action that will auto generate all files required and run DRC and ERC + - `rename.py` : the script for renaming the project +- `hardware/` : this is where the kicad projects live note this can be changed +- `docs/` : this is where the generate docs are placed by default + - `BOM/` : where the bill of materials and price breakdown are kept + - `bill_of_materials.csv`: the auto generated bom for the kicad project + - `bom_report.md` : a report for the bill of materials + - `template_schematic.pdf` : the schematic for the kicad project, auto generated by the github action +- `pcbs/` : this is where the auto generated gerbers for the kicad project are stored + +- `res/` : where resources are stored for the README + +- `.gitignore`: a slightly modified gitignore from the [standard one](https://github.com/github/gitignore/blob/main/KiCad.gitignore) + +- `project_settings.yaml` : where the settings for this project is stored + +- `README.md` : this file, suggest you change this one creating your project + +## project settings +there are currently very few project settings that can be changed (will will be change in the future) these are: +| setting | description | +| --------------------------- | ----------------------------------------------------------------- | +| has_been_set_up | a flag to tell the setup action if the project has been set up | +| project_name | the name of the project, this will be set to the name of the repo | +| production_formats | the output production format for the PCBs | +| dynamic_read_me | allow the readme to be updated using the given template | +| bom_template_path | the template used to write the bom report files | +| erc_report_template_path | the template used to write the erc report files | +| drc_report_template_path | the template used to write the drc report files | +| readme_template_path | the template used to write projects readme | +| schematic_output_name | the name suffix of the generated schematics | +| bom_csv_output_name | the name suffix of the generated bom csv file | +| bom_report_output_name | the name suffix of the generated bom report | +| production_file_output_name | the name suffix of the generated production file | +| schematic_output_path | the output path of the generated schematics files | +| bom_csv_output_path | the output path of the generated bom csv file | +| bom_report_output_path | the output path of the generated bom report | +| production_file_output_path | the output path of the generated production file | + +## project setup + +### creating a new repo with the template + +creating a new template from a repo is simple: + +1. click on the button in the top right hand corner called `use this template` +![alt text](res/image-5.png) + +2. when the drop down menu appears click on `create a new repository` +![alt text](res/image-6.png) + +3. once you click you will be brought to this page, note that the repo name you choose here will be the name that you kicad project is called. +![alt text](res/image-7.png) + +after these steps you then need to configure the repo settings to do their magic see [configuring repo settings](#configuring-repo-settings) for what to do next. + +### configuring repo settings + +once you have created a new repo with the template, you ill have to configure the github action settings. this is because you will get an error that looks something along these lines: +![alt text](res/image-4.png) +where the action can not commit the changes due to not having permissions follow these steps: +1. open the repo setting +![alt text](res/image-1.png) +2. then head in to actions : General +![alt text](res/image-2.png) +3. then scroll down to workflow permissions and ensure that both + `Read and write permissions` and `Allow GitHub Actions to create and approve pull requests` are ticked as seen below +![alt text](res/image-3.png) + +this should fix the problem if not, go harass stack overflow they need it +Once all of these steps have been followed the workflow should be passing, however the `README.md` will only update on the next push request. + +## editing the readme + +As this repo can and will automatically update the repo corresponding to the given readme template. If you dont want to use this you can always disable this by setting the `dynamic_read_me` to `false`. but if you want some very cool features like auto updating tables to show what projects are passing the rules check or simple links to parts of your directory. then have a look at the template readme and learn [mustache](https://mustache.github.io/) + +## improvements diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..87a69e0 --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,539 @@ +on: + push: + branches: [main, master, workflow_testing] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + + +env: + ERC_JOB_NAME : "⚑ERC report⚑" + DRC_JOB_NAME : "πŸ“Ÿ DRC report πŸ“Ÿ" + +jobs: + setup_new_project: # this job only exists for project creation + runs-on: ubuntu-latest + name: set up project + steps: + - name: Checkout + uses: actions/checkout@v4 + + # reads the project_setting.yaml file allowing you to access it with steps.id.outputs.[key] + - name: read yaml file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: check setup + run: | + echo ${{steps.yaml.outputs.needs_setup}} + + - name: Setting up Python and chevron to processes failed reports + # workflows really need some more work done on them + if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}} + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: installing requirements + if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}} + run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt + + - name: rename project if setup has not been completed + if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}} + run: python ${{ github.workspace }}/.github/rename.py ${{github.event.repository.name}} + + - name: commit production files + if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}} + uses: EndBug/add-and-commit@v9 + with: + default_author: github_actions + message: 'setup project' + push: true + add: "." + + setup_matrixs: + outputs: + projects: ${{ steps.projects.outputs.projects }} + runs-on: ubuntu-latest + name: matrix setup πŸ—“οΈ + needs: setup_new_project + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setting up Python + # workflows really need some more work done on them + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: installing requirements + run: pip install pyyaml + + - name: creating list start + run: + echo -n "projects=[" >> temp.txt + + # this find commad outputs path1,path2,path3 with out the .kicad_pro ext + # .kicad_pro ext is removed because the erc and drc steps want either a + # .kicad_sch or .kicad_pcb file it also makes it easier to name files + # with the project name + # this output will look like + # projects=["path/projet_name", "path/projet_name2", ...] + - name: get kicad project names + run: + find . -type f -name "*.kicad_pro" -exec sh -c 'echo -n "\"${0%.kicad_pro}\","' {} \; | sed 's/.\{1\}$//' >> temp.txt + + - name: creating list end + run: + echo "]" >> temp.txt + + - name: list output + run: + cat temp.txt + + - name: creating list end + id: projects + run: + cat temp.txt >> "$GITHUB_OUTPUT" + + +# basename is used here to remove the rest of the path from the find +# + DRC: + runs-on: ubuntu-latest + name: "πŸ“Ÿ DRC report πŸ“Ÿ" + needs: setup_matrixs + strategy: + matrix: + project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }} + steps: + + + - name: check matrix + run: basename ${{ matrix.project_path }} + + - name: setting env + run: + echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: read-yaml-file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: Setting up Python and chevron to processes reports + # workflows really need some more work done on them + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: installing requirements + run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt + + - name: Run KiCad DRC + id: drc + uses: sparkengineering/kicad-action@v4 + with: + kicad_pcb: ${{ matrix.project_path }}.kicad_pcb + pcb_drc: true + report_format: json + pcb_drc_file: drc.json + + - name: checking files were created + run: + ls -R + + - name: creating DRC report in markdown + if: ${{ always() }} + run: python + ${{ github.workspace }}/.github/report_processing/process_json_reports.py + ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/drc.json + ${{ github.workspace }}/${{steps.yaml.outputs.drc_report_template_path}} + ${{ github.workspace }}/${{ env.PROJECT_NAME }}_drc.md + ${{ env.PROJECT_NAME }} + + - name: upload report summary + if: ${{ always() }} + run: cat ${{ github.workspace }}/${{ env.PROJECT_NAME }}_drc.md >> $GITHUB_STEP_SUMMARY + + - name: get summary url + if: ${{always()}} + id: exp + uses: pl-strflt/job-summary-url-action@v1 + with: + job: "${{env.DRC_JOB_NAME}} (${{matrix.project_path}})" + + - name: create files to upload + if: ${{always()}} + run: | + echo "{\"passing_drc\":\"${{steps.drc.conclusion != 'failure'}}\",\"project_name\":\"${{env.PROJECT_NAME}}\", \"drc_summary_link\":\"${{ steps.exp.outputs.job_summary_url }}\"}" >> ${{env.PROJECT_NAME}}_drc.json + + - name: upload data for readme updating + if: ${{always()}} + uses: actions/upload-artifact@v4 + with: + name: ${{env.PROJECT_NAME}}_drc.json + path: ${{env.PROJECT_NAME}}_drc.json + + ERC: + runs-on: ubuntu-latest + name: "⚑ERC report⚑" + needs: setup_matrixs + strategy: + matrix: + project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }} + steps: + - name: check matrix + run: basename ${{ matrix.project_path }} + + - name: setting env + run: + echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV + + - name: setting env + run: + echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: read-yaml-file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: Setting up Python and chevron to processes reports + # workflows really need some more work done on them + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: installing requirements + run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt + + - name: Run KiCad ERC + id: erc + uses: sparkengineering/kicad-action@v4 + with: + kicad_sch: ${{ matrix.project_path }}.kicad_sch + sch_erc: true + report_format: json + sch_erc_file: erc.json + + - name: checking files were created + run: + ls -R + + - name: creating ERC report in markdown + if: ${{ always() }} + run: python + ${{ github.workspace }}/.github/report_processing/process_json_reports.py + ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/erc.json + ${{ github.workspace }}/${{steps.yaml.outputs.erc_report_template_path}} + ${{ github.workspace }}/${{ env.PROJECT_NAME }}_erc.md + ${{ env.PROJECT_NAME }} + + - name: upload report summary + if: ${{ always() }} + run: cat ${{ github.workspace }}/${{ env.PROJECT_NAME }}_erc.md >> $GITHUB_STEP_SUMMARY + + - name: get summary url + if: ${{always()}} + id: exp + uses: pl-strflt/job-summary-url-action@v1 + with: + job: "${{env.ERC_JOB_NAME}} (${{matrix.project_path}})" + + - name: print summary url + if: ${{always()}} + run: echo '${{ steps.exp.outputs.job_summary_url }}' + shell: bash + + + - name: create files to upload + if: ${{always()}} + run: | + echo "{\"passing_erc\":\"${{steps.erc.conclusion != 'failure'}}\",\"project_name\":\"${{env.PROJECT_NAME}}\", \"erc_summary_link\":\"${{ steps.exp.outputs.job_summary_url }}\"}" >> ${{env.PROJECT_NAME}}_erc.json + + - name: upload data for readme updating + if: ${{always()}} + uses: actions/upload-artifact@v4 + with: + name: ${{env.PROJECT_NAME}}_erc.json + path: ${{env.PROJECT_NAME}}_erc.json + + production_job: + runs-on: ubuntu-latest + name: creating production files bom sch gerbers πŸ“‚ + needs: setup_matrixs + strategy: + matrix: + project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + + + - name: read-yaml-file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: setting env + run: + echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV + + - name: setting env + run: | # | the / here is defined in the project settings + echo "schematic_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.schematic_output_name}}.pdf" >> $GITHUB_ENV + echo "bill_of_materials_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_csv_output_name}}.csv" >> $GITHUB_ENV + echo "production_format_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.production_file_output_name}}.zip" >> $GITHUB_ENV + echo "bom_report_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_report_output_name}}.md" >> $GITHUB_ENV + + + - name: checking envs + run: + echo "${{env.schematic_file}}" + echo "${{env.bill_of_materials_file}}" + echo "${{env.production_format_file}}" + echo "${{env.bom_report_file}}" + + + - name: setting env + run: + echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV + + - name: setting env + run: | # | the / here is defined in the project settings + echo "schematic_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.schematic_output_name}}.pdf" >> $GITHUB_ENV + echo "bill_of_materials_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_csv_output_name}}.csv" >> $GITHUB_ENV + echo "production_format_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.production_file_output_name}}.zip" >> $GITHUB_ENV + echo "bom_report_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_report_output_name}}.md" >> $GITHUB_ENV + + + - name: checking envs + run: + echo "${{env.schematic_file}}" + echo "${{env.bill_of_materials_file}}" + echo "${{env.production_format_file}}" + echo "${{env.bom_report_file}}" + + - name: Setting up Python and chevron to processes reports + # workflows really need some more work done on them + if: ${{ !cancelled() }} + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: installing requirements + if: ${{ !cancelled() }} + run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt + + - name: Export production files + id: production + uses: sparkengineering/kicad-action@v4 + if: '!cancelled()' + with: + kicad_sch: ${{ matrix.project_path }}.kicad_sch + sch_pdf: true # Generate PDF + sch_bom: true # Generate BOM + kicad_pcb: ${{ matrix.project_path }}.kicad_pcb + pcb_gerbers: true # Generate Gerbers + + - name: Moving production files to correct location + if: ${{ !cancelled() && steps.production.conclusion == 'success' }} + run: | + mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/sch.pdf ${{ github.workspace }}/${{env.schematic_file}} + mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/bom.csv ${{ github.workspace }}/${{env.bill_of_materials_file}} + mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/gbr.zip ${{ github.workspace }}/${{env.production_format_file}} + + + - name: creating BOM report in markdown + if: ${{ !cancelled() }} + run: python + ${{ github.workspace }}/.github/report_processing/process_bom_files.py + ${{ github.workspace }}/${{env.bill_of_materials_file}} + ${{ github.workspace }}/${{steps.yaml.outputs.bom_template_path}} + ${{ github.workspace }}/${{env.bom_report_file}} + + - name: upload report' + uses: actions/upload-artifact@v4 + with: + name: production-files-${{env.PROJECT_NAME}}.zip + path: | + ${{ github.workspace }}/${{env.schematic_file}} + ${{ github.workspace }}/${{env.bill_of_materials_file}} + ${{ github.workspace }}/${{env.production_format_file}} + ${{ github.workspace }}/${{env.bom_report_file}} + + - name: data for readme updating + if: ${{always()}} + run: | + echo "{" >> ${{env.PROJECT_NAME}}_project.json + echo "\"schematic_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.schematic_file}}\"," >> ${{env.PROJECT_NAME}}_project.json + echo "\"bom_csv_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.bill_of_materials_file}}\"," >> ${{env.PROJECT_NAME}}_project.json + echo "\"bom_report_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.bom_report_file}}\"," >> ${{env.PROJECT_NAME}}_project.json + echo "\"gerber_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.production_format_file}}\"," >> ${{env.PROJECT_NAME}}_project.json + echo "\"project_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/$(dirname ${{matrix.project_path}})\"," >> ${{env.PROJECT_NAME}}_project.json + echo "\"project_name\":\"${{env.PROJECT_NAME}}\"" >> ${{env.PROJECT_NAME}}_project.json + echo "}" >> ${{env.PROJECT_NAME}}_project.json + + - name: upload report + if: ${{always()}} + uses: actions/upload-artifact@v4 + with: + name: ${{env.PROJECT_NAME}}_project.json + path: ${{env.PROJECT_NAME}}_project.json + + readme_job: + runs-on: ubuntu-latest + name: update readme + if: ${{ always() }} + needs: [DRC, ERC, production_job] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: read-yaml-file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: download ercs files + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + uses: actions/download-artifact@v4 + with: + pattern: "*_erc.json" + path: ${{ github.workspace }} + + - name: download drcs files + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + uses: actions/download-artifact@v4 + with: + pattern: "*_drc.json" + path: ${{ github.workspace }} + + - name: download production json files + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + uses: actions/download-artifact@v4 + with: + pattern: "*_project.json" + path: ${{ github.workspace }} + + - name: Setting up Python + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + - name: installing requirements + if: ${{ !cancelled() && steps.yaml.outputs.dynamic_read_me == 'true' }} + run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt + + - name: create extra info for readme hash + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + run: | + echo "{" >> readme_extras.json + echo "\"badge\" : \"[![.github/workflows/main.yaml](https://github.com/${{github.repository}}/actions/workflows/main.yaml/badge.svg?branch=${{github.ref_name}})](https://github.com/${{github.repository}}/actions/workflows/main.yaml)\"," >> readme_extras.json + echo "\"lastest_action_run_link\" : \"https://github.com/${{github.repository}}/actions/runs/${{ github.run_id }}\"," >> readme_extras.json + echo "\"title\" : \"${{steps.yaml.outputs.project_name}}\"" >> readme_extras.json + echo "}" >> readme_extras.json + - name: show extras + run: + cat readme_extras.json + + - name: create new readme + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + run: + python + ${{ github.workspace }}/.github/report_processing/process_output_files.py + ${{ github.workspace }}/${{steps.yaml.outputs.readme_template_path}} *.json + + - name: upload data for readme updating + if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: README.md + path: README.md + + - name: list everything + if: ${{always()}} + run: ls -R + + upload_job: + runs-on: ubuntu-latest + name: commit production files + if: ${{ always() }} + needs: [readme_job] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: read-yaml-file + uses: juliojimenez/yamler@v1.1.0 + id: yaml + with: + yaml-file: ${{ github.workspace }}/project_settings.yaml + + - name: download production files + uses: actions/download-artifact@v4 + with: + pattern: production-files-* + path: ${{ github.workspace }} + + - name: download readme + uses: actions/download-artifact@v4 + with: + name: README.md + path: ${{ github.workspace }} + + - name: check downloads + run: ls -R + + - name: Moving files to correct location + run: | + mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.schematic_output_name}}.pdf ${{ github.workspace }}/${{steps.yaml.outputs.schematic_output_path}} + mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.bom_csv_output_name}}.csv ${{ github.workspace }}/${{steps.yaml.outputs.bom_csv_output_path}} + mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.bom_report_output_name}}.md ${{ github.workspace }}/${{steps.yaml.outputs.bom_report_output_path}} + mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.production_file_output_name}}.zip ${{ github.workspace }}/${{steps.yaml.outputs.production_file_output_path}} + + - name: commit production files + uses: EndBug/add-and-commit@v9 + with: + default_author: github_actions + message: 'production files' + push: true + pull: '--rebase --autostash' + tag_push: '--force' # just makes life easier + tag: 'v1.0.0 --force' + add: | + ${{ github.workspace }}/*${{steps.yaml.outputs.schematic_output_name}}.pdf + ${{ github.workspace }}/*${{steps.yaml.outputs.bom_csv_output_name}}.csv + ${{ github.workspace }}/*${{steps.yaml.outputs.bom_report_output_name}}.md + ${{ github.workspace }}/*${{steps.yaml.outputs.production_file_output_name}}.zip + ${{ github.workspace }}/README.md + + - name: list everything + if: ${{always()}} + run: ls -R + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2fe891 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# For PCBs designed using KiCad: https://www.kicad.org/ +# Format documentation: https://kicad.org/help/file-formats/ + +# Temporary files +Hardware/*/*.000 +Hardware/*/*.bak +Hardware/*/*.bck +Hardware/*/*.kicad_pcb-bak +Hardware/*/*.kicad_sch-bak +Hardware/*/*-backups +Hardware/*/*.kicad_prl +Hardware/*/*.sch-bak +Hardware/*/*~ +Hardware/*/_autosave-* +Hardware/*/*.tmp +Hardware/*/*-save.pro +Hardware/*/*-save.kicad_pcb +Hardware/*/fp-info-cache + +# Netlist files (exported from Eeschema) +Hardware/*/*.net + +# Autorouter files (exported from Pcbnew) +Hardware/*/*.dsn +Hardware/*/*.ses + +# Exported BOM files +Hardware/*/*.xml +Hardware/*/*.csv + +__pycache__/ diff --git a/Hardware/tempalate_project/template.kicad_pcb b/Hardware/tempalate_project/template.kicad_pcb new file mode 100644 index 0000000..c2f3b2e --- /dev/null +++ b/Hardware/tempalate_project/template.kicad_pcb @@ -0,0 +1,2392 @@ +(kicad_pcb + (version 20240108) + (generator "pcbnew") + (generator_version "8.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (layers + (0 "F.Cu" signal) + (1 "In1.Cu" signal) + (2 "In2.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + (setup + (stackup + (layer "F.SilkS" + (type "Top Silk Screen") + ) + (layer "F.Paste" + (type "Top Solder Paste") + ) + (layer "F.Mask" + (type "Top Solder Mask") + (thickness 0.01) + ) + (layer "F.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 1" + (type "prepreg") + (thickness 0.1) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "In1.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 2" + (type "core") + (thickness 1.24) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "In2.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "dielectric 3" + (type "prepreg") + (thickness 0.1) + (material "FR4") + (epsilon_r 4.5) + (loss_tangent 0.02) + ) + (layer "B.Cu" + (type "copper") + (thickness 0.035) + ) + (layer "B.Mask" + (type "Bottom Solder Mask") + (thickness 0.01) + ) + (layer "B.Paste" + (type "Bottom Solder Paste") + ) + (layer "B.SilkS" + (type "Bottom Silk Screen") + ) + (copper_finish "None") + (dielectric_constraints no) + ) + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (plot_on_all_layers_selection 0x0000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (viasonmask no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plotreference yes) + (plotvalue yes) + (plotfptext yes) + (plotinvisibletext no) + (sketchpadsonfab no) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (net 1 "/+V") + (net 2 "/-V") + (net 3 "Net-(D1-A)") + (footprint "LED_SMD:LED_0805_2012Metric" + (layer "F.Cu") + (uuid "1842c2db-af4b-4d18-84bb-f7f9ff6e2d30") + (at 130.2 100.4 90) + (descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "LED") + (property "Reference" "D1" + (at -3.023587 0.028661 -90) + (layer "F.SilkS") + (uuid "1decbab8-10fc-4fbf-be47-c634a49fc12b") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "LED" + (at 0 1.65 -90) + (layer "F.Fab") + (uuid "1a61e433-bbb3-4793-a6cf-303a7d6b74f0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "LED_SMD:LED_0805_2012Metric" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "ee50a25d-4f6b-457b-ac4e-e59023b92cfc") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "6614ca47-bd78-495b-8f7c-fad88444cc6b") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Light emitting diode" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9a6c9179-af04-42a3-8c61-72a4aa68b335") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "LED* LED_SMD:* LED_THT:*") + (path "/66005799-571e-41b7-9000-70881f5abb32") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr smd) + (fp_line + (start 1 -0.96) + (end -1.684999 -0.96) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "cbf3d863-208a-4d3a-ba95-b9e22fafd975") + ) + (fp_line + (start -1.684999 -0.96) + (end -1.684999 0.96) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "e16db292-7a9c-4b61-9844-55a7be94edd2") + ) + (fp_line + (start -1.684999 0.96) + (end 1 0.96) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "45ed0f84-451a-4241-8a34-ebbba3e16b36") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "63c7cbb8-6223-4e62-956b-4e6fa4b997c0") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "a4e5beaf-a9cb-41a8-b396-93fd6d6c5ea4") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "91e2ae35-5305-4650-a7e6-44298247ef27") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "b8d1d60c-34c8-4a2e-bebb-a228b47f638b") + ) + (fp_line + (start 1 -0.6) + (end -0.7 -0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3960df1a-bff6-4366-bb01-017d288bd3ac") + ) + (fp_line + (start -0.7 -0.6) + (end -1 -0.3) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "804ca728-027e-4cc6-9cd1-753427b2fb59") + ) + (fp_line + (start -1 -0.3) + (end -1 0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c5d85d0c-e3a2-4909-aff0-9500c0f133a5") + ) + (fp_line + (start 1 0.6) + (end 1 -0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e52976de-fb5f-4380-ba5a-dc7d89dc6499") + ) + (fp_line + (start -1 0.6) + (end 1 0.6) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a82206b5-bc67-4f89-a9a6-d6ca790b346c") + ) + (fp_text user "${REFERENCE}" + (at 0 0 -90) + (layer "F.Fab") + (uuid "9e958dba-c59c-433a-a40e-5351be43da83") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.937501 0 90) + (size 0.975 1.4) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 2 "/-V") + (pinfunction "K") + (pintype "passive") + (uuid "07cc3883-2b1c-4d5d-af61-fbb7e841b88b") + ) + (pad "2" smd roundrect + (at 0.937501 0 90) + (size 0.975 1.4) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.25) + (net 3 "Net-(D1-A)") + (pinfunction "A") + (pintype "passive") + (uuid "75a591d2-e6c7-4f05-8d8d-a7b9721cb2df") + ) + (model "${KICAD8_3DMODEL_DIR}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (layer "F.Cu") + (uuid "5fff0ea9-334d-48ef-9ce7-d9adba7d0348") + (at 131.8 109) + (descr "Mounting Hole 3.2mm, M3, DIN965") + (tags "mounting hole 3.2mm m3 din965") + (property "Reference" "H3" + (at 0 -3.8 0) + (layer "F.SilkS") + (hide yes) + (uuid "a654be53-d6bd-4635-a02a-2a3331a1d051") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 3.8 0) + (layer "F.Fab") + (uuid "a8f03379-8583-4a8e-b137-6f465a7d0d8c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "bbedfa6e-f182-415b-a5e6-e0f1c9e7c5be") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "aad8a45c-c31d-4a47-a43c-d538f5cb5feb") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "26ce2e95-cbf6-453c-8f59-c883af39ddda") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/303036eb-ba8a-4bb8-a458-e580349ad373") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 2.8 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "c77e25d7-c13b-4531-ad1a-2d2105720d63") + ) + (fp_circle + (center 0 0) + (end 3.05 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "8f5234d0-7bbc-4154-910a-8f7056079f7d") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "4b63cf9d-321c-40c5-aa55-aaaaef68e404") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at 0 0) + (size 5.6 5.6) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "c740de04-e150-4f4a-9cd8-9e59d8557557") + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (layer "F.Cu") + (uuid "66a19e9a-23e2-462e-9566-8c6997a2d4e7") + (at 149.6 109) + (descr "Mounting Hole 3.2mm, M3, DIN965") + (tags "mounting hole 3.2mm m3 din965") + (property "Reference" "H4" + (at 0 -3.8 0) + (layer "F.SilkS") + (hide yes) + (uuid "df87a7a9-c750-4866-8327-1044e9fa242c") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 3.8 0) + (layer "F.Fab") + (uuid "65d05375-f02a-4945-9f91-2af064bc6c45") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "a883d62c-2a19-4d6c-a195-9cc14b9278cd") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "17cba830-e9eb-4cd6-9cea-2deebcaaef7e") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "b7b485f9-81b1-4162-b0bf-8067f727fb65") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/78111726-4e75-4486-a962-d6983db1e50e") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 2.8 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "1517683c-476e-4df1-afb6-2c334a3589be") + ) + (fp_circle + (center 0 0) + (end 3.05 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "8f9f50b4-9e31-401b-905b-84c948cb395c") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "5daf8bb8-3467-4013-9b91-fc99df3e126f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at 0 0) + (size 5.6 5.6) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "d958f7e6-aa49-4580-bd37-95a330c064f2") + ) + ) + (footprint "Resistor_SMD:R_0805_2012Metric" + (layer "F.Cu") + (uuid "8fb60065-e6d7-4f8e-a560-eb6ebe6c267d") + (at 151.2 100.6 90) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor") + (property "Reference" "R1" + (at 3 0.0875 -90) + (layer "F.SilkS") + (uuid "9ac292d4-8166-4592-b12c-69c58b8717f4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "R" + (at -3 -0.0875 -90) + (layer "F.Fab") + (uuid "179fae2d-bf5b-4046-83ee-7ad4656e56f2") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "21199f91-a808-4f59-bbbd-e8377a0a61d1") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "d23b79e2-984b-4faa-81ce-c6b80d2d684e") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Resistor" + (at 0 0 90) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "fe916cd5-93c1-4216-80a1-5a3eb9598b52") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "R_*") + (path "/00e65238-ae4a-4c7f-8159-9908f75b9fe2") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr smd) + (fp_line + (start -0.227064 -0.735) + (end 0.227064 -0.735) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "80d5a6c5-537e-47f7-8a60-e5d1ecfb7212") + ) + (fp_line + (start -0.227064 0.735) + (end 0.227064 0.735) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "d6e31d2e-a545-4202-8d0b-2d7fc2b08d64") + ) + (fp_line + (start 1.68 -0.95) + (end 1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "d03952af-ac0c-486f-97b6-3d97c8b94a8f") + ) + (fp_line + (start -1.68 -0.95) + (end 1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "7f426e62-c19a-48b3-8bad-7b615007d52a") + ) + (fp_line + (start 1.68 0.95) + (end -1.68 0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8d20d6e1-aa16-4eed-a315-7af6fddf1ac2") + ) + (fp_line + (start -1.68 0.95) + (end -1.68 -0.95) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "f8e4332a-f216-44c0-8f4c-f7b89f19257b") + ) + (fp_line + (start 1 -0.625) + (end 1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ee3f4b38-f4be-4071-9cc6-30fc81410bc0") + ) + (fp_line + (start -1 -0.625) + (end 1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "50f0091f-99f0-4387-9d61-0822f097701b") + ) + (fp_line + (start 1 0.625) + (end -1 0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f89a5bd1-05f4-4d07-8548-86d2bd5a0f72") + ) + (fp_line + (start -1 0.625) + (end -1 -0.625) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2558a820-9e52-494f-92ca-41292124bf45") + ) + (fp_text user "${REFERENCE}" + (at 0 0 -90) + (layer "F.Fab") + (uuid "578b6437-9264-4857-a881-03976a0db2e4") + (effects + (font + (size 0.5 0.5) + (thickness 0.08) + ) + ) + ) + (pad "1" smd roundrect + (at -0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.243902) + (net 1 "/+V") + (pintype "passive") + (uuid "0ce69b43-16ad-438c-afdb-8ff73b5ba88c") + ) + (pad "2" smd roundrect + (at 0.9125 0 90) + (size 1.025 1.4) + (layers "F.Cu" "F.Paste" "F.Mask") + (roundrect_rratio 0.243902) + (net 3 "Net-(D1-A)") + (pintype "passive") + (uuid "31a8bcf1-a68c-4f21-a31e-f76531cfb1fe") + ) + (model "${KICAD8_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (layer "F.Cu") + (uuid "d1e87846-e5ec-4a0d-a118-198af7d8697b") + (at 149.6 91.2) + (descr "Mounting Hole 3.2mm, M3, DIN965") + (tags "mounting hole 3.2mm m3 din965") + (property "Reference" "H2" + (at 0 -3.8 0) + (layer "F.SilkS") + (hide yes) + (uuid "03a97123-7a26-47d5-acee-d38781fc986f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0.2 -4.2 0) + (layer "F.Fab") + (uuid "50d7e940-767a-494d-a4a7-b76f8aa8874f") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "f42ee08d-6079-40b3-9853-087780b062cc") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "95ea8d82-acd7-4ebf-ac32-e10578d26d24") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "e02d11cf-828b-42c8-869c-01afbbc9d635") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/af56fb7a-5a6a-4c40-9eaa-bb522b9e7a5c") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 2.8 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "887b5925-8e0a-4daf-9f80-a7683ce221d9") + ) + (fp_circle + (center 0 0) + (end 3.05 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "cc632440-b39d-48ba-8d69-c0436cdd4c05") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "758e21eb-36ea-4129-99f1-9b543a93ee15") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at 0 0) + (size 5.6 5.6) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "d8a9d92a-292e-4e0c-a6aa-859f8a59e242") + ) + ) + (footprint "Battery:BatteryHolder_LINX_BAT-HLD-012-SMT" + (layer "F.Cu") + (uuid "eb196a16-1aa4-40c7-9992-69f8ec06b474") + (at 140.8 100.4) + (descr "SMT battery holder for CR1216/1220/1225, https://linxtechnologies.com/wp/wp-content/uploads/bat-hld-012-smt.pdf") + (tags "battery holder coin cell cr1216 cr1220 cr1225") + (property "Reference" "BT1" + (at 0 6 0) + (layer "F.SilkS") + (uuid "daf5c9ed-c48f-480b-b229-ef81febea5d0") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "Battery" + (at 0 -7 0) + (layer "F.Fab") + (uuid "2b45fab3-8389-4e06-a9f3-758c828d6c71") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "Battery:BatteryHolder_LINX_BAT-HLD-012-SMT" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "e8fec146-36f4-4e36-81e5-a29f42ce256a") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "5ecac9ff-4bd1-4c8a-9b67-fff0e29f08a5") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Multiple-cell battery" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "0975f00b-271e-4dd5-8361-0e91dd2cf5e0") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (path "/083ab27c-26d7-42a7-936f-614bf3dbcc3a") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr smd) + (fp_line + (start -6.55 -2.75) + (end -4.9 -4.4) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "0d369837-62b6-4447-9ecb-7c989e64bf40") + ) + (fp_line + (start -6.55 2.85) + (end -5.4 4.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "231ddc91-e935-4f40-9f1f-ed2b43613fdd") + ) + (fp_line + (start -4.9 -4.4) + (end -3 -4.4) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "21b142e1-d430-4cac-b13e-97f15718a270") + ) + (fp_line + (start 4.9 -4.4) + (end 3 -4.4) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "2c1921a3-6c91-4693-a686-c333b4e1fda7") + ) + (fp_line + (start 4.9 -4.4) + (end 6.55 -2.75) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "ebe2498e-7d83-4e15-9d08-fb432b096990") + ) + (fp_line + (start 6.55 2.85) + (end 5.4 4.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "51df4be8-b6f5-4587-9451-614707302f18") + ) + (fp_arc + (start -2.504098 4.697607) + (mid -4.031094 4.908816) + (end -5.4 4.2) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "4a3611e2-9998-4a47-b97a-bb629aa264bf") + ) + (fp_arc + (start 5.4 4.2) + (mid 4.029781 4.909041) + (end 2.501694 4.696459) + (stroke + (width 0.12) + (type solid) + ) + (layer "F.SilkS") + (uuid "982141f8-a8b2-4568-b639-86ab2c18f1fa") + ) + (fp_line + (start -9.35 -3.05) + (end -7.25 -3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "2f1322d3-5b3a-4602-ad68-3359a6cb087a") + ) + (fp_line + (start -9.35 3.05) + (end -9.35 -3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ccdf4535-d00c-4009-ab84-4a0e4d6b15eb") + ) + (fp_line + (start -9.35 3.05) + (end -7.25 3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "8a24b503-30f8-48b6-87cb-621bca0d48b4") + ) + (fp_line + (start -7.25 -3.05) + (end -3.55 -6.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "eb58fc34-e84e-4001-b29d-ae4901efa884") + ) + (fp_line + (start -3.55 -6.75) + (end 3.55 -6.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "458d3962-9f4b-43ad-aaeb-adf7585799cc") + ) + (fp_line + (start -3.55 6.75) + (end -7.25 3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "233a1c7d-e056-4fa7-9334-5f7e6f7e8f71") + ) + (fp_line + (start -3.55 6.75) + (end 3.55 6.75) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c9ea260e-ad42-4907-980c-0729654a2f59") + ) + (fp_line + (start 3.55 -6.75) + (end 7.25 -3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "6eb9d483-2193-4173-bb2c-2c40fc55ce0c") + ) + (fp_line + (start 3.55 6.75) + (end 7.25 3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "ca374c11-ad0a-4fa2-b0f7-29797cdf343d") + ) + (fp_line + (start 7.25 -3.05) + (end 9.35 -3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "85924b54-516c-45b8-b39d-0eb2e9007e6f") + ) + (fp_line + (start 9.35 -3.05) + (end 9.35 3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "9a8db72e-d3ae-41a1-953c-0f33145af52e") + ) + (fp_line + (start 9.35 3.05) + (end 7.25 3.05) + (stroke + (width 0.05) + (type solid) + ) + (layer "F.CrtYd") + (uuid "c0f4044f-81ad-4fe9-903d-5454d1d31db1") + ) + (fp_line + (start -7.65 -2.55) + (end -7.65 -0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b94b8a7c-5128-4d7f-82db-400bdfc8056f") + ) + (fp_line + (start -7.65 -2.55) + (end -6.75 -2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "d4ff55b7-3a3c-4b05-b0fe-05e0581844b0") + ) + (fp_line + (start -7.65 -0.55) + (end -6.75 -0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "1677cbef-4d3f-456c-bf2e-7b82b236b81e") + ) + (fp_line + (start -7.65 0.55) + (end -7.65 2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8effb1f5-b4b4-4048-9d4b-bba50ae919e3") + ) + (fp_line + (start -7.65 2.55) + (end -6.75 2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "ac5b14ce-37be-45ff-bb69-9296831361f3") + ) + (fp_line + (start -6.75 -2.75) + (end -6.55 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7ba0c071-7399-42c5-805c-b1b5c3efd20a") + ) + (fp_line + (start -6.75 0.55) + (end -7.65 0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "8386984b-f340-42ec-a254-4d2228469b3a") + ) + (fp_line + (start -6.75 2.85) + (end -6.75 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "50c7312b-b110-4b11-97e0-1742106ac106") + ) + (fp_line + (start -6.75 2.85) + (end -6.55 2.85) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "dc65d93c-0e01-4f8a-8823-86341ee7524f") + ) + (fp_line + (start -6.7 -2.9) + (end -5.05 -4.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3f0ee7c7-88d9-463a-982e-3c346ece9c8f") + ) + (fp_line + (start -6.55 -2.75) + (end -6.7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "f5dfaf91-bf59-412b-9354-01e2ae2f45c8") + ) + (fp_line + (start -6.55 -2.75) + (end -4.9 -4.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "7d7b8fd1-263c-4fb4-91a4-eed572844470") + ) + (fp_line + (start -6.55 2.85) + (end -6.55 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "35a28e0c-5da9-4bea-821d-533268331527") + ) + (fp_line + (start -6.55 2.85) + (end -5.4 4.2) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0202b0d8-0602-45bb-a62f-295b2e44d139") + ) + (fp_line + (start -5.05 -4.55) + (end -4.9 -4.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "806b208d-8a77-4f2a-8f07-e993100f2e0e") + ) + (fp_line + (start 4.9 -4.4) + (end -4.9 -4.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "a06d461b-5700-4e8f-a318-6a2c1dd9c5eb") + ) + (fp_line + (start 5.05 -4.55) + (end 4.9 -4.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "880a4e8f-311c-440e-a1e4-32705c66810f") + ) + (fp_line + (start 6.55 -2.75) + (end 4.9 -4.4) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "dbc9d102-52ff-4521-8e38-a3483f188645") + ) + (fp_line + (start 6.55 -2.75) + (end 6.7 -2.9) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b1864032-2430-4bb8-90e8-ae263ca20754") + ) + (fp_line + (start 6.55 -2.75) + (end 6.75 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "da92e514-37b8-4cb9-b4d7-70e0bee033c1") + ) + (fp_line + (start 6.55 2.85) + (end 5.4 4.2) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b3333acc-30e5-4fad-943e-adc4266f877d") + ) + (fp_line + (start 6.55 2.85) + (end 6.55 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "77beb274-a5fb-4172-b5ae-1350ddd83466") + ) + (fp_line + (start 6.7 -2.9) + (end 5.05 -4.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3f86ec5b-6e84-43a6-89a8-c79f1a8d79a5") + ) + (fp_line + (start 6.75 -0.55) + (end 7.65 -0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "e3981986-c737-4b02-ae63-1ed7c6fd400f") + ) + (fp_line + (start 6.75 2.55) + (end 7.65 2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "b0bc5504-5022-4922-871f-d72848776cca") + ) + (fp_line + (start 6.75 2.85) + (end 6.55 2.85) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "64d63054-0fe6-4497-80a6-13c18f22d5c1") + ) + (fp_line + (start 6.75 2.85) + (end 6.75 -2.75) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "9ac457b1-3ce7-40a0-b3b2-c114480de559") + ) + (fp_line + (start 7.65 -2.55) + (end 6.75 -2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "2ae53eff-744f-4d81-8a91-47706a69cc5e") + ) + (fp_line + (start 7.65 -0.55) + (end 7.65 -2.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "c39bfde6-7022-4040-bb42-a9da49689285") + ) + (fp_line + (start 7.65 0.55) + (end 6.75 0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "0edd95f7-6b1d-44b8-a269-31865a9da14c") + ) + (fp_line + (start 7.65 2.55) + (end 7.65 0.55) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "5bb1fc72-196e-4d1c-aa08-0e02713b5de1") + ) + (fp_arc + (start -1.8 4.2) + (mid -3.6 4.945584) + (end -5.4 4.2) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "6dad9499-b763-444e-86ae-234754e0520c") + ) + (fp_arc + (start -1.8 4.2) + (mid 0 3.454416) + (end 1.8 4.2) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "39b2b610-ece5-4d29-9e5c-32b60496deb1") + ) + (fp_arc + (start 5.4 4.2) + (mid 3.6 4.945584) + (end 1.8 4.2) + (stroke + (width 0.1) + (type solid) + ) + (layer "F.Fab") + (uuid "3c422819-28e4-472b-9cdd-a6a43165d446") + ) + (fp_circle + (center 0 0) + (end -6.25 0) + (stroke + (width 0.1) + (type solid) + ) + (fill none) + (layer "F.Fab") + (uuid "4887eff3-b8f1-4e93-a601-5039098a5408") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "e51d4092-3e59-408e-941d-b6672a96105a") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -7.6 0) + (size 2.5 5.1) + (layers "F.Cu" "F.Paste" "F.Mask") + (net 1 "/+V") + (pinfunction "+") + (pintype "passive") + (uuid "e6d909b3-c00d-4a60-8701-a659866bbc53") + ) + (pad "1" smd rect + (at 7.6 0) + (size 2.5 5.1) + (layers "F.Cu" "F.Paste" "F.Mask") + (net 1 "/+V") + (pinfunction "+") + (pintype "passive") + (uuid "617bcd1c-7946-40ed-b867-9d907e4d2772") + ) + (pad "2" smd circle + (at 0 0) + (size 10.2 10.2) + (layers "F.Cu" "F.Mask") + (net 2 "/-V") + (pinfunction "-") + (pintype "passive") + (uuid "8fe36865-429b-4f18-8f6c-f3cf72ec5ae8") + ) + (model "${KICAD8_3DMODEL_DIR}/Battery.3dshapes/BatteryHolder_LINX_BAT-HLD-012-SMT.wrl" + (offset + (xyz 0 0 0) + ) + (scale + (xyz 1 1 1) + ) + (rotate + (xyz 0 0 0) + ) + ) + ) + (footprint "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (layer "F.Cu") + (uuid "fb950884-233c-4379-9891-c82e2f1d6646") + (at 131.8 91.2) + (descr "Mounting Hole 3.2mm, M3, DIN965") + (tags "mounting hole 3.2mm m3 din965") + (property "Reference" "H1" + (at 0 -3.8 0) + (layer "F.SilkS") + (hide yes) + (uuid "bb71b025-2f2c-4cfe-b61d-c5944c6af7ae") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 -4.4 0) + (layer "F.Fab") + (uuid "740a7482-33f5-4a24-8bce-30e64e2e8b86") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "9731eaaa-d3a6-444e-ac12-f4d787cbb614") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "dc7f748a-29b7-45ce-94f0-883b47be070f") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (unlocked yes) + (layer "F.Fab") + (hide yes) + (uuid "2057cee9-18bd-48d5-8e49-58bb68e83b95") + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property ki_fp_filters "MountingHole*") + (path "/44b61ab6-c0eb-4ac6-ac05-eaa337721c64") + (sheetname "Root") + (sheetfile "template.kicad_sch") + (attr exclude_from_pos_files exclude_from_bom) + (fp_circle + (center 0 0) + (end 2.8 0) + (stroke + (width 0.15) + (type solid) + ) + (fill none) + (layer "Cmts.User") + (uuid "446b3df8-5b8b-48db-a4a3-763d25e21261") + ) + (fp_circle + (center 0 0) + (end 3.05 0) + (stroke + (width 0.05) + (type solid) + ) + (fill none) + (layer "F.CrtYd") + (uuid "80dbf436-1ab5-4e23-a2fc-2a884c37b947") + ) + (fp_text user "${REFERENCE}" + (at 0 0 0) + (layer "F.Fab") + (uuid "3da9c7ec-d8b5-4048-a6cd-60a8221a7f04") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at 0 0) + (size 5.6 5.6) + (drill 3.2) + (layers "*.Cu" "*.Mask") + (remove_unused_layers no) + (uuid "ceeb0c37-5ae3-4f59-8fc9-829df35d4045") + ) + ) + (gr_arc + (start 131.2 112.6) + (mid 129.07868 111.72132) + (end 128.2 109.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "01a8da9c-a345-4971-9f64-1132395144fa") + ) + (gr_line + (start 153.2 90.6) + (end 153.2 109.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "0356f695-1bce-493c-8c75-dba52389869c") + ) + (gr_line + (start 131.2 87.6) + (end 150.2 87.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "05782be0-1ba2-4c6e-8fa9-e27ad8f47b1a") + ) + (gr_line + (start 150.2 112.6) + (end 131.2 112.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "101d95a4-e9c1-487d-9553-84fa45eddaeb") + ) + (gr_arc + (start 150.2 87.6) + (mid 152.32132 88.47868) + (end 153.2 90.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "1fbf3abb-6724-4e0b-bb75-af7536f7950d") + ) + (gr_line + (start 128.2 109.6) + (end 128.2 90.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "29507f13-4307-4ab2-8a14-c4ff18cfcb0b") + ) + (gr_arc + (start 128.2 90.6) + (mid 129.07868 88.47868) + (end 131.2 87.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "6e378ec5-4db9-45f8-97a3-1d454b0e5a4f") + ) + (gr_arc + (start 153.2 109.6) + (mid 152.32132 111.72132) + (end 150.2 112.6) + (stroke + (width 0.05) + (type default) + ) + (layer "Edge.Cuts") + (uuid "d0b62f1b-7aa9-4bd8-9e09-d4beeb7cfb9c") + ) + (gr_text "Battery test board" + (at 135.8 91.4 0) + (layer "F.SilkS") + (uuid "14b4e536-78be-4e48-a42b-df9a02c5614b") + (effects + (font + (size 1.2 0.7) + (thickness 0.1) + ) + (justify left bottom) + ) + ) + (gr_text "TEST_BOARD DELETE" + (at 133.4 83.4 0) + (layer "User.1") + (uuid "bcae1e3c-90d0-49c2-9a99-c0470225bdc4") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + (justify left bottom) + ) + ) + (dimension + (type aligned) + (layer "User.6") + (uuid "b6ffe3e3-3545-4aab-a9f0-cf902250ad8d") + (pts + (xy 149.6 109) (xy 149.6 91.2) + ) + (height 10) + (gr_text "17.8000 mm" + (at 158.45 100.1 90) + (layer "User.6") + (uuid "b6ffe3e3-3545-4aab-a9f0-cf902250ad8d") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (format + (prefix "") + (suffix "") + (units 3) + (units_format 1) + (precision 4) + ) + (style + (thickness 0.1) + (arrow_length 1.27) + (text_position_mode 0) + (extension_height 0.58642) + (extension_offset 0.5) keep_text_aligned) + ) + (dimension + (type aligned) + (layer "User.6") + (uuid "df149e19-574d-4ec7-b4e0-e0ad3299efe7") + (pts + (xy 131.2 87.6) (xy 131.2 112.6) + ) + (height 8) + (gr_text "25.0000 mm" + (at 122.05 100.1 90) + (layer "User.6") + (uuid "df149e19-574d-4ec7-b4e0-e0ad3299efe7") + (effects + (font + (size 1 1) + (thickness 0.15) + ) + ) + ) + (format + (prefix "") + (suffix "") + (units 3) + (units_format 1) + (precision 4) + ) + (style + (thickness 0.1) + (arrow_length 1.27) + (text_position_mode 0) + (extension_height 0.58642) + (extension_offset 0.5) keep_text_aligned) + ) + (segment + (start 137.7 94.6) + (end 133.2 99.1) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "00cafb5b-3677-4af9-93d2-5d606922f4cd") + ) + (segment + (start 133.2 99.1) + (end 133.2 100.4) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "0432bcbe-da06-4b4d-bff1-979255b666ae") + ) + (segment + (start 148.4 100.4) + (end 148.4 99.1) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "19d94d89-6f27-4abe-abb1-5a3731167f01") + ) + (segment + (start 148.4 99.1) + (end 143.9 94.6) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "200e260c-dfee-493c-aa52-355e6bf72e54") + ) + (segment + (start 151.2 101.5125) + (end 149.5125 101.5125) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "54e5372d-f0a8-4ec6-95fd-2d929d1d155a") + ) + (segment + (start 143.9 94.6) + (end 137.7 94.6) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "677bcbd9-a25d-4e3c-a483-acfc3576a0be") + ) + (segment + (start 149.5125 101.5125) + (end 148.4 100.4) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "7722f6a8-7827-4900-b97d-ec1c86a191fa") + ) + (segment + (start 148.2 100.6) + (end 148.4 100.4) + (width 0.2) + (layer "F.Cu") + (net 1) + (uuid "e4ce96f4-f543-496c-a75a-25be2effc19d") + ) + (segment + (start 130.171339 101.513914) + (end 130.171339 102.571339) + (width 0.2) + (layer "F.Cu") + (net 2) + (uuid "d59eda9b-027e-445e-989f-34b9246f8e79") + ) + (via + (at 142.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "148b9c79-45fa-442d-a887-2244691f6579") + ) + (via + (at 139.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "1adfe8c8-399f-4367-b887-8c6b7aff1b73") + ) + (via + (at 142.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "2b2f2cee-b6e0-452e-9485-bdf15bea17ce") + ) + (via + (at 139.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "2c899ed2-10b1-4ba7-b26c-8b00eb89c49e") + ) + (via + (at 140.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "3f8b52ba-f20b-411a-abfb-644c3d392080") + ) + (via + (at 139.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "46a97398-d310-4c1f-8899-3787dfbb2a99") + ) + (via + (at 140.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "49ebeb29-1a37-4a5c-819d-6a445d18339b") + ) + (via + (at 139.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "4bfa2ea7-c0c0-4c3d-bf13-d840e96b4f1b") + ) + (via + (at 140.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "4d31c27a-528b-49ac-b210-b274004ed819") + ) + (via + (at 141.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "4db7ec0b-dfef-4d6b-9a6b-bcb1d0a1c8db") + ) + (via + (at 141.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "5ba5ce4f-9408-4aa4-8cd3-742e7a7f5fc3") + ) + (via + (at 141.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "60155ee0-7e68-4176-ab79-34c4c7139b27") + ) + (via + (at 140.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "85b6dddd-8d47-4ad1-b1b5-4412db49585d") + ) + (via + (at 141.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "8bfc3918-ff43-4874-acc0-41848536f172") + ) + (via + (at 138.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "9adf07a7-3811-407f-9bf5-a51832aacf41") + ) + (via + (at 142.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "aa76eefe-3a4d-4cb3-981a-aa0a5849cfc9") + ) + (via + (at 140.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ab784e99-3aa7-4192-a072-06be5fa87f16") + ) + (via + (at 142.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ac547353-62b7-4842-8458-f295e537f243") + ) + (via + (at 140.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "b1129d75-bc92-4e5c-bf0a-4ecfecbd052f") + ) + (via + (at 142.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "b6ecef00-f528-4b21-aa26-f796bdb9c466") + ) + (via + (at 141.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "c888d2c8-57be-48be-9c5c-f7c0b09d4fd3") + ) + (via + (at 139.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "cb6f8a8c-c3ab-4015-b37d-a207b24725f2") + ) + (via + (at 143.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ccd7da02-b2f1-40d2-87ec-1d907d14bb42") + ) + (via + (at 138.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ce35012d-071a-4716-b09d-a0d9c1a17bda") + ) + (via + (at 138.2 100.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "d26a7013-bbc8-4e78-baea-32dc1cf0b3b3") + ) + (via + (at 143.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "d3e71743-3c90-4c44-8087-174eb52ac4cd") + ) + (via + (at 139.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "deb0da72-0889-47ba-8308-bf45d297ef84") + ) + (via + (at 143.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "e021a437-ed3a-4fe6-9a5b-1b2e184db773") + ) + (via + (at 138.2 101.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ea03be04-b6ed-40a1-83b8-592b917ab04d") + ) + (via + (at 143.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ea1b1b66-86c7-4e98-9632-3bccc44eaf13") + ) + (via + (at 130.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "ea2ad1d2-876d-4c37-a8c5-ed1c353e1d51") + ) + (via + (at 138.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "f1d884da-467b-47f2-b0c4-d60a45f86ab8") + ) + (via + (at 143.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "f494454c-f00f-4d6e-aa8a-32000106a025") + ) + (via + (at 142.2 98.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "f5e05e39-7de1-4b71-baec-066269894659") + ) + (via + (at 143.2 99.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "f5e6d181-f2f1-42b2-ba57-08a9dbf41e5a") + ) + (via + (at 138.2 97.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "fa408548-bc05-4cdc-9b58-2c56c908b5c8") + ) + (via + (at 141.2 102.6) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") + (net 2) + (uuid "fdd12b11-f5e9-4248-b8a5-cf79a0659edf") + ) + (segment + (start 151.2 98.8) + (end 146 93.6) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "2f50f258-0072-4eb0-8fa4-bfd43b49b074") + ) + (segment + (start 135.2 93.6) + (end 130.2 98.6) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "345df37c-5ed3-465c-a6f0-818c71506917") + ) + (segment + (start 146 93.6) + (end 135.2 93.6) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "3b5b5104-7eb0-432b-8171-5f8db81adefc") + ) + (segment + (start 130.2 98.6) + (end 130.2 99.638912) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "9f57f4b2-78d8-49d0-bfe7-2e188977f9da") + ) + (segment + (start 151.2 99.6875) + (end 151.2 98.8) + (width 0.2) + (layer "F.Cu") + (net 3) + (uuid "e40e1fb5-758b-45c0-a9a7-6e5e46c09d53") + ) + (zone + (net 2) + (net_name "/-V") + (layer "In2.Cu") + (uuid "cdeb8555-83cd-4966-b1d9-1a8238b0409e") + (hatch edge 0.5) + (connect_pads + (clearance 0.5) + ) + (min_thickness 0.25) + (filled_areas_thickness no) + (fill yes + (thermal_gap 0.5) + (thermal_bridge_width 0.5) + ) + (polygon + (pts + (xy 128.2 87.6) (xy 153.2 87.6) (xy 153.2 112.6) (xy 128.2 112.6) + ) + ) + (filled_polygon + (layer "In2.Cu") + (pts + (xy 147.969987 88.120185) (xy 148.015742 88.172989) (xy 148.025686 88.242147) (xy 147.996661 88.305703) + (xy 147.966878 88.330748) (xy 147.745081 88.4642) (xy 147.656768 88.531333) (xy 147.460172 88.680781) + (xy 147.460163 88.680789) (xy 147.200331 88.926914) (xy 146.968641 89.19968) (xy 146.968634 89.19969) + (xy 146.76779 89.495913) (xy 146.767784 89.495922) (xy 146.600151 89.812111) (xy 146.600142 89.812129) + (xy 146.467674 90.1446) (xy 146.467672 90.144607) (xy 146.371932 90.489434) (xy 146.371926 90.48946) + (xy 146.314029 90.842614) (xy 146.314028 90.842631) (xy 146.294652 91.199997) (xy 146.294652 91.200002) + (xy 146.314028 91.557368) (xy 146.314029 91.557385) (xy 146.371926 91.910539) (xy 146.371932 91.910565) + (xy 146.467672 92.255392) (xy 146.467674 92.255399) (xy 146.600142 92.58787) (xy 146.600151 92.587888) + (xy 146.767784 92.904077) (xy 146.76779 92.904086) (xy 146.968634 93.200309) (xy 146.968641 93.200319) + (xy 147.200331 93.473085) (xy 147.200332 93.473086) (xy 147.460163 93.719211) (xy 147.745081 93.9358) + (xy 148.051747 94.120315) (xy 148.051749 94.120316) (xy 148.051751 94.120317) (xy 148.051755 94.120319) + (xy 148.376552 94.270585) (xy 148.376565 94.270591) (xy 148.715726 94.384868) (xy 149.065254 94.461805) + (xy 149.421052 94.5005) (xy 149.421058 94.5005) (xy 149.778942 94.5005) (xy 149.778948 94.5005) + (xy 150.134746 94.461805) (xy 150.484274 94.384868) (xy 150.823435 94.270591) (xy 151.148253 94.120315) + (xy 151.454919 93.9358) (xy 151.739837 93.719211) (xy 151.999668 93.473086) (xy 152.231365 93.200311) + (xy 152.432211 92.904085) (xy 152.465945 92.840457) (xy 152.514738 92.790448) (xy 152.582823 92.774756) + (xy 152.648583 92.798366) (xy 152.69114 92.85378) (xy 152.6995 92.89854) (xy 152.6995 107.301459) + (xy 152.679815 107.368498) (xy 152.627011 107.414253) (xy 152.557853 107.424197) (xy 152.494297 107.395172) + (xy 152.465945 107.359542) (xy 152.432215 107.295923) (xy 152.432211 107.295915) (xy 152.231365 106.999689) + (xy 152.231361 106.999684) (xy 152.231358 106.99968) (xy 151.999668 106.726914) (xy 151.739837 106.480789) + (xy 151.73983 106.480783) (xy 151.739827 106.480781) (xy 151.672245 106.429407) (xy 151.454919 106.2642) + (xy 151.148253 106.079685) (xy 151.148252 106.079684) (xy 151.148248 106.079682) (xy 151.148244 106.07968) + (xy 150.823447 105.929414) (xy 150.823441 105.929411) (xy 150.823435 105.929409) (xy 150.653854 105.87227) + (xy 150.484273 105.815131) (xy 150.134744 105.738194) (xy 149.778949 105.6995) (xy 149.778948 105.6995) + (xy 149.421052 105.6995) (xy 149.42105 105.6995) (xy 149.065255 105.738194) (xy 148.715726 105.815131) + (xy 148.45997 105.901306) (xy 148.376565 105.929409) (xy 148.376563 105.92941) (xy 148.376552 105.929414) + (xy 148.051755 106.07968) (xy 148.051751 106.079682) (xy 147.823367 106.217096) (xy 147.745081 106.2642) + (xy 147.656768 106.331333) (xy 147.460172 106.480781) (xy 147.460163 106.480789) (xy 147.200331 106.726914) + (xy 146.968641 106.99968) (xy 146.968634 106.99969) (xy 146.76779 107.295913) (xy 146.767784 107.295922) + (xy 146.600151 107.612111) (xy 146.600142 107.612129) (xy 146.467674 107.9446) (xy 146.467672 107.944607) + (xy 146.371932 108.289434) (xy 146.371926 108.28946) (xy 146.314029 108.642614) (xy 146.314028 108.642631) + (xy 146.294652 108.999997) (xy 146.294652 109.000002) (xy 146.314028 109.357368) (xy 146.314029 109.357385) + (xy 146.371926 109.710539) (xy 146.371932 109.710565) (xy 146.467672 110.055392) (xy 146.467674 110.055399) + (xy 146.600142 110.38787) (xy 146.600151 110.387888) (xy 146.767784 110.704077) (xy 146.76779 110.704086) + (xy 146.968634 111.000309) (xy 146.968641 111.000319) (xy 146.985255 111.019878) (xy 147.200332 111.273086) + (xy 147.460163 111.519211) (xy 147.745081 111.7358) (xy 147.966877 111.86925) (xy 148.014171 111.920679) + (xy 148.026154 111.989514) (xy 147.999019 112.053899) (xy 147.941382 112.093393) (xy 147.902948 112.0995) + (xy 133.497052 112.0995) (xy 133.430013 112.079815) (xy 133.384258 112.027011) (xy 133.374314 111.957853) + (xy 133.403339 111.894297) (xy 133.433121 111.869251) (xy 133.654919 111.7358) (xy 133.939837 111.519211) + (xy 134.199668 111.273086) (xy 134.431365 111.000311) (xy 134.632211 110.704085) (xy 134.799853 110.38788) + (xy 134.932324 110.055403) (xy 135.028071 109.710552) (xy 135.046195 109.6) (xy 135.08597 109.357385) + (xy 135.08597 109.357382) (xy 135.085972 109.357371) (xy 135.105348 109) (xy 135.085972 108.642629) + (xy 135.028071 108.289448) (xy 134.932324 107.944597) (xy 134.799853 107.61212) (xy 134.658881 107.346219) + (xy 134.632215 107.295922) (xy 134.632213 107.295919) (xy 134.632211 107.295915) (xy 134.431365 106.999689) + (xy 134.431361 106.999684) (xy 134.431358 106.99968) (xy 134.199668 106.726914) (xy 133.939837 106.480789) + (xy 133.93983 106.480783) (xy 133.939827 106.480781) (xy 133.872245 106.429407) (xy 133.654919 106.2642) + (xy 133.348253 106.079685) (xy 133.348252 106.079684) (xy 133.348248 106.079682) (xy 133.348244 106.07968) + (xy 133.023447 105.929414) (xy 133.023441 105.929411) (xy 133.023435 105.929409) (xy 132.853854 105.87227) + (xy 132.684273 105.815131) (xy 132.334744 105.738194) (xy 131.978949 105.6995) (xy 131.978948 105.6995) + (xy 131.621052 105.6995) (xy 131.62105 105.6995) (xy 131.265255 105.738194) (xy 130.915726 105.815131) + (xy 130.65997 105.901306) (xy 130.576565 105.929409) (xy 130.576563 105.92941) (xy 130.576552 105.929414) + (xy 130.251755 106.07968) (xy 130.251751 106.079682) (xy 130.023367 106.217096) (xy 129.945081 106.2642) + (xy 129.856768 106.331333) (xy 129.660172 106.480781) (xy 129.660163 106.480789) (xy 129.400331 106.726914) + (xy 129.168641 106.99968) (xy 129.168634 106.99969) (xy 128.96779 107.295913) (xy 128.967784 107.295923) + (xy 128.934055 107.359542) (xy 128.885261 107.409552) (xy 128.817176 107.425243) (xy 128.751417 107.401633) + (xy 128.70886 107.346219) (xy 128.7005 107.301459) (xy 128.7005 92.89854) (xy 128.720185 92.831501) + (xy 128.772989 92.785746) (xy 128.842147 92.775802) (xy 128.905703 92.804827) (xy 128.934055 92.840457) + (xy 128.967784 92.904077) (xy 128.96779 92.904086) (xy 129.168634 93.200309) (xy 129.168641 93.200319) + (xy 129.400331 93.473085) (xy 129.400332 93.473086) (xy 129.660163 93.719211) (xy 129.945081 93.9358) + (xy 130.251747 94.120315) (xy 130.251749 94.120316) (xy 130.251751 94.120317) (xy 130.251755 94.120319) + (xy 130.576552 94.270585) (xy 130.576565 94.270591) (xy 130.915726 94.384868) (xy 131.265254 94.461805) + (xy 131.621052 94.5005) (xy 131.621058 94.5005) (xy 131.978942 94.5005) (xy 131.978948 94.5005) + (xy 132.334746 94.461805) (xy 132.684274 94.384868) (xy 133.023435 94.270591) (xy 133.348253 94.120315) + (xy 133.654919 93.9358) (xy 133.939837 93.719211) (xy 134.199668 93.473086) (xy 134.431365 93.200311) + (xy 134.632211 92.904085) (xy 134.799853 92.58788) (xy 134.932324 92.255403) (xy 135.028071 91.910552) + (xy 135.085972 91.557371) (xy 135.105348 91.2) (xy 135.085972 90.842629) (xy 135.028071 90.489448) + (xy 134.932324 90.144597) (xy 134.799853 89.81212) (xy 134.632211 89.495915) (xy 134.431365 89.199689) + (xy 134.431361 89.199684) (xy 134.431358 89.19968) (xy 134.199668 88.926914) (xy 133.939837 88.680789) + (xy 133.93983 88.680783) (xy 133.939827 88.680781) (xy 133.758515 88.542952) (xy 133.654919 88.4642) + (xy 133.433122 88.330749) (xy 133.385829 88.279321) (xy 133.373846 88.210486) (xy 133.400981 88.146101) + (xy 133.458618 88.106607) (xy 133.497052 88.1005) (xy 147.902948 88.1005) + ) + ) + ) +) \ No newline at end of file diff --git a/Hardware/tempalate_project/template.kicad_pro b/Hardware/tempalate_project/template.kicad_pro new file mode 100644 index 0000000..518c087 --- /dev/null +++ b/Hardware/tempalate_project/template.kicad_pro @@ -0,0 +1,669 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "apply_defaults_to_fp_fields": false, + "apply_defaults_to_fp_shapes": false, + "apply_defaults_to_fp_text": false, + "board_outline_line_width": 0.049999999999999996, + "copper_line_width": 0.19999999999999998, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.049999999999999996, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": false, + "text_position": 0, + "units_format": 1 + }, + "fab_line_width": 0.09999999999999999, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.09999999999999999, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.762, + "height": 1.524, + "width": 1.524 + }, + "silk_line_width": 0.09999999999999999, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.09999999999999999, + "silk_text_upright": false, + "zones": { + "min_clearance": 0.5 + } + }, + "diff_pair_dimensions": [ + { + "gap": 0.0, + "via_gap": 0.0, + "width": 0.0 + } + ], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "connection_width": "warning", + "copper_edge_clearance": "error", + "copper_sliver": "warning", + "courtyards_overlap": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint": "error", + "footprint_symbol_mismatch": "warning", + "footprint_type_mismatch": "ignore", + "hole_clearance": "error", + "hole_near_hole": "error", + "invalid_outline": "error", + "isolated_copper": "warning", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "lib_footprint_issues": "warning", + "lib_footprint_mismatch": "warning", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "warning", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_edge_clearance": "warning", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "solder_mask_bridge": "error", + "starved_thermal": "error", + "text_height": "warning", + "text_thickness": "warning", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_dangling": "warning", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zones_intersect": "error" + }, + "rules": { + "max_error": 0.005, + "min_clearance": 0.0, + "min_connection": 0.0, + "min_copper_edge_clearance": 0.5, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.19999999999999998, + "min_microvia_drill": 0.09999999999999999, + "min_resolved_spokes": 2, + "min_silk_clearance": 0.0, + "min_text_height": 0.7999999999999999, + "min_text_thickness": 0.08, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.0, + "min_via_annular_width": 0.09999999999999999, + "min_via_diameter": 0.5, + "solder_mask_to_copper_clearance": 0.0, + "use_height_for_length_calcs": true + }, + "teardrop_options": [ + { + "td_onpadsmd": true, + "td_onroundshapesonly": false, + "td_ontrackend": false, + "td_onviapad": true + } + ], + "teardrop_parameters": [ + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_round_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_rect_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_on_pad_in_zone": false, + "td_target_name": "td_track_end", + "td_width_to_size_filter_ratio": 0.9 + } + ], + "track_widths": [ + 0.0, + 0.2, + 0.3, + 0.4, + 0.5, + 0.8, + 1.0 + ], + "tuning_pattern_settings": { + "diff_pair_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 1.0 + }, + "diff_pair_skew_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + }, + "single_track_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + } + }, + "via_dimensions": [ + { + "diameter": 0.0, + "drill": 0.0 + }, + { + "diameter": 0.25, + "drill": 0.15 + } + ], + "zones_allow_external_fillets": false + }, + "ipc2581": { + "dist": "", + "distpn": "", + "internal_id": "", + "mfg": "", + "mpn": "" + }, + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "conflicting_netclasses": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "endpoint_off_grid": "ignore", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "missing_bidi_pin": "warning", + "missing_input_pin": "warning", + "missing_power_pin": "error", + "missing_unit": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "error", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "simulation_model_issue": "ignore", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "template.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + }, + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "+POWER", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgb(255, 8, 21)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + }, + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "-POWER", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgb(15, 0, 255)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + }, + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "GND", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgb(134, 129, 126)", + "track_width": 0.2, + "via_diameter": 0.6, + "via_drill": 0.3, + "wire_width": 6 + } + ], + "meta": { + "version": 3 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [ + { + "netclass": "+POWER", + "pattern": "*+*V*" + }, + { + "netclass": "-POWER", + "pattern": "*-*V*" + }, + { + "netclass": "GND", + "pattern": "*GND*" + } + ] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "plot": "", + "pos_files": "", + "specctra_dsn": "", + "step": "", + "svg": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "bom_fmt_presets": [], + "bom_fmt_settings": { + "field_delimiter": ",", + "keep_line_breaks": false, + "keep_tabs": false, + "name": "CSV", + "ref_delimiter": ",", + "ref_range_delimiter": "", + "string_delimiter": "\"" + }, + "bom_presets": [], + "bom_settings": { + "exclude_dnp": false, + "fields_ordered": [ + { + "group_by": false, + "label": "Reference", + "name": "Reference", + "show": true + }, + { + "group_by": true, + "label": "Value", + "name": "Value", + "show": true + }, + { + "group_by": false, + "label": "Datasheet", + "name": "Datasheet", + "show": true + }, + { + "group_by": false, + "label": "Footprint", + "name": "Footprint", + "show": true + }, + { + "group_by": false, + "label": "Qty", + "name": "${QUANTITY}", + "show": true + }, + { + "group_by": true, + "label": "DNP", + "name": "${DNP}", + "show": true + } + ], + "filter_string": "", + "group_symbols": true, + "name": "Grouped By Value", + "sort_asc": true, + "sort_field": "Reference" + }, + "connection_grid_size": 50.0, + "drawing": { + "dashed_lines_dash_length_ratio": 12.0, + "dashed_lines_gap_length_ratio": 3.0, + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "operating_point_overlay_i_precision": 3, + "operating_point_overlay_i_range": "~A", + "operating_point_overlay_v_precision": 3, + "operating_point_overlay_v_range": "~V", + "overbar_offset_ratio": 1.23, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "page_layout_descr_file": "", + "plot_directory": "", + "spice_current_sheet_as_root": false, + "spice_external_command": "spice \"%I\"", + "spice_model_current_sheet_as_root": true, + "spice_save_all_currents": false, + "spice_save_all_dissipations": false, + "spice_save_all_voltages": false, + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "92a86815-0425-4ac3-80bb-037195814139", + "Root" + ] + ], + "text_variables": {} +} diff --git a/Hardware/tempalate_project/template.kicad_sch b/Hardware/tempalate_project/template.kicad_sch new file mode 100644 index 0000000..0948f04 --- /dev/null +++ b/Hardware/tempalate_project/template.kicad_sch @@ -0,0 +1,1376 @@ +(kicad_sch + (version 20231120) + (generator "eeschema") + (generator_version "8.0") + (uuid "92a86815-0425-4ac3-80bb-037195814139") + (paper "A4") + (lib_symbols + (symbol "Device:Battery" + (pin_numbers hide) + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "BT" + (at 2.54 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Battery" + (at 2.54 0 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0 1.524 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 1.524 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Multiple-cell battery" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "batt voltage-source cell" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Battery_0_1" + (rectangle + (start -2.286 -1.27) + (end 2.286 -1.524) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start -2.286 1.778) + (end 2.286 1.524) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start -1.524 -2.032) + (end 1.524 -2.54) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (rectangle + (start -1.524 1.016) + (end 1.524 0.508) + (stroke + (width 0) + (type default) + ) + (fill + (type outline) + ) + ) + (polyline + (pts + (xy 0 -1.016) (xy 0 -0.762) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 -0.508) (xy 0 -0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 0) (xy 0 0.254) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0 1.778) (xy 0 2.54) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.762 3.048) (xy 1.778 3.048) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 3.556) (xy 1.27 2.54) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "Battery_1_1" + (pin passive line + (at 0 5.08 270) + (length 2.54) + (name "+" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -5.08 90) + (length 2.54) + (name "-" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:LED" + (pin_numbers hide) + (pin_names + (offset 1.016) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "D" + (at 0 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "LED" + (at 0 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Light emitting diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "LED diode" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "LED* LED_SMD:* LED_THT:*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "LED_0_1" + (polyline + (pts + (xy -1.27 -1.27) (xy -1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.27 0) (xy 1.27 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 -1.27) (xy 1.27 1.27) (xy -1.27 0) (xy 1.27 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -3.048 -0.762) (xy -4.572 -2.286) (xy -3.81 -2.286) (xy -4.572 -2.286) (xy -4.572 -1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -1.778 -0.762) (xy -3.302 -2.286) (xy -2.54 -2.286) (xy -3.302 -2.286) (xy -3.302 -1.524) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "LED_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "K" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 2.54) + (name "A" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Device:R" + (pin_numbers hide) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "R" + (at 2.032 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "R" + (at 0 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -1.778 0 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "R res resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "R_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_0_1" + (rectangle + (start -1.016 -2.54) + (end 1.016 2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) + (symbol "Mechanical:MountingHole" + (pin_names + (offset 1.016) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "H" + (at 0 5.08 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "MountingHole" + (at 0 3.175 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "mounting hole" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "MountingHole*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "MountingHole_0_1" + (circle + (center 0 0) + (radius 1.27) + (stroke + (width 1.27) + (type default) + ) + (fill + (type none) + ) + ) + ) + ) + (symbol "power:PWR_FLAG" + (power) + (pin_numbers hide) + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#FLG" + (at 0 1.905 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "PWR_FLAG" + (at 0 3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Special symbol for telling ERC where power comes from" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "flag power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "PWR_FLAG_0_0" + (pin power_out line + (at 0 0 90) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (symbol "PWR_FLAG_0_1" + (polyline + (pts + (xy 0 0) (xy 0 1.27) (xy -1.016 1.905) (xy 0 2.54) (xy 1.016 1.905) (xy 0 1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + ) + ) + (junction + (at 132.08 97.155) + (diameter 0) + (color 0 0 0 0) + (uuid "a1b00758-fd39-4e9e-83b7-b5eef3d3cd70") + ) + (wire + (pts + (xy 132.08 97.155) (xy 132.08 92.075) + ) + (stroke + (width 0) + (type default) + ) + (uuid "7d91becd-6f68-4791-b7e4-cdbd0e124d36") + ) + (wire + (pts + (xy 156.21 92.075) (xy 156.21 97.79) + ) + (stroke + (width 0) + (type default) + ) + (uuid "86d27060-25dd-43f7-98f3-8e7caaf58d61") + ) + (wire + (pts + (xy 149.86 92.075) (xy 156.21 92.075) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ac97baf0-1074-49b1-9a14-76128fc37804") + ) + (wire + (pts + (xy 132.08 113.03) (xy 156.21 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "bbd49f12-0cb8-48c2-9bb8-b030cb6af233") + ) + (wire + (pts + (xy 132.08 107.315) (xy 132.08 113.03) + ) + (stroke + (width 0) + (type default) + ) + (uuid "cf1d2d8d-3205-4aa8-8b03-4cad286c2f47") + ) + (wire + (pts + (xy 132.08 92.075) (xy 142.24 92.075) + ) + (stroke + (width 0) + (type default) + ) + (uuid "e6178f6e-a0f0-4242-83b4-e03e153e882c") + ) + (wire + (pts + (xy 156.21 113.03) (xy 156.21 105.41) + ) + (stroke + (width 0) + (type default) + ) + (uuid "ee63b84a-39b7-4f8c-a731-053ceef12018") + ) + (rectangle + (start 127.635 80.645) + (end 164.465 116.84) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 01e04360-484f-4a74-9cc5-e294b3e79ea8) + ) + (rectangle + (start 167.64 80.645) + (end 185.42 116.84) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + (uuid 835e5d36-4ab9-4846-bad9-4dde8d368df3) + ) + (text "CIRCUIT" + (exclude_from_sim no) + (at 135.255 83.185 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "7beea78c-e1ae-4cb0-9067-3975f5e33463") + ) + (text "MOUNTING HOLES" + (exclude_from_sim no) + (at 176.53 83.185 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "8e0daba1-eada-41e2-b68d-67c5c5b8e97b") + ) + (label "+V" + (at 132.08 92.075 0) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left bottom) + ) + (uuid "5814bca2-5209-4809-967f-fb7bb1db71b3") + ) + (label "-V" + (at 132.08 113.03 180) + (fields_autoplaced yes) + (effects + (font + (size 1.27 1.27) + ) + (justify right bottom) + ) + (uuid "591865a2-12fa-4467-8b25-bf859aa5ccea") + ) + (symbol + (lib_id "Device:R") + (at 146.05 92.075 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "00e65238-ae4a-4c7f-8159-9908f75b9fe2") + (property "Reference" "R1" + (at 146.05 86.36 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "R" + (at 146.05 88.9 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Resistor_SMD:R_0805_2012Metric" + (at 146.05 93.853 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 146.05 92.075 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 146.05 92.075 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "81f2de96-4352-4e39-8d0b-c7b66b1e828c") + ) + (pin "2" + (uuid "1e644860-ca30-4d9c-9d26-eb699edd668b") + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "R1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:Battery") + (at 132.08 102.235 0) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "083ab27c-26d7-42a7-936f-614bf3dbcc3a") + (property "Reference" "BT1" + (at 135.89 100.3934 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "Battery" + (at 135.89 102.9334 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Battery:BatteryHolder_LINX_BAT-HLD-012-SMT" + (at 132.08 100.711 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 100.711 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Multiple-cell battery" + (at 132.08 102.235 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "2" + (uuid "f986cb6f-68ec-4738-8466-b9e2ae0feb5d") + ) + (pin "1" + (uuid "36793154-a2fa-41ce-9776-0cb01a7e0275") + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "BT1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 172.085 104.775 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "303036eb-ba8a-4bb8-a458-e580349ad373") + (property "Reference" "H3" + (at 174.625 103.5049 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 174.625 106.0449 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 172.085 104.775 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 172.085 104.775 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 172.085 104.775 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "H3") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 172.085 93.345 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "44b61ab6-c0eb-4ac6-ac05-eaa337721c64") + (property "Reference" "H1" + (at 174.625 92.0749 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 174.625 94.6149 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 172.085 93.345 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 172.085 93.345 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 172.085 93.345 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "H1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "power:PWR_FLAG") + (at 132.08 97.155 270) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "4c5ddf9d-acde-4815-b20d-5d8a5bba6186") + (property "Reference" "#FLG01" + (at 133.985 97.155 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "PWR_FLAG" + (at 135.89 97.1549 90) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 132.08 97.155 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 132.08 97.155 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Special symbol for telling ERC where power comes from" + (at 132.08 97.155 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "f5b6209a-d303-491f-80f6-90f42023244d") + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "#FLG01") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Device:LED") + (at 156.21 101.6 90) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (uuid "66005799-571e-41b7-9000-70881f5abb32") + (property "Reference" "D1" + (at 160.02 101.9174 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Value" "LED" + (at 160.02 104.4574 90) + (effects + (font + (size 1.27 1.27) + ) + (justify right) + ) + ) + (property "Footprint" "LED_SMD:LED_0805_2012Metric" + (at 156.21 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 156.21 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Light emitting diode" + (at 156.21 101.6 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "de4ba201-ad28-41a8-a42f-a9384022a116") + ) + (pin "2" + (uuid "f13c5dfa-0cff-4d57-a310-38bcaec0b82a") + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "D1") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 172.085 110.49 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "78111726-4e75-4486-a962-d6983db1e50e") + (property "Reference" "H4" + (at 174.625 109.2199 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 174.625 111.7599 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 172.085 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 172.085 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 172.085 110.49 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "H4") + (unit 1) + ) + ) + ) + ) + (symbol + (lib_id "Mechanical:MountingHole") + (at 172.085 99.06 0) + (unit 1) + (exclude_from_sim no) + (in_bom no) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "af56fb7a-5a6a-4c40-9eaa-bb522b9e7a5c") + (property "Reference" "H2" + (at 174.625 97.7899 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "MountingHole" + (at 174.625 100.3299 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Footprint" "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" + (at 172.085 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 172.085 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Mounting Hole without connection" + (at 172.085 99.06 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (instances + (project "template" + (path "/92a86815-0425-4ac3-80bb-037195814139" + (reference "H2") + (unit 1) + ) + ) + ) + ) + (sheet_instances + (path "/" + (page "1") + ) + ) +) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..51ed96b --- /dev/null +++ b/README.md @@ -0,0 +1,115 @@ +# kicad project template +[![.github/workflows/main.yaml](https://github.com/sirlilpanda/kicad-project-template/actions/workflows/main.yaml/badge.svg?branch=main)](https://github.com/sirlilpanda/kicad-project-template/actions/workflows/main.yaml) + +a cool table showing the workflow of all the kicad projects. +| project_name | DRC | ERC | +| ------------ | --- | --- | +| template | [❌](https://github.com/sirlilpanda/kicad-project-template/actions/runs/14507154830/attempts/1#summary-40698563204)| [βœ…](https://github.com/sirlilpanda/kicad-project-template/actions/runs/14507154830/attempts/1#summary-40698563199) | + +for a quick guide check [project setup](#project-setup) + +This is a simple project template for new kicad projects. This template has some basic setup already completed such as workflows for auto creating all the things you forget when creating a kicad project such as: + +- [gerbers](https://github.com/sirlilpanda/kicad-project-template/tree/main/template_gerber.zip) +- [bom](https://github.com/sirlilpanda/kicad-project-template/tree/main/template_bom_report.md) +- [schematic pdf](https://github.com/sirlilpanda/kicad-project-template/tree/main/template_schematic.pdf) + + +This workflow will also run the design rules check on the PCB and schematic to ensure that you upload a working PCB. These reports are uploaded as summaries within the github [actions tab](https://github.com/sirlilpanda/kicad-project-template/actions/runs/14507154830). This template has a simple schematic PCB in it (because DRC fails on an empty PCB). Shown below is the example PCB. + +![example pcb with battery diode and resistor](res/image.png) + +besides from that the project also has: + +- common predefined trace widths +- smallest vias size [JLCPBC allows](https://jlcpcb.com/capabilities/Capabilities#Drilling) +- custom net colours in the schematic editor + - `red` for +V + - `blue` for -V + - `grey` for ground + +to create a repo from this template follow this [guide](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) + +contained in this template are: +--- +- `.github/` : all files relating to github actions and other admin see [here](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions) for more example of what can be placed in it + - `report_processing` : where the python scripts are stored for processing the json report data from kicad + - `report_templates` : where the template for said reports are stored + - `workflows/` : this is where the github actions are kept + - `main.yaml` : the main github action that will auto generate all files required and run DRC and ERC + - `rename.py` : the script for renaming the project +- `hardware/` : this is where the kicad projects live note this can be changed +- `docs/` : this is where the generate docs are placed by default + - `BOM/` : where the bill of materials and price breakdown are kept + - `bill_of_materials.csv`: the auto generated bom for the kicad project + - `bom_report.md` : a report for the bill of materials + - `template_schematic.pdf` : the schematic for the kicad project, auto generated by the github action +- `pcbs/` : this is where the auto generated gerbers for the kicad project are stored + +- `res/` : where resources are stored for the README + +- `.gitignore`: a slightly modified gitignore from the [standard one](https://github.com/github/gitignore/blob/main/KiCad.gitignore) + +- `project_settings.yaml` : where the settings for this project is stored + +- `README.md` : this file, suggest you change this one creating your project + +## project settings +there are currently very few project settings that can be changed (will will be change in the future) these are: +| setting | description | +| --------------------------- | ----------------------------------------------------------------- | +| has_been_set_up | a flag to tell the setup action if the project has been set up | +| project_name | the name of the project, this will be set to the name of the repo | +| production_formats | the output production format for the PCBs | +| dynamic_read_me | allow the readme to be updated using the given template | +| bom_template_path | the template used to write the bom report files | +| erc_report_template_path | the template used to write the erc report files | +| drc_report_template_path | the template used to write the drc report files | +| readme_template_path | the template used to write projects readme | +| schematic_output_name | the name suffix of the generated schematics | +| bom_csv_output_name | the name suffix of the generated bom csv file | +| bom_report_output_name | the name suffix of the generated bom report | +| production_file_output_name | the name suffix of the generated production file | +| schematic_output_path | the output path of the generated schematics files | +| bom_csv_output_path | the output path of the generated bom csv file | +| bom_report_output_path | the output path of the generated bom report | +| production_file_output_path | the output path of the generated production file | + +## project setup + +### creating a new repo with the template + +creating a new template from a repo is simple: + +1. click on the button in the top right hand corner called `use this template` +![alt text](res/image-5.png) + +2. when the drop down menu appears click on `create a new repository` +![alt text](res/image-6.png) + +3. once you click you will be brought to this page, note that the repo name you choose here will be the name that you kicad project is called. +![alt text](res/image-7.png) + +after these steps you then need to configure the repo settings to do their magic see [configuring repo settings](#configuring-repo-settings) for what to do next. + +### configuring repo settings + +once you have created a new repo with the template, you ill have to configure the github action settings. this is because you will get an error that looks something along these lines: +![alt text](res/image-4.png) +where the action can not commit the changes due to not having permissions follow these steps: +1. open the repo setting +![alt text](res/image-1.png) +2. then head in to actions : General +![alt text](res/image-2.png) +3. then scroll down to workflow permissions and ensure that both + `Read and write permissions` and `Allow GitHub Actions to create and approve pull requests` are ticked as seen below +![alt text](res/image-3.png) + +this should fix the problem if not, go harass stack overflow they need it +Once all of these steps have been followed the workflow should be passing, however the `README.md` will only update on the next push request. + +## editing the readme + +As this repo can and will automatically update the repo corresponding to the given readme template. If you dont want to use this you can always disable this by setting the `dynamic_read_me` to `false`. but if you want some very cool features like auto updating tables to show what projects are passing the rules check or simple links to parts of your directory. then have a look at the template readme and learn [mustache](https://mustache.github.io/) + +## improvements diff --git a/docs/BOM/.gitkeep b/docs/BOM/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/BOM/template_bill_of_materials.csv b/docs/BOM/template_bill_of_materials.csv new file mode 100644 index 0000000..8289766 --- /dev/null +++ b/docs/BOM/template_bill_of_materials.csv @@ -0,0 +1,4 @@ +"Refs","Value","Footprint","Qty","DNP" +"BT1","Battery","Battery:BatteryHolder_LINX_BAT-HLD-012-SMT","1","" +"D1","LED","LED_SMD:LED_0805_2012Metric","1","" +"R1","R","Resistor_SMD:R_0805_2012Metric","1","" diff --git a/docs/BOM/template_bom_report.md b/docs/BOM/template_bom_report.md new file mode 100644 index 0000000..a2cdd47 --- /dev/null +++ b/docs/BOM/template_bom_report.md @@ -0,0 +1,12 @@ +# πŸ“„ BOM for template_bill_of_material πŸ“„ + +report created at 03:09:02.038853 on 17-04-2025. + +template_bill_of_material has a total of 3 parts with a cost of $0. + +| Reference | Value | Quantity | part number | cost | +| --------- | ----- | -------- | ----------- | ---- | +| BT1 | Battery | 1 | Battery:BatteryHolder_LINX_BAT-HLD-012-SMT | $0 | +| D1 | LED | 1 | LED_SMD:LED_0805_2012Metric | $0 | +| R1 | R | 1 | Resistor_SMD:R_0805_2012Metric | $0 | +| | total | 3 | total | $0 | diff --git a/docs/template_schematic.pdf b/docs/template_schematic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..baa3c9b09b272719344b80c378232eadddf02306 GIT binary patch literal 22251 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 literal 0 HcmV?d00001 diff --git a/pcbs/.gitkeep b/pcbs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/pcbs/template_gerber.zip b/pcbs/template_gerber.zip new file mode 100644 index 0000000000000000000000000000000000000000..b642d8fa8d7cfe0f86be8a76299ca8d63089e348 GIT binary patch literal 31212 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 Bk+Hx6iUpUl=KR?6HDSA3tfjx@hW&J}%Pd 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 literal 0 HcmV?d00001 diff --git a/res/image-2.png b/res/image-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4fd849c35618244cf62cf280d901c129e277ee GIT binary patch literal 76014 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