From 4ba079381c90878859f644a15a69aba068db9279 Mon Sep 17 00:00:00 2001 From: Reinout Meliesie Date: Mon, 1 Sep 2025 17:47:22 +0200 Subject: [PATCH] Add readme and circuit netlist --- docs/circuit-netlist.txt | 1 + docs/circuit.svg | 148 +++++++++++++++++++++++++++++++++++++++ readme.md | 61 ++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 docs/circuit-netlist.txt create mode 100644 docs/circuit.svg create mode 100644 readme.md diff --git a/docs/circuit-netlist.txt b/docs/circuit-netlist.txt new file mode 100644 index 0000000..53e620a --- /dev/null +++ b/docs/circuit-netlist.txt @@ -0,0 +1 @@ +'microcontroller #5:4 #7:5 #19:2 #23:0 header=Arduino Micro sz=34 p0=13 p1=12 p2=+3V p3=11 p4=AREF p5=10 p6=18 p7=9 p8=19 p9=8 p10=20 p11=7 p12=21 p13=6 p14=22 p15=5 p16=23 p17=4 p18=NC p19=3 p20=NC p21=2 p22=+5V p23=GND p24=RESET p25=RESET p26=GND p27=0 p28=VIN p29=1 p30=14 p31=17 p32=15 p33=16 p34= p35= p36= p37= p38= p39= diff --git a/docs/circuit.svg b/docs/circuit.svg new file mode 100644 index 0000000..bd73013 --- /dev/null +++ b/docs/circuit.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + female fan connector 1 + female fan connector 0 + male fan header 1 + male fan header 0 + + GND + + + +12V + + + TACH + + + PWM + + + GND + + + +12V + + + TACH + + + PWM + + + GND + + + +12V + + + TACH + + + PWM + + + GND + + + +12V + + + TACH + + + PWM + + + + Arduino Micro + + + + 13 + + 12 + + +3V + + 11 + + AREF + + 10 + + 18 + + 9 + + 19 + + 8 + + 20 + + 7 + + 21 + + 6 + + 22 + + 5 + + 23 + + 4 + + NC + + 3 + + NC + + 2 + + +5V + + GND + + RESET + + RESET + + GND + + 0 + + VIN + + 1 + + 14 + + 17 + + 15 + + 16 + + + + + \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d9a110b --- /dev/null +++ b/readme.md @@ -0,0 +1,61 @@ +# Kulifuli — The Arduino Half + +Kulifuli is an Arduino Micro based PC fan controller with the option to send a fake tachometer PWM +signal back to the motherboard. This is useful for for example server motherboards that refuse to +operate unless such a signal is received. (Such as the one in my HP Proliant that always spins its +fans at 100% after the latest firmware update. Thank you HP, very cool of you to do that.) + +This repository contains the Arduino side of the software, in addition to information about the +hardware. For the software to run on the host see +[this repository](https://kernelmaft.com/forgejo/zedfrigg/kulifuli-host). + +## Building + +Requirements: GNU Coreutils, GNU Make, +[Arduino CLI](https://docs.arduino.cc/arduino-cli/), +[GCC for AVR](https://www.microchip.com/en-us/tools-resources/develop/microchip-studio/gcc-compilers) + +This project uses the standard Arduino core library obtained via Arduino CLI, but we do not use it +as a build tool. + +To obtain said library: + +```sh +arduino-cli core update-index +arduino-cli core install arduino:avr +``` + +To build the project: + +```sh +make build +``` + +The firmware image for the Arduino Micro should now be present as `build/kulifuli.hex`. + +## Flashing + +Additional requirement: [AVRDUDE](https://github.com/avrdudes/avrdude) + +Connect the Arduino Micro to your computer over USB. If USB serial support is set up correctly the +device should now have a path it can be referenced by, e.g. `/dev/ttyACM0` on Linux. Create a file +named `local.make` in the root of the project containing `arduino_serial_port =` followed by this +path. + +Now flash the firmware image to the device: + +```sh +make upload +``` + +## Hardware + +The hardware design is extremely simple, it contains no active components other than the Arduino +Micro. Two case fans can be connected to the male fan headers, and the female fan connectors should +be connected to their original headers on the motherboard. The fan controller sits in between the +fans and the motherboard, passing through the power and ground but intercepting the control +signals. + +![Circuit diagram of the hardware, see below for a structural representation](docs/circuit.svg) + +You can obtain a netlist file of this circuit [here](docs/circuit-netlist.txt).