Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b77e1d5a51 | ||
|
|
0aea4c8129 | ||
|
|
c396dbf3f6 | ||
|
|
ebf338c97f | ||
|
|
46a2bec551 |
@@ -1,103 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
=============================================================================
|
=============================================================================
|
||||||
FireFly Morse Throwie
|
FireFly Morse Throwie
|
||||||
- a light controled (LED as Sensor) morseblinker throwie with ATTiny45/85
|
- a light controlled (LED as Sensor) morse blinker throwie with ATTiny85
|
||||||
=============================================================================
|
=============================================================================
|
||||||
|
|
||||||
Project definitions, sources
|
Project definitions, sources
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
Version: 0.1 - Attiny85 Version
|
Version: 0.3 - ATTiny85, 1 MHz, BOD fuse disabled
|
||||||
Date : 25.05.2026
|
gitea : https://gitea.togo-lab.io/tgohle/0001-FireFly
|
||||||
|
Date : 2026-06-14
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
Key changes Version 0.3:
|
||||||
|
|
||||||
Inspired by Karl Lunt's FireFly project I wrote some code to make this
|
- Removed unnecessary ADC enable/disable from loop()
|
||||||
Throwie lasting longer, blinking only at low light levels and morse also
|
- Disabled ADC and analog comparator in setup()
|
||||||
some text.
|
- Added INPUT_PULLUP for unused Arduino pins 0, 1, 2 will save power
|
||||||
|
- Added safer watchdog setup with interrupt protection to save run near brownout
|
||||||
|
- Added wdt_reset() before sleep for cleaner 8 s timing
|
||||||
|
- Added lowercase-to-uppercase handling
|
||||||
|
- Unsupported characters are now ignored without adding fake timing gaps
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Inspired by Karl Lunt's FireFly project:
|
||||||
http://www.seanet.com/~karllunt/fireflyLED.html
|
http://www.seanet.com/~karllunt/fireflyLED.html
|
||||||
|
|
||||||
How it works (only the Morsethrowy part):
|
Morse code reference:
|
||||||
LED detects light level, using bleeding out time of LED pn-capacitor.
|
|
||||||
If dark enough blink a text in morsecode (ATTiny45 = 22 Chars, text will
|
|
||||||
be defined in line 191/192 of this file)
|
|
||||||
To save energy go to powersave mode after blinking or light level is
|
|
||||||
over threshold. Tests this every 8s (maximum time for watchdog timer
|
|
||||||
possible for ATTiny). Repeat this endless
|
|
||||||
|
|
||||||
|
|
||||||
The wiring, it's very simple, see also HW part of the Project.
|
|
||||||
|
|
||||||
+---+ +------\/------+
|
|
||||||
| | ATTINY45 /85 |
|
|
||||||
> | -+1=PB5 VCC=8+-> to SuperCap / DC-DC 3V/5V
|
|
||||||
xxx Ohm < | | |
|
|
||||||
> +------+2=PB3 PB2=7+-
|
|
||||||
| | |
|
|
||||||
----- +------+3=PB4 PB1=6+-
|
|
||||||
LED / \ | | |
|
|
||||||
----- | +--+4=GND PB0=5+-
|
|
||||||
| | | | |
|
|
||||||
+---+ | +--------------+
|
|
||||||
|
|
|
||||||
+---------------------> to battery GND
|
|
||||||
|
|
||||||
You can use other pins if necessary, theoretical up to 3 LEDs, as example I
|
|
||||||
tried out to connect another one at PB2&PB1. working fine. Basic wiring:
|
|
||||||
|
|
||||||
+ LED_N_Side), wired to a digital pin, NOT Vcc
|
|
||||||
|
|
|
||||||
<
|
|
||||||
> 100 - 460 ohm resistor depending Voltage
|
|
||||||
<
|
|
||||||
|
|
|
||||||
|
|
|
||||||
-----
|
|
||||||
/ \ LED, maybe a 5mm, clear plastic is good
|
|
||||||
-----
|
|
||||||
|
|
|
||||||
|
|
|
||||||
+ LED_P_Side), wired to a digital pin, NOT Gnd
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Im just a newbe in ATTiny / Arduino programming, so many thanks to:
|
|
||||||
|
|
||||||
Programming ATTiny with Arduino IDE:
|
|
||||||
http://highlowtech.org/?p=1695
|
|
||||||
|
|
||||||
LED Lightsensor, Arduino Playground:
|
|
||||||
http://playground.arduino.cc/Learning/LEDSensor
|
|
||||||
|
|
||||||
Powersaving Mode for Attiny45/85:
|
|
||||||
A good description by Martin Nawrath nawrath@khm.de and the folks at
|
|
||||||
http://www.insidegadgets.com/2011/02/05/reduce-attiny-power-consumption-by-sleeping-with-the-watchdog-timer/
|
|
||||||
|
|
||||||
With this description I got ~5uA during sleep mode.
|
|
||||||
in Morse-Mode with LED OFF: 1.7mA
|
|
||||||
LED ON: 6.9mA
|
|
||||||
--> I hope to run this throwies ~40days with one CR2032.
|
|
||||||
|
|
||||||
Morsecode
|
|
||||||
To translate a text into morsecode, there are several ways. You can use
|
|
||||||
this fine online translator:
|
|
||||||
http://morsecode.scphillips.com/jtranslator.html
|
|
||||||
|
|
||||||
There is also a great morse coder / encoder from Matthias Esterl aka madc.
|
|
||||||
Works fine for Arduino, but not for ATTiny because of RAM limitations. But
|
|
||||||
maybe this is helpful if your project works with an Arduino.
|
|
||||||
https://gist.github.com/madc/4474559
|
|
||||||
|
|
||||||
For this project I use a simple case structur. Looks arkward, but the
|
|
||||||
ATTiny45 has only 256byte RAM but 4kFlash. A data structure is better programming
|
|
||||||
but needs a lot of RAM we not have. Therefore this ugly case structure.
|
|
||||||
This will waste the flash memory but we have enough and saving RAM for
|
|
||||||
our payload - the ASCII-string with the morsetext.
|
|
||||||
|
|
||||||
BTW - Morsecode itself:
|
|
||||||
|
|
||||||
'A', ".-" 'B', "-..." 'C', "-.-."
|
'A', ".-" 'B', "-..." 'C', "-.-."
|
||||||
'D', "-.." 'E', "." 'F', "..-."
|
'D', "-.." 'E', "." 'F', "..-."
|
||||||
'G', "--." 'H', "...." 'I', ".."
|
'G', "--." 'H', "...." 'I', ".."
|
||||||
'J', ".---" 'K', ".-.-" 'L', ".-.."
|
'J', ".---" 'K', "-.-" 'L', ".-.."
|
||||||
'M', "--" 'N', "-." 'O', "---"
|
'M', "--" 'N', "-." 'O', "---"
|
||||||
'P', ".--." 'Q', "--.-" 'R', ".-."
|
'P', ".--." 'Q', "--.-" 'R', ".-."
|
||||||
'S', "..." 'T', "-" 'U', "..-"
|
'S', "..." 'T', "-" 'U', "..-"
|
||||||
@@ -109,30 +41,25 @@
|
|||||||
'7', "--..." '8', "---.." '9', "----."
|
'7', "--..." '8', "---.." '9', "----."
|
||||||
'0', "-----"
|
'0', "-----"
|
||||||
|
|
||||||
'.', ".-.-.-" ',', "--..--" '?', "..--.."
|
'.', ".-.-.-" ',', "--..--" '?', "..--.."
|
||||||
'!', "-.-.--" ':', "---..." ';', "-.-.-."
|
'!', "-.-.--" ':', "---..." ';', "-.-.-."
|
||||||
'(', "-.--." ')', "-.--.-" '"', ".-..-."
|
'(', "-.--." ')', "-.--.-" '"', ".-..-."
|
||||||
'@', ".--.-." '&', ".-..."
|
'@', ".--.-." '&', ".-..."
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
Legal stuff / Copyright:
|
Legal stuff / Copyright:
|
||||||
Creative Commons Attribution ShareAlike 3.0.:
|
License_-_CC_BY-NC_4.0
|
||||||
http://creativecommons.org/licenses/by-sa/3.0/legalcode
|
https://creativecommons.org/licenses/by-nc/4.0/
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
// Ok folks, let's start
|
|
||||||
// ===========================================================================
|
|
||||||
// for sleep Mode / Powersave we need some additional stuff. Its alredy there,
|
|
||||||
// if you installed the Attiny extension for Arduino IDE, no additional
|
|
||||||
// installing needed.
|
|
||||||
#include <avr/sleep.h>
|
#include <avr/sleep.h>
|
||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
// Some definitions for powersave depending of ATTiny type.
|
|
||||||
#ifndef cbi
|
#ifndef cbi
|
||||||
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
||||||
#endif
|
#endif
|
||||||
@@ -140,405 +67,325 @@
|
|||||||
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
|
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ===========================================================================
|
// ---------------------------------------------------------------------------
|
||||||
// for ATTiny85
|
// Timing: unit length in ms.
|
||||||
// Unit length < 150 will hard to be read for optical morse code
|
// At 1 MHz, delay() is accurate when F_CPU=1000000L is set in boards.txt.
|
||||||
// > 300 are too slow in my feeling for longer text
|
// 100 ms gives readable optical Morse; raise to 150 ms if readability is poor.
|
||||||
//
|
|
||||||
// for ATTiny85 at 8MHz (for 1MHz see ATTiny45)
|
|
||||||
// Unit length < 5 will hard to be read for optical morse code
|
|
||||||
// > 10 are too slow in my feeling for longer text
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#define unitLength 100
|
#define unitLength 100
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// LED Pin definitions,
|
// Sleep interval.
|
||||||
// theoretical you can use up to 3 LED. For example you can use it for a
|
// Watchdog setup uses 8 s. For final use, change sleepCycles from 4 to 6
|
||||||
// landmark beacon. So if you point this LEDs to different directions you can
|
// for about 32s - 48s between sensing/blinking activations. Goal ~ 1 blink/min
|
||||||
// detect the position in dependence of your location to the bacon.
|
const uint8_t sleepCycles = 6;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// LED pin definitions (N-side = cathode, P-side = anode for sensing/driving).
|
||||||
#define LED1_N_SIDE 3
|
#define LED1_N_SIDE 3
|
||||||
#define LED1_P_SIDE 4
|
#define LED1_P_SIDE 4
|
||||||
|
|
||||||
// ===========================================================================
|
// ---------------------------------------------------------------------------
|
||||||
// Variables
|
// ATTiny85 Arduino pins 0, 1, 2 are unused in actual design and physically open.
|
||||||
// ===========================================================================
|
// Keep them in INPUT_PULLUP so they do not float and waste current.
|
||||||
// ###########################################################################
|
#define UNUSED_PIN_0 0
|
||||||
// # and now the text, but be aware, only 256Byte RAM for Attiny45 #
|
#define UNUSED_PIN_1 1
|
||||||
// # so there are only 22 Chars left for your message. #
|
#define UNUSED_PIN_2 2
|
||||||
// # BTW with an Attiny85 you will have additional 256byte #
|
|
||||||
// # => more than for twitter :-) #
|
|
||||||
// # => for FireFly with SuperCap: less ist better, charge last longer #
|
|
||||||
|
|
||||||
String morseText =
|
// ---------------------------------------------------------------------------
|
||||||
"TOGO LAB";
|
// ATTiny85 has 512 bytes SRAM; this keeps the Morse text in flash.
|
||||||
// # "....5....1....5....2.."; just a ruler, remember 22 Chars for ATTiny #
|
// Only uppercase letters, digits, spaces, and the special chars in the switch
|
||||||
// IT IS USELESS
|
// below are emitted. Lowercase letters are converted to uppercase.
|
||||||
// HAIL GLOW CLOUD
|
// Test setup: 20 x "0" because 0 = "-----" gives maximum LED ON time for test.
|
||||||
// ###########################################################################
|
// shorter text will better, more text will cost more power.
|
||||||
|
const char morseText[] PROGMEM = "TGO 26";
|
||||||
|
// Ruler: 0....0....1...1....2
|
||||||
|
// Ruler: 0....5....0...5....0
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Darkness threshold.
|
||||||
|
// Higher value = triggers in brighter conditions.
|
||||||
|
// Best calibrated at actual dusk/dawn with the chosen LED type.
|
||||||
|
const unsigned int darknessThreshold = 17000;
|
||||||
|
|
||||||
// Define light trigger threshold. best way to set it on dusk / dawn level
|
// ---------------------------------------------------------------------------
|
||||||
// diffuse red ones are less sensitive than clear green ones...
|
// Watchdog interrupt flag — volatile because it is written in an ISR.
|
||||||
int darknessThreshold = 17000;
|
volatile bool f_wdt = true;
|
||||||
|
|
||||||
// Interrupt Flag, should be volatile, means: read from RAM, not register
|
// ---------------------------------------------------------------------------
|
||||||
// because registers are used for interrupt handling, it have to be volatile.
|
// Forward declarations.
|
||||||
volatile boolean f_wdt = 1;
|
void setup_watchdog(uint8_t ii);
|
||||||
|
void system_sleep();
|
||||||
|
void configureUnusedPins();
|
||||||
|
void releaseLedPins(int LED_N, int LED_P);
|
||||||
|
unsigned int sensDarkness(int LED_N, int LED_P);
|
||||||
|
void morse(int LED_N, int LED_P);
|
||||||
|
void dit(int LED_P);
|
||||||
|
void dah(int LED_P);
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// Setup watchdog
|
// Setup
|
||||||
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
|
|
||||||
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
setup_watchdog(9);
|
// Disable unused peripherals immediately to save power.
|
||||||
|
// PRTIM1, PRUSI: unused, safe to gate off.
|
||||||
|
// PRADC: ADC is not used; LED sensing is done with digitalRead().
|
||||||
|
// PRTIM0: must stay ON while awake because delay() depends on Timer0.
|
||||||
|
PRR = (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC);
|
||||||
|
|
||||||
|
// ADC off. It is not needed for digitalRead()-based LED sensing.
|
||||||
|
cbi(ADCSRA, ADEN);
|
||||||
|
|
||||||
|
// Analog comparator off. Saves a little sleep current.
|
||||||
|
ACSR |= (1 << ACD);
|
||||||
|
|
||||||
|
configureUnusedPins();
|
||||||
|
releaseLedPins(LED1_N_SIDE, LED1_P_SIDE);
|
||||||
|
|
||||||
|
setup_watchdog(9); // 8-second watchdog interval.
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// Main
|
// Main loop
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
if (f_wdt) {
|
||||||
|
f_wdt = false;
|
||||||
|
|
||||||
void loop(){
|
if (sensDarkness(LED1_N_SIDE, LED1_P_SIDE) > darknessThreshold) {
|
||||||
|
|
||||||
if (f_wdt==1) { // wait for timed out watchdog
|
|
||||||
// flag is set when a watchdog timeout occurs
|
|
||||||
f_wdt=0; // reset flag
|
|
||||||
|
|
||||||
// if it's dark enough [>darknesThreshold] morse
|
|
||||||
if (sensDarkness(LED1_N_SIDE, LED1_P_SIDE) > darknessThreshold){
|
|
||||||
// looks like it's dark, so do your job
|
|
||||||
morse(LED1_N_SIDE, LED1_P_SIDE);
|
morse(LED1_N_SIDE, LED1_P_SIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return LED pins to high-Z before sleeping.
|
||||||
|
// Internal pullups stay disabled for the LED pins.
|
||||||
|
releaseLedPins(LED1_N_SIDE, LED1_P_SIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test setup: 1 x 8 s sleep.
|
||||||
|
// Final setup: set sleepCycles = 4 for about 32 s.
|
||||||
|
for (uint8_t i = 0; i < sleepCycles; i++) {
|
||||||
|
system_sleep();
|
||||||
}
|
}
|
||||||
// set all used port to intput to save power
|
|
||||||
pinMode(LED1_N_SIDE,INPUT);
|
|
||||||
pinMode(LED1_P_SIDE,INPUT);
|
|
||||||
system_sleep();
|
|
||||||
f_wdt=0; // 2nd time sleep
|
|
||||||
system_sleep();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// Subroutines for Sleeping
|
// Pin helpers
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
// set system into the sleep state
|
void configureUnusedPins()
|
||||||
// system wakes up when wtchdog is timed out
|
{
|
||||||
void system_sleep() {
|
pinMode(UNUSED_PIN_0, INPUT_PULLUP);
|
||||||
cbi(ADCSRA,ADEN); // switch Analog to
|
pinMode(UNUSED_PIN_1, INPUT_PULLUP);
|
||||||
// Digitalconverter OFF
|
pinMode(UNUSED_PIN_2, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
|
void releaseLedPins(int LED_N, int LED_P)
|
||||||
|
{
|
||||||
|
// digitalWrite LOW before INPUT disables the internal pullup on Arduino cores.
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
pinMode(LED_N, INPUT);
|
||||||
|
pinMode(LED_P, INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Sleep helpers
|
||||||
|
// ===========================================================================
|
||||||
|
void system_sleep()
|
||||||
|
{
|
||||||
|
// Reset watchdog counter so each sleep cycle starts with a fresh interval.
|
||||||
|
wdt_reset();
|
||||||
|
|
||||||
|
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
||||||
|
|
||||||
|
// Atomic sleep entry pattern.
|
||||||
|
// After sei(), AVR executes the next instruction before servicing interrupts,
|
||||||
|
// so sleep_cpu() is not skipped by a just-pending interrupt.
|
||||||
|
cli();
|
||||||
sleep_enable();
|
sleep_enable();
|
||||||
|
sei();
|
||||||
|
sleep_cpu();
|
||||||
|
|
||||||
sleep_mode(); // System sleeps here
|
// WDT interrupt wakes the CPU here.
|
||||||
|
sleep_disable();
|
||||||
sleep_disable(); // System continues execution here when
|
|
||||||
// watchdog timed out
|
|
||||||
sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// Watchdog setup - ii selects timeout:
|
||||||
// Setup for watchdog. Parameter ii for sleeping time:
|
// 0=16ms 1=32ms 2=64ms 3=128ms 4=250ms 5=500ms
|
||||||
// 0 = 16ms, 1 = 32ms, 2 = 64ms,
|
// 6=1s 7=2s 8=4s 9=8s
|
||||||
// 3 = 128ms, 4 = 250ms, 5 = 500ms
|
void setup_watchdog(uint8_t ii)
|
||||||
// 6 = 1 sec, 7 = 2 sec, 8 = 4 sec,
|
{
|
||||||
// 9 = 8 sec
|
if (ii > 9) ii = 9;
|
||||||
void setup_watchdog(int ii) {
|
|
||||||
|
|
||||||
byte bb;
|
uint8_t bb = ii & 7;
|
||||||
int ww;
|
if (ii > 7) bb |= (1 << WDP3);
|
||||||
if (ii > 9 ) ii=9;
|
|
||||||
bb=ii & 7;
|
|
||||||
if (ii > 7) bb|= (1<<5);
|
|
||||||
bb|= (1<<WDCE);
|
|
||||||
ww=bb;
|
|
||||||
|
|
||||||
MCUSR &= ~(1<<WDRF);
|
uint8_t oldSREG = SREG;
|
||||||
|
cli();
|
||||||
|
|
||||||
WDTCR |= (1<<WDCE) | (1<<WDE); // start timed sequence
|
wdt_reset();
|
||||||
|
MCUSR &= ~(1 << WDRF);
|
||||||
|
|
||||||
WDTCR = bb; // set new watchdog timeout value
|
// Timed sequence: enable configuration change, then set interrupt-only WDT.
|
||||||
WDTCR |= _BV(WDIE);
|
WDTCR |= (1 << WDCE) | (1 << WDE);
|
||||||
}
|
WDTCR = bb | (1 << WDIE);
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// Watchdog Interrupt Service / is executed when watchdog timed out
|
SREG = oldSREG;
|
||||||
ISR(WDT_vect) {
|
|
||||||
f_wdt=1; // set global flag
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
ISR(WDT_vect)
|
||||||
// Subroutines for light sensor
|
{
|
||||||
// =============================================================================
|
f_wdt = true;
|
||||||
// Function sensDarkness
|
}
|
||||||
// Usage: sensDarkness(Pin-No. N-Side of LED, Pin-No. P-Side of LED):
|
|
||||||
// will result "darkness-level" - the higher the darker:
|
|
||||||
// 30000 = pitch black
|
|
||||||
// 0 = sunshine
|
|
||||||
int sensDarkness(int LED_N, int LED_P){
|
|
||||||
|
|
||||||
unsigned int i; //Parameter bleed-out LED capacitor
|
// ===========================================================================
|
||||||
|
// Light sensor
|
||||||
|
// ===========================================================================
|
||||||
|
// Returns a "darkness level": higher = darker.
|
||||||
|
// Charges the LED junction capacitance, then times how long it takes to bleed
|
||||||
|
// back through the reverse-biased LED until the input reads LOW.
|
||||||
|
// ~30000 = pitch black, ~0 = bright light
|
||||||
|
unsigned int sensDarkness(int LED_N, int LED_P)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
// charge the capacitor of LED
|
// Charge the LED junction capacitance.
|
||||||
pinMode(LED_N,OUTPUT);
|
pinMode(LED_N, OUTPUT);
|
||||||
pinMode(LED_P,OUTPUT);
|
pinMode(LED_P, OUTPUT);
|
||||||
digitalWrite(LED_N,HIGH);
|
digitalWrite(LED_N, HIGH);
|
||||||
digitalWrite(LED_P,LOW);
|
digitalWrite(LED_P, LOW);
|
||||||
|
|
||||||
// Isolate the N end of the diode and turn off internal pull-up resistor
|
// Let the N-side float and measure bleed-down time.
|
||||||
pinMode(LED_N,INPUT);
|
pinMode(LED_N, INPUT);
|
||||||
digitalWrite(LED_N,LOW);
|
digitalWrite(LED_N, LOW); // disable internal pullup
|
||||||
|
|
||||||
// Count how long it takes the diode to bleed back down to a logic zero
|
for (i = 0; i < 30000; i++) {
|
||||||
for ( i = 0; i < 30000; i++) {
|
if (digitalRead(LED_N) == LOW) break;
|
||||||
if ( digitalRead(LED_N)==0) break;
|
|
||||||
}
|
}
|
||||||
// thats it, return result
|
|
||||||
|
// Clean up after sensing: both LED pins low, then caller releases them.
|
||||||
|
pinMode(LED_N, OUTPUT);
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
pinMode(LED_P, OUTPUT);
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// =============================================================================
|
// ===========================================================================
|
||||||
// Subroutines for morse text
|
// Morse helpers
|
||||||
// =============================================================================
|
// ===========================================================================
|
||||||
// -----------------------------------------------------------------------------
|
void dit(int LED_P)
|
||||||
// Function dit = ".", a dit is as long as a unitLength, used in morse()
|
{
|
||||||
//
|
digitalWrite(LED_P, HIGH);
|
||||||
void dit(int LED_P){
|
delay(unitLength);
|
||||||
digitalWrite( LED_P, HIGH ); delay( unitLength );
|
digitalWrite(LED_P, LOW);
|
||||||
digitalWrite( LED_P, LOW ); delay( unitLength );
|
delay(unitLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
void dah(int LED_P)
|
||||||
// Function dah = "-", a dah is as long as a 3*unitLength
|
{
|
||||||
//
|
digitalWrite(LED_P, HIGH);
|
||||||
void dah(int LED_P){
|
delay(unitLength * 3);
|
||||||
digitalWrite( LED_P, HIGH ); delay( unitLength*3 );
|
digitalWrite(LED_P, LOW);
|
||||||
digitalWrite( LED_P, LOW ); delay( unitLength );
|
delay(unitLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// ===========================================================================
|
||||||
// Function morse:
|
// Morse sender
|
||||||
// hand over text and LED Pins
|
// ===========================================================================
|
||||||
// because you want to use more than one LED hand over also LED Pins
|
void morse(int LED_N, int LED_P)
|
||||||
|
{
|
||||||
|
pinMode(LED_N, OUTPUT);
|
||||||
|
pinMode(LED_P, OUTPUT);
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
|
||||||
void morse(int LED_N, int LED_P){
|
const size_t len = strlen_P(morseText);
|
||||||
|
|
||||||
// Because I have more Flash than RAM I decided to use a case structure.
|
for (size_t i = 0; i < len; i++) {
|
||||||
// Its not so pretty, but I can use the RAM to hold my morseText.
|
char c = (char)pgm_read_byte(&morseText[i]);
|
||||||
//
|
|
||||||
// set N-Side of LED Low, so you can set P-side high to let them flash
|
|
||||||
|
|
||||||
pinMode( LED_N, OUTPUT);
|
// Allow lowercase source text without silently breaking timing.
|
||||||
pinMode( LED_P, OUTPUT);
|
if (c >= 'a' && c <= 'z') {
|
||||||
|
c = c - 'a' + 'A';
|
||||||
digitalWrite( LED_N, LOW);
|
|
||||||
|
|
||||||
// send it to defined LED
|
|
||||||
for(int i=0; i<=morseText.length(); i++)
|
|
||||||
{
|
|
||||||
switch( morseText[i] )
|
|
||||||
{
|
|
||||||
|
|
||||||
// Chars A-Z
|
|
||||||
case 'A': // .-
|
|
||||||
dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'B': // -...
|
|
||||||
dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'C': // -.-.
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'D': // -..
|
|
||||||
dah(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'E': // .
|
|
||||||
dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'F': // ..-.
|
|
||||||
dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'G': // --.
|
|
||||||
dah(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'H': // ....
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'I': // ..
|
|
||||||
dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'J': // .---
|
|
||||||
dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'K': // .-.-
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'L': // .-..
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'M': // --
|
|
||||||
dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'N': // -.
|
|
||||||
dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'O': // ---
|
|
||||||
dah(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'P': // .--.
|
|
||||||
dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Q': // --.-
|
|
||||||
dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'R': // .-.
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'S': // ...
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'T': // -
|
|
||||||
dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'U': // ..-
|
|
||||||
dit(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'V': // ...-
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'W': // .--
|
|
||||||
dit(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'X': // -..-
|
|
||||||
dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Y': // -.--
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Z': // --..
|
|
||||||
dah(LED_P);dah(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Numbers
|
|
||||||
case '1': // .----
|
|
||||||
dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '2': // ..---
|
|
||||||
dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '3': // ...--
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '4': // ....-
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '5': // .....
|
|
||||||
dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '6': // -....
|
|
||||||
dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '7': // --...
|
|
||||||
dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '8': // ---..
|
|
||||||
dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '9': // ----.
|
|
||||||
dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '0': // -----
|
|
||||||
dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Special Signs
|
|
||||||
case ' ': // Gap
|
|
||||||
delay( unitLength*5 );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '.': // .-.-.-
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ',': // --..--
|
|
||||||
dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '?': // ..--..
|
|
||||||
dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '!': // -.-.--
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ':': // ---...
|
|
||||||
dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ';': // -.-.-.
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '(': // -.--.
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ')': // -.--.-
|
|
||||||
dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '"': // .-..-.
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '@': // .--.-.
|
|
||||||
dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '&': // .-...
|
|
||||||
dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P);
|
|
||||||
}
|
}
|
||||||
// wait at end of sign
|
|
||||||
delay( unitLength*3 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
bool symbolSent = false;
|
||||||
// That's all, folks :-)
|
|
||||||
// -----------------------------------------------------------------------------
|
switch (c)
|
||||||
|
{
|
||||||
|
// ----- Letters -----
|
||||||
|
case 'A': dit(LED_P); dah(LED_P); symbolSent = true; break; // .-
|
||||||
|
case 'B': dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // -...
|
||||||
|
case 'C': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // -.-.
|
||||||
|
case 'D': dah(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // -..
|
||||||
|
case 'E': dit(LED_P); symbolSent = true; break; // .
|
||||||
|
case 'F': dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // ..-.
|
||||||
|
case 'G': dah(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // --.
|
||||||
|
case 'H': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // ....
|
||||||
|
case 'I': dit(LED_P); dit(LED_P); symbolSent = true; break; // ..
|
||||||
|
case 'J': dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // .---
|
||||||
|
case 'K': dah(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // -.-
|
||||||
|
case 'L': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // .-..
|
||||||
|
case 'M': dah(LED_P); dah(LED_P); symbolSent = true; break; // --
|
||||||
|
case 'N': dah(LED_P); dit(LED_P); symbolSent = true; break; // -.
|
||||||
|
case 'O': dah(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // ---
|
||||||
|
case 'P': dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // .--.
|
||||||
|
case 'Q': dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // --.-
|
||||||
|
case 'R': dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // .-.
|
||||||
|
case 'S': dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // ...
|
||||||
|
case 'T': dah(LED_P); symbolSent = true; break; // -
|
||||||
|
case 'U': dit(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // ..-
|
||||||
|
case 'V': dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // ...-
|
||||||
|
case 'W': dit(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // .--
|
||||||
|
case 'X': dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // -..-
|
||||||
|
case 'Y': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // -.--
|
||||||
|
case 'Z': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // --..
|
||||||
|
|
||||||
|
// ----- Digits -----
|
||||||
|
case '1': dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // .----
|
||||||
|
case '2': dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // ..---
|
||||||
|
case '3': dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // ...--
|
||||||
|
case '4': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // ....-
|
||||||
|
case '5': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // .....
|
||||||
|
case '6': dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // -....
|
||||||
|
case '7': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // --...
|
||||||
|
case '8': dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // ---..
|
||||||
|
case '9': dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // ----.
|
||||||
|
case '0': dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // -----
|
||||||
|
|
||||||
|
// ----- Punctuation -----
|
||||||
|
case '.': dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // .-.-.-
|
||||||
|
case ',': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // --..--
|
||||||
|
case '?': dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // ..--..
|
||||||
|
case '!': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); symbolSent = true; break; // -.-.--
|
||||||
|
case ':': dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // ---...
|
||||||
|
case ';': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // -.-.-.
|
||||||
|
case '(': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // -.--.
|
||||||
|
case ')': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); symbolSent = true; break; // -.--.-
|
||||||
|
case '"': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // .-..-.
|
||||||
|
case '@': dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); symbolSent = true; break; // .--.-.
|
||||||
|
case '&': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); symbolSent = true; break; // .-...
|
||||||
|
|
||||||
|
// Space handling:
|
||||||
|
// Previous symbol already ended with 1 unit OFF and then received the
|
||||||
|
// normal 2 unit character gap. Add 4 units here -> total word gap 7 units.
|
||||||
|
case ' ':
|
||||||
|
delay(unitLength * 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Unsupported chars are ignored without adding an artificial gap.
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inter-character gap: 3 units total.
|
||||||
|
// dit()/dah() already trail 1 unit OFF, so add the remaining 2 units.
|
||||||
|
if (symbolSent) {
|
||||||
|
delay(unitLength * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
}
|
||||||
@@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
=============================================================================
|
||||||
|
FireFly Morse Throwie
|
||||||
|
- a light controlled (LED as Sensor) morse blinker throwie with ATTiny85
|
||||||
|
=============================================================================
|
||||||
|
|
||||||
|
Project definitions, sources
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
Version: 0.2 - ATTiny85, 1 MHz, BOD fuse disabled
|
||||||
|
gitea : https://gitea.togo-lab.io/tgohle/0001-FireFly
|
||||||
|
Date : 2026-06-13
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Inspired by Karl Lunt's FireFly project:
|
||||||
|
http://www.seanet.com/~karllunt/fireflyLED.html
|
||||||
|
|
||||||
|
Morse code reference:
|
||||||
|
'A', ".-" 'B', "-..." 'C', "-.-."
|
||||||
|
'D', "-.." 'E', "." 'F', "..-."
|
||||||
|
'G', "--." 'H', "...." 'I', ".."
|
||||||
|
'J', ".---" 'K', "-.-" 'L', ".-.."
|
||||||
|
'M', "--" 'N', "-." 'O', "---"
|
||||||
|
'P', ".--." 'Q', "--.-" 'R', ".-."
|
||||||
|
'S', "..." 'T', "-" 'U', "..-"
|
||||||
|
'V', "...-" 'W', ".--" 'X', "-..-"
|
||||||
|
'Y', "-.--" 'Z', "--.."
|
||||||
|
|
||||||
|
'1', ".----" '2', "..---" '3', "...--"
|
||||||
|
'4', "....-" '5', "....." '6', "-...."
|
||||||
|
'7', "--..." '8', "---.." '9', "----."
|
||||||
|
'0', "-----"
|
||||||
|
|
||||||
|
'.', ".-.-.-" ',', "--..--" '?', "..--.."
|
||||||
|
'!', "-.-.--" ':', "---..." ';', "-.-.-."
|
||||||
|
'(', "-.--." ')', "-.--.-" '"', ".-..-."
|
||||||
|
'@', ".--.-." '&', ".-..."
|
||||||
|
|
||||||
|
Legal stuff / Copyright:
|
||||||
|
License_-_CC_BY-NC_4.0
|
||||||
|
https://creativecommons.org/licenses/by-nc/4.0/
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <avr/sleep.h>
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
#include <avr/pgmspace.h> // FIX 3: needed for PROGMEM / pgm_read_byte
|
||||||
|
|
||||||
|
#ifndef cbi
|
||||||
|
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
||||||
|
#endif
|
||||||
|
#ifndef sbi
|
||||||
|
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Timing: unit length in ms.
|
||||||
|
// At 1 MHz, delay() is accurate when F_CPU=1000000L is set in boards.txt.
|
||||||
|
// 100 ms gives readable optical Morse; raise to 150 if readability is poor.
|
||||||
|
#define unitLength 100
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// LED pin definitions (N-side = cathode, P-side = anode for sensing/driving)
|
||||||
|
#define LED1_N_SIDE 3
|
||||||
|
#define LED1_P_SIDE 4
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// ATTiny85 has 512 bytes SRAM; this frees all of it for the stack.
|
||||||
|
// Only uppercase letters, digits, and the special chars in the switch below.
|
||||||
|
// Test only: 20 x "0" due 0 = "-----" most energy draining
|
||||||
|
const char morseText[] PROGMEM = "0000000000000000000";
|
||||||
|
// Ruler: 0...0....1...1....2 Attention: more Text
|
||||||
|
// Ruler: 1...5....0...5....0 will cost more power!
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Darkness threshold.
|
||||||
|
// Higher value = triggers in brighter conditions.
|
||||||
|
// Best calibrated at actual dusk/dawn with the chosen LED type.
|
||||||
|
unsigned int darknessThreshold = 17000;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Watchdog interrupt flag — volatile because it is written in an ISR
|
||||||
|
volatile boolean f_wdt = 1;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Forward declarations
|
||||||
|
void setup_watchdog(int ii);
|
||||||
|
void system_sleep();
|
||||||
|
unsigned int sensDarkness(int LED_N, int LED_P);
|
||||||
|
void morse(int LED_N, int LED_P);
|
||||||
|
void dit(int LED_P);
|
||||||
|
void dah(int LED_P);
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Setup
|
||||||
|
// ===========================================================================
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
// Disable unused peripherals immediately to save some µ/mA.
|
||||||
|
// PRTIM1, PRUSI: genuinely unused, safe to gate off
|
||||||
|
// PRADC: controlled manually around sensDarkness()
|
||||||
|
// PRTIM0: must stay ON — delay() and millis() depend on Timer0
|
||||||
|
PRR = (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC);
|
||||||
|
|
||||||
|
// ADC is gated via PRR above; also clear ADEN just in case
|
||||||
|
cbi(ADCSRA, ADEN);
|
||||||
|
|
||||||
|
setup_watchdog(9); // 8-second watchdog interval
|
||||||
|
// simple repeat if more delay is need, eg 4
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Main loop
|
||||||
|
// ===========================================================================
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
if (f_wdt == 1) {
|
||||||
|
f_wdt = 0;
|
||||||
|
|
||||||
|
// Enable ADC only for the sensing window, then shut it off again.
|
||||||
|
cbi(PRR, PRADC); // un-gate ADC clock
|
||||||
|
sbi(ADCSRA, ADEN); // power ADC on
|
||||||
|
|
||||||
|
if (sensDarkness(LED1_N_SIDE, LED1_P_SIDE) > darknessThreshold) {
|
||||||
|
morse(LED1_N_SIDE, LED1_P_SIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
cbi(ADCSRA, ADEN); // ADC off
|
||||||
|
sbi(PRR, PRADC); // re-gate ADC clock
|
||||||
|
|
||||||
|
// Return LED pins to input (high-Z) before sleeping
|
||||||
|
pinMode(LED1_N_SIDE, INPUT);
|
||||||
|
pinMode(LED1_P_SIDE, INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sleep 4 x 8 s = ~32 s between activations
|
||||||
|
for (uint8_t i = 0; i < 1; i++) {
|
||||||
|
system_sleep();
|
||||||
|
}
|
||||||
|
// f_wdt is set to 1 by the WDT ISR when the 8 s expire; no manual clear needed here.
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Sleep helpers
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
void system_sleep()
|
||||||
|
{
|
||||||
|
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
||||||
|
sleep_enable();
|
||||||
|
sleep_mode(); // CPU halts here until WDT fires
|
||||||
|
sleep_disable();
|
||||||
|
// ADC stays off - re-enable it in loop() only when sensing
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watchdog setup - ii selects timeout:
|
||||||
|
// 0=16ms 1=32ms 2=64ms 3=128ms 4=250ms 5=500ms
|
||||||
|
// 6=1s 7=2s 8=4s 9=8s
|
||||||
|
void setup_watchdog(int ii)
|
||||||
|
{
|
||||||
|
byte bb;
|
||||||
|
if (ii > 9) ii = 9;
|
||||||
|
bb = ii & 7;
|
||||||
|
if (ii > 7) bb |= (1 << 5);
|
||||||
|
bb |= (1 << WDCE);
|
||||||
|
|
||||||
|
MCUSR &= ~(1 << WDRF);
|
||||||
|
WDTCR |= (1 << WDCE) | (1 << WDE); // timed sequence - must not be split
|
||||||
|
WDTCR = bb;
|
||||||
|
WDTCR |= _BV(WDIE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(WDT_vect)
|
||||||
|
{
|
||||||
|
f_wdt = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Light sensor
|
||||||
|
// ===========================================================================
|
||||||
|
// Returns a "darkness level": higher = darker.
|
||||||
|
// Charges the LED junction capacitor, then times how long it takes to bleed
|
||||||
|
// back through the reverse-biased diode to a logic LOW.
|
||||||
|
// ~30000 = pitch black, ~0 = bright light
|
||||||
|
|
||||||
|
// return type is unsigned int (counter can reach 30000, fits in 16 bits)
|
||||||
|
unsigned int sensDarkness(int LED_N, int LED_P)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
// Charge the LED (forward-bias momentarily)
|
||||||
|
pinMode(LED_N, OUTPUT);
|
||||||
|
pinMode(LED_P, OUTPUT);
|
||||||
|
digitalWrite(LED_N, HIGH);
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
|
||||||
|
// Let the N-end float and measure bleed-down time
|
||||||
|
pinMode(LED_N, INPUT);
|
||||||
|
digitalWrite(LED_N, LOW); // disable internal pull-up
|
||||||
|
|
||||||
|
for (i = 0; i < 30000; i++) {
|
||||||
|
if (digitalRead(LED_N) == 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clean up after sensing
|
||||||
|
pinMode(LED_N, OUTPUT);
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
pinMode(LED_P, OUTPUT);
|
||||||
|
digitalWrite(LED_P, LOW);
|
||||||
|
return i;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Morse helpers
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
void dit(int LED_P)
|
||||||
|
{
|
||||||
|
digitalWrite(LED_P, HIGH); delay(unitLength);
|
||||||
|
digitalWrite(LED_P, LOW); delay(unitLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dah(int LED_P)
|
||||||
|
{
|
||||||
|
digitalWrite(LED_P, HIGH); delay(unitLength * 3);
|
||||||
|
digitalWrite(LED_P, LOW); delay(unitLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// Morse sender
|
||||||
|
// ===========================================================================
|
||||||
|
void morse(int LED_N, int LED_P)
|
||||||
|
{
|
||||||
|
pinMode(LED_N, OUTPUT);
|
||||||
|
pinMode(LED_P, OUTPUT);
|
||||||
|
digitalWrite(LED_N, LOW);
|
||||||
|
|
||||||
|
// read each character from flash with pgm_read_byte()
|
||||||
|
// use < morseText length, not <= (avoids reading past the null terminator)
|
||||||
|
uint8_t len = strlen_P(morseText);
|
||||||
|
for (uint8_t i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
char c = (char)pgm_read_byte(&morseText[i]);
|
||||||
|
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
// ----- Letters -----
|
||||||
|
case 'A': dit(LED_P); dah(LED_P); break; // .-
|
||||||
|
case 'B': dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // -...
|
||||||
|
case 'C': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); break; // -.-.
|
||||||
|
case 'D': dah(LED_P); dit(LED_P); dit(LED_P); break; // -..
|
||||||
|
case 'E': dit(LED_P); break; // .
|
||||||
|
case 'F': dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); break; // ..-.
|
||||||
|
case 'G': dah(LED_P); dah(LED_P); dit(LED_P); break; // --.
|
||||||
|
case 'H': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // ....
|
||||||
|
case 'I': dit(LED_P); dit(LED_P); break; // ..
|
||||||
|
case 'J': dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); break; // .---
|
||||||
|
case 'K': dah(LED_P); dit(LED_P); dah(LED_P); break; // -.-
|
||||||
|
case 'L': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); break; // .-..
|
||||||
|
case 'M': dah(LED_P); dah(LED_P); break; // --
|
||||||
|
case 'N': dah(LED_P); dit(LED_P); break; // -.
|
||||||
|
case 'O': dah(LED_P); dah(LED_P); dah(LED_P); break; // ---
|
||||||
|
case 'P': dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); break; // .--.
|
||||||
|
case 'Q': dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); break; // --.-
|
||||||
|
case 'R': dit(LED_P); dah(LED_P); dit(LED_P); break; // .-.
|
||||||
|
case 'S': dit(LED_P); dit(LED_P); dit(LED_P); break; // ...
|
||||||
|
case 'T': dah(LED_P); break; // -
|
||||||
|
case 'U': dit(LED_P); dit(LED_P); dah(LED_P); break; // ..-
|
||||||
|
case 'V': dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); break; // ...-
|
||||||
|
case 'W': dit(LED_P); dah(LED_P); dah(LED_P); break; // .--
|
||||||
|
case 'X': dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); break; // -..-
|
||||||
|
case 'Y': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); break; // -.--
|
||||||
|
case 'Z': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); break; // --..
|
||||||
|
|
||||||
|
// ----- Digits -----
|
||||||
|
case '1': dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); break; // .----
|
||||||
|
case '2': dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); break; // ..---
|
||||||
|
case '3': dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); break; // ...--
|
||||||
|
case '4': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); break; // ....-
|
||||||
|
case '5': dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // .....
|
||||||
|
case '6': dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // -....
|
||||||
|
case '7': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // --...
|
||||||
|
case '8': dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); break; // ---.
|
||||||
|
case '9': dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); break; // ----.
|
||||||
|
case '0': dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); dah(LED_P); break; // -----
|
||||||
|
|
||||||
|
// ----- Punctuation -----
|
||||||
|
case ' ': delay(unitLength * 5); break; // word gap (5 + 3 = 8 units total)
|
||||||
|
case '.': dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); break; // .-.-.-
|
||||||
|
case ',': dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); break; // --..--
|
||||||
|
case '?': dit(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); break; // ..--..
|
||||||
|
case '!': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); break; // -.-.--
|
||||||
|
case ':': dah(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // ---...
|
||||||
|
case ';': dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); break; // -.-.-.
|
||||||
|
case '(': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); break; // -.--.
|
||||||
|
case ')': dah(LED_P); dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); break; // -.--.-
|
||||||
|
case '"': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); break; // .-..-.
|
||||||
|
case '@': dit(LED_P); dah(LED_P); dah(LED_P); dit(LED_P); dah(LED_P); dit(LED_P); break; // .--.-.
|
||||||
|
case '&': dit(LED_P); dah(LED_P); dit(LED_P); dit(LED_P); dit(LED_P); break; // .-...
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inter-character gap: 3 units (the dit/dah functions already trail 1 unit,
|
||||||
|
// so this adds the remaining 2 to reach the standard 3-unit gap).
|
||||||
|
// Space case already handles word gap - no extra delay needed there.
|
||||||
|
if (c != ' ') {
|
||||||
|
delay(unitLength * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -9,8 +9,8 @@
|
|||||||
(paper "A4")
|
(paper "A4")
|
||||||
(title_block
|
(title_block
|
||||||
(title "日輪蛍 / Nichirin Hotaru / FireFly Solar")
|
(title "日輪蛍 / Nichirin Hotaru / FireFly Solar")
|
||||||
(date "2026-05-14")
|
(date "2026-09-27")
|
||||||
(rev "FireFly Solar")
|
(rev "FireFly Sol 2")
|
||||||
(company "WWW: https://togo-lab.io")
|
(company "WWW: https://togo-lab.io")
|
||||||
(comment 1 "Email: tgohle@togo-lab.io")
|
(comment 1 "Email: tgohle@togo-lab.io")
|
||||||
(comment 2 "Tōgō Lab / 塔郷研究所")
|
(comment 2 "Tōgō Lab / 塔郷研究所")
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
(property "Value" "LED"
|
(property "Value" "LED"
|
||||||
(at 0.254 3.81 180)
|
(at -0.7366 3.81 180)
|
||||||
(layer "F.SilkS")
|
(layer "F.SilkS")
|
||||||
(uuid "a4ab967c-16e9-488c-8e2a-93f71192fb7e")
|
(uuid "a4ab967c-16e9-488c-8e2a-93f71192fb7e")
|
||||||
(effects
|
(effects
|
||||||
@@ -999,7 +999,7 @@
|
|||||||
(descr "Soldered wire connection, for 3 times 0.127 mm² wires, basic insulation, conductor diameter 0.48mm, outer diameter 1mm, size source Multi-Contact FLEXI-E/HK 0.127 (https://www.staubli.com/content/dam/ecs/catalogs-brochures/TM/CAB-Main-11014119-en.pdf#page=9), bend radius 3 times outer diameter")
|
(descr "Soldered wire connection, for 3 times 0.127 mm² wires, basic insulation, conductor diameter 0.48mm, outer diameter 1mm, size source Multi-Contact FLEXI-E/HK 0.127 (https://www.staubli.com/content/dam/ecs/catalogs-brochures/TM/CAB-Main-11014119-en.pdf#page=9), bend radius 3 times outer diameter")
|
||||||
(tags "connector wire 0.127sqmm")
|
(tags "connector wire 0.127sqmm")
|
||||||
(property "Reference" "J3"
|
(property "Reference" "J3"
|
||||||
(at 9.398 0 180)
|
(at 8.8646 -0.0508 180)
|
||||||
(layer "F.SilkS")
|
(layer "F.SilkS")
|
||||||
(uuid "3b73cd9d-126a-446c-9857-2cb15aa2266b")
|
(uuid "3b73cd9d-126a-446c-9857-2cb15aa2266b")
|
||||||
(effects
|
(effects
|
||||||
@@ -2094,8 +2094,8 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(property "Value" "3V6 1.3W"
|
(property "Value" "3V9 1.3W"
|
||||||
(at 5.588 0.508 0)
|
(at 5.5372 0.0508 0)
|
||||||
(layer "F.SilkS")
|
(layer "F.SilkS")
|
||||||
(uuid "0961063d-f8b2-473d-ac71-4e9497f2e68d")
|
(uuid "0961063d-f8b2-473d-ac71-4e9497f2e68d")
|
||||||
(effects
|
(effects
|
||||||
@@ -4039,17 +4039,6 @@
|
|||||||
(layer "F.Fab")
|
(layer "F.Fab")
|
||||||
(uuid "3b0b3bca-b90a-4227-927d-76d3e2b37fa7")
|
(uuid "3b0b3bca-b90a-4227-927d-76d3e2b37fa7")
|
||||||
)
|
)
|
||||||
(fp_text user "-"
|
|
||||||
(at 1.651 0 180)
|
|
||||||
(layer "F.SilkS")
|
|
||||||
(uuid "40b0fefb-8b86-43f7-b24d-e20c4677b223")
|
|
||||||
(effects
|
|
||||||
(font
|
|
||||||
(size 0.6 0.6)
|
|
||||||
(thickness 0.075)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(pad "1" thru_hole circle
|
(pad "1" thru_hole circle
|
||||||
(at 0 0 90)
|
(at 0 0 90)
|
||||||
(size 1.4 1.4)
|
(size 1.4 1.4)
|
||||||
@@ -8648,17 +8637,6 @@
|
|||||||
(layer "F.Fab")
|
(layer "F.Fab")
|
||||||
(uuid "aa58888e-c266-4561-b44b-f14293df7a5f")
|
(uuid "aa58888e-c266-4561-b44b-f14293df7a5f")
|
||||||
)
|
)
|
||||||
(fp_text user "-"
|
|
||||||
(at 1.651 0 180)
|
|
||||||
(layer "F.SilkS")
|
|
||||||
(uuid "be078bc2-b3be-4c33-abfe-930461332b78")
|
|
||||||
(effects
|
|
||||||
(font
|
|
||||||
(size 0.6 0.6)
|
|
||||||
(thickness 0.075)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(pad "1" thru_hole circle
|
(pad "1" thru_hole circle
|
||||||
(at 0 0 90)
|
(at 0 0 90)
|
||||||
(size 1.4 1.4)
|
(size 1.4 1.4)
|
||||||
@@ -9513,6 +9491,27 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
(gr_circle
|
||||||
|
(center 130.302 110.1852)
|
||||||
|
(end 129.3368 111.4552)
|
||||||
|
(stroke
|
||||||
|
(width 0.1)
|
||||||
|
(type solid)
|
||||||
|
)
|
||||||
|
(fill no)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "95d50eb7-dbed-43eb-bd1d-06a59db3f6fb")
|
||||||
|
)
|
||||||
|
(gr_line
|
||||||
|
(start 138.4808 160.02)
|
||||||
|
(end 138.4808 163.7792)
|
||||||
|
(stroke
|
||||||
|
(width 0.2)
|
||||||
|
(type solid)
|
||||||
|
)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "d2823285-e26f-4c72-9f63-5cfb3e832430")
|
||||||
|
)
|
||||||
(gr_line
|
(gr_line
|
||||||
(start 127.254 49.784041)
|
(start 127.254 49.784041)
|
||||||
(end 127.250269 164.59202)
|
(end 127.250269 164.59202)
|
||||||
@@ -9691,15 +9690,26 @@
|
|||||||
(layer "Edge.Cuts")
|
(layer "Edge.Cuts")
|
||||||
(uuid "24f40e79-9b78-47e7-b5a8-02f0b35077e8")
|
(uuid "24f40e79-9b78-47e7-b5a8-02f0b35077e8")
|
||||||
)
|
)
|
||||||
(gr_text "2-1: 3.3V |\n"
|
(gr_text "RST"
|
||||||
(at 135.89 108.458 0)
|
(at 128.4732 152.4 0)
|
||||||
(layer "F.SilkS")
|
(layer "F.SilkS")
|
||||||
(uuid "ab635e37-4101-40ac-ba14-27b79642022d")
|
(uuid "74932894-f33b-44b2-a5cf-76046b12ee27")
|
||||||
|
(effects
|
||||||
|
(font
|
||||||
|
(size 0.6 0.6)
|
||||||
|
(thickness 0.1)
|
||||||
|
)
|
||||||
|
(justify left bottom)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(gr_text "MP C1+"
|
||||||
|
(at 128.7272 112.5728 0)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "bb6f80c5-7eac-4e6c-8d7e-74d37dea3555")
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 0.6 0.6)
|
(size 0.6 0.6)
|
||||||
(thickness 0.1)
|
(thickness 0.1)
|
||||||
(bold yes)
|
|
||||||
)
|
)
|
||||||
(justify left bottom)
|
(justify left bottom)
|
||||||
)
|
)
|
||||||
@@ -9756,7 +9766,44 @@
|
|||||||
(justify left bottom)
|
(justify left bottom)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(gr_text "#0001 日輪蛍\nNichirin Hotaru\n\nFireFly Solar\n\ntogo-lab.io\n2026"
|
(gr_text "MP GND"
|
||||||
|
(at 129.3368 119.38 90)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "b0a20566-aa83-4f09-bf46-9421faae2e37")
|
||||||
|
(effects
|
||||||
|
(font
|
||||||
|
(size 0.6 0.6)
|
||||||
|
(thickness 0.1)
|
||||||
|
)
|
||||||
|
(justify left bottom)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(gr_text "MP GND"
|
||||||
|
(at 141.8336 119.5324 90)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "1ea0f3c1-157b-4043-9b62-e39c09519f2f")
|
||||||
|
(effects
|
||||||
|
(font
|
||||||
|
(size 0.6 0.6)
|
||||||
|
(thickness 0.1)
|
||||||
|
)
|
||||||
|
(justify left bottom)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(gr_text "2-1: 3.3V |\n"
|
||||||
|
(at 135.89 108.458 0)
|
||||||
|
(layer "F.SilkS")
|
||||||
|
(uuid "ab635e37-4101-40ac-ba14-27b79642022d")
|
||||||
|
(effects
|
||||||
|
(font
|
||||||
|
(size 0.6 0.6)
|
||||||
|
(thickness 0.15)
|
||||||
|
(bold yes)
|
||||||
|
)
|
||||||
|
(justify left bottom)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(gr_text "#0001 日輪蛍\nNichirin Hotaru\n\nFireFly Solar\n\ntogo-lab.io\n2026 V 3.0"
|
||||||
(at 135.382 84.709 0)
|
(at 135.382 84.709 0)
|
||||||
(layer "B.SilkS")
|
(layer "B.SilkS")
|
||||||
(uuid "88b0a397-e4a2-4145-86f6-0fa60b4a4bd9")
|
(uuid "88b0a397-e4a2-4145-86f6-0fa60b4a4bd9")
|
||||||
@@ -9769,7 +9816,7 @@
|
|||||||
)
|
)
|
||||||
(justify bottom mirror)
|
(justify bottom mirror)
|
||||||
)
|
)
|
||||||
(render_cache "#0001 日輪蛍\nNichirin Hotaru\n\nFireFly Solar\n\ntogo-lab.io\n2026"
|
(render_cache "#0001 日輪蛍\nNichirin Hotaru\n\nFireFly Solar\n\ntogo-lab.io\n2026 V 3.0"
|
||||||
0
|
0
|
||||||
(polygon
|
(polygon
|
||||||
(pts
|
(pts
|
||||||
@@ -11157,134 +11204,239 @@
|
|||||||
)
|
)
|
||||||
(polygon
|
(polygon
|
||||||
(pts
|
(pts
|
||||||
(xy 136.959124 83.645875) (xy 136.955149 83.660546) (xy 136.957219 83.677383) (xy 136.967477 83.709916)
|
(xy 139.748182 83.645875) (xy 139.744207 83.660546) (xy 139.746277 83.677383) (xy 139.756535 83.709916)
|
||||||
(xy 136.974219 83.725816) (xy 136.977443 83.740544) (xy 137.155147 83.898602) (xy 137.333549 84.06441)
|
(xy 139.763277 83.725816) (xy 139.766501 83.740544) (xy 139.944205 83.898602) (xy 140.122607 84.06441)
|
||||||
(xy 137.512787 84.228652) (xy 137.692439 84.381608) (xy 137.657857 84.389584) (xy 137.592715 84.396043)
|
(xy 140.301845 84.228652) (xy 140.481497 84.381608) (xy 140.446915 84.389584) (xy 140.381773 84.396043)
|
||||||
(xy 137.434225 84.399413) (xy 137.257931 84.393551) (xy 137.102446 84.38344) (xy 137.084201 84.381755)
|
(xy 140.223283 84.399413) (xy 140.046989 84.393551) (xy 139.891504 84.38344) (xy 139.873259 84.381755)
|
||||||
(xy 137.026755 84.378384) (xy 137.010632 84.38238) (xy 136.998717 84.394505) (xy 136.990485 84.418098)
|
(xy 139.815813 84.378384) (xy 139.79969 84.38238) (xy 139.787775 84.394505) (xy 139.779543 84.418098)
|
||||||
(xy 137.099778 84.445679) (xy 137.214627 84.469462) (xy 137.330713 84.485603) (xy 137.445143 84.490931)
|
(xy 139.888836 84.445679) (xy 140.003685 84.469462) (xy 140.119771 84.485603) (xy 140.234201 84.490931)
|
||||||
(xy 137.546113 84.484263) (xy 137.645398 84.471001) (xy 137.734351 84.456933) (xy 137.820813 84.451071)
|
(xy 140.335171 84.484263) (xy 140.434456 84.471001) (xy 140.523409 84.456933) (xy 140.609871 84.451071)
|
||||||
(xy 137.837941 84.426138) (xy 137.844564 84.402743) (xy 137.842282 84.379483) (xy 137.827491 84.344924)
|
(xy 140.626999 84.426138) (xy 140.633622 84.402743) (xy 140.63134 84.379483) (xy 140.616549 84.344924)
|
||||||
(xy 137.802275 84.311046) (xy 137.747247 84.260122) (xy 137.631403 84.170216) (xy 137.509697 84.067634)
|
(xy 140.591333 84.311046) (xy 140.536305 84.260122) (xy 140.420461 84.170216) (xy 140.298755 84.067634)
|
||||||
(xy 137.408873 83.968129) (xy 137.402112 83.965771) (xy 137.379051 83.946074) (xy 137.320872 83.884378)
|
(xy 140.197931 83.968129) (xy 140.19117 83.965771) (xy 140.168109 83.946074) (xy 140.10993 83.884378)
|
||||||
(xy 137.252875 83.807076) (xy 137.193378 83.735635) (xy 137.162017 83.692843) (xy 137.17959 83.642475)
|
(xy 140.041933 83.807076) (xy 139.982436 83.735635) (xy 139.951075 83.692843) (xy 139.968648 83.642475)
|
||||||
(xy 137.208248 83.606299) (xy 137.248992 83.581542) (xy 137.324152 83.560718) (xy 137.421623 83.553039)
|
(xy 139.997306 83.606299) (xy 140.03805 83.581542) (xy 140.11321 83.560718) (xy 140.210681 83.553039)
|
||||||
(xy 137.501912 83.559766) (xy 137.577694 83.57971) (xy 137.624314 83.601464) (xy 137.659689 83.628348)
|
(xy 140.29097 83.559766) (xy 140.366752 83.57971) (xy 140.413372 83.601464) (xy 140.448747 83.628348)
|
||||||
(xy 137.685698 83.660383) (xy 137.704602 83.666978) (xy 137.727903 83.682951) (xy 137.734851 83.693121)
|
(xy 140.474756 83.660383) (xy 140.49366 83.666978) (xy 140.516961 83.682951) (xy 140.523909 83.693121)
|
||||||
(xy 137.734864 83.703761) (xy 137.752519 83.721367) (xy 137.775116 83.732095) (xy 137.804253 83.735928)
|
(xy 140.523922 83.703761) (xy 140.541577 83.721367) (xy 140.564174 83.732095) (xy 140.593311 83.735928)
|
||||||
(xy 137.805206 83.720027) (xy 137.815025 83.702882) (xy 137.833929 83.660603) (xy 137.832885 83.638313)
|
(xy 140.594264 83.720027) (xy 140.604083 83.702882) (xy 140.622987 83.660603) (xy 140.621943 83.638313)
|
||||||
(xy 137.813486 83.613122) (xy 137.794959 83.566578) (xy 137.762708 83.527173) (xy 137.721274 83.494299)
|
(xy 140.602544 83.613122) (xy 140.584017 83.566578) (xy 140.551766 83.527173) (xy 140.510332 83.494299)
|
||||||
(xy 137.673974 83.466284) (xy 137.582823 83.420415) (xy 137.569523 83.424684) (xy 137.551022 83.424078)
|
(xy 140.463032 83.466284) (xy 140.371881 83.420415) (xy 140.358581 83.424684) (xy 140.34008 83.424078)
|
||||||
(xy 137.511235 83.415725) (xy 137.470569 83.407958) (xy 137.454807 83.408784) (xy 137.448953 83.415212)
|
(xy 140.300293 83.415725) (xy 140.259627 83.407958) (xy 140.243865 83.408784) (xy 140.238011 83.415212)
|
||||||
(xy 137.432369 83.404809) (xy 137.410925 83.402976) (xy 137.365569 83.410669) (xy 137.335234 83.417337)
|
(xy 140.221427 83.404809) (xy 140.199983 83.402976) (xy 140.154627 83.410669) (xy 140.124292 83.417337)
|
||||||
(xy 137.32249 83.41676) (xy 137.313032 83.412135) (xy 137.272917 83.421885) (xy 137.228475 83.43844)
|
(xy 140.111548 83.41676) (xy 140.10209 83.412135) (xy 140.061975 83.421885) (xy 140.017533 83.43844)
|
||||||
(xy 137.145237 83.471779) (xy 137.144609 83.491006) (xy 137.141061 83.496472) (xy 137.135126 83.49911)
|
(xy 139.934295 83.471779) (xy 139.933667 83.491006) (xy 139.930119 83.496472) (xy 139.924184 83.49911)
|
||||||
(xy 137.124766 83.493034) (xy 137.107062 83.49867) (xy 137.068814 83.526441) (xy 137.046612 83.549741)
|
(xy 139.913824 83.493034) (xy 139.89612 83.49867) (xy 139.857872 83.526441) (xy 139.83567 83.549741)
|
||||||
(xy 137.02441 83.572676) (xy 136.992463 83.595464) (xy 136.976323 83.613582)
|
(xy 139.813468 83.572676) (xy 139.781521 83.595464) (xy 139.765381 83.613582)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(polygon
|
(polygon
|
||||||
(pts
|
(pts
|
||||||
(xy 136.146821 83.391032) (xy 136.235115 83.41382) (xy 136.311246 83.436461) (xy 136.357257 83.453224)
|
(xy 138.935879 83.391032) (xy 139.024173 83.41382) (xy 139.100304 83.436461) (xy 139.146315 83.453224)
|
||||||
(xy 136.39507 83.478813) (xy 136.459697 83.541095) (xy 136.492374 83.569547) (xy 136.530918 83.591727)
|
(xy 139.184128 83.478813) (xy 139.248755 83.541095) (xy 139.281432 83.569547) (xy 139.319976 83.591727)
|
||||||
(xy 136.537586 83.632979) (xy 136.550995 83.668004) (xy 136.565429 83.71248) (xy 136.564999 83.732663)
|
(xy 139.326644 83.632979) (xy 139.340053 83.668004) (xy 139.354487 83.71248) (xy 139.354057 83.732663)
|
||||||
(xy 136.554585 83.75344) (xy 136.563553 83.856039) (xy 136.557003 83.953035) (xy 136.538079 84.047182)
|
(xy 139.343643 83.75344) (xy 139.352611 83.856039) (xy 139.346061 83.953035) (xy 139.327137 84.047182)
|
||||||
(xy 136.510694 84.134898) (xy 136.445042 84.296318) (xy 136.439986 84.308115) (xy 136.434857 84.320352)
|
(xy 139.299752 84.134898) (xy 139.2341 84.296318) (xy 139.229044 84.308115) (xy 139.223915 84.320352)
|
||||||
(xy 136.412004 84.342716) (xy 136.39441 84.369078) (xy 136.360705 84.426231) (xy 136.33911 84.453004)
|
(xy 139.201062 84.342716) (xy 139.183468 84.369078) (xy 139.149763 84.426231) (xy 139.128168 84.453004)
|
||||||
(xy 136.31044 84.477156) (xy 136.274967 84.494349) (xy 136.222952 84.504413) (xy 136.150314 84.50285)
|
(xy 139.099498 84.477156) (xy 139.064025 84.494349) (xy 139.01201 84.504413) (xy 138.939372 84.50285)
|
||||||
(xy 136.094138 84.485875) (xy 135.989358 84.425059) (xy 135.936602 84.390694) (xy 135.874759 84.357721)
|
(xy 138.883196 84.485875) (xy 138.778416 84.425059) (xy 138.72566 84.390694) (xy 138.663817 84.357721)
|
||||||
(xy 135.874393 84.344532) (xy 135.877397 84.340502) (xy 135.8551 84.338032) (xy 135.828085 84.31427)
|
(xy 138.663451 84.344532) (xy 138.666455 84.340502) (xy 138.644158 84.338032) (xy 138.617143 84.31427)
|
||||||
(xy 135.778845 84.242829) (xy 135.748217 84.194542) (xy 135.731991 84.175633) (xy 135.719421 84.166406)
|
(xy 138.567903 84.242829) (xy 138.537275 84.194542) (xy 138.521049 84.175633) (xy 138.508479 84.166406)
|
||||||
(xy 135.686036 84.135396) (xy 135.650031 84.085146) (xy 135.61862 84.027839) (xy 135.591193 83.966224)
|
(xy 138.475094 84.135396) (xy 138.439089 84.085146) (xy 138.407678 84.027839) (xy 138.380251 83.966224)
|
||||||
(xy 135.553385 83.851479) (xy 135.54469 83.803687) (xy 135.545691 83.781503) (xy 135.544379 83.769633)
|
(xy 138.342443 83.851479) (xy 138.333748 83.803687) (xy 138.334749 83.781503) (xy 138.333437 83.769633)
|
||||||
(xy 135.693849 83.769633) (xy 135.699432 83.804417) (xy 135.718249 83.846057) (xy 135.713482 83.855795)
|
(xy 138.482907 83.769633) (xy 138.48849 83.804417) (xy 138.507307 83.846057) (xy 138.50254 83.855795)
|
||||||
(xy 135.715831 83.888408) (xy 135.73664 83.972233) (xy 135.767415 84.056423) (xy 135.785601 84.088179)
|
(xy 138.504889 83.888408) (xy 138.525698 83.972233) (xy 138.556473 84.056423) (xy 138.574659 84.088179)
|
||||||
(xy 135.798922 84.098628) (xy 135.869877 84.186994) (xy 135.945175 84.263492) (xy 136.029704 84.330132)
|
(xy 138.58798 84.098628) (xy 138.658935 84.186994) (xy 138.734233 84.263492) (xy 138.818762 84.330132)
|
||||||
(xy 136.131361 84.389961) (xy 136.149281 84.377293) (xy 136.168217 84.376113) (xy 136.188416 84.375225)
|
(xy 138.920419 84.389961) (xy 138.938339 84.377293) (xy 138.957275 84.376113) (xy 138.977474 84.375225)
|
||||||
(xy 136.212694 84.362997) (xy 136.24042 84.379551) (xy 136.263399 84.379703) (xy 136.284403 84.368895)
|
(xy 139.001752 84.362997) (xy 139.029478 84.379551) (xy 139.052457 84.379703) (xy 139.073461 84.368895)
|
||||||
(xy 136.301427 84.350394) (xy 136.312487 84.327495) (xy 136.316082 84.303792) (xy 136.335778 84.292225)
|
(xy 139.090485 84.350394) (xy 139.101545 84.327495) (xy 139.10514 84.303792) (xy 139.124836 84.292225)
|
||||||
(xy 136.352645 84.268841) (xy 136.377558 84.203115) (xy 136.399466 84.127571) (xy 136.425405 84.063018)
|
(xy 139.141703 84.268841) (xy 139.166616 84.203115) (xy 139.188524 84.127571) (xy 139.214463 84.063018)
|
||||||
(xy 136.42709 84.018248) (xy 136.430461 83.971207) (xy 136.435443 83.840781) (xy 136.429256 83.777503)
|
(xy 139.216148 84.018248) (xy 139.219519 83.971207) (xy 139.224501 83.840781) (xy 139.218314 83.777503)
|
||||||
(xy 136.411117 83.720027) (xy 136.391285 83.685813) (xy 136.362371 83.654078) (xy 136.322823 83.624553)
|
(xy 139.200175 83.720027) (xy 139.180343 83.685813) (xy 139.151429 83.654078) (xy 139.111881 83.624553)
|
||||||
(xy 136.309954 83.611914) (xy 136.304065 83.595903) (xy 136.293221 83.557508) (xy 136.280895 83.539199)
|
(xy 139.099012 83.611914) (xy 139.093123 83.595903) (xy 139.082279 83.557508) (xy 139.069953 83.539199)
|
||||||
(xy 136.257024 83.521678) (xy 136.249919 83.529635) (xy 136.242589 83.531936) (xy 136.227641 83.531936)
|
(xy 139.046082 83.521678) (xy 139.038977 83.529635) (xy 139.031647 83.531936) (xy 139.016699 83.531936)
|
||||||
(xy 136.218262 83.531936) (xy 136.210129 83.537505) (xy 136.167898 83.526545) (xy 136.114948 83.522557)
|
(xy 139.00732 83.531936) (xy 138.999187 83.537505) (xy 138.956956 83.526545) (xy 138.904006 83.522557)
|
||||||
(xy 136.004526 83.529811) (xy 135.951638 83.539492) (xy 135.911322 83.552159) (xy 135.880058 83.570739)
|
(xy 138.793584 83.529811) (xy 138.740696 83.539492) (xy 138.70038 83.552159) (xy 138.669116 83.570739)
|
||||||
(xy 135.868238 83.590554) (xy 135.830136 83.597222) (xy 135.801926 83.610411) (xy 135.77716 83.622428)
|
(xy 138.657296 83.590554) (xy 138.619194 83.597222) (xy 138.590984 83.610411) (xy 138.566218 83.622428)
|
||||||
(xy 135.750489 83.627557) (xy 135.744041 83.641332) (xy 135.733929 83.659944) (xy 135.707184 83.707498)
|
(xy 138.539547 83.627557) (xy 138.533099 83.641332) (xy 138.522987 83.659944) (xy 138.496242 83.707498)
|
||||||
(xy 135.697291 83.736231) (xy 135.693849 83.769633) (xy 135.544379 83.769633) (xy 135.539096 83.721859)
|
(xy 138.486349 83.736231) (xy 138.482907 83.769633) (xy 138.333437 83.769633) (xy 138.328154 83.721859)
|
||||||
(xy 135.547669 83.646901) (xy 135.562106 83.615606) (xy 135.587163 83.597002) (xy 135.589073 83.586291)
|
(xy 138.336727 83.646901) (xy 138.351164 83.615606) (xy 138.376221 83.597002) (xy 138.378131 83.586291)
|
||||||
(xy 135.604822 83.57165) (xy 135.652596 83.542487) (xy 135.693262 83.51926) (xy 135.709548 83.506664)
|
(xy 138.39388 83.57165) (xy 138.441654 83.542487) (xy 138.48232 83.51926) (xy 138.498606 83.506664)
|
||||||
(xy 135.717516 83.495153) (xy 135.733489 83.491929) (xy 135.746459 83.488485) (xy 135.765949 83.489584)
|
(xy 138.506574 83.495153) (xy 138.522547 83.491929) (xy 138.535517 83.488485) (xy 138.555007 83.489584)
|
||||||
(xy 135.779212 83.467778) (xy 135.809327 83.455) (xy 135.879815 83.444741) (xy 135.901577 83.443935)
|
(xy 138.56827 83.467778) (xy 138.598385 83.455) (xy 138.668873 83.444741) (xy 138.690635 83.443935)
|
||||||
(xy 135.918064 83.441517) (xy 135.940412 83.434849) (xy 135.967962 83.424738) (xy 136.051347 83.396088)
|
(xy 138.707122 83.441517) (xy 138.72947 83.434849) (xy 138.75702 83.424738) (xy 138.840405 83.396088)
|
||||||
(xy 136.098228 83.388056)
|
(xy 138.887286 83.388056)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(polygon
|
(polygon
|
||||||
(pts
|
(pts
|
||||||
(xy 134.272062 83.645875) (xy 134.268087 83.660546) (xy 134.270157 83.677383) (xy 134.280415 83.709916)
|
(xy 137.06112 83.645875) (xy 137.057145 83.660546) (xy 137.059215 83.677383) (xy 137.069473 83.709916)
|
||||||
(xy 134.287156 83.725816) (xy 134.29038 83.740544) (xy 134.468085 83.898602) (xy 134.646486 84.06441)
|
(xy 137.076214 83.725816) (xy 137.079438 83.740544) (xy 137.257143 83.898602) (xy 137.435544 84.06441)
|
||||||
(xy 134.825725 84.228652) (xy 135.005377 84.381608) (xy 134.970795 84.389584) (xy 134.905653 84.396043)
|
(xy 137.614783 84.228652) (xy 137.794435 84.381608) (xy 137.759853 84.389584) (xy 137.694711 84.396043)
|
||||||
(xy 134.747163 84.399413) (xy 134.570869 84.393551) (xy 134.415384 84.38344) (xy 134.397139 84.381755)
|
(xy 137.536221 84.399413) (xy 137.359927 84.393551) (xy 137.204442 84.38344) (xy 137.186197 84.381755)
|
||||||
(xy 134.339693 84.378384) (xy 134.32357 84.38238) (xy 134.311655 84.394505) (xy 134.303423 84.418098)
|
(xy 137.128751 84.378384) (xy 137.112628 84.38238) (xy 137.100713 84.394505) (xy 137.092481 84.418098)
|
||||||
(xy 134.412716 84.445679) (xy 134.527565 84.469462) (xy 134.643651 84.485603) (xy 134.758081 84.490931)
|
(xy 137.201774 84.445679) (xy 137.316623 84.469462) (xy 137.432709 84.485603) (xy 137.547139 84.490931)
|
||||||
(xy 134.859051 84.484263) (xy 134.958336 84.471001) (xy 135.047289 84.456933) (xy 135.133751 84.451071)
|
(xy 137.648109 84.484263) (xy 137.747394 84.471001) (xy 137.836347 84.456933) (xy 137.922809 84.451071)
|
||||||
(xy 135.150879 84.426138) (xy 135.157502 84.402743) (xy 135.15522 84.379483) (xy 135.140429 84.344924)
|
(xy 137.939937 84.426138) (xy 137.94656 84.402743) (xy 137.944278 84.379483) (xy 137.929487 84.344924)
|
||||||
(xy 135.115213 84.311046) (xy 135.060185 84.260122) (xy 134.944341 84.170216) (xy 134.822634 84.067634)
|
(xy 137.904271 84.311046) (xy 137.849243 84.260122) (xy 137.733399 84.170216) (xy 137.611692 84.067634)
|
||||||
(xy 134.721811 83.968129) (xy 134.71505 83.965771) (xy 134.691989 83.946074) (xy 134.63381 83.884378)
|
(xy 137.510869 83.968129) (xy 137.504108 83.965771) (xy 137.481047 83.946074) (xy 137.422868 83.884378)
|
||||||
(xy 134.565813 83.807076) (xy 134.506316 83.735635) (xy 134.474955 83.692843) (xy 134.492528 83.642475)
|
(xy 137.354871 83.807076) (xy 137.295374 83.735635) (xy 137.264013 83.692843) (xy 137.281586 83.642475)
|
||||||
(xy 134.521186 83.606299) (xy 134.56193 83.581542) (xy 134.63709 83.560718) (xy 134.73456 83.553039)
|
(xy 137.310244 83.606299) (xy 137.350988 83.581542) (xy 137.426148 83.560718) (xy 137.523618 83.553039)
|
||||||
(xy 134.81485 83.559766) (xy 134.890632 83.57971) (xy 134.937252 83.601464) (xy 134.972627 83.628348)
|
(xy 137.603908 83.559766) (xy 137.67969 83.57971) (xy 137.72631 83.601464) (xy 137.761685 83.628348)
|
||||||
(xy 134.998636 83.660383) (xy 135.01754 83.666978) (xy 135.040841 83.682951) (xy 135.047789 83.693121)
|
(xy 137.787694 83.660383) (xy 137.806598 83.666978) (xy 137.829899 83.682951) (xy 137.836847 83.693121)
|
||||||
(xy 135.047802 83.703761) (xy 135.065457 83.721367) (xy 135.088054 83.732095) (xy 135.117191 83.735928)
|
(xy 137.83686 83.703761) (xy 137.854515 83.721367) (xy 137.877112 83.732095) (xy 137.906249 83.735928)
|
||||||
(xy 135.118144 83.720027) (xy 135.127962 83.702882) (xy 135.146867 83.660603) (xy 135.145823 83.638313)
|
(xy 137.907202 83.720027) (xy 137.91702 83.702882) (xy 137.935925 83.660603) (xy 137.934881 83.638313)
|
||||||
(xy 135.126424 83.613122) (xy 135.107897 83.566578) (xy 135.075646 83.527173) (xy 135.034212 83.494299)
|
(xy 137.915482 83.613122) (xy 137.896955 83.566578) (xy 137.864704 83.527173) (xy 137.82327 83.494299)
|
||||||
(xy 134.986912 83.466284) (xy 134.895761 83.420415) (xy 134.882461 83.424684) (xy 134.86396 83.424078)
|
(xy 137.77597 83.466284) (xy 137.684819 83.420415) (xy 137.671519 83.424684) (xy 137.653018 83.424078)
|
||||||
(xy 134.824173 83.415725) (xy 134.783507 83.407958) (xy 134.767745 83.408784) (xy 134.761891 83.415212)
|
(xy 137.613231 83.415725) (xy 137.572565 83.407958) (xy 137.556803 83.408784) (xy 137.550949 83.415212)
|
||||||
(xy 134.745306 83.404809) (xy 134.723863 83.402976) (xy 134.678507 83.410669) (xy 134.648172 83.417337)
|
(xy 137.534364 83.404809) (xy 137.512921 83.402976) (xy 137.467565 83.410669) (xy 137.43723 83.417337)
|
||||||
(xy 134.635428 83.41676) (xy 134.62597 83.412135) (xy 134.585855 83.421885) (xy 134.541413 83.43844)
|
(xy 137.424486 83.41676) (xy 137.415028 83.412135) (xy 137.374913 83.421885) (xy 137.330471 83.43844)
|
||||||
(xy 134.458175 83.471779) (xy 134.457547 83.491006) (xy 134.453999 83.496472) (xy 134.448064 83.49911)
|
(xy 137.247233 83.471779) (xy 137.246605 83.491006) (xy 137.243057 83.496472) (xy 137.237122 83.49911)
|
||||||
(xy 134.437704 83.493034) (xy 134.42 83.49867) (xy 134.381752 83.526441) (xy 134.35955 83.549741)
|
(xy 137.226762 83.493034) (xy 137.209058 83.49867) (xy 137.17081 83.526441) (xy 137.148608 83.549741)
|
||||||
(xy 134.337348 83.572676) (xy 134.305401 83.595464) (xy 134.289261 83.613582)
|
(xy 137.126406 83.572676) (xy 137.094459 83.595464) (xy 137.078319 83.613582)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(polygon
|
(polygon
|
||||||
(pts
|
(pts
|
||||||
(xy 133.258264 83.308252) (xy 133.305373 83.323914) (xy 133.346661 83.345191) (xy 133.382163 83.368757)
|
(xy 136.047322 83.308252) (xy 136.094431 83.323914) (xy 136.135719 83.345191) (xy 136.171221 83.368757)
|
||||||
(xy 133.447743 83.41851) (xy 133.514714 83.468115) (xy 133.542162 83.488808) (xy 133.578974 83.524755)
|
(xy 136.236801 83.41851) (xy 136.303772 83.468115) (xy 136.33122 83.488808) (xy 136.368032 83.524755)
|
||||||
(xy 133.652247 83.609972) (xy 133.716141 83.69255) (xy 133.753803 83.742889) (xy 133.784358 83.78209)
|
(xy 136.441305 83.609972) (xy 136.505199 83.69255) (xy 136.542861 83.742889) (xy 136.573416 83.78209)
|
||||||
(xy 133.82627 83.859392) (xy 133.850406 83.896557) (xy 133.883423 83.928342) (xy 133.883789 83.945122)
|
(xy 136.615328 83.859392) (xy 136.639464 83.896557) (xy 136.672481 83.928342) (xy 136.672847 83.945122)
|
||||||
(xy 133.883789 83.949958) (xy 133.882031 83.95897) (xy 133.879613 83.973332) (xy 133.885621 83.987913)
|
(xy 136.672847 83.949958) (xy 136.671089 83.95897) (xy 136.668671 83.973332) (xy 136.674679 83.987913)
|
||||||
(xy 133.874383 84.046276) (xy 133.859243 84.095551) (xy 133.819602 84.18509) (xy 133.775932 84.263492)
|
(xy 136.663441 84.046276) (xy 136.648301 84.095551) (xy 136.60866 84.18509) (xy 136.56499 84.263492)
|
||||||
(xy 133.732261 84.343506) (xy 133.702673 84.379499) (xy 133.659574 84.418098) (xy 133.575311 84.484043)
|
(xy 136.521319 84.343506) (xy 136.491731 84.379499) (xy 136.448632 84.418098) (xy 136.364369 84.484043)
|
||||||
(xy 133.524972 84.501189) (xy 133.45148 84.509689) (xy 133.389198 84.509689) (xy 133.388685 84.509689)
|
(xy 136.31403 84.501189) (xy 136.240538 84.509689) (xy 136.178256 84.509689) (xy 136.177743 84.509689)
|
||||||
(xy 133.368168 84.527128) (xy 133.355265 84.530103) (xy 133.339812 84.526395) (xy 133.241626 84.499431)
|
(xy 136.157226 84.527128) (xy 136.144323 84.530103) (xy 136.12887 84.526395) (xy 136.030684 84.499431)
|
||||||
(xy 133.143734 84.460596) (xy 133.100848 84.436624) (xy 133.07178 84.413115) (xy 133.019902 84.365195)
|
(xy 135.932792 84.460596) (xy 135.889906 84.436624) (xy 135.860838 84.413115) (xy 135.80896 84.365195)
|
||||||
(xy 132.951172 84.308115) (xy 132.893433 84.268255) (xy 132.880098 84.246273) (xy 132.863465 84.22964)
|
(xy 135.74023 84.308115) (xy 135.682491 84.268255) (xy 135.669156 84.246273) (xy 135.652523 84.22964)
|
||||||
(xy 132.842362 84.206706) (xy 132.824264 84.176371) (xy 132.824232 84.160177) (xy 132.997408 84.160177)
|
(xy 135.63142 84.206706) (xy 135.613322 84.176371) (xy 135.61329 84.160177) (xy 135.786466 84.160177)
|
||||||
(xy 132.997408 84.170729) (xy 132.997408 84.185896) (xy 133.016256 84.198426) (xy 133.035876 84.224511)
|
(xy 135.786466 84.170729) (xy 135.786466 84.185896) (xy 135.805314 84.198426) (xy 135.824934 84.224511)
|
||||||
(xy 133.065112 84.273457) (xy 133.10358 84.32658) (xy 133.126041 84.342613) (xy 133.152453 84.347903)
|
(xy 135.85417 84.273457) (xy 135.892638 84.32658) (xy 135.915099 84.342613) (xy 135.941511 84.347903)
|
||||||
(xy 133.164934 84.362738) (xy 133.18081 84.369518) (xy 133.197971 84.367973) (xy 133.215541 84.356182)
|
(xy 135.953992 84.362738) (xy 135.969868 84.369518) (xy 135.987029 84.367973) (xy 136.004599 84.356182)
|
||||||
(xy 133.259724 84.362923) (xy 133.330872 84.384759) (xy 133.362567 84.403476) (xy 133.380625 84.426011)
|
(xy 136.048782 84.362923) (xy 136.11993 84.384759) (xy 136.151625 84.403476) (xy 136.169683 84.426011)
|
||||||
(xy 133.449824 84.419016) (xy 133.500646 84.400219) (xy 133.544499 84.370518) (xy 133.583957 84.332369)
|
(xy 136.238882 84.419016) (xy 136.289704 84.400219) (xy 136.333557 84.370518) (xy 136.373015 84.332369)
|
||||||
(xy 133.667268 84.243489) (xy 133.691595 84.183991) (xy 133.724714 84.125226) (xy 133.710793 84.141609)
|
(xy 136.456326 84.243489) (xy 136.480653 84.183991) (xy 136.513772 84.125226) (xy 136.499851 84.141609)
|
||||||
(xy 133.696724 84.146256) (xy 133.667341 84.142812) (xy 133.638472 84.131821) (xy 133.611801 84.119218)
|
(xy 136.485782 84.146256) (xy 136.456399 84.142812) (xy 136.42753 84.131821) (xy 136.400859 84.119218)
|
||||||
(xy 133.522398 84.091687) (xy 133.422317 84.071444) (xy 133.31972 84.062243) (xy 133.218032 84.066461)
|
(xy 136.311456 84.091687) (xy 136.211375 84.071444) (xy 136.108778 84.062243) (xy 136.00709 84.066461)
|
||||||
(xy 133.151576 84.078061) (xy 133.091028 84.097722) (xy 133.035583 84.1253) (xy 133.030126 84.137112)
|
(xy 135.940634 84.078061) (xy 135.880086 84.097722) (xy 135.824641 84.1253) (xy 135.819184 84.137112)
|
||||||
(xy 133.020489 84.145889) (xy 133.008852 84.150678) (xy 132.999606 84.150139) (xy 132.997408 84.160177)
|
(xy 135.809547 84.145889) (xy 135.79791 84.150678) (xy 135.788664 84.150139) (xy 135.786466 84.160177)
|
||||||
(xy 132.824232 84.160177) (xy 132.824211 84.149158) (xy 132.831005 84.123834) (xy 132.85306 84.077086)
|
(xy 135.61329 84.160177) (xy 135.613269 84.149158) (xy 135.620063 84.123834) (xy 135.642118 84.077086)
|
||||||
(xy 132.869766 84.046898) (xy 132.881563 84.014071) (xy 132.928385 84.001029) (xy 132.963336 83.990184)
|
(xy 135.658824 84.046898) (xy 135.670621 84.014071) (xy 135.717443 84.001029) (xy 135.752394 83.990184)
|
||||||
(xy 132.989861 83.976116) (xy 133.013747 83.956332) (xy 133.021368 83.956332) (xy 133.042837 83.957212)
|
(xy 135.778919 83.976116) (xy 135.802805 83.956332) (xy 135.810426 83.956332) (xy 135.831895 83.957212)
|
||||||
(xy 133.063573 83.964466) (xy 133.118381 83.949152) (xy 133.19246 83.937135) (xy 133.262289 83.929075)
|
(xy 135.852631 83.964466) (xy 135.907439 83.949152) (xy 135.981518 83.937135) (xy 136.051347 83.929075)
|
||||||
(xy 133.306985 83.925851) (xy 133.371731 83.929728) (xy 133.442467 83.941898) (xy 133.58359 83.981538)
|
(xy 136.096043 83.925851) (xy 136.160789 83.929728) (xy 136.231525 83.941898) (xy 136.372648 83.981538)
|
||||||
(xy 133.712477 84.030558) (xy 133.71953 84.041036) (xy 133.72193 84.054078) (xy 133.718486 84.081922)
|
(xy 136.501535 84.030558) (xy 136.508588 84.041036) (xy 136.510988 84.054078) (xy 136.507544 84.081922)
|
||||||
(xy 133.715189 84.097529) (xy 133.716507 84.097529) (xy 133.726912 84.101266) (xy 133.731602 84.105809)
|
(xy 136.504247 84.097529) (xy 136.505565 84.097529) (xy 136.51597 84.101266) (xy 136.52066 84.105809)
|
||||||
(xy 133.751605 84.055764) (xy 133.759281 84.027698) (xy 133.76179 84.000003) (xy 133.727645 83.928562)
|
(xy 136.540663 84.055764) (xy 136.548339 84.027698) (xy 136.550848 84.000003) (xy 136.516703 83.928562)
|
||||||
(xy 133.683535 83.856901) (xy 133.659505 83.8307) (xy 133.642209 83.821803) (xy 133.637886 83.799528)
|
(xy 136.472593 83.856901) (xy 136.448563 83.8307) (xy 136.431267 83.821803) (xy 136.426944 83.799528)
|
||||||
(xy 133.60418 83.759155) (xy 133.588071 83.736049) (xy 133.582052 83.713799) (xy 133.518891 83.653935)
|
(xy 136.393238 83.759155) (xy 136.377129 83.736049) (xy 136.37111 83.713799) (xy 136.307949 83.653935)
|
||||||
(xy 133.452432 83.580809) (xy 133.396085 83.514497) (xy 133.355272 83.477861) (xy 133.305373 83.438147)
|
(xy 136.24149 83.580809) (xy 136.185143 83.514497) (xy 136.14433 83.477861) (xy 136.094431 83.438147)
|
||||||
(xy 133.286324 83.415645) (xy 133.279728 83.395282) (xy 133.23783 83.360646) (xy 133.190115 83.29717)
|
(xy 136.075382 83.415645) (xy 136.068786 83.395282) (xy 136.026888 83.360646) (xy 135.979173 83.29717)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(polygon
|
||||||
|
(pts
|
||||||
|
(xy 133.880859 83.76956) (xy 133.882544 83.807002) (xy 133.880199 83.849647) (xy 133.880199 83.908705)
|
||||||
|
(xy 133.883496 83.966004) (xy 133.899836 84.011214) (xy 133.91643 84.039735) (xy 133.937645 84.066608)
|
||||||
|
(xy 133.963001 84.086192) (xy 133.990035 84.092327) (xy 134.07232 84.153583) (xy 134.114309 84.19135)
|
||||||
|
(xy 134.138486 84.218503) (xy 134.169187 84.23726) (xy 134.230443 84.274849) (xy 134.283273 84.315736)
|
||||||
|
(xy 134.34252 84.352878) (xy 134.398311 84.402564) (xy 134.497376 84.500237) (xy 134.522362 84.498332)
|
||||||
|
(xy 134.548154 84.501629) (xy 134.60201 84.505) (xy 134.625737 84.497457) (xy 134.648245 84.471441)
|
||||||
|
(xy 134.660864 84.352041) (xy 134.68686 84.218649) (xy 134.722299 84.083768) (xy 134.765775 83.946074)
|
||||||
|
(xy 134.814358 83.810572) (xy 134.86396 83.68515) (xy 134.962586 83.461814) (xy 134.933716 83.468042)
|
||||||
|
(xy 134.868471 83.544352) (xy 134.805196 83.643604) (xy 134.749261 83.75258) (xy 134.696678 83.873094)
|
||||||
|
(xy 134.606699 84.116727) (xy 134.538336 84.332295) (xy 134.519113 84.325424) (xy 134.484041 84.304378)
|
||||||
|
(xy 134.402854 84.244075) (xy 134.316173 84.179375) (xy 134.274761 84.15349) (xy 134.243999 84.139881)
|
||||||
|
(xy 134.20559 84.104557) (xy 134.158416 84.073715) (xy 134.110452 84.044342) (xy 134.071661 84.014584)
|
||||||
|
(xy 134.04875 83.946963) (xy 134.038395 83.887236) (xy 134.03671 83.787878) (xy 134.042785 83.744486)
|
||||||
|
(xy 134.055981 83.689106) (xy 134.093716 83.577732) (xy 134.11656 83.526336) (xy 134.137167 83.489877)
|
||||||
|
(xy 134.150014 83.477815) (xy 134.173217 83.471559) (xy 134.198515 83.466868) (xy 134.219306 83.45837)
|
||||||
|
(xy 134.227659 83.444815) (xy 134.237404 83.436681) (xy 134.251619 83.418949) (xy 134.254249 83.408654)
|
||||||
|
(xy 134.251326 83.391106) (xy 134.19001 83.372736) (xy 134.149037 83.372055) (xy 134.113673 83.383272)
|
||||||
|
(xy 134.087561 83.401877) (xy 134.047628 83.448478) (xy 134.029309 83.47024) (xy 134.012237 83.48724)
|
||||||
|
(xy 133.986958 83.53875) (xy 133.951787 83.596563) (xy 133.896026 83.690352) (xy 133.879065 83.735836)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(polygon
|
||||||
|
(pts
|
||||||
|
(xy 132.102893 83.703028) (xy 132.149778 83.746548) (xy 132.206794 83.779305) (xy 132.328427 83.832941)
|
||||||
|
(xy 132.388647 83.886206) (xy 132.456068 83.932739) (xy 132.59045 84.022937) (xy 132.581218 84.057229)
|
||||||
|
(xy 132.578067 84.085806) (xy 132.560533 84.091707) (xy 132.535056 84.110498) (xy 132.490653 84.159298)
|
||||||
|
(xy 132.475747 84.183918) (xy 132.47336 84.196008) (xy 132.449373 84.212983) (xy 132.422069 84.248251)
|
||||||
|
(xy 132.3773 84.33127) (xy 132.349383 84.393991) (xy 132.351509 84.41993) (xy 132.368946 84.441325)
|
||||||
|
(xy 132.392561 84.452427) (xy 132.407708 84.4477) (xy 132.563852 84.475324) (xy 132.649371 84.483492)
|
||||||
|
(xy 132.737216 84.486242) (xy 132.824442 84.483972) (xy 132.905524 84.477376) (xy 132.983273 84.465188)
|
||||||
|
(xy 133.050457 84.447773) (xy 133.029476 84.436084) (xy 132.990813 84.423227) (xy 132.894752 84.402418)
|
||||||
|
(xy 132.793782 84.386884) (xy 132.726298 84.379043) (xy 132.70776 84.379043) (xy 132.644965 84.379043)
|
||||||
|
(xy 132.608563 84.376692) (xy 132.577994 84.370104) (xy 132.554249 84.357412) (xy 132.545387 84.340722)
|
||||||
|
(xy 132.546275 84.326793) (xy 132.55799 84.300861) (xy 132.596312 84.241803) (xy 132.639836 84.184944)
|
||||||
|
(xy 132.669145 84.151458) (xy 132.690748 84.131855) (xy 132.71626 84.115554) (xy 132.738221 84.095772)
|
||||||
|
(xy 132.752383 84.061552) (xy 132.741386 84.049543) (xy 132.736117 84.034221) (xy 132.733625 84.003813)
|
||||||
|
(xy 132.733625 83.997732) (xy 132.693353 83.964706) (xy 132.644452 83.931493) (xy 132.543556 83.868551)
|
||||||
|
(xy 132.459145 83.81008) (xy 132.429495 83.781769) (xy 132.417307 83.760327) (xy 132.367921 83.741716)
|
||||||
|
(xy 132.345324 83.728468) (xy 132.330258 83.714166) (xy 132.322976 83.697839) (xy 132.326815 83.681046)
|
||||||
|
(xy 132.342529 83.664113) (xy 132.370339 83.656207) (xy 132.402194 83.650219) (xy 132.435112 83.636643)
|
||||||
|
(xy 132.446933 83.626784) (xy 132.451891 83.617226) (xy 132.457379 83.609352) (xy 132.471748 83.605062)
|
||||||
|
(xy 132.517925 83.578938) (xy 132.579166 83.558094) (xy 132.645633 83.544235) (xy 132.718092 83.535526)
|
||||||
|
(xy 132.861487 83.529591) (xy 132.929014 83.531692) (xy 132.983779 83.537431) (xy 133.032407 83.546654)
|
||||||
|
(xy 133.058444 83.55509) (xy 133.065185 83.567766) (xy 133.077348 83.569818) (xy 133.089658 83.569818)
|
||||||
|
(xy 133.106584 83.57568) (xy 133.122645 83.541587) (xy 133.120872 83.51926) (xy 133.097572 83.482477)
|
||||||
|
(xy 133.082184 83.462913) (xy 133.079347 83.453219) (xy 133.081818 83.442836) (xy 133.057696 83.422252)
|
||||||
|
(xy 133.038514 83.414993) (xy 132.998214 83.41404) (xy 132.968538 83.415725) (xy 132.954304 83.412354)
|
||||||
|
(xy 132.937031 83.400484) (xy 132.89336 83.402243) (xy 132.840531 83.402243) (xy 132.737143 83.402243)
|
||||||
|
(xy 132.624009 83.409131) (xy 132.612808 83.425319) (xy 132.608768 83.427376) (xy 132.600342 83.421587)
|
||||||
|
(xy 132.587006 83.412355) (xy 132.579428 83.414676) (xy 132.566197 83.431113) (xy 132.554405 83.425924)
|
||||||
|
(xy 132.527362 83.426643) (xy 132.461856 83.441884) (xy 132.394519 83.463719) (xy 132.343594 83.481451)
|
||||||
|
(xy 132.341689 83.483429) (xy 132.27567 83.52351) (xy 132.205621 83.563956) (xy 132.176091 83.592213)
|
||||||
|
(xy 132.153671 83.63188) (xy 132.140744 83.632576) (xy 132.132348 83.641186) (xy 132.12253 83.667564)
|
||||||
|
(xy 132.115203 83.687934)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(polygon
|
||||||
|
(pts
|
||||||
|
(xy 131.55232 84.354131) (xy 131.548365 84.397813) (xy 131.555031 84.429801) (xy 131.570492 84.453562)
|
||||||
|
(xy 131.605615 84.478114) (xy 131.646989 84.486242) (xy 131.688133 84.479718) (xy 131.727516 84.459644)
|
||||||
|
(xy 131.748493 84.439484) (xy 131.760917 84.414999) (xy 131.765251 84.384759) (xy 131.760281 84.351311)
|
||||||
|
(xy 131.744662 84.317055) (xy 131.728312 84.29833) (xy 131.704972 84.284766) (xy 131.672561 84.276608)
|
||||||
|
(xy 131.634132 84.276955) (xy 131.596211 84.292069) (xy 131.566536 84.319043)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(polygon
|
||||||
|
(pts
|
||||||
|
(xy 130.670701 83.391032) (xy 130.758995 83.41382) (xy 130.835126 83.436461) (xy 130.881137 83.453224)
|
||||||
|
(xy 130.91895 83.478813) (xy 130.983577 83.541095) (xy 131.016254 83.569547) (xy 131.054798 83.591727)
|
||||||
|
(xy 131.061466 83.632979) (xy 131.074875 83.668004) (xy 131.089309 83.71248) (xy 131.088879 83.732663)
|
||||||
|
(xy 131.078465 83.75344) (xy 131.087433 83.856039) (xy 131.080883 83.953035) (xy 131.061959 84.047182)
|
||||||
|
(xy 131.034574 84.134898) (xy 130.968922 84.296318) (xy 130.963866 84.308115) (xy 130.958737 84.320352)
|
||||||
|
(xy 130.935884 84.342716) (xy 130.91829 84.369078) (xy 130.884585 84.426231) (xy 130.86299 84.453004)
|
||||||
|
(xy 130.83432 84.477156) (xy 130.798847 84.494349) (xy 130.746832 84.504413) (xy 130.674194 84.50285)
|
||||||
|
(xy 130.618018 84.485875) (xy 130.513238 84.425059) (xy 130.460482 84.390694) (xy 130.398639 84.357721)
|
||||||
|
(xy 130.398273 84.344532) (xy 130.401277 84.340502) (xy 130.37898 84.338032) (xy 130.351965 84.31427)
|
||||||
|
(xy 130.302725 84.242829) (xy 130.272097 84.194542) (xy 130.255871 84.175633) (xy 130.243301 84.166406)
|
||||||
|
(xy 130.209916 84.135396) (xy 130.173912 84.085146) (xy 130.1425 84.027839) (xy 130.115073 83.966224)
|
||||||
|
(xy 130.077265 83.851479) (xy 130.06857 83.803687) (xy 130.069571 83.781503) (xy 130.068259 83.769633)
|
||||||
|
(xy 130.217729 83.769633) (xy 130.223312 83.804417) (xy 130.242129 83.846057) (xy 130.237362 83.855795)
|
||||||
|
(xy 130.239711 83.888408) (xy 130.26052 83.972233) (xy 130.291295 84.056423) (xy 130.309482 84.088179)
|
||||||
|
(xy 130.322802 84.098628) (xy 130.393757 84.186994) (xy 130.469055 84.263492) (xy 130.553584 84.330132)
|
||||||
|
(xy 130.655241 84.389961) (xy 130.673161 84.377293) (xy 130.692097 84.376113) (xy 130.712297 84.375225)
|
||||||
|
(xy 130.736574 84.362997) (xy 130.7643 84.379551) (xy 130.787279 84.379703) (xy 130.808283 84.368895)
|
||||||
|
(xy 130.825307 84.350394) (xy 130.836367 84.327495) (xy 130.839962 84.303792) (xy 130.859658 84.292225)
|
||||||
|
(xy 130.876525 84.268841) (xy 130.901438 84.203115) (xy 130.923346 84.127571) (xy 130.949285 84.063018)
|
||||||
|
(xy 130.95097 84.018248) (xy 130.954341 83.971207) (xy 130.959323 83.840781) (xy 130.953136 83.777503)
|
||||||
|
(xy 130.934997 83.720027) (xy 130.915165 83.685813) (xy 130.886251 83.654078) (xy 130.846703 83.624553)
|
||||||
|
(xy 130.833834 83.611914) (xy 130.827945 83.595903) (xy 130.817101 83.557508) (xy 130.804776 83.539199)
|
||||||
|
(xy 130.780904 83.521678) (xy 130.773799 83.529635) (xy 130.766469 83.531936) (xy 130.751521 83.531936)
|
||||||
|
(xy 130.742143 83.531936) (xy 130.734009 83.537505) (xy 130.691778 83.526545) (xy 130.638828 83.522557)
|
||||||
|
(xy 130.528406 83.529811) (xy 130.475518 83.539492) (xy 130.435203 83.552159) (xy 130.403939 83.570739)
|
||||||
|
(xy 130.392118 83.590554) (xy 130.354016 83.597222) (xy 130.325806 83.610411) (xy 130.30104 83.622428)
|
||||||
|
(xy 130.274369 83.627557) (xy 130.267921 83.641332) (xy 130.257809 83.659944) (xy 130.231064 83.707498)
|
||||||
|
(xy 130.221171 83.736231) (xy 130.217729 83.769633) (xy 130.068259 83.769633) (xy 130.062976 83.721859)
|
||||||
|
(xy 130.071549 83.646901) (xy 130.085986 83.615606) (xy 130.111043 83.597002) (xy 130.112953 83.586291)
|
||||||
|
(xy 130.128702 83.57165) (xy 130.176476 83.542487) (xy 130.217143 83.51926) (xy 130.233428 83.506664)
|
||||||
|
(xy 130.241396 83.495153) (xy 130.257369 83.491929) (xy 130.270339 83.488485) (xy 130.289829 83.489584)
|
||||||
|
(xy 130.303092 83.467778) (xy 130.333207 83.455) (xy 130.403695 83.444741) (xy 130.425457 83.443935)
|
||||||
|
(xy 130.441944 83.441517) (xy 130.464292 83.434849) (xy 130.491842 83.424738) (xy 130.575227 83.396088)
|
||||||
|
(xy 130.622108 83.388056)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"board": {
|
"board": {
|
||||||
"active_layer": 5,
|
"active_layer": 0,
|
||||||
"active_layer_preset": "",
|
"active_layer_preset": "",
|
||||||
"auto_track_width": true,
|
"auto_track_width": true,
|
||||||
"hidden_netclasses": [],
|
"hidden_netclasses": [],
|
||||||
|
|||||||
@@ -90,11 +90,43 @@
|
|||||||
""
|
""
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"text_height|141224000|109999000|18cc7c24-1e1e-47b4-bd81-2abaec8c3831|00000000-0000-0000-0000-000000000000",
|
"footprint_symbol_mismatch|128778000|155702000|4cb9c5b1-91d7-410e-abfd-4524e164235e|00000000-0000-0000-0000-000000000000",
|
||||||
""
|
""
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"text_thickness|129032000|119126000|be078bc2-b3be-4c33-abfe-930461332b78|00000000-0000-0000-0000-000000000000",
|
"footprint_symbol_mismatch|128905000|50800000|83fa7340-1a82-4ee7-beb0-b053e75572c6|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|130048000|64008000|3f35818a-3121-4da6-816f-074ff65fe175|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|131445000|147955000|cc936a59-684b-4981-b7a8-14760437093b|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|131572000|67564000|edc602aa-88c4-47cd-93b6-01e8bf071e1a|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|133475349|116205000|9bd3cac8-ff58-4d4a-a460-8e1c2b9fd035|00000000-0000-0000-0000-000000000000",
|
||||||
|
"50F minimal"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|137701000|99568000|93ada756-676f-4bd9-be40-1a2b9ae83693|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|141224000|106299000|1c4f319b-6195-4cfd-9c26-3783c66451a4|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"footprint_symbol_mismatch|141605000|50800000|faca4083-4c71-4e8e-9842-9023fcfe2020|00000000-0000-0000-0000-000000000000",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"text_height|141224000|109999000|18cc7c24-1e1e-47b4-bd81-2abaec8c3831|00000000-0000-0000-0000-000000000000",
|
||||||
""
|
""
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -141,10 +173,6 @@
|
|||||||
"text_thickness|141325600|150144800|5da7a07f-f063-43b3-a149-e672965b459b|00000000-0000-0000-0000-000000000000",
|
"text_thickness|141325600|150144800|5da7a07f-f063-43b3-a149-e672965b459b|00000000-0000-0000-0000-000000000000",
|
||||||
""
|
""
|
||||||
],
|
],
|
||||||
[
|
|
||||||
"text_thickness|141478000|119126000|40b0fefb-8b86-43f7-b24d-e20c4677b223|00000000-0000-0000-0000-000000000000",
|
|
||||||
""
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
"text_thickness|141478000|122936000|77ee43fb-9700-42ab-8702-560042b5edd3|00000000-0000-0000-0000-000000000000",
|
"text_thickness|141478000|122936000|77ee43fb-9700-42ab-8702-560042b5edd3|00000000-0000-0000-0000-000000000000",
|
||||||
""
|
""
|
||||||
@@ -351,7 +379,7 @@
|
|||||||
"internal_id": "",
|
"internal_id": "",
|
||||||
"mfg": "",
|
"mfg": "",
|
||||||
"mpn": "",
|
"mpn": "",
|
||||||
"sch_revision": "1"
|
"sch_revision": "3"
|
||||||
},
|
},
|
||||||
"layer_pairs": [],
|
"layer_pairs": [],
|
||||||
"layer_presets": [],
|
"layer_presets": [],
|
||||||
@@ -637,6 +665,7 @@
|
|||||||
"netlist": "",
|
"netlist": "",
|
||||||
"plot": "",
|
"plot": "",
|
||||||
"specctra_dsn": "",
|
"specctra_dsn": "",
|
||||||
|
"step": "",
|
||||||
"vrml": ""
|
"vrml": ""
|
||||||
},
|
},
|
||||||
"page_layout_descr_file": ""
|
"page_layout_descr_file": ""
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
(paper "A4")
|
(paper "A4")
|
||||||
(title_block
|
(title_block
|
||||||
(title "日輪蛍 / Nichirin Hotaru / FireFly Solar")
|
(title "日輪蛍 / Nichirin Hotaru / FireFly Solar")
|
||||||
(date "2026-05-10")
|
(date "2026-09-27")
|
||||||
(rev "1")
|
(rev "3")
|
||||||
(company "Tōgō Lab / 塔郷研究所")
|
(company "Tōgō Lab / 塔郷研究所")
|
||||||
(comment 1 "WWW: https://togo-lab.io")
|
(comment 1 "WWW: https://togo-lab.io")
|
||||||
(comment 2 "Email: tgohle@togo-lab.io")
|
(comment 2 "Email: tgohle@togo-lab.io")
|
||||||
@@ -2123,9 +2123,9 @@
|
|||||||
(embedded_fonts no)
|
(embedded_fonts no)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(text "R2 value depends on volage Setting and D6 LED Type:\n\n3.3 V: - RED 150 Ω\n - GREEN, LOW-VF 120 Ω\n - YELLOW, LOW-VF 120 Ω\n\n5 V - RED 330 Ω\n - GREEN LED 220 Ω\n - BLUE LED 220 Ω experimental!"
|
(text "R2 value depends on volage Setting and D6 LED Type.\nOnly tested this settings:\n\n3.3 V:\n- RED 640 Ω (~ 2,2 mA tested,)\n- GREEN 330 Ω (~ 2,2 mA tested, very bright!)\n\n"
|
||||||
(exclude_from_sim no)
|
(exclude_from_sim no)
|
||||||
(at 196.342 59.69 0)
|
(at 219.964 58.42 0)
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 1.27 1.27)
|
(size 1.27 1.27)
|
||||||
@@ -2144,9 +2144,9 @@
|
|||||||
)
|
)
|
||||||
(uuid "0bf54ea3-f975-4977-80ee-b53880b5df6d")
|
(uuid "0bf54ea3-f975-4977-80ee-b53880b5df6d")
|
||||||
)
|
)
|
||||||
(text "I use 4V SuperCap 50F.\nThis needs protection for overvoltage \nfrom Solar panels therefore Z-Diode\nwith 3.6V.\nDuring a bright Day most energy is\nused by R1, therefore 2W typ.\nC1 = SuperCap should load < 1h."
|
(text "I use 4V SuperCap 50F.\nThis needs protection for overvoltage \nfrom solar panels therefore Z-Diode\nwith 3.6 - 3.9V. (depending on solar panel)\nDuring a bright Day most energy is\nused by R1, therefore 2W typ.\nC1 = SuperCap should load 2..3 h."
|
||||||
(exclude_from_sim no)
|
(exclude_from_sim no)
|
||||||
(at 73.152 68.072 0)
|
(at 76.708 63.246 0)
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 1.27 1.27)
|
(size 1.27 1.27)
|
||||||
@@ -2155,29 +2155,31 @@
|
|||||||
)
|
)
|
||||||
(uuid "151e3e93-9403-408a-bca5-e165542b5719")
|
(uuid "151e3e93-9403-408a-bca5-e165542b5719")
|
||||||
)
|
)
|
||||||
(text "C6 RESET, optional"
|
(text "C6 RESET, optional\n\nin V1 not used, works without"
|
||||||
(exclude_from_sim no)
|
(exclude_from_sim no)
|
||||||
(at 263.398 105.156 0)
|
(at 254.762 108.966 0)
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 1.27 1.27)
|
(size 1.27 1.27)
|
||||||
)
|
)
|
||||||
|
(justify left)
|
||||||
)
|
)
|
||||||
(uuid "1bf5fdfb-548f-4ff1-9dbf-73a875269c83")
|
(uuid "1bf5fdfb-548f-4ff1-9dbf-73a875269c83")
|
||||||
)
|
)
|
||||||
(text "2 & 1 = 3.3V\n2 & 3 = 5.0V\n\nDon't let open!"
|
(text "2 & 1 = 3.3V - Preferred Option\n2 & 3 = 5.0V - higher loss in DC/DC, don't use!\n\nDon't let open!"
|
||||||
(exclude_from_sim no)
|
(exclude_from_sim no)
|
||||||
(at 133.604 45.72 0)
|
(at 125.476 44.958 0)
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 1.27 1.27)
|
(size 1.27 1.27)
|
||||||
)
|
)
|
||||||
|
(justify left)
|
||||||
)
|
)
|
||||||
(uuid "71b72fad-9748-4a7a-92a5-a4bc4876fb33")
|
(uuid "71b72fad-9748-4a7a-92a5-a4bc4876fb33")
|
||||||
)
|
)
|
||||||
(text "max 3x Solar Modules,\ne.g. 5V Type\n\nPin 1 = +\nPin 2 = -/GND\n"
|
(text "max 3x Solar Modules,\n~ 5V Type with 60x60mm\n -> ~ 4.5 V and 10mA under real conditions\n will charge C1 in ~ 3h upt to > 3.5V\n\nPin 1 = +\nPin 2 = -/GND\n"
|
||||||
(exclude_from_sim no)
|
(exclude_from_sim no)
|
||||||
(at 43.434 65.786 0)
|
(at 25.908 63.5 0)
|
||||||
(effects
|
(effects
|
||||||
(font
|
(font
|
||||||
(size 1.27 1.27)
|
(size 1.27 1.27)
|
||||||
@@ -4929,7 +4931,7 @@
|
|||||||
(justify left)
|
(justify left)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(property "Value" "BZV85-C3V6 1.3W"
|
(property "Value" "BZV85-C3V9 1.3W"
|
||||||
(at 80.772 84.582 0)
|
(at 80.772 84.582 0)
|
||||||
(show_name no)
|
(show_name no)
|
||||||
(do_not_autoplace no)
|
(do_not_autoplace no)
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user