Después de algunos meses: gracias, vaya a EM Fields, que me orienta en la dirección correcta. Los controles no son componentes baratos y solo están disponibles en algunas tiendas. Así que decido construir mis propios vectrols y esto se puede hacer a bajo costo ;-) ¡y funciona bastante bien!
Ordené algunos LDR diferentes, algunos LEDS en China (alrededor de menos de 3 euros por un par de bolsas con 50 LDR y 200 LED) y comencé algunos experimentos con esos. Hay personas que afirman que el color del LED importa cuando se crean vectroles, los blancos parecen ser los mejores para usar porque son los más brillantes de todos. hay algunos tíos del foro que dicen no usar LED brillantes, bueno, no estoy de acuerdo con la resistencia, necesitas una luz muy brillante para obtener una resistencia baja. Esto no se puede lograr con los LED antiguos.
He probado diferentes LDR y la resistencia puede ser diferente entre los modelos y los mismos modelos. Para asegurarse de que las LDR tengan la misma resistencia más cercana / más baja, pruébelas con un cordero LED brillante y un medidor de ohmios.
¿La respuesta de LDR es lenta? Bueno, no estoy de acuerdo, recogen la señal de pulso PWM muy bien (suena como la pregunta izquierda + derecha-ejemplo combinado con más detalle) y necesita cambiar la frecuencia de la señal de pulso, de lo contrario la configuración es inútil ( ver más adelante este escrito lo que he hecho para lograr esto).
Cuando el LED está en su brillo máximo, alcancé (vea la configuración a continuación para vectrol de dos canales con UN ÚNICO LED) aproximadamente 100-120 Ohms y es muy bueno y útil en comparación con lo que medí antes con el cordero LED. Cierta resistencia no es tan mala cuando se usa con un amplificador (impedancia de entrada) como lo hago yo.
Cambié el esquema a esto:
Tambiénconstruyaundispositivodeprueba,uncontroldevolumendeaudiodigital/analógicoUSBconelusodeunSparkFunDigiSpark(Arduinoattiny85).Construíuncontroldevolumendigitalantes,asíquesolonecesitabacambiarunpocoelcódigo.Veatambiénesteinstructivo: enlace . La versión del código que estoy usando es más avanzada porque mejoré el código y agregué algunas funciones adicionales como botones.
Este es el dispositivo que hice, una pequeña perilla de volumen con base giratoria de conector USB, para que puedas conectarlo desde cualquier ángulo sin un cable a tu computadora portátil o paquete de baterías. Esta es una configuración con solo UN LED y DOS LDR.
LEDpersonalizado
ElLEDqueestoyusandonoestanpersonalizado,solouséundremelparamodificarunLEDnormalde5mm,¡lohice/lohicepersonalizado!Paracortarel'techo'dedistancia,tengacuidadodenodejarlodemasiadodelgado.Utilicéundremelconpapeldelija/acabado.Pruébeloconunaceldadebotónde3Vdespuésdecortarloantesdeinstalarloenelcircuitofinal.
DescubríquehayunpuntomuertoenestosLED.Puedeverlomuyclaramenteenelejemplodelaimagenanterior,losLDRsecolocanenlaparteizquierdadelladodelabombilladelLED,noenlaparteinferior(=puntomuerto).DebidoaquelosLDRsonmuysensibles,tienequesolucionarestospuntosmuertosparaevitarquenopuedaobtenerlosmáximosresultados.
ProblemadefrecuenciadePWM
Apesardequefuncionamuybienalprimerintento,elaudiosuenacomounmp3conmuchosartefactos(bajatasadebits).EstonosucederácuandouseunabateríaparaalimentarelLED.ElLDRrespondealafrecuenciaPWM,porloquehayespaciosvacíosenelaudioporquelaresistenciadelLDRfluctúamuyrápidoentrelaresistenciaaltaybaja(encendido/apagado).
Primero,encontréesto: enlace , use un filtro de paso alto para evitar estas brechas de pulso PWM.
Necesitas componentes para esto y necesitas calcular la capacitancia correcta del capacitor para usar. Así que pensé, ¿puedo cambiar la frecuencia PWM? SÍ, puedes!
Agregue esta función a su boceto y llame a esta función en la rutina de configuración.
void setMaxPWM()
{
/* Attiny85 PWM modification
http://www.re-innovation.co.uk/web12/index.php/en/blog-75/305-fast-pwm-on-attiny85
Or you can use the PWM library:
Video : Arduino PWM Tutorial #2 - How to Set PWM Frequency Accurately - Julian Ilett
https://www.youtube.com/watch?v=9JXGIeM3BSI
library: https://code.google.com/archive/p/arduino-pwm-frequency-library/downloads
NOTICE: This library cannot be installed directly from zip, you need to
extract the PWM directory first and zip it again. After this, put the zip
into to libraries directory and install the zip via the Arduino IDE.
*/
/*
Control Register A for Timer/Counter-0 (Timer/Counter-0 is configured using two registers: A and B)
TCCR0A is 8 bits: [COM0A1:COM0A0:COM0B1:COM0B0:unused:unused:WGM01:WGM00]
2<<COM0A0: sets bits COM0A0 and COM0A1, which (in Fast PWM mode) clears OC0A on compare-match, and sets OC0A at BOTTOM
2<<COM0B0: sets bits COM0B0 and COM0B1, which (in Fast PWM mode) clears OC0B on compare-match, and sets OC0B at BOTTOM
3<<WGM00: sets bits WGM00 and WGM01, which (when combined with WGM02 from TCCR0B below) enables Fast PWM mode
*/
TCCR0A = 2<<COM0A0 | 2<<COM0B0 | 3<<WGM00;
/*
Control Register B for Timer/Counter-0 (Timer/Counter-0 is configured using two registers: A and B)
TCCR0B is 8 bits: [FOC0A:FOC0B:unused:unused:WGM02:CS02:CS01:CS00]
0<<WGM02: bit WGM02 remains clear, which (when combined with WGM00 and WGM01 from TCCR0A above) enables Fast PWM mode
1<<CS00: sets bits CS01 (leaving CS01 and CS02 clear), which tells Timer/Counter-0 to not use a prescalar
*/
TCCR0B = 0<<WGM02 | 1<<CS00;
// ---------------------------------------
// Below we don't use (and need) these because it will screw up the usb connection
/*
Control Register for Timer/Counter-1 (Timer/Counter-1 is configured with just one register: this one)
TCCR1 is 8 bits: [CTC1:PWM1A:COM1A1:COM1A0:CS13:CS12:CS11:CS10]
0<<PWM1A: bit PWM1A remains clear, which prevents Timer/Counter-1 from using pin OC1A (which is shared with OC0B)
0<<COM1A0: bits COM1A0 and COM1A1 remain clear, which also prevents Timer/Counter-1 from using pin OC1A (see PWM1A above)
1<<CS10: sets bit CS11 which tells Timer/Counter-1 to not use a prescalar
*/
//TCCR1 = 0<<PWM1A | 0<<COM1A0 | 1<<CS10;
/*
General Control Register for Timer/Counter-1 (this is for Timer/Counter-1 and is a poorly named register)
GTCCR is 8 bits: [TSM:PWM1B:COM1B1:COM1B0:FOC1B:FOC1A:PSR1:PSR0]
1<<PWM1B: sets bit PWM1B which enables the use of OC1B (since we disabled using OC1A in TCCR1)
2<<COM1B0: sets bit COM1B1 and leaves COM1B0 clear, which (when in PWM mode) clears OC1B on compare-match, and sets at BOTTOM
*/
//GTCCR = 1<<PWM1B | 2<<COM1B0;
}
El ejemplo anterior es solo para el asistente y no necesita una biblioteca. ¡La frecuencia PWM ahora está por encima del límite de audición (frecuencia de ultra sonido) y el audio suena genial! Solo te muestro que los controles de control son impresionantes y el concepto Arduino es impresionante, pero en general las capacidades de Attiny85 son impresionantes (y la comunidad de cursos que comparte temas como tú y yo).
Lo siguiente que hay que hacer es el problema de analogWrite
, la resolución de analogWrite
. Debido a que entre ON y OFF hay una diferencia muy alta, si hace analogWrite( PB1, 1 );
descubre que este es un estado on / off en lugar de una transición suave entre 0 y > 1.