Мазмұны:
Бейне: Сиқырлы түйме 4k: 20USD BMPCC 4k (немесе 6k) сымсыз қашықтан басқару пульті: 4 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Көптеген адамдар BMPCC4k сымсыз контроллері туралы кейбір мәліметтермен бөлісуді сұрады. Сұрақтардың көпшілігі Bluetooth -ды басқару туралы болды, сондықтан мен бұл туралы бірнеше мәліметтерді айтамын. Сіз ESP32 Arduino ортасымен таныссыз деп ойлаймын.
Қашықтан басқару пультінің бұл нұсқасы bluetooth арқылы камераның жазылуын, фокусын және апертурасын басқара алады. Бейнежазбаны қараңыз. BMPCC4k bluetooth басқару нұсқаулығына сәйкес қосымша басқару функцияларын қосу өте оңай. Мен көргендей, камерадағы кез келген нәрсені басқаруға болады.
LIDAR модулін объектінің қашықтығын өлшеу үшін қосу оңай болар еді, осылайша сіз автофокустық жүйені ала аласыз … Көз сияқты белгілі бір аймақтарға жеткілікті дәл фокустау мүмкін болса, күмән туғызады …
2020 ЖАҢАРТУ: Мен 3.0 нұсқасын жасадым. Ол магниттік кодерді қолданатын еркін айналатын дөңгелекке негізделген. Ол сондай -ақ менің келесі фокус қозғалтқышына қосылады, ол негізінен екінші bluetooth құрылғысына айналады (ESP32 бірнеше Bluetooth байланысын қолдайды). Жаңа бейнебаян осыны көрсетеді.
Егер сіз 3 -нұсқаға тапсырыс бергіңіз келсе, MagicButton веб -сайтын қараңыз
Жабдықтар
Wifi және bluetooth қосылған кез келген ESP32 модулі. Мен TTGO micro32-ді қолдандым, себебі ол кішкентай:
Кез келген потенциометр фокус дөңгелегі. Мен төмендегілерді қолдандым, себебі ол кішкентай: https://www.aliexpress.com/item/32963061806.html? S… Бұл түр жоғарғы және төменгі шекарада қатты тоқтайды. Болашақ нұсқада мен айналмалы кодерді қолданамын. Осылайша мен режимге кірген кезде фокус немесе апертура дөңгелектің ағымдағы параметріне «секірмейді».
Қайталау/режим түймесі. Мен төмендегілерді қолдандым: https://www.aliexpress.com/item/32806223591.html? S …
Басқа стандартты компоненттер, мысалы, резисторлар, қақпақтар,… (схеманы қараңыз)
1 -қадам: Кодекс
Мен ESP32 -дің Wi -Fi мүмкіндіктерін AP режимінде белгілі желіге қосылу үшін қолданамын, немесе мен далада жүргенде ол мен қосылатын станцияға (STA) айналады. Осылайша мен модульді конфигурациялай аламын. Мен Wi -Fi/веб -бет бөліміне егжей -тегжейлі тоқталмаймын, оны кейінірек қосуым мүмкін.
ESP32 камераға қосылып, Bluetooth LE клиентіне айналады. Arduino ESP32 құрылымына қосылған Bluetooth коды BMPCC4k -пен жұмыс істемейді. Ваквак-коба бізге оны жөндеді. Рахмет Ваквак-коба! Мен BLE кітапханасын осы жерден қолдандым:
github.com/wakwak-koba/arduino-esp32
Дегенмен, BLE lib нұсқасы әлі де жетілдірілуде және BLEUUID.cpp соңғы нұсқасы дәл қазір жұмыс істемейді, сондықтан осы файлдың бұрынғы «тексерілген» нұсқасын алыңыз.
Қалғаны үшін, менің bluetooth кодының көп бөлігі Arduino құрылымына енгізілген 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 ClientNamecharUUID («FFAC0C52-C9FB-41A0-B063-CC76282EB89C»); статикалық BLEUUID CamModelcharUUID («2A24»); статикалық BLEScan *pBLEScan = BLEDevice:: getScan (); статикалық BLEAddress *pServerAddress; статикалық BLEAdvertisedDevice* myDevice; статикалық BLERemoteCharacteristic *pControlCharacteristic; статикалық BLERemoteCharacteristic *pNotifCharacteristic; статикалық логикалық doConnect = 0; статикалық логикалық байланыс = 0; volatilebool сканері = 0; volatileuint32_t pinCode;
Сканерлеу және негізгі цикл:
MyAdvertisedDeviceCallbacks класы: жалпыға ортақ BLEAdvertisedDeviceCallbacks {
void onResult (BLEAdvertisedDevice reklamaedDevice) {Serial.print («BLE жарнамаланған құрылғы табылды:»); Serial.println (adsedDevice.toString (). C_str ()); if (adsedDevice.haveServiceUUID () && adsedDevice.getServiceUUID (). тең (BlackMagic)) {Serial.print («Біздің құрылғы табылды!»); adsedDevice.getScan ()-> тоқтату (); myDevice = жаңа BLEAdvertisedDevice (жарнамаланған құрылғы); doConnect = ақиқат; }}}; static void scanCompleteCB (BLEScanResults scanResults) {Serial.println («қарап шығу аяқталды»); сканерлеу = жалған; } void loop (void) {if (! қосылған && ((uint32_t) (миллис () - Таймер)> BLE_RESCAN_TIME || (! сканерлеу))) {Serial.println («қарап шығу…»); сканерлеу = ақиқат; pBLEScan-> бастау (BLE_SCAN_TIME, scanCompleteCB); Таймер = миллис (); } if (doConnect == true) {if (connectToServer ()) {Serial.println («Біз қазір BLE серверіне қосылдық.»); қосылған = ақиқат; } else {Serial.println («Біз серверге қосыла алмадық, бұдан басқа ештеңе істемейміз.»); } doConnect = жалған; }}
Камераға қосылу:
bool connectToServer () {
Serial.print («Қосылым құру»); Serial.println (myDevice-> getAddress (). ToString (). C_str ()); BLEDevice:: setEncryptionLevel (ESP_BLE_SEC_ENCRYPT); BLEDevice:: setSecurityCallbacks (жаңа MySecurity ()); BLESecurity *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 ()); // OBTAIN CAMERA MODEL BLERemoteService *pRemoteService = pClient-> getService (DevInfoServiceControlUUID); if (pRemoteService == nullptr) {Serial.print (« - Құрылғы туралы ақпарат қызметі алынбады»); Serial.println (DevInfoServiceControlUUID.toString (). C_str ()); сәтсіздікке ұшырау; } Serial.println (« - Құрылғы туралы ақпаратты оқу»); // Қашықтағы BLE серверінің қызметіндегі сипаттамаға сілтеме алыңыз. BLERemoteCharacteristic *pRemoteCamModelCharacteristic = pRemoteService-> getCharacteristic (CamModelcharUUID); if (pRemoteCamModelCharacteristic == nullptr) {Serial.print (« - Камера үлгісі табылмады»); Serial.println (CamModelcharUUID.toString (). C_str ()); сәтсіздікке ұшырау; } // Сипаттаманың мәнін оқыңыз. std:: string мәні = pRemoteCamModelCharacteristic-> readValue (); Serial.print («Камера»); Serial.println (value.c_str ()); if (CamModel! = value.c_str ()) {Serial.print (« - Камера BMPCC4k емес»); сәтсіздікке ұшырау; } // OBTAIN CONTROL pRemoteService = pClient-> getService (ControlserviceUUID); if (pRemoteService == nullptr) {Serial.print (« - Камера қызметі алынбады»); Serial.println (ControlserviceUUID.toString (). C_str ()); сәтсіздікке ұшырау; } BLERemoteCharacteristic *pRemoteClientNameCharacteristic = pRemoteService-> getCharacteristic (ClientNamecharUUID); if (pRemoteClientNameCharacteristic! = nullptr) {pRemoteClientNameCharacteristic-> writeValue (MyName.c_str (), MyName.length ()); } pControlCharacteristic = pRemoteService-> getCharacteristic (ControlcharUUID); if (pControlCharacteristic == nullptr) {Serial.print (« - Басқару сипаттамасы алынбады»); Serial.println (ControlcharUUID.toString (). C_str ()); сәтсіздікке ұшырау; } pNotifCharacteristic = pRemoteService-> getCharacteristic (NotifcharUUID); if (pNotifCharacteristic! = nullptr) // && pNotifCharacteristic-> canIndicate ()) {Serial.println (« - хабарландыруға жазылу»); const uint8_t indicationOn = {0x2, 0x0}; pNotifCharacteristic-> registerForNotify (notifyCallback, false); pNotifCharacteristic-> getDescriptor (BLEUUID ((uint16_t) 0x2902))-> writeValue ((uint8_t*) көрсеткішіOn, 2, true); } шындықты қайтару; сәтсіздік: pClient-> ажырату (); жалған қайтару; }
Қосылған/ажыратылған кері байланыс:
MyClientCallback класы: жалпыға ортақ BLEClientCallbacks {
void onConnect (BLEClient *pclient) {Serial.println («Біз қосылдық.»); } void onDisconnect (BLEClient *pclient) {қосылған = жалған; pclient-> ажырату (); Serial.println («Біз байланыс үздік.»); }};
Пин -код бөлігі:
Менің ағымдағы нұсқада мен пин -кодты веб -интерфейс арқылы енгізе аламын, бірақ бұл кейінірек қосуға болатын wifi/веб -сайт туралы мәліметтер.
MySecurity класы: жалпыға ортақ BLESecurityCallbacks
{uint32_t onPassKeyRequest () {Serial.println («- 6 Цифрлық PIN кодты енгізіңіз (соңы ENTER енгізіледі):»); pinCode = 0; char ch; do {while (! Serial.available ()) {delay (1); } ch = Serial.read (); егер (ch> = '0' && ch <= '9') {pinCode = pinCode *10+ (ch -'0 '); Serial.print (ch); }} уақыт ((ch! = '\ n')); pinCode қайтару; } жарамсыз onPassKeyNotify (uint32_t pass_key) {ESP_LOGE (LOG_TAG, «Құпия хабарландыру нөмірі:%d», pass_key); } bool onConfirmPIN (uint32_t pass_key) {ESP_LOGI (LOG_TAG, «Кілт ИӘ/ЖОҚ нөмірі:%d», pass_key); vTaskDelay (5000); қайтару; } bool onSecurityRequest () {ESP_LOGI (LOG_TAG, «Қауіпсіздік сұрауы»); қайтару; } void onAuthenticationComplete (esp_ble_auth_cmpl_t auth_cmpl) {Serial.print («жұп күйі =»); Serial.println (auth_cmpl.success); }};
BLE хабарламасы:
Камера BLE клиенттеріне камераның кез келген өзгерістері туралы хабарлайды, оның ішінде камера жазуды бастағанда және тоқтатқанда. Бұл код жазуды бастаған/тоқтатқан кезде менің жарық диодты қосады.
static void notifyCallback (BLERemoteCharacteristic *pBLERemoteCharacteristic, uint8_t*pData, size_t length, bool isNotify) {// BMPCC4k BLE хабарламасының форматы: // қайта қосылу 255 9 0 0 10 1 1 2 2 0 64 0 2 // өшіру 255 9 0 0 10 1 1 2 0 0 64 0 2if (length == 13 && pData [0] == 255 && pData [1] == 9 && pData [4] == 10 && pData [5] == 1) {if (pData [8] == 0) { қалпына келтіру = 0; } if (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 = OFF, 2 = ON, [8] void Record (логикалық RecOn) {if (! RecOn) жазбасы [8] = 0; else жазыңыз [8] = 2; pControlCharacteristic-> writeValue ((uint8_t*) жазба, 16, шын); }
Фокус:
Камера жақыннан алысқа дейінгі фокуста болатын 11 биттік санды күтеді. Мен сіздің ADC мәніңізге сүзгі қоюға кеңес беремін, әйтпесе фокус нервтендіруі мүмкін.
uint8_t focus = {255, 6, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0}; // 0.0… 1.0, 11бит, [8] = LSB, [9] = MSBvoid Focus (uint16_t val) {// 12 биттік ADC мәнінен 11 биттік фокус мәнінің фокусына [8] = (uint8_t) (((val> > 1) & 0xFF)); фокус [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> writeValue ((uint8_t*) фокус, 12, шын); }
Диафрагма:
Камера апертураның төменгі мәнінен жоғары диапазонына дейінгі 11 биттік санды күтеді. Мен сіздің ADC мәніңізге сүзгі қоюға кеңес беремін, әйтпесе диафрагманың мәні жүйкеленіп кетуі мүмкін.
uint8_t диафрагма = {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 биттік ADC мәнінен 11 биттік диафрагмалық диафрагмаға [8] = (uint8_t) (((val >> 1)) & 0xFF)); саңылау [9] = (uint8_t) (((val >> 1) & 0xFF00) >> 8); pControlCharacteristic-> writeValue ((uint8_t*) диафрагма, 12, ақиқат); }
3 -қадам: Цикл
Мен тізбегімнің PDF файлын тіркедім. ПХД кейбір суреттері де қоса беріледі.
Тақта micro USB арқылы жұмыс істейді.
ПХД алғаннан кейін мен RGB светодиодты жүргізгім келеді деп шештім, сондықтан мен екі WS2812B сериясын «Button Led» шығысына жалғадым (бұл ПХД -да сымдарды бекіту қажет болды). ПХД OSHPark.com көмегімен 8USD болды.
ПХД -де мен қолданбайтын және бекітілген схемалардан алынып тасталған «adc» сияқты бірнеше қосылыстарды көруге болады. Жоспар бұрын сыртқы фокустық дөңгелекті қолдану болатын, бірақ мен қазіргі уақытта кішкентай бармақпен өте бақыттымын.
4 -қадам: Қорытынды
Бұл көмектесті деп үміттенемін.
Менде болашақ жаңартулар бар, мысалы, тоқтаусыз айналмалы кодерді пайдалану. Бұл контроллерден фокустың немесе апертураның ағымдағы мәнін камерадан алуды және сол жерден жалғастыруды талап етеді. Бұл үшін «notifyCallback» функциясын жаңарту қажет.
PCB WS2812B RGB жарықдиодты сигналдарын дұрыс беру үшін жаңартуды қажет етеді.
Мен бұл жұмысты, әсіресе BLE бөлігін жасауға көп уақыт жұмсадым. Егер бұл сізге көмектесті және сіз маған сусын алғыңыз келсе, бұл өте жоғары бағаланады:) Бұл PayPal қайырымдылық сілтемесі:
Ұсынылған:
IRduino: Arduino қашықтан басқару пульті - Жоғалған қашықтан басқару құралына еліктеу: 6 қадам
IRduino: Arduino қашықтан басқару пульті - Жоғалған қашықтан басқару пультіне еліктеу: Егер сіз теледидар немесе DVD ойнатқыш үшін қашықтан басқару пультін жоғалтқан болсаңыз, құрылғының өзіндегі түймелерге жүгіру, табу және пайдалану қаншалықты ауыр болатынын білесіз. Кейде бұл түймелер қашықтан басқару пультімен бірдей функцияны ұсынбайды. Алу
Ақылды шамның қашықтан басқару пульті немесе шлюзі бар IoT RC автокөлігі: 8 қадам (суреттермен)
Ақылды шамдардың қашықтан басқару пульті немесе шлюзі бар IoT RC автокөлігі: байланыссыз жоба үшін мен MiLight ақылды лампалары мен шамдар пультімен сөйлесу үшін бірнеше Arduino кодын жаздым. Мен сынау үшін кішкене RC автокөлігін жасауды шештім
Arduino көмегімен 2.4Ghz NRF24L01 модулін қолданатын сымсыз қашықтан басқару пульті - Nrf24l01 4 каналы / 6 каналды Quadcopter үшін қабылдағыш - Rc тікұшағы - Arduino көмегімен Rc ұшағы: 5 қадам (суреттермен)
Arduino көмегімен 2.4Ghz NRF24L01 модулін қолданатын сымсыз қашықтан басқару пульті | Nrf24l01 4 арналы / квадрокоптер үшін 6 арналы таратқыш қабылдағыш | Rc тікұшағы | Arduino көмегімен Rc Plane: Rc машинасын басқару | Квадрокоптер | Дрон | RC жазықтығы | RC қайығы, бізге әрқашан қабылдағыш пен таратқыш қажет, RC QUADCOPTER үшін бізге 6 каналды таратқыш пен қабылдағыш қажет, және TX пен RX -тің бұл түрі тым қымбат, сондықтан біз оны өзімізде жасаймыз
WiFi мен IR қашықтан басқару пульті мен Android қосымшасын қолданатын NodeMCU мен IR қабылдағышымен 8 релелік басқару: 5 қадам (суреттермен)
WiFi мен IR қашықтан басқару пульті мен Android қосымшасын пайдаланатын NodeMCU мен IR қабылдағышымен 8 релелік басқару: wifi мен қашықтан және андроид қосымшасы арқылы nodemcu мен IR қабылдағышты қолданатын 8 релелік қосқышты басқару. Қашықтан басқару құралы wifi қосылымына тәуелсіз жұмыс істейді. МҰНДА
Сиқырлы түйме '' Қашықтан ауысу: 3 қадам (суреттермен)
Сиқырлы түйме '' Қашықтағы қосқыш: МӘСЕЛЕ: шеберхананың/гараждың төбесіне орнатылған жарықдиодты панель шамы (DIY - әрине!) Төбедегі розеткаға қосылған. Маған негізгі жарық қосқыштары орналасқан жерден оны қосудың және өшірудің қандай да бір әдісі қажет болды. ШЕШІМІ: