# 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](docs/circuit.svg)