# FireFly Solar / 日輪蛍 **Nichirin Hotaru** *A small solar-powered Morse firefly for the outdoors.* **太陽を宿し、夜にモールスを灯す蛍。** *Taiyō o yadoshi, yoru ni Mōrusu o tomosu hotaru.* *A firefly carrying the sun, lighting Morse in the night.* ## Overview FireFly Solar is a small outdoor LED blinker inspired by the idea of an LED throwie, but powered by sunlight instead of a disposable coin cell. During the day, the solar cell charges the energy storage. At night, the circuit wakes up and sends a simple Morse-style light signal. ## About this Project FireFly Solar is my **technology playground**. It is a small garden object, but its real purpose is to learn by building something complete. With it I learn about: - **Circuit design at the edge**: in this case, as low power as possible - **PCB design** - **Weatherproof casing** - **ATtiny programming** Possible next technology step: everything about DIY SMD design and soldering. ## Project Goals - Build a solar-powered outdoor Morse blinker - Keep the hardware simple and robust - Improve practical low-power design skills - Test mechanical concepts for outdoor 3D-printed parts - Learn what is needed to turn a small electronics project into a possible DIY kit ## Software The firmware runs on an **ATtiny85** at 1 MHz (internal clock, ATTinyCore: `clock=1internal`, `millis=disabled`). The LED itself is used as the light sensor. When it is dark, the firefly sends a short Morse text ("TGO 26") about once a minute. ### Current Firmware version: v0.4 (2026-11-08) Goal: lowest possible average current. Changes vs v0.3: - No `delay()` / `millis()`; Timer0 and Timer1 are gated off in PRR. - The watchdog (interrupt mode) is the only timebase: Morse units (~96 ms), the sensing window and the 8 s sleeps. The CPU sleeps in power-down in between. - Darkness sensing: the CPU sleeps in 16 ms steps while the LED junction discharges, instead of a busy `digitalRead()` loop. Bright light exits after the first step. `darknessThreshold` is replaced by `darkSteps`. - The ADC is disabled before it is gated off in PRR; pins are set up before PRR. - After a power-on or external reset, no blinking for `RECOVER_CYCLES` (about 16 min), so the supercap can recharge. - `DEBUG_TEST` switch for bench testing: 8 s cycle, no recovery wait, short flash when the sketch decides "bright". Set it to 0 for the field. - Optional `BOD_FUSE_ENABLED` (BOD off during sleep); unused with the BOD fuse off. Tested: compiles with ATTinyCore and runs on hardware. Current draw is not yet measured. ## PCB - Finished: a batch of 10 is assembled, tested and working. - Latest adjustment: fine-tuned the resistors for the LED, and the 3.9 V Zener diode is confirmed safe avoid overcharging 4V supercap. - Next version: the PCB should be a little shorter. The wiring space is a bit too tight now. ## Casing Works basically as intended. Lessons for the next version: - Better locking of the solar modules. - The rope structure works, but building it is too complicated and takes a lot of nerves. - Using material tension to secure the modules via rope was basically a good idea. ## Naming The English project name remains: **FireFly Solar** For blog posts, documentation, and presentation, the project also uses the Japanese name: **日輪蛍 / Nichirin Hotaru** The name roughly means **sun-disc firefly**. It keeps the solar theme, adds a slightly mythic tone, and still fits a small piece of outdoor hardware. --- ## Contributing PRs and issues welcome. Keep it simple. Photos of your build you send me go in `Documentation/gallery/` with a short caption and license notice. --- ## License Default license: [CC-BY-NC-4.0](https://creativecommons.org/licenses/by-nc/4.0/)