KiEdit: Schaltungen auf Lochraster und Steckbrett
Wer eine Schaltung auf einer Lochrasterplatine aufbaut, plant meist mit Bleistift und kariertem Papier: Wo sitzt das IC, wo die Widerstände, wie laufen die Drähte, ohne sich zu kreuzen? Das ist mühsam, und ein vergessener Draht fällt erst beim Löten auf. KiEdit nimmt einem diesen Teil ab: Man beschreibt die Schaltung in ein paar Zeilen Python, und KiEdit legt die Drähte, prüft auf Fehler und zeichnet das Ergebnis.
So sieht das aus
from kiedit.ui.notebook import Perfboard
pb = Perfboard(16, 20) # Lochraster, 16 × 20 Löcher
pb.place_lib("U1", (4, 6), "NE555") # IC aus der Bibliothek
pb.place("R1", (2, 9), (2, 13), "10k")
pb.place("D1", (12, 4), (12, 5), "red")
pb.connect("U1.VCC", "R1.1", net="VCC", color="red")
pb.connect("U1.OUT", "D1.1", net="out")
pb.autoroute() # alle Drähte legen
pb.check() # Kurzschlüsse, offene Pins, fehlende Versorgung
pb.export_svg("board.svg")
Heraus kommt ein Bild wie dieses: ein Lauflicht mit dem Zähler-IC CD4017, vollständig vom Autorouter verdrahtet.
Steckbrett für Bauanleitungen
Für Anleitungen braucht man ein Bild, das genau zeigt, in welches Loch welches Bein kommt. Dafür
kennt KiEdit auch das Steckbrett, mit Reihen a bis j und den Plus- und Minusschienen:
from kiedit.ui.notebook import Breadboard
bb = Breadboard("half", rails=True)
bb.place_ic("U1", 12, "LM324") # IC über den Mittelsteg, Pin 1 unten links
bb.place("R1", "i6", "i13", "10k")
bb.wire("j15", "b+15", color="red") # Pin 4 (V+) an die untere Plusschiene
bb.note("b+30", "+9 V", color="red")
bb.export_svg("versuch.svg")
Weil das Bild aus derselben Beschreibung entsteht, die KiEdit auch prüft, passen Bild und Schaltung zusammen: Ein Draht, der im Bild fehlt, fehlt auch in der Prüfung.
Was dahintersteckt
Netze ergeben sich aus dem Kupfer. Es gibt keine getrennte Netzliste, die man pflegen muss. Was verbunden ist, rechnet KiEdit aus der Geometrie aus: Löcher, Lötbrücken, Drähte. Ein Union-Find-Verfahren fasst alle Löcher zusammen, die elektrisch zusammenhängen. Prüfung und KiCad-Export lesen beide aus dieser einen Quelle.
Ein echter Autorouter. KiEdit verdrahtet mit Negotiated Congestion (PathFinder), dem Verfahren aus der FPGA-Verdrahtung:
- Jedes Netz sucht sich seinen kürzesten Weg, Überschneidungen sind zunächst erlaubt.
- Jede Überschneidung kostet einen Preis, der von Durchgang zu Durchgang steigt.
- Alle Netze werden wieder herausgerissen und neu gelegt, bis keine Überschneidung mehr übrig ist.
Wo sich zwei Leitungen kreuzen müssen, weicht KiEdit auf eine zweite Lage aus: eine Drahtbrücke auf der Bauteilseite. Netze mit mehr als zwei Pins wachsen als Steiner-Bäume.
Auch die Platzierung wird optimiert. pb.autoplace() verschiebt die Bauteile per Simulated
Annealing so, dass die Drähte möglichst kurz werden, und verdrahtet danach neu. Der Router meldet
dabei jeden Schritt; daraus entsteht ein Video, in dem man den Drähten beim Wachsen, Zurückweichen
und Einpendeln zusehen kann:
Export
- SVG für Anleitungen und Webseiten
- KiCad (
.kicad_pcb,.kicad_sch,.kicad_pro), wenn die Schaltung aus dem Lochraster herauswächst und eine richtige Platine werden soll - HTML-Folien und Video als Schritt-für-Schritt-Aufbau
- 3D-druckbare Lötlehren (über CadQuery), die die Bauteile beim Löten festhalten
Ausprobieren
KiEdit braucht Python 3.13:
git clone https://github.com/blueberrye-io/kiedit.git
cd kiedit
python3.13 -m venv .venv
.venv/bin/pip install -r requirements.txt
PYTHONPATH=. .venv/bin/python demo/JL/11_led_chaser.py
Im Ordner demo/JL/ liegen dreizehn fertige Schaltungen, vom 555-Blinker über Logikgatter und
Flipflop bis zum Lauflicht. In einem Jupyter-Notebook zeichnet sich eine Platine von selbst, wenn
man die Variable auswertet.
Stand
KiEdit ist ein Werkzeug, das wir selbst regelmäßig für diese Website benutzen, und wird mit jedem neuen Bild ein Stück besser. Es ist kein fertiges Produkt mit Bedienoberfläche: Man arbeitet in Python. Langfristig soll der Kern auf das iPad wandern; deshalb haben die Teile für Modell, Router und Export keine Abhängigkeit von der Oberfläche.