Ha sido un largo , ya que desde que jugué con circuitos, agradecería un control de cordura del siguiente diseño; Estoy tratando de contar el número de horas desde que se presionó por última vez el botón de reinicio. Idealmente, duraría mucho tiempo solo con las baterías, pero si alguna vez lo hago funcionar, ¡seré feliz!
(Diagrama del circuito a continuación)
Calculé mis valores astables de NE555 forzando brutalmente la ecuación en Wikipedia para "valores comunes" de resistors y condensadores que fueron los más cercanos a 3600 segundos (he agregado el código ruby a continuación para aquellos interesados). ¿Parecen sensatos?
- C: 100mF
- R1: 51KΩ
- R2: 470Ω
- Condensador CTL: 10µF (sacó esto del aire ...)
- Esto debería establecer el ciclo de trabajo en 1,00057 horas.
Estoy planeando usar los siguientes componentes. ¿Hay algo más que deba tener en cuenta?
- 1x NE555 de baja potencia ( TLC555 )
- 1x NAND de 2 entradas cuádruples ( SN7400N )
- 1x contador dual de rizado binario ( 74HC393 )
- 2x BCD a 7 decodificadores de segmento ( 4511 )
- pantalla de 1 segmento de 2 dígitos y 7 dígitos ( Cátodo común )
- Los condensadores y resistencias anteriores. Literalmente, no tengo idea de cuáles elegir entre la variedad ridículamente extensa que hay por ahí ...
(Me di cuenta de que la lógica NAND puede no estar clara. Me tomó un tiempo descubrir cómo implementar un combo AND + O con NANDs, así que lo saqué debajo del diagrama del circuito)
¡Gracias!
Diagrama del circuito
Restablecereldiseñodelapuertalógica
Código de Ruby para forzar con fuerza los valores del componente NE555 más cercanos:
require "pp"
capacitor = [1, 1.5, 2.2, 3.3, 4.7, 6.8]
resistor = [10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 75, 82, 91]
powers = [0.001, 0.1, 1, 10, 100, 1_000, 10_000, 100_000, 1_000_000]
target = 3600
tolerance = 1
best = []
ln2 = Math.log(2)
powers.each do |c_p|
capacitor.each do |c_v|
c = c_v * c_p
powers.each do |r1_p|
resistor.each do |r1_v|
r1 = r1_v * r1_p
powers.each do |r2_p|
resistor.each do |r2_v|
r2 = r2_v * r2_p
value = ln2 * c * (r1 + 2*r2)
proximity = (target - value).abs
if proximity <= tolerance
best.push(
proximity: proximity,
value: value,
c: c,
r1: r1,
r2: r2
)
end
end
end
end
end
end
end
best.sort! do |a, b|
a[:proximity] <=> b[:proximity]
end
pp best.take(5)