Orodha ya maudhui:
Video: Kitufe cha Uchawi 4k: 20USD BMPCC 4k (au 6k) Udhibiti wa Kiwambo Isiyo na waya: Hatua 4 (na Picha)
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:48
Watu wengi wameniuliza nishiriki maelezo kadhaa juu ya mtawala wangu wa wireless kwa BMPCC4k. Maswali mengi yalikuwa juu ya udhibiti wa bluetooth, kwa hivyo nitataja maelezo kadhaa juu ya hilo. Nadhani unafahamu mazingira ya ESP32 Arduino.
Toleo hili la kijijini linaweza kudhibiti kurekodi, kuzingatia na kufungua kamera kupitia Bluetooth. Angalia video. Ni rahisi sana kuongeza kazi zaidi za kudhibiti kulingana na mwongozo wa kudhibiti Bluetooth wa BMPCC4k. Kimsingi chochote kwenye kamera kinaweza kudhibitiwa, kama vile nimeona.
Ingekuwa hatua rahisi kuongeza moduli ya LIDAR kupima umbali wa somo, kwa hivyo unaweza kupata aina fulani ya mfumo wa autofocus… Ingawa inatia shaka ikiwa unaweza kupata umakini sahihi wa kutosha kwenye maeneo maalum kama vile macho nk.
UPDATE 2020: Nilitengeneza toleo la 3.0. Inategemea gurudumu la bure linalozunguka kwa kutumia encoder ya sumaku. Pia inaunganisha kwa motor yangu ya kufuata ya kuzingatia, ambayo kimsingi inakuwa kifaa cha pili cha Bluetooth (ESP32 inasaidia unganisho nyingi za Bluetooth). Video mpya inaonyesha hii.
Ikiwa ungependa kuagiza toleo la 3, tafadhali angalia kwenye wavuti ya MagicButton
Vifaa
Moduli yoyote ya ESP32 na wifi na bluetooth. Nilitumia TTGO micro32 kwa sababu ni ndogo:
Gurudumu la kuzingatia, potentiometer yoyote ingefanya. Nilitumia zifuatazo kwa sababu ni ndogo: https://www.aliexpress.com/item/32963061806.html? S… Aina hii ina vituo ngumu kwenye mpaka wa juu na chini. Katika toleo la baadaye nitatumia encoder ya rotary. Kwa njia hii kulenga au kufungua "hairuki" kwa mpangilio wa sasa wa gurudumu wakati ninapoingia kwenye modi.
Kitufe cha rec / mode. Nilitumia yafuatayo: https://www.aliexpress.com/item/32806223591.html? S…
Vipengele vingine vya kawaida kama vile kontena, kofia,… (angalia skimu)
Hatua ya 1: Kanuni
Ninatumia uwezo wa wifi wa ESP32 kuungana na mtandao unaojulikana katika hali ya AP, au, nikiwa shambani, inakuwa kituo (STA) ambacho ninaweza kuungana nacho. Kwa njia hiyo naweza kusanidi moduli. Sitaenda kwa undani juu ya sehemu ya wifi / ukurasa wa wavuti, naweza kuongeza hii baadaye.
ESP32 inaunganisha na kamera na inakuwa mteja wa Bluetooth LE. Nambari ya Bluetooth iliyojumuishwa katika mfumo wa Arduino ESP32 haifanyi kazi na BMPCC4k. Wakwak-koba ameturekebisha. Asante Wakwak-koba! Nilitumia maktaba ya BLE kutoka hapa:
github.com/wakwak-koba/arduino-esp32
Walakini toleo hilo la BLE lib bado linaendelea kutengenezwa na toleo la hivi karibuni la BLEUUID.cpp haionekani kufanya kazi kwa wakati huu, kwa hivyo chukua toleo la "faili" iliyothibitishwa mapema ya faili hii.
Kwa zingine, nambari yangu nyingi ya Bluetooth ni nyingi kulingana na mifano ya BLE iliyojumuishwa katika mfumo wa Arduino:
Baadhi ya BLE UUID na anuwai hufafanua:
tuli BLEUUID BlackMagic ("00001800-0000-1000-8000-00805f9b34fb");
tuli Udhibiti wa Huduma ya BUUID ("291D567A-6D75-11E6-8B77-86F30CA893D3"); tuli BLEUUID DevInfoServiceControlUUID ("180A"); tuli BLEUUID UdhibiticharUUID ("5DD3465F-1AEE-4299-8493-D2ECA2F8E1BB"); tuli BLEUUID NotifcharUUID ("B864E140-76A0-416A-BF30-5876504537D9"); tuli BLEUUID MtejaNamecharUUID ("FFAC0C52-C9FB-41A0-B063-CC76282EB89C"); tuli BLEUUID CamModelcharUUID ("2A24"); tuli BLEScan * pBLEScan = Huduma ya BLED:: getScan (); tuli BLEAddress * pServerAddress; tuli BLEAdvertisedDevice * myDevice; tuli BLERemoteSifa * pControlSifa; tuli BLERemoteSifa * pNotifSifa; tuli boolean doConnect = 0; tuli boolean iliyounganishwa = 0; skanning ya boti tete = 0; volatileuint32_t pinCode;
Kitanzi na kitanzi kuu:
darasa MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
batili onResult (BLEAdvertisedDevice AdvertisedDevice) {Serial.print ("Kifaa kilichotangazwa cha BLE kimepatikana:"); Serial.println (AdvertisedDevice.toString (). C_str ()); ikiwa (kutangazwaDevice.haveServiceUUID () && kutangazwaDevice.getServiceUUID (). sawa (BlackMagic)) {Serial.print ("Tumepata kifaa chetu!"); kutangazwaDevice.getScan () -> kuacha (); myDevice = mpya BLEAdvertisedDevice (AdvertisedDevice); doConnect = kweli; }}}}; tuli batili ScanCompleteCB (BLEScanResults scanResults) {Serial.println ("skanning imefanywa"); skanning = uwongo; } kitanzi batili (batili) {ikiwa (! imeunganishwa && ((uint32_t) (millis () - Timer)> BLE_RESCAN_TIME || (! skanning))) {Serial.println ("skanning…"); skanning = kweli; pBLEScan-> kuanza (BLE_SCAN_TIME, scanCompleteCB); Kipima muda = millis (); } ikiwa (doConnect == true) {if (connectToServer ()) {Serial.println ("Sasa tumeunganishwa na Seva ya BLE."); imeunganishwa = kweli; } mwingine {Serial.println ("Tumeshindwa kuungana na seva; hakuna alama zaidi tutafanya."); } doConnect = uongo; }}
Kuunganisha na kamera:
bool connectToServer () {
Serial.print ("Kuunda unganisho kwa"); Serial.println (myDevice-> getAddress (). ToString (). C_str ()); BLEDevice:: setEncryptionLevel (ESP_BLE_SEC_ENCRYPT); Huduma ya BLED:: setSecurityCallbacks (MySecurity mpya ()); Usalama wa BLES * pSecurity = BLEecurity mpya (); pSecurity-> setKeySize (); pSecurity-> setiModi ya Uthibitishaji (ESP_LE_AUTH_REQ_SC_MITM_BOND); pSecurity-> setCapability (ESP_IO_CAP_IN); usalama-> setRespEncryptionKey (ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK); BLEClient * pClient = Huduma ya BLED:: createClient (); pClient-> setClientCallbacks (mpya MyClientCallback ()); pClient-> unganisha (myDevice); Serial.println ("- Imeunganishwa kwenye seva"); Huduma ya BLED:: setMTU (Huduma ya BLED:: pataMTU ()); // PATA MFANO WA KAMERA BLERemoteService * pRemoteService = pClient-> getService (DevInfoServiceControlUUID); ikiwa (pRemoteService == nullptr) {Serial.print ("- Imeshindwa kupata huduma ya habari ya kifaa"); Serial.println (DevInfoServiceControlUUID.toString (). C_str ()); goto kushindwa; } Serial.println ("- Kusoma maelezo ya kifaa"); // Pata kumbukumbu ya tabia katika huduma ya seva ya mbali ya BLE. BLERemoteCharacteristic * pRemoteCamModelCharacteristic = pRemoteService-> getCharacteristic (CamModelcharUUID); ikiwa (pRemoteCamModelCharacteristic == nullptr) {Serial.print ("- Imeshindwa kupata mfano wa kamera"); Serial.println (CamModelcharUUID.toString (). C_str ()); goto kushindwa; } // Soma thamani ya tabia. std:: thamani ya kamba = pRemoteCamModelCharacteristic-> readValue (); Serial.print ("Kamera ni"); Serial.println (thamani.c_str ()); ikiwa (CamModel! = value.c_str ()) {Serial.print ("- Kamera sio BMPCC4k"); goto kushindwa; } // PATA UDHIBITI pRemoteService = mteja-> getService (Udhibiti wa HudumaUUID); ikiwa (pRemoteService == nullptr) {Serial.print ("- Imeshindwa kupata huduma ya kamera"); Serial.println (Udhibiti wa HudumaUUID.toString (). C_str ()); goto kushindwa; } BLERemoteCharacteristic * pRemoteClientNameCharacteristic = pRemoteService-> getCharacteristic (ClientNamecharUUID); ikiwa (pRemoteClientNameCharacteristic! = nullptr) {pRemoteClientNameCharacteristic-> writeValue (MyName.c_str (), MyName.length ()); } pControlCharacteristic = pRemoteService-> getCharacteristic (ControlcharUUID); ikiwa (pControlCharacteristic == nullptr) {Serial.print ("- Imeshindwa kupata tabia ya kudhibiti"); Serial.println (ControlcharUUID.toString (). C_str ()); goto kushindwa; } pNotifCharacteristic = pRemoteService-> getCharacteristic (NotifcharUUID); ikiwa (pNotifCharacteristic! = nullptr) // && pNotifCharacteristic-> canIndicate ()) {Serial.println ("- kujiunga na arifa"); const uint8_t daliliOn = {0x2, 0x0}; pNotifCharacteristic-> kujiandikishaForNotify (notifyCallback, false); pNotifCharacteristic-> getDescriptor (BLEUUID ((uint16_t) 0x2902)) -> writeValue ((uint8_t *) daliliOn, 2, kweli); } kurudi kweli; kushindwa: pClient-> kukatwa (); kurudi uwongo; }
Simu iliyounganishwa / iliyokatishwa:
darasa MyClientCallback: umma BLEClientCallbacks {
batili onConnect (BLEClient * pclient) {Serial.println ("Tumeunganishwa."); } batili onDisconnect (BLEClient * pclient) {connected = false; pclient-> kukatwa (); Serial.println ("Tulikataliwa."); }}};
Sehemu ya nambari ya siri:
Katika toleo langu la sasa ninaweza kuingiza nambari kupitia kiolesura cha wavuti lakini hizi ni wifi / maelezo ya kurasa za wavuti ambazo ningeongeza baadaye.
darasa MySecurity: umma BLESecurityCallbacks
{uint32_t onPassKeyRequest () {Serial.println ("- PLEASE ENTER 6 DIGIT PIN (mwisho na ENTER):"); Nambari ya siri = 0; char ch; fanya {wakati (! Serial.available ()) {delay (1); } ch = Serial.read (); ikiwa (ch> = '0' && ch <= '9') {pinCode = pinCode * 10 + (ch -'0 '); Printa ya serial (ch); }} wakati ((ch! = '\ n')); Nambari ya siri ya kurudi; } batili kwenyePassKeyNotify (uint32_t pass_key) {ESP_LOGE (LOG_TAG, "Kitufe cha Kuarifu kitambulisho:% d", pass_key); } bool onConfirmPIN (uint32_t pass_key) {ESP_LOGI (LOG_TAG, "Nambari ya kupitisha NDIYO / HAPANA nambari:% d", pass_key); vTaskDelay (5000); kurudi nyuma; } bool onSecurityRequest () {ESP_LOGI (LOG_TAG, "Ombi la Usalama"); kurudi nyuma; } batili kwenyeUthibitishajiKukamilika (esp_ble_auth_cmpl_t auth_cmpl) {Serial.print ("pair status ="); Serial.println (auth_cmpl.success); }}};
Arifa ya BLE:
Kamera inaarifu wateja wake wa BLE juu ya mabadiliko yoyote ya kamera, pamoja na wakati kamera inapoanza na kuacha kurekodi. Nambari hii inabadilisha LED yangu inapoanza / kuacha kurekodi.
batili tulijulisha Kupiga simu (BLERemoteCharacteristic * pBLERemoteCharacteristic, uint8_t * pData, size_t urefu, bool ni Arifa 0 64 0 2if (urefu == 13 && pData [0] == 255 && pData [1] == 9 && pData [4] == 10 && pData [5] == 1) {if (pData [8] == 0) { kituo = 0; } ikiwa (pData [8] == 2) {recstatus = 1; }}}
Hatua ya 2: Sehemu ya Kanuni 2
Hii ndio sehemu ambayo kwa kweli hutuma amri kwa kamera.
Kurekodi:
rekodi ya uint8_ [= = {255, 9, 0, 0, 10, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 0 = OFF, 2 = ON, [8] batili Record (boolean RecOn) {if (! RecOn) rekodi [8] = 0; rekodi nyingine [8] = 2; pControlCharacteristic-> writeValue ((uint8_t *) rekodi, 16, ni kweli); }
Kuzingatia:
Kamera inatarajia nambari 11 kidogo, kutoka karibu hadi kulenga mbali. Ninashauri kuweka kichungi kwenye dhamana yako ya ADC, vinginevyo mwelekeo unaweza kuwa wa kutisha kwa woga.
uint8_t kuzingatia = {255, 6, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0}; // 0.0… 1.0, 11bit, [8] = LSB, [9] = Msisitizo wa MSBvoid (uint16_t val) {// kwenda kutoka kwa 12bit ADC hadi 11bit focus value [8] = (uint8_t) (((val> > 1) & 0xFF)); kuzingatia [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> writeValue ((uint8_t *) kuzingatia, 12, kweli); }
Kitundu:
Kamera inatarajia nambari 11 kidogo, kutoka kwa kiwango cha chini hadi cha juu. Ninashauri kuweka kichungi kwenye dhamana yako ya ADC, vinginevyo thamani ya kufungua inaweza kuwa ya kutisha kwa woga.
uint8_t kufungua = {255, 6, 0, 0, 0, 3, 128, 0, 0, 0, 0, 0}; // 0.0… 1.0, [8] = LSB, [9] = Kitundu cha MSBvoid (uint16_t val) {// kutoka 12bit ADC hadi 11bit aperture value aperture [8] = (uint8_t) (((val >> 1) & 0xFF)); kufungua [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> writeValue ((uint8_t *) kufungua, 12, kweli); }
Hatua ya 3: Mzunguko
Nimeambatanisha PDF ya mzunguko wangu. Picha zingine za PCB pia zimeambatanishwa.
Bodi inaendeshwa na USB ndogo.
Baada ya kupokea PCB niliamua kuwa ninataka kuendesha RGB LED, kwa hivyo niliunganisha WS2812B mbili mfululizo na pato la "Button Led" (ambayo ilihitaji viraka vya waya kwenye PCB). PCB zilikuwa 8USD na OSHPark.com.
Unaweza kuona unganisho zaidi kwenye PCB kama vile "adc" ambayo situmii na ambayo iliondolewa kwenye skimu zilizoambatanishwa. Mpango huo ulikuwa kutumia gurudumu la kulenga la nje hapo zamani lakini kwa sasa nina furaha kabisa na gurudumu la kidole gumba.
Hatua ya 4: Hitimisho
Natumahi hii ilisaidia.
Nina masasisho ya siku za usoni akilini, kama vile kutumia kisimbuzi cha rotary bila vituo vikali. Hii itahitaji mtawala kupata thamani ya sasa ya kulenga au kufungua kutoka kwa kamera, na kuendelea kutoka hapo. Kazi ya "notifyCallback" inahitaji kusasishwa kwa hiyo labda.
PCB inahitaji sasisho ili kutoa ishara kwa WS2812B RGB LEDs vizuri.
Nilitumia muda mwingi (loooot) wa kufanya kazi hii, haswa sehemu ya BLE. Ikiwa hii ilikusaidia na unataka uninunulie kinywaji, hiyo inathaminiwa sana:) Hiki ni kiunga cha msaada wa Paypal:
Ilipendekeza:
Nguvu isiyo na waya isiyo na waya kutoka kwa NYWELE: Hatua 4 (na Picha)
Nguvu isiyokuwa na waya isiyo na waya kutoka kwa NYWELE: Leo ningependa kushiriki jinsi ya kuwasha taa za umeme kwa njia ya umeme bila waya kutoka kwa chaja ya mswaki na koili za vali za solenoid ambazo zilichukuliwa kutoka kwa scrapyard. Kabla ya kuanza, tafadhali angalia video hapa chini:
Hifadhi Kiwambo Kiwambo cha Windows na Hati ya Python: Hatua 4
Hifadhi kiwambo kiotomatiki kwenye Windows na Hati ya Python: Kawaida katika windows, kuokoa skrini (skrini ya kuchapisha) kwanza tunahitaji kuchukua picha ya skrini na kisha kufungua rangi, kisha ibandike na mwishowe ihifadhi. Sasa, nitakufundisha jinsi ya kutengeneza mpango wa chatu ili kuifanya iwe sawa. Programu hii itaunda folda
Wacha Tufanye Mpira wa Kichawi wa Uchawi na Uchawi wa Uchawi! ~ Arduino ~: Hatua 9
Wacha Tufanye Mpira wa Kichawi wa Uchawi na Uchawi wa Uchawi! ~ Arduino ~: Katika hili, tutafanya Mpira wa Uchawi unaotumia sensa ya mwendo na skana ya RFID kudhibiti michoro ya taa za LED ndani
Nguvu isiyo na waya isiyo na waya: Hatua 9 (na Picha)
Nguvu isiyo na waya ya kiwango cha juu: Jenga mfumo wa Usambazaji wa Nguvu isiyo na waya ambao unaweza kuwasha balbu ya taa au kuchaji simu kutoka hadi futi 2 mbali! Hii hutumia mfumo wa coil resonant kupeleka uwanja wa sumaku kutoka kwa coil inayopitisha hadi kwenye coil inayopokea. Tulitumia hii kama onyesho wakati wa
Hack Bodi isiyo na waya katika Kubadilisha Alarm isiyo na waya au Zima / Zima: 4 Hatua
Bofya Kengele isiyo na waya katika Kubadilisha Alarm isiyo na waya au Zima / Zima: Hivi majuzi niliunda mfumo wa kengele na kuiweka ndani ya nyumba yangu. Nilitumia swichi za sumaku kwenye milango na kuzitia ngumu kwenye dari. Madirisha yalikuwa hadithi nyingine na wiring ngumu kwao haikuwa chaguo. Nilihitaji suluhisho la wireless na hii ni