Inventé et fabriqué l'appareil

Ce matin, je n'ai pas écrit de messages et testé des ampoules, mais je suis entré dans la créativité. Il y a quelques jours, j'ai «inventé» un appareil qui m'a vraiment manqué lors des tests de lampes, et aujourd'hui j'ai pu le fabriquer.


L'appareil affiche le changement de luminosité en pourcentage au fil du temps. Tout d'abord, j'en ai besoin dans le projet lamptest.ru pour mesurer la tension minimale à laquelle les lampes brûlent, sans réduire la luminosité de plus de 10%. En plus des informations sur la tension minimale, qui est utile pour ceux qui vivent dans des endroits avec une alimentation électrique de mauvaise qualité, où la tension dans le réseau peut considérablement diminuer (par exemple, dans les zones rurales), cela aidera à tirer des conclusions sur le type de pilote et la qualité des lampes.

Un autre appareil est utile pour analyser la diminution de la luminosité de la lampe à mesure qu'elle se réchauffe.

Dans le coin supérieur gauche de l'écran, la valeur d'éclairage actuelle en lux est affichée, dans le coin inférieur gauche - la valeur d'éclairage initiale. En haut à droite - quel pourcentage est le premier chiffre du second. Le bouton Sélectionner définit la valeur initiale de l'éclairage égale au courant.

En outre fait une indication d'ondulation, mais c'est très approximatif. J'utilise le capteur de lumière numérique TSL2561, il a un temps d'intégration minimum de 13 ms et la durée d'une demi-période de la tension secteur est de 10 ms. Je prends 12 mesures d'affilée dans l'espoir que certaines d'entre elles tombent accidentellement à un minimum de luminosité pendant la pulsation, et d'autres au maximum. En utilisant le bouton Gauche, vous pouvez corriger l'éclairage externe pour calculer l'ondulation en appuyant dessus lorsque la lampe à l'étude est éteinte.

L'ensemble de la conception se compose de trois modules prêts à l'emploi - Arduino UNO R3 , LCD Keypad Shield , MH-2561 et quatre fils.

Croquis pour Arduino
Croquis pour 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(" "); } 


Honnêtement, je n'espérais pas qu'en une demi-journée j'aurais un appareil prêt à l'emploi. Et cela malgré le fait que des langages de programmation, je ne connaissais autrefois que l'assembleur BK0010 et je fais beaucoup de choses simplement en tapant.

Dans le programme pour Arduino, j'ai utilisé des fragments d'exemples de programmes utilisant TSL2561, LCD Keypad Shield, et pour calculer l'ondulation, une pièce de l'esquisse du posemètre avec samopal.pro. Certaines choses fonctionnent, mais je ne comprends pas ce qu'elles signifient :)

Néanmoins, l'appareil fonctionne et fait gagner beaucoup de temps. Avec son aide, j'ai déjà testé une cinquantaine d'ampoules pour la tension minimale et le type de pilote.

PS Je serais très reconnaissant si quelqu'un familier avec Arduino acceptait parfois de répondre à mes questions sur Telegram, Facebook ou Vkontakte.

© 2017, Alexey Nadezhin

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


All Articles