Hola habr
Quiero contar una historia sobre cómo me puse en manos de un faro chino con un LED Cree XM-L y qué sucedió después.

Antecedentes
Érase una vez, pedí una linterna con un LED brillante de un sitio chino. La linterna resultó ser bastante ergonómica (aunque podría ser más fácil), pero su controlador dejaba mucho que desear.
Brillaba lo suficientemente brillante, pero el controlador tenía solo 3 modos: muy brillante, brillante y estroboscópico, el cambio entre los cuales se hizo con solo tocar un botón. Para encender y apagar la linterna, era necesario ordenar estos 3 modos cada vez. Además, esta linterna, cuando se encendió, descargó la batería hasta el final, por lo que un par de mis latas 18650 se descargaron profundamente.
Todo esto fue incómodo y molesto, por lo que en algún momento decidí hacer mi conductor, que será la historia adicional.
Linterna con un viejo conductorAquí hay una linterna, probablemente muchos han tratado con similares

Se parece al controlador original

Términos de referencia
Como saben, para lograr un buen resultado, cualquier desarrollo debe tener buenas especificaciones técnicas, por lo que intentaré formularlo por mí mismo. Entonces, el conductor debe:
- Para poder encender / apagar presionando brevemente un botón (un botón sin fijar). Quizás esta sea la razón principal por la que comenzó todo esto.
- Tenga un control de brillo suave (continuo), desde el más brillante - "turbo" hasta "luz de luna" cuando el diodo está apenas iluminado. El brillo debe cambiar de manera uniforme.
- Recuerde el brillo establecido para el tiempo libre.
- Monitoree la carga de la batería, advirtiendo cuando esté casi descargada (aproximadamente 3.3V) y apagándose cuando esté completamente descargada (aproximadamente 2.9V). Para diferentes baterías, estos parámetros pueden ser diferentes. En consecuencia, el voltaje de funcionamiento debe estar en el rango de 2.7 ~ 4.5V.
- Tiene 2 modos especiales: baliza de emergencia y luz estroboscópica (bueno, ¿por qué no?)
- Para poder encender / apagar el LED trasero (esto es cierto al andar en bicicleta por la noche, resulta algo así como una luz indicadora).
- Tener protección contra polaridad inversa y electricidad estática. No necesariamente, pero será una buena adición, porque en la oscuridad puede colocar la batería por el lado equivocado.
- Sea más pequeño que el controlador original en tamaño, pero tenga la misma huella. El controlador chino es simplemente enorme, por lo que hacerlo más grande no será fácil.
Bueno, si la linterna está modificada, ¿por qué no construir un cargador con un conector micro-USB? Siempre tengo un cable y una carga USB a mano, y tengo que buscar una fuente de alimentación nativa.
Hierro
Tengo cierta experiencia con Arduino, por lo que se decidió hacer un controlador en la familia AVR MK. Están ampliamente disponibles, son fáciles de programar y tienen modos de baja potencia (suspensión).
El microcontrolador Attiny13a fue elegido como el "cerebro" del conductor: es uno de los MC Atmel más baratos (ahora absorbido por Microchip), tiene todo a bordo: un GPIO para conectar un botón y un LED, un temporizador para generar una señal PWM, un ADC para medir voltaje y EEPROM para guardar parámetros. Solo está disponible 1 KB de memoria flash (pero cuánto se necesita para una linterna), así como 64 B de RAM y la misma cantidad de EEPROM.
Attiny13 está disponible en varias opciones de carcasa, en particular en DIP-8, que se puede insertar directamente en una placa de pruebas normal con un paso de 2,54 mm.
Dado que solo 3 cables van desde la parte posterior a la cabeza de la linterna, el botón se ve obligado a cortocircuitar a tierra (sobre la imposibilidad de un cortocircuito a más, más adelante), tendrá que cambiar el LED en el más, lo que significa que necesita un poste de canal P. Tomé AO3401 como tal transistor, pero puede tomar SI2323, es más costoso, pero tiene menos resistencia de canal abierto (40 mOhm, mientras que AO3401 tiene 60 mOhm, a 4.5 V), por lo tanto, el controlador se calentará menos.
De las palabras a los hechos, recojo en una placa una versión preliminar

Actualmente se alimenta directamente del programador, con un voltaje de 5 V (en realidad menos debido a las pérdidas en el cable USB). En lugar del LED, el XM-L hasta ahora ha pegado un LED normal en las patas y ha puesto un transistor débil con un voltaje de umbral alto.
Luego, en el programa Altium Designer, se dibujó un diagrama, que completé con protección contra polaridad inversa y ESD.

Descripción detallada y propósito de todos los componentes.Prerrequisitos:
U1 - Microcontrolador Attiny13a en paquete 8S1 (índice SSU)
C1 - condensador de desacoplamiento para la fuente de alimentación del microcontrolador, debe estar en la región de 0.1 microfaradios, caso 1206 o 0805, coeficiente de temperatura X7R
R1-R2 es un divisor de resistencia para medir el voltaje de la batería, aquí se puede establecer cualquier clasificación, aquí la relación principal (750K / 220K, relación de división 4.41) y la corriente de fuga, que será mayor si las clasificaciones aumentan (en la corriente es de aproximadamente 4 μA). Como se usa un ION interno (1.1 V, de acuerdo con la hoja de datos, puede estar entre 1.0 V - 1.2 V), el voltaje máximo en la salida del divisor no debe ser más de 1 V. Con un divisor 750/220, el voltaje máximo permitido en la entrada del divisor será 4.41 V, que más que suficiente para todo tipo de baterías de litio.
Calculé el divisor usando esta calculadora .
R3: protege la salida del puerto del microcontrolador de un cortocircuito (si PB1 de repente se tira a VCC, una corriente grande fluirá a través del pin y el MC puede quemarse)
R4: tirar de RESET MK al poder, sin él, es posible reiniciar desde las pastillas.
Q1 - Transistor de efecto de campo de canal P en el paquete SOT-23, instalé el AO3401, pero cualquier otro con un pinout adecuado (por ejemplo, SI2323)
R7 es una resistencia de compuerta limitadora de corriente. Dado que la puerta del transistor tiene una cierta capacidad, al cargar esta capacidad, una corriente grande puede pasar a través del pin y el pin puede fallar. Puede configurarlo en la región de 100-220 ohmios (ya no debería ser, el transistor comenzará a estar en estado medio cerrado durante mucho tiempo y, como resultado, se calentará más)
R6 - obturador pull-up de resistencia a la alimentación. En caso de que PB0 entre en un estado de alta impedancia, la lógica 1 se instalará a través de esta resistencia en la puerta Q1 y el transistor se cerrará. Esto puede suceder debido a un error en el código o en el modo de programación.
D2 - diodo de "bloqueo" - permite que el voltaje "se caiga" (cuando el LED se enciende por un período corto a pleno brillo) para alimentar el MK desde el capacitor por un tiempo, también protege contra la polaridad inversa.
Puede poner cualquier diodo Schottky en el paquete SOD323 con una caída de voltaje mínima, puse BAT60.
Inicialmente, la protección contra la polaridad inversa de la fuente de alimentación se realizó en el transistor de efecto de campo (esto se puede ver en las placas hechas por botín). Una característica desagradable salió después del cableado: cuando se encendió la carga, se produjo una caída de voltaje y el MK se reinició, ya que el trabajador de campo no limita la corriente en la dirección opuesta. Al principio soldeé un condensador electrolítico de 200 uF entre VCC y GND, pero no me gustó esta solución debido a su tamaño. Tuve que soldar el transistor y colocar un diodo en su lugar, ya que el SOT-23 y el SOD-323 tienen dimensiones similares.
Total, en el circuito solo se requieren 10 componentes para la instalación.
Componentes opcionales:
R5 y D1 son responsables de la luz de fondo (LED2). La calificación mínima de R5 es de 100 ohmios. Cuanto mayor sea la clasificación, más débil se encenderá el LED posterior (se enciende en modo constante, sin PWM). D1 - cualquier LED en el caso 1206, puse verde, porque visualmente son más brillantes a las mismas corrientes que otros.
D3 y D4 son diodos protectores (TVS), utilicé PESD5V0 (5.0V) en el paquete SOD323. D3 protege contra sobretensiones por energía, D4 - por un botón. Si el botón está cubierto por una membrana, entonces no tiene un significado especial. Probablemente valga la pena usar diodos protectores bidireccionales, de lo contrario, cuando se invierte la polaridad, la corriente fluirá a través de ellos y se quemarán (ver CVC de un diodo protector bidireccional).
C2: un condensador de tantalio en el caso A (similar a 1206), tiene sentido configurarlo cuando el controlador es inestable (el voltaje de alimentación puede exprimirse a altas corrientes de conmutación del LED)
Todas las resistencias de tamaño 0603 (para mí, este es un límite adecuado para la soldadura manual)
Todo está claro con los componentes, puede hacer una placa de circuito impreso de acuerdo con el esquema anterior.
Lo primero que debe hacer es construir un modelo 3D de la futura placa, junto con los agujeros: en mi humilde opinión, en Altium Designer, esta es la forma más conveniente de determinar la geometría de la PCB.
Medí las dimensiones del viejo controlador y sus orificios de montaje: la placa debe estar unida a ellos, pero debe tener dimensiones más pequeñas (por versatilidad, de repente tienes que construirlo en otro lugar).
Un mínimo razonable aquí resultó en algún lugar alrededor de 25x12.5 mm (relación de aspecto 2: 1) con dos orificios con un diámetro de 2 mm para unir a la carcasa de la lámpara con tornillos nativos.
Hice un modelo 3D en SolidWorks, luego lo exporté a Altium Designer como STEP.
Luego coloqué los componentes en el tablero, hice los contactos en las esquinas (es más conveniente y más fácil soldar el suelo), Attiny13 colocado en el centro, el transistor más cerca de los contactos LED.
Extendí las pistas de potencia, coloqué los componentes restantes tal como resultaron y separé las pistas de señal. Para la conveniencia de conectar la memoria, saqué contactos separados para ella, que duplican los contactos de la batería.
Hice todo el cableado (con la excepción de un puente) en la capa superior, para poder hacer un tablero en casa con LUT.
El ancho mínimo de las rutas de señal es de 0.254 mm / 10 mil, las de potencia tienen un ancho máximo siempre que sea posible.
Así es como se ve la placa cableada en Altium Designer

Altium Designer tiene la oportunidad de ver cómo se verá la placa en 3D (para esto necesita modelos para todos los componentes, algunos tuvieron que ser construidos por usted mismo).
Quizás alguien aquí diga que el modo 3D no es necesario para el trazador, pero para mí personalmente es una función conveniente que facilita la colocación de componentes para la conveniencia de la soldadura.

Al momento de escribir, se hicieron 3 versiones de la placa: la primera para LUT, la segunda para la fabricación industrial y la tercera, final con algunas correcciones.
Junta haciendo
Manera casera
LUT: tecnología de planchado por láser, un método para producir placas de circuito mediante grabado en una máscara obtenida al convertir el tóner de papel a cobre. Este método es ideal para placas simples de un solo lado, como este controlador.
La red tiene muchos artículos sobre esta tecnología, por lo que no entraré en detalles, sino que solo le contaré brevemente cómo lo hago.
Primero debe preparar una plantilla que se imprimirá en papel térmico. Exporto la capa top_layer a PDF, obtengo una imagen vectorial.

Dado que la placa es pequeña, tiene sentido tomar un pedazo de PCB con dimensiones varias veces más grandes y hacer lo que la industria llama paneles.
Para estos fines, CorelDraw es muy conveniente, pero puede usar cualquier otro editor de vectores.
Coloco copias de plantillas en el documento, hago espacios de 0.5-1 mm entre los tableros (depende del método de separación, más sobre eso más adelante), los tableros deben ubicarse simétricamente; de lo contrario, será difícil separarlos.
Recojo una pieza de PCB de un lado con dimensiones ligeramente más grandes que el panel ensamblado, limpio y desengrasado (prefiero frotar con un borrador y luego con alcohol). Imprimo una plantilla para grabar en papel térmico (aquí es importante no olvidar duplicar la plantilla).
Con la ayuda de una plancha y paciencia, acariciando suavemente el papel, lo traduzco a textolita. Espero a que se enfríe y despegue cuidadosamente el papel.
Las áreas libres de cobre (no recubiertas con tóner) pueden barnizarse o pegarse con cinta adhesiva (cuanto menor sea el área de cobre, más rápida será la reacción de grabado).
Un panel de este tipo en el hogar: una gran cantidad de tableros puede compensar los defectos de fabricación

Enveneno las tablas con ácido cítrico en una solución de peróxido de hidrógeno, esta es la forma más económica, aunque es bastante lenta.
Las proporciones son las siguientes: para 100 ml de peróxido, el 3% son 30 g de ácido cítrico y aproximadamente 5 g de sal, todo se mezcla y se vierte en un recipiente con textolita.
Calentar la solución acelerará la reacción, pero puede hacer que el tóner se despegue.
Comienza la magia química desconocida: el cobre está cubierto de burbujas y la solución adquiere un tinte azul

Después de un tiempo saco la placa grabada y la limpio de tóner. No puedo lavarlo con ningún solvente, así que lo elimino mecánicamente con papel de lija fino.
Ahora queda por estañar la placa: esto ayudará con la soldadura y protegerá el cobre de la oxidación y facilitará la soldadura. Prefiero el estañado con la aleación Rose: esta aleación se derrite a una temperatura de aproximadamente 95 grados, lo que le permite estañarse en agua hirviendo (sí, tal vez no sea la composición más confiable para el estañado, sino para placas de circuito caseras).

Después del estañado, taladro una tabla (para los contactos uso taladros de carburo f1.0, para puentes - f0.7), taladro con un dremel por falta de otra herramienta. No me gusta cortar textolita debido al polvo, por lo tanto, después de perforar, corté las tablas con un cuchillo de oficina; en ambos lados hago varios cortes en una línea, luego los rompo en un corte. Esto recuerda el método de corte en V utilizado en la industria, solo que hay una incisión realizada por un molino.
Parece una tabla lista para soldar

Cuando la placa está lista, puede comenzar a cablear los componentes. Primero, sueldo un poco (resistencias 0603), luego todo lo demás. Las resistencias son adyacentes a la MK, por lo que soldar en el orden inverso puede ser problemático. Después de soldar, verifico si hay un cortocircuito para alimentar el controlador, después de lo cual ya es posible iniciar el firmware MK.
Controladores listos para descargar firmware

Forma industrial
LUT es rápido y asequible, pero la tecnología tiene sus inconvenientes (como casi todos los métodos de fabricación de PP "domésticos"). Es problemático hacer un tablero de doble cara, las pistas se pueden grabar y solo se puede soñar con metalizar los agujeros.
Afortunadamente, los chinos emprendedores han estado ofreciendo servicios durante mucho tiempo para la fabricación de placas de circuito impreso de manera industrial.
Por extraño que parezca, una placa china de una sola capa costará más que una placa de dos capas, por lo que decidí agregar una segunda capa (inferior) a la placa de circuito impreso. Los caminos de poder y el suelo están duplicados en esta capa. Además, se hizo posible hacer un disipador de calor del transistor (polígonos de cobre en la capa inferior), lo que permitirá que el controlador trabaje a corrientes más altas.
La capa inferior del tablero en Altium Designer

Para este proyecto, decidí pedir una placa de circuito impreso en el sitio web de PcbWay. El sitio tiene una calculadora conveniente para calcular el costo de los tableros, dependiendo de sus parámetros, tamaños y cantidad. Después de calcular el costo, descargué el archivo gerber creado anteriormente en Altium Designer, los chinos lo revisaron y el tablero pasó a producción.
Hacer un juego de 10 tableros TinyFL me costó $ 5. Al registrar un nuevo usuario, se otorga un descuento de $ 5 para el primer pedido, por lo que solo pagué el envío, que también cuesta alrededor de $ 5.
En este sitio existe la oportunidad de poner el proyecto en el dominio público, por lo que si alguien quiere ordenar estos tableros, simplemente puede agregar este proyecto a la cesta.
Después de un par de semanas, me llegaron los mismos tableros, solo bonita Fabricado industrialmente. Solo se pueden descomprimir y completar con el firmware.

Programa (firmware)
La principal dificultad que surgió al escribir el firmware del controlador, está asociada con el tamaño extremadamente pequeño de la memoria flash: Attiny13 tiene solo 1024 bytes.
Además, dado que el cambio de brillo es suave, una tarea no trivial fue cambiarlo uniformemente; para esto tuvimos que hacer la corrección gamma.
Algoritmo de control del controlador
El conductor se enciende presionando brevemente el botón, se apaga con él.
El modo de brillo seleccionado se almacena durante la duración del apagado.
Si durante la operación hace una doble pulsación breve de un botón (doble clic), el LED adicional se encenderá / apagará.
Con una presión prolongada durante el funcionamiento, el brillo de la lámpara cambiará gradualmente. Pulsación prolongada repetida cambia de dirección (más fuerte / más débil).
El controlador verifica periódicamente el voltaje de la batería y, si es inferior a los valores establecidos, advierte al usuario sobre una descarga y luego se apaga para evitar una descarga profunda.
Una descripción más detallada del algoritmo del controlador.- Cuando se suministra alimentación al MK, los periféricos se configuran y el MK se pone en suspensión (si se define STARTSLEEP). Cuando se suministra energía al controlador, ambos LED parpadean un cierto número de veces si se define STARTBLINKS.
- Dormir Attiny13 se queda dormido en modo de apagado (este es el modo más económico, de acuerdo con la hoja de datos, el consumo de MK será de ~ 1 μA), del cual solo puede salir por cualquier interrupción. En este caso, se trata de una interrupción INT0: presionar un botón (establecer PC1 en 0 lógico).
En PC1, debe activarse un pull-up débil interno. El ADC y el comparador son los principales consumidores de corriente de toda la periferia, por lo que también deben desconectarse. Durante la suspensión, el contenido de los registros y la RAM se almacenan, por lo que no se necesita la EEPROM para recordar el brillo. - Después de dormir, los periféricos y PWM se encienden y el controlador entra en un ciclo sin fin en el que se controla el botón y se verifica periódicamente el voltaje de la batería.
- Si se presiona el botón, se presiona la hora.
4.1. Si la prensa es corta, se espera un doble clic (si se define BTN_DBCLICK).
Si fuera así, el LED2 adicional cambia
Si no, vaya al paso 2 (dormir)
4.2. Si la prensa es larga (más larga que BTN_ONOFF_DELAY), se activa el modo de control de brillo. En este modo:
- La dirección del cambio se invierte (más / menos) y el% de llenado PWM cambia mientras se presiona el botón.
- / (RATE_MAX / RATE_MIN), ;
- n- (AUXMODES_DELAY) , . — ( 25 , 8 ) ( 50, 1 ). , - .
- — ADC2, .
- BAT_WARNING –
- BAT_WARNING – , . - . , 5 .
- BAT_SHUTDOWN — .2 ().
, — , - , . - , , . P- , , — , . .
rate, 255 rate = 100% .
1.2 1, 1200000/256 = 4.7 . ( ), (, , , ). , 9.6 (CKSEL[1:0]=10, CKDIV8=1) 4.8 (CKSEL[1:0]=01, CKDIV8=1), 8 4 , .
, , . , ( ) , , , 1.5 , 2 ( Cree XM-L — 3 ).
, (rate=255) 3. , . , RATE_MAX . , SI2323DS 4 , 2 , .
-
. , 5-10% , 75-100% . , n , , , .
, -. , 1 12 . , rate_step_array. , , .
n- ( BAT_PERIOD) . , VIN R1-R2, PB4 ( ADC2 ).
, , Vref, 1.1 . — , (, 1.1 1023 255, 8- ). , 6 , 255 1.1 , 4.33 ( 4.03), .
, . BAT_WARNING ( , — BAT_INFO_STEP, ), BAT_SHUTDOWN .
, .. , .
, , . , 4.03 R1 = 1M R2 = 330, R = 1330K 4 = 3 .
() 1 . , , ( - — ).
, Arduino C/C++.
, (defines) flashlight.h.
Arduino IDE Attiny13(a) Atmel Studio – , Arduino IDE, .
Arduino IDEAttiny13 IDE. .
Tools>Board Attiny13(a) Tools>Frequency 1.2MHz.
"" .ino, — . , — Arduino IDE. - , .cpp.
, , *.hex. .
Atmel StudioIDE flashlight.atsln, — flashlight.h () flashlight.cpp .
— .
F7, ( , , ). debug flashlight.hex, .
USBASP AVRDUDEPROG. GUI avrdude, — . ( Attiny13(a), Fuses read. , , . programm, . flashlight.h
Para cargar firmware, vaya a la pestaña Programa, seleccione el archivo de firmware compilado en formato HEX (flashlight.hex) en la línea Flash y haga clic en Programa. El estado del firmware se mostrará en la ventana a continuación. Si la descarga no se realiza correctamente, puede ser un mal contacto, sucede, vale la pena intentarlo de nuevo. Por cierto, por esta razón se hizo el parámetro STARTBLINKS: un solo parpadeo del LED2 en el momento de suministrar energía al conductor sirve como una indicación del contacto del conductor con el programador.
En lugar de USBASP, puede usar Arduino para descargar firmware, más detalles aquí y aquí
Programador USBASP conectado al controlador a través de un clip con un bucle

Para conectar USBASP a un tinka, uso un clip para un SOIC de 8 pines. No es un dispositivo muy conveniente, tienes que atormentar 10 minutos antes de atrapar el contacto (tal vez acabo de encontrar un clip defectuoso). También hay adaptadores SOIC-DIP donde se inserta el microcircuito antes de soldar y se vierte el firmware; esta opción es más conveniente, pero se pierde la capacidad de programar el controlador en el circuito (es decir, actualizar el firmware después de soldar el MK a la placa).
Si todo esto no está allí, simplemente puede soldar los cables a los terminales del MK, que luego se conectan al Arduino.
Calibración
Las corrientes que pasan por el controlador y el LED no deben exceder los valores máximos. Para el LED XM-L, esto es 3 A, para el controlador depende del transistor utilizado, por ejemplo, para SI2323 la corriente máxima es de aproximadamente 4 A, pero es mejor conducir a corrientes más bajas debido a un calentamiento excesivo. Para reducir la corriente al brillo máximo, se usa el parámetro RATE_MAX (#define RATE_MAX xx, donde xx es el brillo máximo de 0 a 255).
La calibración del ADC no es un procedimiento obligatorio, pero si desea que el controlador controle con precisión el voltaje umbral, tendrá que manipularlo.
Los cálculos no proporcionarán una alta precisión de las mediciones, ya que, en primer lugar, las resistencias pueden variar dentro de la tolerancia (generalmente 1-5%), y en segundo lugar, el ion interno puede tener una dispersión de 1.0 a 1.2 V.
Por lo tanto, la única forma aceptable es establecer el valor en unidades ADC (BAT_WARNING y BAT_SHUTDOWN), seleccionándolo experimentalmente para el valor deseado. Para hacer esto, necesitará paciencia, un programador y una fuente de alimentación ajustable.
Establecí el valor BAT_PERIOD en 1000 en el firmware (verificando el voltaje una vez por segundo) y reduje gradualmente el voltaje de suministro. Cuando el conductor comenzó a advertir sobre la descarga, dejé el valor actual de BAT_WARNING según sea necesario.
Esta no es la forma más conveniente, tal vez en el futuro necesite realizar un procedimiento de calibración automática con el almacenamiento de los valores en la EEPROM.
Montaje de linterna
Cuando la placa estuvo lista y el firmware se inundó, finalmente podría colocarlo en lugar del controlador anterior. Desoldeé el viejo controlador y solté uno nuevo en su lugar.
El nuevo controlador está conectado en lugar del anterior de acuerdo con este esquema Después de verificar si había un cortocircuito en la fuente de alimentación, conecté la fuente de alimentación y verifiqué la operabilidad. Luego monté la placa de carga (TP4056), para esto tuve que perforar un agujero en el conector de carga con un poco de dremel, y lo arreglé con pegamento caliente (era importante que el pegamento no fluyera en el conector, sería difícil sacarlo de allí).
No atornillé la placa con tornillos, porque la rosca de la caja se rompió por repetidas torsiones, sino que simplemente vertió pegamento sobre ella, también pegó los cables en los lugares de soldadura para que no se deshilachen. Decidí cubrir el controlador y el cargador con barniz acrílico incoloro, esto debería ayudar contra la corrosión.

Pruebas y cálculo de costes de fabricación.
Después de todas las operaciones, fue posible comenzar a probar los controladores. La corriente se midió con un multímetro convencional, conectándolo al circuito abierto de la fuente de alimentación.
Consumo de energía del controlador anterior (medido a 4.04 V):
- Durante el sueño - no medido
- Modo máximo: 0.60 A
- Modo medio: 0.30 A
- Estroboscopio: 0.28 A
Consumo de energía del nuevo controlador (medido a 4.0 V):
- En modo de reposo, consume alrededor de 4 μA, que es mucho menos que la corriente de autodescarga de una batería de iones de litio. La corriente principal en este modo fluye a través de un divisor de resistencia.
- En el modo mínimo, la "luz de la luna" es de aproximadamente 5-7 mA, si suponemos que la capacidad de una celda 18650 es de aproximadamente 2500 mA * h, obtenemos unos 20 días de funcionamiento continuo . MK mismo consume en algún lugar 1.2-1.5 mA (a una frecuencia de operación de 1.2 MHz).
- En el modo máximo, "turbo": consume aproximadamente 1,5 A, en este modo funcionará durante aproximadamente una hora y media. El LED en tales corrientes comienza a calentarse mucho, por lo que este modo no está diseñado para una operación a largo plazo.
- Baliza de emergencia: consume un promedio de aproximadamente 80 mA, en este modo, la linterna funcionará hasta 30 horas.
- Estroboscopio: consume alrededor de 0,35 A, funcionará hasta 6 horas.
Precio de emisión
Si compra componentes en Chip y Deep, saldrán alrededor de 100 rublos (60 rublos Attiny13, ~ 40 rublos el resto del polvo suelto). Tiene sentido ordenar de China, si se hacen varias piezas, entonces en términos de una pieza será más barato, los chinos generalmente venden en lotes de 10 piezas o más.
Las tarifas se liberarán a un precio en la región de 300 rublos por 10 piezas (sin entrega), si se ordena en China.
Cablear y flashear un controlador lleva aproximadamente una hora.
Conclusión
La linterna china se ha vuelto mucho más conveniente, aunque ahora tengo quejas sobre su mecánica: la parte delantera es demasiado pesada y el foco no es realmente necesario.
En el futuro planeo hacer una versión de este controlador para linternas con un botón de encendido (con fijación). Es cierto, estoy confundido por la abundancia de tales proyectos. ¿Crees que vale la pena hacer otro?
Controlador de primer plano (versión 2_t)

UPD : Soporte agregado para Arduino IDE.
El código fuente del firmware, los circuitos y el cableado de la placa están ahora en el github, puede descargarlo aquí: https://github.com/madcatdev/tinyfl_t