Inventou e fabricou o dispositivo

Hoje de manhã não escrevi posts nem testei lâmpadas, mas entrei na criatividade. Alguns dias atrás, eu "inventei" um dispositivo que realmente sentia falta ao testar lâmpadas, e hoje consegui fazê-lo.


O dispositivo mostra a alteração no brilho como uma porcentagem ao longo do tempo. Antes de tudo, preciso do projeto lamptest.ru para medir a tensão mínima na qual as lâmpadas queimam, sem reduzir o brilho em mais de 10%. Além de informações sobre a tensão mínima, útil para quem mora em locais com fonte de alimentação de baixa qualidade, onde a tensão na rede pode diminuir significativamente (por exemplo, em áreas rurais), isso ajudará a tirar conclusões sobre o tipo de driver e a qualidade das lâmpadas.

Outro dispositivo é útil para analisar a diminuição do brilho da lâmpada à medida que aquece.

No canto superior esquerdo da tela, o valor atual da iluminação em lux é mostrado, no canto inferior esquerdo - o valor inicial da iluminação. No canto superior direito - qual a porcentagem é o primeiro número do segundo. O botão Selecionar define o valor inicial da iluminação igual à corrente.

Além disso, fez uma indicação de ondulação, mas é muito aproximado. Eu uso o sensor de luz digital TSL2561, ele tem um tempo de integração mínimo de 13 ms e a duração de meio período da tensão da rede é de 10 ms. Eu faço 12 medições seguidas com a esperança de que algumas delas caiam acidentalmente no mínimo brilho durante a pulsação, e outras no máximo. Usando o botão Esquerdo, você pode corrigir a iluminação externa para calcular a ondulação pressionando-a quando a lâmpada em estudo estiver desligada.

Todo o projeto consiste em três módulos prontos - Arduino UNO R3 , LCD Keypad Shield , MH-2561 e quatro fios.

Esboço para Arduino
Esboço 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, eu não esperava que em meio dia tivesse um dispositivo de trabalho pronto. E isso apesar do fato de que a partir das linguagens de programação eu conhecia apenas o BK0010 assembler e fazemos muitas coisas apenas digitando.

No programa para Arduino, usei fragmentos de programas de amostra usando TSL2561, LCD Keypad Shield, e para calcular a ondulação, uma peça do esboço do medidor de luz com samopal.pro. Algumas coisas funcionam, mas eu não entendo o que elas significam :)

No entanto, o dispositivo funciona e economiza muito tempo. Com sua ajuda, eu já testei cinquenta lâmpadas quanto à voltagem e tipo de driver mínimos.

PS : Ficaria muito grato se alguém familiarizado com o Arduino às vezes estivesse disposto a responder minhas perguntas no Telegram, Facebook ou Vkontakte.

© 2017, Alexey Nadezhin

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


All Articles