La fórmula parece ser volt * 5.9-6.6 = mhz (válido entre 1.8v y 4.5v), por lo que a 3.3v, esto daría 12.8mhz. Tenga en cuenta que, si está ejecutando a 12.8mhz, CUALQUIER caída por debajo de 3.3v PUEDE causar problemas (¡y muy difícil de diagnosticar también!) O PUEDE salirse con la suya.
Sin embargo, los chips Arduino Atmega328p tienen una detección de "caída de voltaje" establecida en 4.3v; cualquier caída por debajo de eso, el chip se apaga. Puede obtener un ISP (AKA ICSP) para cambiar los fusibles; vaya a http://www.engbedded.com/fusecalc/ para averiguar en qué configurar los fusibles. También puede usar el ISP para leer los fusibles actuales, o reprogramar el chip sin una placa Arduino: todos mis proyectos tienen un encabezado de 6 pines. Si hace esto, antes de reprogramar usando la placa Arduino, tendrá que "Grabar Bootloader" (en el menú de herramientas). Tenga en cuenta que la programación aún se puede hacer a través de Arduino IDE.
Alternativamente, si desea ir "ligero" (y tener un ISP), puede cambiar los fusibles para usar el reloj interno de 8 mhz, ¡esto también libera 2 pines adicionales! Sin embargo, tenga en cuenta que el reloj interno puede derivar 1.2 horas por día (= 5%), en comparación con 1.7 segundos por día (= 20 partes por millón) en un cristal de cuarzo típico. Si no lo usa para medir el tiempo, esto probablemente no importe.
Tendrá que hacer cambios en el tiempo, para su código, debe agregar un tablero. Texto con la configuración correcta para su chip / velocidad de reloj, etc. - puede copiar la configuración de la entrada para el tablero, cambiar el nombre y cambiar la configuración "build.f_cpu"; reinicie (o inicie) su IDE Arduino, vaya a "Herramientas-> Tablero" y seleccione el tablero que agregó.
Puede mover el chip dentro / fuera del tablero y reprogramarlo allí (tenga en cuenta que el tablero seleccionado en Herramientas-> Tablero es el tablero FINAL, no el tablero de programación). Tenga cuidado al enchufarlo / desenchufarlo; eventualmente, ¡doblará los pines! Alternativamente, puede usar ISP (ICSP), como se mencionó anteriormente, muy recomendable. La programación del ISP también funcionará si el chip es el predeterminado de fábrica, siempre que tenga un reloj que funcione.
La cantidad de energía que utiliza el chip depende en gran medida de lo que haga con él, no solo las velocidades del reloj, la fuente del reloj, etc., sino también los modos de suspensión. Si está durmiendo mucho, puede consumir menos cuando corre más rápido que correr más lento, si casi todo su tiempo está dormido, entonces el consumo de energía debe contarse por ciclo de reloj, no por segundo, si su reloj es la mitad de la velocidad, y media corriente, luego dibuja la misma corriente por instrucción. Como el resto del tiempo lo pasas dormido, no obtienes ningún beneficio. Consulte http://www.gammon.com.au/power para obtener un desglose muy bueno del uso de energía, consejos sobre cómo ahorrar energía, etc.
Si ralentiza demasiado su reloj, el serial e i2c pueden volverse poco confiables (a menos que disminuya la velocidad), pero esperaría poder bajar a 1 mhz antes de que esto sea un problema: un chip de 1 mhz que intenta hacer 9600 bps tiene 104 instrucciones por bit de datos transferidos. i2c se ejecuta a 100khz, por lo que obtienes 10 instrucciones por bit (a 1mhz), posiblemente empujándolo. 8mhz debería estar bien. Prueba, prueba, prueba.
ACTUALIZACIÓN: Hay 3 configuraciones posibles para la detección de oscurecimiento: hay 3 valores posibles para AtMega328p: deshabilitado, 1.8v, 2.7v y 4.3v. Tenía la impresión (arriba) de que los Arduinos normalmente estaban configurados en 4.3v; aparentemente ese no es el caso (ver comentario más abajo). Recuerdo haber visto en alguna parte que hubo detección de apagones. Esto es algo a tener en cuenta, si su arduino se reinicia, especialmente al colocar cargas más grandes en la batería (motores en funcionamiento, leds múltiples, etc.)