ዝርዝር ሁኔታ:

የአስማት አዝራር 4 ኪ: 20USD BMPCC 4k (ወይም 6 ኪ) ገመድ አልባ የርቀት መቆጣጠሪያ 4 ደረጃዎች (ከስዕሎች ጋር)
የአስማት አዝራር 4 ኪ: 20USD BMPCC 4k (ወይም 6 ኪ) ገመድ አልባ የርቀት መቆጣጠሪያ 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የአስማት አዝራር 4 ኪ: 20USD BMPCC 4k (ወይም 6 ኪ) ገመድ አልባ የርቀት መቆጣጠሪያ 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የአስማት አዝራር 4 ኪ: 20USD BMPCC 4k (ወይም 6 ኪ) ገመድ አልባ የርቀት መቆጣጠሪያ 4 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: Private Room on Japan's LONGEST-Distance Daytime Train | Nichirin Seagaia 2024, ሀምሌ
Anonim
Image
Image

ብዙ ሰዎች ስለ BMPCC4k ስለ ሽቦ አልባ መቆጣጠሪያዬ አንዳንድ ዝርዝሮችን እንዳካፍል ጠይቀውኛል። አብዛኛዎቹ ጥያቄዎች ስለ ብሉቱዝ ቁጥጥር ነበሩ ፣ ስለዚህ ስለዚያ ጥቂት ዝርዝሮችን እጠቅሳለሁ። ከ ESP32 አርዱinoኖ አካባቢ ጋር የሚያውቁት ይመስለኛል።

ይህ የርቀት መቆጣጠሪያ ስሪት በብሉቱዝ በኩል የካሜራውን ቀረፃ ፣ ትኩረት እና ቀዳዳ መቆጣጠር ይችላል። ቪዲዮውን ይመልከቱ። በ BMPCC4k የብሉቱዝ መቆጣጠሪያ መመሪያ መሠረት ተጨማሪ የቁጥጥር ተግባሮችን ማከል በጣም ቀላል ነው። እኔ እንዳየሁት በመሠረቱ በካሜራው ውስጥ ያለ ማንኛውም ነገር ቁጥጥር ሊደረግበት ይችላል።

የአንድን ርዕሰ ጉዳይ ርቀት ለመለካት የ “LIDAR” ሞዱልን ማከል ቀላል እርምጃ ይሆናል ፣ ስለዚህ አንድ ዓይነት የራስ -ማተኮር ስርዓት ማግኘት ይችላሉ… ምንም እንኳን እንደ ዓይኖች ያሉ የተወሰኑ አካባቢዎች ላይ በቂ የሆነ በቂ ትኩረት ማግኘት ቢችሉ አጠራጣሪ ቢሆንም…

አዘምን 2020 - እኔ ስሪት 3.0 አድርጌያለሁ። መግነጢሳዊ ኢንኮደርን በመጠቀም በነፃ በሚሽከረከር ጎማ ላይ የተመሠረተ ነው። እንዲሁም ከእኔ የሚከተለው የትኩረት ሞተር ጋር ይገናኛል ፣ እሱም በመሠረቱ ሁለተኛ የብሉቱዝ መሣሪያ ይሆናል (ESP32 በርካታ የብሉቱዝ ግንኙነቶችን ይደግፋል)። አዲሱ ቪዲዮ ይህንን ያሳያል።

ሥሪት 3 ን ለማዘዝ ከፈለጉ እባክዎን በ MagicButton ድርጣቢያ ላይ ይመልከቱ

አቅርቦቶች

ማንኛውም የ ESP32 ሞዱል ከ wifi እና ብሉቱዝ ጋር። እኔ TTGO micro32 ን ተጠቀምኩ ምክንያቱም ጥቃቅን ስለሆነ

የትኩረት መንኮራኩር ፣ ማንኛውም ፖታቲሞሜትር ያደርግ ነበር። እኔ ጥቃቅን ስለሆንኩ የሚከተለውን ተጠቅሜያለሁ - https://www.aliexpress.com/item/32963061806.html? S… ይህ ዓይነቱ የላይኛው እና የታችኛው ድንበር ላይ ጠንካራ ማቆሚያዎች አሉት። በመጪው ስሪት ውስጥ ሮታሪ ኢንኮደርን እጠቀማለሁ። በዚህ መንገድ ትኩረቴ ወይም መክፈቻው ወደ ሁነታ ስገባ ወደ የአሁኑ የጎማ ቅንብር “አይዘልም”።

የተደጋጋሚ/ሞድ ቁልፍ። የሚከተለውን ተጠቅሜያለሁ https://www.aliexpress.com/item/32806223591.html? S…

እንደ ሬስቶራንት ፣ ካፕ ፣ ወዘተ ያሉ ሌሎች መደበኛ ክፍሎች…

ደረጃ 1 - ኮዱ

በኤፒ ሞድ ውስጥ ከሚታወቅ አውታረ መረብ ጋር ለመገናኘት የ ESP32 ን የ wifi ችሎታ እጠቀማለሁ ፣ ወይም በመስኩ ውስጥ ሳለሁ ፣ እኔ የምገናኝበት ጣቢያ (STA) ይሆናል። በዚህ መንገድ ሞጁሉን ማዋቀር እችላለሁ። ስለ wifi/ድረ -ገጽ ክፍል በዝርዝር አልናገርም ፣ ይህንን በሚቀጥለው ደረጃ ላይ ማከል እችል ይሆናል።

ESP32 ከካሜራ ጋር ተገናኝቶ የብሉቱዝ ሊ ደንበኛ ይሆናል። በ Arduino ESP32 ማዕቀፍ ውስጥ የተካተተው የብሉቱዝ ኮድ ከ BMPCC4k ጋር አይሰራም። ዋቅክ-ኮባ ለእኛ አስተካክሎልናል። አመሰግናለሁ Wakwak-koba! የ BLE ቤተመጽሐፉን ከዚህ ተጠቀምኩኝ

github.com/wakwak-koba/arduino-esp32

የሆነ ሆኖ ያ የ BLE lib ስሪት ገና በመገንባት ላይ ነው እና የቅርብ ጊዜው የ BLEUUID.cpp ስሪት በአሁኑ ጊዜ የሚሰራ አይመስልም ፣ ስለዚህ የዚህን ፋይል ቀደም ሲል “የተረጋገጠ” ስሪት ይውሰዱ።

በቀሪው ፣ አብዛኛው የብሉቱዝ ኮድ በአርዲኖ ማዕቀፍ ውስጥ በተካተቱት የ BLE ምሳሌዎች መሠረት ብዙ ነው-

አንዳንድ BLE UUID እና ተለዋዋጭ የሚከተሉትን ይገልፃሉ

የማይንቀሳቀስ BLEUUID BlackMagic ("00001800-0000-1000-8000-00805f9b34fb");

የማይንቀሳቀስ BLEUUID ControlserviceUUID ("291D567A-6D75-11E6-8B77-86F30CA893D3"); የማይንቀሳቀስ BLEUUID DevInfoServiceControlUUID ("180A"); የማይንቀሳቀስ BLEUUID ControlcharUUID ("5DD3465F-1AEE-4299-8493-D2ECA2F8E1BB"); የማይንቀሳቀስ BLEUUID NotifcharUUID ("B864E140-76A0-416A-BF30-5876504537D9"); የማይንቀሳቀስ BLEUUID ደንበኛNamecharUUID ("FFAC0C52-C9FB-41A0-B063-CC76282EB89C"); የማይንቀሳቀስ BLEUUID CamModelcharUUID ("2A24"); የማይንቀሳቀስ BLEScan *pBLEScan = BLEDevice:: getScan (); የማይንቀሳቀስ BLEAddress *pServerAddress; የማይንቀሳቀስ BLEAdvertisedDevice* myDevice; የማይንቀሳቀስ BLERemoteCharacteristic *pControlCharacteristic; የማይንቀሳቀስ BLERemoteCharacteristic *pNotifCharacteristic; የማይንቀሳቀስ ቡሊያን doConnect = 0; የማይንቀሳቀስ ቡሊያን ተገናኝቷል = 0; ተለዋዋጭ ተለዋዋጭ ቅኝት = 0; የማይለዋወጥ 32_t pinCode;

ቅኝት እና ዋና ዑደት

ክፍል MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {

ባዶ ውጤት ላይ (BLEAdvertisedDevice advertisedDevice) {Serial.print ("BLE Advertised Device ተገኝቷል"); Serial.println (advertisedDevice.toString (). C_str ()); ከሆነ (advertisedDevice.haveServiceUUID () && advertisedDevice.getServiceUUID ()። (BlackMagic)) {Serial.print ("የእኛን መሣሪያ አገኘ!"); advertisedDevice.getScan ()-> ማቆሚያ (); myDevice = አዲስ BLEAdvertisedDevice (ማስታወቂያ ማስታወቂያ); doConnect = እውነት; }}}; የማይንቀሳቀስ ባዶ ቅኝትCompleteCB (BLEScanResults scanResults) {Serial.println ("መቃኘት ተከናውኗል"); መቃኘት = ሐሰት; } ባዶ ባዶ (ባዶ) {ከሆነ (! ተገናኝቷል && ((uint32_t) (ሚሊስ () - ሰዓት ቆጣሪ)) BLE_RESCAN_TIME || (! መቃኘት))) {Serial.println ("መቃኘት …"); መቃኘት = እውነት; pBLEScan-> ጀምር (BLE_SCAN_TIME ፣ scanCompleteCB); ሰዓት ቆጣሪ = ሚሊስ (); } ከሆነ (doConnect == true) {if (connectToServer ()) {Serial.println («አሁን ከ BLE አገልጋዩ ጋር ተገናኝተናል») ፤ ተገናኝቷል = እውነት; } ሌላ {Serial.println («ከአገልጋዩ ጋር መገናኘት አልቻልንም ፤ ከዚህ በላይ የምናደርገው የለም»)። } doConnect = ሐሰት; }}

ከካሜራ ጋር መገናኘት;

bool connectToServer () {

Serial.print ("ግንኙነትን በመፍጠር ላይ"); Serial.println (myDevice-> getAddress (). ToString (). C_str ()); BLEDevice:: setEncryptionLevel (ESP_BLE_SEC_ENCRYPT); BLEDevice:: setSecurityCallbacks (አዲስ MySecurity ()); ብልጽግና *pSecurity = አዲስ BLESecurity (); pSecurity-> setKeySize (); pSecurity-> setAuthenticationMode (ESP_LE_AUTH_REQ_SC_MITM_BOND); pSecurity-> setCapability (ESP_IO_CAP_IN); pSecurity-> setRespEncryptionKey (ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK); BLEClient *pClient = BLEDevice:: createClient (); pClient-> setClientCallbacks (አዲስ MyClientCallback ()); pClient-> ይገናኙ (myDevice); Serial.println (" - ከአገልጋይ ጋር ተገናኝቷል"); BLEDevice:: setMTU (BLEDevice:: getMTU ()); // CAMERA MODEL BLERemoteService *pRemoteService = pClient-> getService (DevInfoServiceControlUUID) ያግኙ። ከሆነ (pRemoteService == nullptr) {Serial.print (" - የመሣሪያ መረጃ አገልግሎት ማግኘት አልተሳካም"); Serial.println (DevInfoServiceControlUUID.toString (). C_str ()); መሄድ አለመቻል; } Serial.println (" - የመሣሪያ መረጃን ማንበብ"); // በርቀት BLE አገልጋዩ አገልግሎት ውስጥ ስለ ባህሪው ማጣቀሻ ያግኙ። BLERemoteCharacteristic *pRemoteCamModelCharacteristic = pRemoteService-> getCharacteristic (CamModelcharUUID); ከሆነ (pRemoteCamModelCharacteristic == nullptr) {Serial.print (" - የካሜራ ሞዴል ማግኘት አልተሳካም"); Serial.println (CamModelcharUUID.toString (). C_str ()); መሄድ አለመቻል; } // የባህሪያቱን ዋጋ ያንብቡ። std:: string value = pRemoteCamModelCharacteristic-> readValue (); Serial.print ("ካሜራ ነው"); Serial.println (value.c_str ()); ከሆነ (CamModel! = value.c_str ()) {Serial.print (" - ካሜራ BMPCC4k አይደለም"); መሄድ አለመቻል; } // መቆጣጠሪያን ያግኙ pRemoteService = pClient-> getService (ControlserviceUUID); ከሆነ (pRemoteService == nullptr) {Serial.print (" - የካሜራ አገልግሎት ማግኘት አልተሳካም"); Serial.println (ControlserviceUUID.toString (). C_str ()); መሄድ አለመቻል; } BLERemoteCharacteristic *pRemoteClientNameCharacteristic = pRemoteService-> getCharacteristic (ClientNamecharUUID); ከሆነ (pRemoteClientNameCharacteristic! = nullptr) {pRemoteClientNameCharacteristic-> writeValue (MyName.c_str () ፣ MyName.length ()); } pControlCharacteristic = pRemoteService-> getCharacteristic (ControlcharUUID); ከሆነ (pControlCharacteristic == nullptr) {Serial.print (" - የቁጥጥር ባህሪ ማግኘት አልተሳካም"); Serial.println (ControlcharUUID.toString (). C_str ()); መሄድ አለመቻል; } pNotifCharacteristic = pRemoteService-> getCharacteristic (NotifcharUUID); ከሆነ (pNotifCharacteristic! = nullptr) // && pNotifCharacteristic-> canIndicate ()) {Serial.println (" - ለማሳወቂያ መመዝገብ"); const uint8_t indicationOn = {0x2, 0x0}; pNotifCharacteristic-> registerForNotify (ማሳወቂያ ደውል ፣ ሐሰተኛ); pNotifCharacteristic-> getDescriptor (BLEUUID ((uint16_t) 0x2902))-> ጻፍ እሴት ((uint8_t*) አመላካች ላይ ፣ 2 ፣ እውነት); } እውነት መመለስ; አልተሳካም pClient-> ግንኙነት አቋርጥ (); ሐሰትን መመለስ; }

የተገናኘው/የተቋረጠው መልሶ መደወያ ፦

ክፍል MyClientCallback ፦ የሕዝብ BLEClientCallbacks {

ባዶነት onConnect (BLEClient *pclient) {Serial.println ("እኛ ተገናኝተናል"); } ባዶነትን በ ‹አገናኝ› (BLEClient *pclient) {የተገናኘ = ሐሰት; pclient-> ግንኙነት አቋርጥ (); Serial.println ("ተለያይተናል"); }};

የፒን ኮድ ክፍል:

አሁን ባለው ሥሪት ውስጥ በድር በይነገጽ በኩል የፒንኮዱን ማስገባት እችላለሁ ፣ ግን እነዚህ በኋላ ላይ ልጨምር የምችለው የ wifi/የድር ገጽ ዝርዝሮች ናቸው።

ክፍል MySecurity: የሕዝብ BLESecurityCallbacks

{uint32_t onPassKeyRequest () {Serial.println ("- እባክዎ 6 ዲጂት ፒን ያስገቡ (በ ENTER ይጨርሱ):"); pinCode = 0; ቻር ቸ; ያድርጉ {ሳለ (! Serial.available ()) {መዘግየት (1); } ch = Serial.read (); ከሆነ (ch> = '0' && ch <= '9') {pinCode = pinCode *10+ (ch -'0 '); Serial.print (ch); }} እያለ ((ch! = '\ n')); ፒንኮድ ተመለስ; } ባዶነት በ ‹PassKeyNotify ›(uint32_t pass_key) {ESP_LOGE (LOG_TAG ፣« የቁልፍ ሰሌዳው ማሳወቂያ ቁጥር%d »፣ pass_key); } bool onConfirmPIN (uint32_t pass_key) {ESP_LOGI (LOG_TAG ፣ «የይለፍ ቁልፉ YES/NO number:%d» ፣ pass_key); vTaskDelay (5000); እንደገና መመለስ; } SecureRequest () {ESP_LOGI (LOG_TAG ፣ «የደህንነት ጥያቄ»)) እንደገና መመለስ; } ባዶነት ማረጋገጫ ማረጋገጫ ተጠናቅቋል (esp_ble_auth_cmpl_t auth_cmpl) {Serial.print ("ጥንድ ሁኔታ ="); Serial.println (auth_cmpl.success); }};

BLE ማሳወቂያ ፦

ካሜራው መቅረጽ ሲጀምር እና ሲያቆም ጨምሮ ስለማንኛውም የካሜራ ለውጦች ለ BLE ደንበኞቹን ያሳውቃል። መቅዳት ሲጀምር/ሲያቆም ይህ ኮድ የእኔን ኤልኢዲ ይቀይራል።

የማይንቀሳቀስ ባዶነት ማሳወቂያ ደውል (BLERemoteCharacteristic *pBLERemote ባህሪ ፣

uint8_t*pData ፣ የመጠን_ቲ ርዝመት ፣ bool isNotify) {// BMPCC4k BLE የመልዕክት ቅርጸት: // rec on is 255 9 0 0 10 1 1 2 2 0 64 0 2 // rec off is 255 9 0 0 10 1 1 2 0 0 64 0 2if (ርዝመት == 13 && pData [0] == 255 && pData [1] == 9 && pData [4] == 10 && pData [5] == 1) {ከሆነ (pData [8] == 0) { ዳግም ሁኔታ = 0; } ከሆነ (pData [8] == 2) {recstatus = 1; }}}

ደረጃ 2 - ኮዱ ክፍል 2

ይህ ትዕዛዞችን በትክክል ወደ ካሜራ የሚልክ ክፍል ነው።

መቅዳት

uint8_t መዝገብ = {255 ፣ 9 ፣ 0 ፣ 0 ፣ 10 ፣ 1 ፣ 1 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0 ፣ 0}; // 0 = ጠፍቷል ፣ 2 = በርቷል ፣ [8] ባዶ መዝገብ (ቡሊያን ሬኦኦን) {ከሆነ (! RecOn) መዝገብ [8] = 0; ሌላ መዝገብ [8] = 2; pControlCharacteristic-> writeValue ((uint8_t*) መዝገብ ፣ 16 ፣ እውነት); }

በማተኮር ላይ

ካሜራው ከቅርብ እስከ ሩቅ ትኩረት የሚይዝ 11 ቢት ቁጥርን ይጠብቃል። በኤዲሲ እሴትዎ ላይ ማጣሪያ እንዲጭኑ እመክርዎታለሁ ፣ አለበለዚያ ትኩረቱ በነርሷ ሊያንቀጠቅጥ ይችላል።

uint8_t ትኩረት = {255, 6, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0}; // 0.0… 1.0 ፣ 11bit ፣ [8] = LSB ፣ [9] = MSBvoid Focus (uint16_t val) {// ከ 12 ቢት ኤዲሲ እሴት ወደ 11 ቢት የትኩረት እሴት ትኩረት [8] = (uint8_t) (((val> > 1) & 0xFF)); ትኩረት [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> ጻፍ እሴት ((uint8_t*) ትኩረት ፣ 12 ፣ እውነት); }

ቀዳዳ:

ካሜራው 11 ቢት ቁጥርን ይጠብቃል ፣ ይህም ከዝቅተኛ እስከ ከፍተኛ የመክፈቻ እሴት። በኤዲሲ እሴትዎ ላይ ማጣሪያ እንዲጭኑ እመክርዎታለሁ ፣ አለበለዚያ የመክፈቻው እሴት በፍርሃት ይርገበገብ ይሆናል።

uint8_t aperture = {255, 6, 0, 0, 0, 3, 128, 0, 0, 0, 0, 0}; // 0.0… 1.0 ፣ [8] = LSB ፣ [9] = MSBvoid Aperture (uint16_t val) {// ከ 12 ቢት ኤዲሲ እሴት ወደ 11 ቢት የመክፈቻ እሴት መክፈቻ [8] = (uint8_t) (((val >> 1) & 0xFF)); ቀዳዳ [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> WriteValue ((uint8_t*) aperture, 12, true); }

ደረጃ 3 ወረዳው

ወረዳው
ወረዳው

የወረዳዬን ፒዲኤፍ አያይ I'veዋለሁ። አንዳንድ የፒሲቢ ስዕሎች እንዲሁ ተያይዘዋል።

ቦርዱ በማይክሮ ዩኤስቢ ተጎድቷል።

ፒሲቢውን ከተቀበልኩ በኋላ የ RGB LED ን መንዳት እንደምፈልግ ወሰንኩ ፣ ስለዚህ ሁለት WS2812B ን በ “Button Led” ውፅዓት (በፒሲቢው ላይ አንዳንድ የሽቦ ጥገናዎች ያስፈልጉ ነበር)። የ PCB ዎች ከ OSHPark.com ጋር 8USD ነበሩ።

እኔ እንደማልጠቀምበት እና ከተያያዙት መርሃግብሮች የተወገዱትን እንደ “adc” ያሉ በ PCB ላይ አንዳንድ ተጨማሪ ግንኙነቶችን ማየት ይችላሉ። ዕቅዱ ቀደም ሲል የውጭ የትኩረት መንኮራኩርን ለመጠቀም ነበር ነገር ግን በአሁኑ ጊዜ በትንሽ አውራ ጣት ጎማ ፍጹም ደስተኛ ነኝ።

ደረጃ 4 መደምደሚያ

ይህ እንደረዳኝ ተስፋ አደርጋለሁ።

እንደ ጠንካራ ማቆሚያዎች ያለ ሮታሪ ኢንኮደር መጠቀምን የመሳሰሉ አንዳንድ የወደፊት ዝመናዎችን በአዕምሮዬ ውስጥ አግኝቻለሁ። ይህ ተቆጣጣሪው የአሁኑን የትኩረት ወይም የመክፈቻ ዋጋ ከካሜራ እንዲያገኝ እና ከዚያ እንዲቀጥል ይጠይቃል። የ “notifyCallback” ተግባር ለዚያ ምናልባት መዘመን አለበት።

ፒሲቢ ለ WS2812B RGB LED ዎች ምልክቶችን በትክክል ለማቅረብ ዝመና ይፈልጋል።

ይህንን ሥራ ለመስራት ብዙ (አንድ loooot) ጊዜን ፣ በተለይም የ BLE ክፍልን አሳልፌያለሁ። ይህ እርስዎን ከረዳዎት እና መጠጥ ሊገዙኝ ከፈለጉ ፣ ያ በጣም አድናቆት አለው:) ይህ የ Paypal ልገሳ አገናኝ ነው

የሚመከር: