Inventó e hizo el dispositivo

Esta mañana no escribí publicaciones ni probé bombillas, pero entré en creatividad. Hace un par de días, "inventé" un dispositivo que realmente echaba de menos al probar lámparas, y hoy pude hacerlo.


El dispositivo muestra el cambio en el brillo como un porcentaje a lo largo del tiempo. En primer lugar, lo necesito en el proyecto lamptest.ru para medir el voltaje mínimo al que se queman las lámparas, sin reducir el brillo en más del 10%. Además de la información sobre el voltaje mínimo, que es útil para quienes viven en lugares con un suministro de energía de baja calidad, donde el voltaje en la red puede disminuir significativamente (por ejemplo, en áreas rurales), esto ayudará a sacar conclusiones sobre el tipo de controlador y la calidad de las lámparas.

Otro dispositivo es útil para analizar la disminución del brillo de la lámpara a medida que se calienta.

En la esquina superior izquierda de la pantalla se muestra el valor de iluminación actual en lux, en la esquina inferior izquierda, el valor de iluminación inicial. En la esquina superior derecha, qué porcentaje es el primer número del segundo. El botón Seleccionar establece el valor inicial de iluminación igual a la corriente.

Además hizo una indicación de ondulación, pero es muy aproximada. Utilizo el sensor de luz digital TSL2561, tiene un tiempo de integración mínimo de 13 ms y la duración del medio período de la tensión de red es de 10 ms. Tomo 12 mediciones seguidas con la esperanza de que algunas caigan accidentalmente a un mínimo de brillo durante la pulsación, y otras a un máximo. Con el botón Izquierda, puede corregir la iluminación externa para calcular la ondulación presionándola cuando la lámpara en estudio está apagada.

Todo el diseño consta de tres módulos listos para usar: Arduino UNO R3 , LCD Keypad Shield , MH-2561 y cuatro cables.

Boceto para Arduino
Boceto para Arduino:
<textarea rows="130" cols="110"> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_TSL2561_U.h> #include <LiquidCrystal.h> //initialize LCD with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int start; int lm; int procent; //    samopal.pro #define MAX_UNITS 12 uint16_t l_min=0,l_max=0,l=0,env=0; int pulse = 0; Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345); void configureSensor(void) { tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */ // tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */ // tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */ /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */ // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */ tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */ } void setup(void) { // set up the LCD's number of columns and rows: lcd.begin(16, 2); Serial.begin(9600); /* Initialise the sensor */ if(!tsl.begin()) { /* There was a problem detecting the TSL2561 ... check your connections */ Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!"); while(1); } /* Setup the sensor gain and integration time */ configureSensor(); //    sensors_event_t event; tsl.getEvent(&event); start = event.light; lcd.setCursor(0,1); lcd.print(start); } void loop(void) { tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* Get a new sensor event */ sensors_event_t event; tsl.getEvent(&event); lm = event.light; lcd.setCursor(0,0); lcd.print(lm); lcd.print(" "); procent = (event.light/start*100); lcd.setCursor(10,0); lcd.print(procent); lcd.print("% "); { int x; x = analogRead (0); if (x < 60) { // lcd.print ("Right "); } else if (x < 200) { // lcd.print ("Up "); } else if (x < 400){ // lcd.print ("Down "); } else if (x < 600){ // lcd.print ("Left "); env = event.light; } else if (x < 800){ start = lm; lcd.setCursor(0,1); lcd.print(start); lcd.print(" "); } } //   tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); l=event.light-env; l_min = l; l_max = l; for (int i = 0; i < MAX_UNITS; i = i + 1) { tsl.getEvent(&event); l=event.light-env; if( l < l_min )l_min = l; if( l > l_max )l_max = l; } if( l_max != 0 )pulse = (double)((l_max - l_min))*100/(double)((l_max + l_min)); else pulse = 0; lcd.setCursor(10,1); lcd.print(pulse); lcd.print(" "); } 


Honestamente, no esperaba que en medio día obtuviera un dispositivo de trabajo listo para usar. Y esto a pesar del hecho de que desde los lenguajes de programación una vez conocí solo el ensamblador BK0010 y hago muchas cosas simplemente escribiendo.

En el programa para Arduino utilicé fragmentos de programas de muestra usando TSL2561, LCD Keypad Shield, y para calcular la ondulación, una pieza del boceto del medidor de luz con samopal.pro. Algunas cosas funcionan, pero no entiendo lo que significan :)

Sin embargo, el dispositivo funciona y ahorra mucho tiempo. Con su ayuda, ya he probado cincuenta bombillas para voltaje mínimo y tipo de controlador.

PD : Estaría muy agradecido si alguien familiarizado con Arduino estuviera dispuesto a responder mis preguntas en Telegram, Facebook o Vkontakte.

© 2017, Alexey Nadezhin

Source: https://habr.com/ru/post/es401837/


All Articles