Menciptakan dan membuat perangkat

Pagi ini saya tidak menulis posting dan menguji bola lampu, tetapi pergi ke kreativitas. Beberapa hari yang lalu, saya "menciptakan" perangkat yang sangat saya lewatkan saat menguji lampu, dan hari ini saya bisa membuatnya.


Perangkat menunjukkan perubahan kecerahan sebagai persentase dari waktu ke waktu. Pertama-tama, saya membutuhkannya di proyek lamptest.ru untuk mengukur tegangan minimum di mana lampu menyala, tanpa mengurangi kecerahan lebih dari 10%. Selain informasi tentang tegangan minimum, yang berguna bagi mereka yang tinggal di tempat-tempat dengan catu daya berkualitas rendah, di mana tegangan dalam jaringan dapat berkurang secara signifikan (misalnya, di daerah pedesaan), ini akan membantu menarik kesimpulan tentang jenis pengemudi dan kualitas lampu.

Perangkat lain berguna untuk menganalisis penurunan kecerahan lampu saat pemanasan.

Di sudut kiri atas layar, nilai iluminasi saat ini di lux ditunjukkan, di sudut kiri bawah - nilai iluminasi awal. Di kanan atas - berapa persentase nomor pertama dari yang kedua. Tombol Pilih menetapkan nilai awal iluminasi sama dengan saat ini.

Selain itu membuat indikasi riak, tetapi sangat perkiraan. Saya menggunakan sensor cahaya digital TSL2561, ia memiliki waktu integrasi minimum 13 ms, dan durasi satu setengah periode dari tegangan listrik adalah 10 ms. Saya mengambil 12 pengukuran berturut-turut dengan harapan bahwa beberapa di antaranya tidak sengaja jatuh ke kecerahan minimum selama denyut nadi, dan beberapa lainnya secara maksimal. Dengan menggunakan tombol Kiri, Anda dapat memperbaiki pencahayaan eksternal untuk menghitung riak dengan menekannya ketika lampu yang sedang dipelajari dimatikan.

Seluruh desain terdiri dari tiga modul siap pakai - Arduino UNO R3 , LCD Keypad Shield , MH-2561 dan empat kabel.

Sketsa untuk Arduino
Sketsa untuk 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(" "); } 


Jujur, saya tidak berharap bahwa dalam setengah hari saya akan mendapatkan perangkat yang sudah jadi. Dan ini terlepas dari kenyataan bahwa dari bahasa pemrograman saya pernah tahu hanya assembler BK0010 dan saya melakukan banyak hal hanya dengan mengetik.

Dalam program untuk Arduino, saya menggunakan fragmen program sampel menggunakan TSL2561, LCD Keypad Shield, dan untuk menghitung riak, potongan dari sketsa pengukur cahaya dengan samopal.pro. Beberapa hal berfungsi, tetapi saya tidak mengerti apa artinya :)

Namun demikian, perangkat ini bekerja dan menghemat banyak waktu. Dengan bantuannya, saya telah menguji lima puluh bola lampu untuk tegangan minimum dan jenis driver.

PS Saya akan sangat berterima kasih jika seseorang yang akrab dengan Arduino akan bersedia untuk kadang-kadang menjawab pertanyaan saya di Telegram, Facebook atau Vkontakte.

© 2017, Alexey Nadezhin

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


All Articles