산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino 블루투스 카메라(ABC)

구성품 및 소모품

Arduino UNO
× 1
HC-05 블루투스 모듈
× 1
카메라 OV7670
× 1
Arduino TFT 실드
× 1

이 프로젝트 정보

오늘날에는 카메라, 무선 장치 및 기타 기술 발전이 있는 휴대 전화를 사용하는 사람을 거의 놀라게 할 수 없습니다. Arduino 플랫폼 덕분에 수백만 명의 사람들이 전자 및 프로그래밍의 놀라운 세계를 발견했습니다. 100, 500 지침은 블루투스를 통해 휴대 전화와 Arduino간에 데이터를 교환하는 방법에 대해 작성되었습니다. 무슨 말입니까? 예. 100, 501번 블루투스를 통해 안드로이드의 휴대폰과 아두이노 UNO 간에 데이터를 교환하고 싶습니다. 하지만 일련의 문자와 숫자가 아니라 그림을 전송하고 싶습니다.

누군가는 이것이 불가능하다고 말할 것입니다. Arduino는 많은 양의 데이터를 좋은 속도로 처리하기에는 너무 느립니다. 그리고 그는 절대적으로 옳을 것입니다. 그리고 Arduino가 조금이라도 도움이된다면 다른 장치의 어깨에 모든 "힘든"작업을 전송합니까? 그런 장치가 있습니다!

이것은 Arduino를 위한 독특한 TFT 실드입니다. 이 로고에 대한 정보는 다음 기사에 있습니다. 기사 1, 기사 2 이 튜토리얼에서는 Arduino와 Android 전화 간에 블루투스를 연결하고 Arduino UNO의 OV7670 카메라에서 사진을 가져와 Android 전화로 전송하는 방법을 보여줍니다. 그럼 반대로 안드로이드 폰에서 아두이노 UNO로 사진(카메라의 이미지)을 옮기고 독특한 TFT 쉴드의 화면에 보여줍니다.

Android 휴대전화용으로 특별히 제작된 애플리케이션입니다.

TFT 실드의 간략한 특성:

<울>
  • 크기 3.5" 대각선,
  • <울>
  • 해상도 320x240,
  • <울>
  • 색상 수 65536(16비트),
  • <울>
  • 저항막식 터치 스크린(XPT2046 컨트롤러),
  • <울>
  • 5개의 버튼,
  • <울>
  • 3V 리튬 배터리 CR1220이 포함된 RTC IC DS1307,
  • <울>
  • 마이크로 SD 카드 연결용 슬롯,
  • <울>
  • Bluetooth 모듈 HC-05(-06), ESP8286 WiFi 모듈을 연결하기 위한 4핀(2.54mm) 커넥터
  • <울>
  • 카메라(OV7670)용 20핀(2.54mm) 커넥터.
  • 필요한 구성 요소 목록

    하드웨어 :

    <울>
  • 아두이노 UNO;
  • <울>
  • 고유한 TFT 실드;
  • <울>
  • AC-DC 전원 어댑터 6-12볼트,>600mA;
  • <울>
  • 카메라 OV7670;
  • <울>
  • 블루투스 모듈 HC-06(HC-05),
  • <울>
  • Android 휴대전화.
  • 주의:USB에서 500mA의 최대 전류가 정상 작동에 충분하지 않기 때문에 TFT 쉴드를 작동하기 위해 6-12볼트 전원 어댑터를 사용하는 것이 필요합니다(!).

    소프트웨어 :

    <울>
  • 아두이노 IDE;
  • <울>
  • 고유한 TFT 실드용 라이브러리
  • <울>
  • Android 휴대전화용 APK 파일.
  • 준비 중

    소프트웨어

    모든 데모 스케치는 Arduino IDE 환경에서 작성되었으므로 처음에는 Arduino IDE를 설치해야 합니다 - https://www.arduino.cc/en/main/software. 그런 다음 TFT 실드용 라이브러리를 설치해야 합니다. - github.com/YATFT/YATFT (라이브러리를 다운로드하고 Arduino IDE 디렉토리의 "libraries" 폴더에 압축을 풉니다).

    Arduino IDE를 설치한 후 Arduino UNO 보드를 프로그래밍해야 합니다. 편의상 TFT 쉴드 없이 따로 플래싱하는 것을 추천합니다. 이를 위해:

    <울>
  • USB 케이블을 Arduino UNO 보드에 연결합니다.
  • <울>
  • 컴퓨터에서 Arduino IDE를 실행합니다.
  • <울>
  • Arduino UNO가 연결된 해당 포트를 선택합니다.
  • <울>
  • ArduinoBluetoothCamera.ino 다운로드 데모 스케치(및 파일 ov7670_regs.h ) 카메라 초기화용);
  • <울>
  • 업로드 버튼을 클릭합니다. .
  • 아두이노 UNO 보드가 성공적으로 프로그래밍 되었다면 다음 단계로 넘어갈 수 있습니다.

    ArduinoBluetoothCamera.ino 스케치:

    <사전><코드>/************************************************ **************************** 소프트웨어와 문서는 다음을 포함하여 명시적이든 묵시적이든 어떤 종류의* 보증 없이 "있는 그대로" 제공됩니다. 제한 없이 상품성, 소유권, 비침해 및 특정 목적에의 적합성에 대한 모든* 보증. 어떤 경우에도 저자 또는 그의 라이선스 제공자는 계약, 과실, 엄격한 책임*, 기여, 보증 위반 또는 기타 법적 형평성 이론에 따라* 직접적이거나 간접적인 손해가 아닌* 책임을 지지 않습니다. C 특별, 간접, 징벌적 또는 결과적 손해,* 이익 손실 또는 데이터 손실, 대체 제품 조달 비용, 기술, 서비스 또는 제3자에 의한 클레임(단*을 포함하되* 이에 국한되지 않음) .**************************************************** **********************/#include #include #include #include #include "ov7670_regs.h"JPEG_DECODE jpeg_decode;YATFT tft(0);INTRFC ifc;CAM cam;CODEC 코덱;SRL srl;#define IMG_SizeX 320#define IMG_SizeY 240uint 모드 =_t0_ut 정의 0;uint8_t start_capt =0;uint16_t err;void setup(){ // 직렬 포트 초기화 Serial.begin(115200); // 디스플레이 초기화 tft.begin(); tft.SetColor(밝은 빨간색); tft.ClearDevice();}void loop(){ // 여기에 기본 코드를 넣어 반복적으로 실행합니다. if (Serial.available()) { uint8_t temp =Serial.read(); switch (temp) { case 0x10:// 단일 사진 전송 모드 =1; start_capt =1; if (last_mode !=모드 &&last_mode !=2) { tft.begin(); tft.SetRGB(); // RGB 모드로 전환 cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, 참); 코덱.JPEGInit(); 코덱.JPEGSetRegs(IMG_SizeX, IMG_SizeY); 지연(1000); } 부서지다; case 0x20:// 연속 전송 사진 모드 =2; start_capt =2; if (last_mode !=모드 &&last_mode !=1) { tft.begin(); tft.SetRGB(); // RGB 모드로 전환 cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, 참); 코덱.JPEGInit(); 코덱.JPEGSetRegs(IMG_SizeX, IMG_SizeY); } 부서지다; case 0x30:// 단일 사진 수신 모드 =3; start_capt =3; if (last_mode !=모드 &&last_mode !=4) { tft.begin(); tft.SetYUV(); // YUV 모드로 전환 } break; case 0x40:// 연속 수신 사진 모드 =4; start_capt =4; if (last_mode !=모드 &&last_mode !=3) { tft.begin(); tft.SetYUV(); // YUV 모드로 전환 } break; 기본값:중단; } } if (mode ==1) // 단일 사진 보내기 { if (start_capt ==1) { start_capt =0; last_mode =모드; 모드 =0; 캠캡쳐(); } } else if (mode ==2) // 연속 전송 Photo { while (1) { uint8_t temp =Serial.read(); if (start_capt ==2) { start_capt =0; } if (temp ==0x21) // 중지 ? { 시작_캡트 =0; last_mode =모드; 모드 =0; 부서지다; } (CamCapture()) 계속하면; } } else if (mode ==3) // 단일 사진 수신 { if (start_capt ==3) { //캡처 시작 start_capt =0; last_mode =모드; 모드 =0; Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg 디코딩 구조 0, // x0(왼쪽) 0, // y0(위) GetMaxX()+1, // x1(오른쪽) GetMaxY()+1, // y1(아래 ) 32000); // 최대 이미지 크기 } } else if (mode ==4) // 연속 수신 Photo { uint8_t temp =Serial.read(); while (1) { if (start_capt ==4) { //캡처 시작 start_capt =0; } if (temp ==0x41) // 중지 ? { 시작_캡트 =0; last_mode =모드; 모드 =0; 부서지다; } Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg 디코딩 구조 0, // x0(왼쪽) 0, // y0(위) GetMaxX()+1, // x1(오른쪽) GetMaxY()+1, // y1(아래 ) 32000); // 최대 이미지 크기 } }}uint8_t CamCapture(void){ uint8_t temp =0xff, temp_last =0; 부울 is_header =거짓; uint32_t 길이 =0; 길이 =코덱.JPEGStart(); uint32_t en_jpeg_address =ifc.rdReg32(0x414)<<2; 정수 k =0; if ((길이>=0x5FFFF) | (길이 ==0)) { start_capt =2; 반환 1; } 임시 =ifc.GetMem(ko_jpeg_address+k); k++; 길이 --; 동안 ( 길이 -- ) { temp_last =temp; 임시 =ifc.GetMem(ko_jpeg_address+k); k++; if (is_header ==true) { Serial.write(temp); } else if ((temp ==0xD8) &(temp_last ==0xFF)) { is_header =true; Serial.write(temp_last); Serial.write(임시); } if ( (temp ==0xD9) &&(temp_last ==0xFF) ) //끝을 찾으면 break while, break; } is_header =거짓; 반환 0;}

    OV7670_regs.h:

    #ifndef OV7670_REGS_H#define OV7670_REGS_Hconst uint8_t OV7670_VGA[][2] PROGMEM ={ { 1, 0x42}, // 바이트 크기, 주소(ID) { 640/16, }, 480/ 크기 X, 크기 Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7|6|5|4|3|Vsync 반전|Hsync 반전|0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12}, 0x00 {0x0c, 0x00}, {0x3e, 0x00}, {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x801}, , 0x18}, {0x7b, 0x02}, {0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, {0x8}, {0x7 }, {0x83, 0x94}, {0x84, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13}, 0 {0x00, 0x00}, {0x10, 0x00}, {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x20}, , 0x00}, {0x13, 0xe5}, {0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, {0x40}, {0x15 }, {0x50, 0x34}, {0x51, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x10}{0x75, 0x60}, {0x76, 0x50}, {0x77, 0x48}, {0x3d, 0x92}, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff},}; const uint8_t OV7670_QVGA[][2] PROGMEM ={ { 1, 0x42}, // 바이트 크기, 주소(ID) { 320/16, 240/16}, // 크기 X, 크기 Y {0b01000010, 0b00000100} // Reset_Enable_N, 7|6|5|4|3|수직동기화 반전|수평동기화 반전|0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12, 0x10}, {0x0c, 0x00}, {0x3e, 0x00} , {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x11, 0x80}, {0x7a, 0x18}, {0x7a 0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, 0x79}, {0x82, 0x87}, {0x84}, {0x84}, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13, 0xE0}, {0x00, 0x00}, {0x1 , {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2d, 0x00}, {0x1 0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, 0x10}, {0x4f, 0x40}, {0x54}, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x41, 0x10}, {0x75, 0x60} , {0x77, 0x48}, {0x3d, 0x92 }, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff},}; #endif 

    안드로이드

    Android 휴대전화에서는 ArduinoTFT.apk를 설치해야 합니다. . 앱이 블루투스와 카메라를 사용하도록 허용합니다.

    2020년 5월 26일 업데이트 !

    ArduinoTFT.apk의 소스 코드를 추가했습니다. 그대로! ArduinoTFT.zip.h 다운로드

    , ArduinoTFT.zip으로 이름 변경 압축을 풉니다. 즐기다!

    2020년 7월 25일 업데이트 !

    "안녕하세요, Android 앱이 작동하지 않는 것과 동일한 문제가 있었습니다. 스마트폰 카메라에서 앱에 액세스하도록 앱을 승인한 후 해결되었습니다. 그게 다입니다. 안녕" (c)

    블루투스 모듈

    Bluetooth 모듈에서 환율을 115200으로 설정해야 합니다(명령 "AT+UART=115200, 0, 0"). 이것은 Arduino UNO가 데이터를 수신하고 처리하는 최적의 속도입니다. (이론적으로는 속도를 높이고 데이터 수신 및 처리를 최적화할 수 있지만 이를 위해서는 더 많은 양의 RAM이 필요합니다.) 환율을 설정하는 방법에 대한 자세한 지침은 인터넷(예:https://)에서 찾을 수 있습니다. /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/ .

    (!) Bluetooth 모듈은 Arduino UNO의 디버그 포트에 연결됩니다. 따라서 블루투스로 작업할 때 디버그 포트를 사용할 수 없습니다. 그리고 Arduino UNO(Bluetooth 모듈로 완성)를 프로그래밍하기 전에 Bluetooth 모듈을 분리해야 합니다. 그리고 프로그래밍 후에 다시 설정하세요. (!)

    어셈블리

    장치의 조립은 매우 간단합니다.

    <울>
  • Arduino UNO와 TFT-shield를 함께 연결합니다.
  • <울>
  • OV7670 카메라를 실드의 TFT 실드에 있는 20핀 커넥터에 연결합니다(때로는 어댑터로 2.54mm 피치의 각진 18-20핀 커넥터를 사용합니다).
  • <울>
  • Bluetooth 모듈 HC-06(HC-05)을 TFT 실드에 "Bluetooth"라고 표시된 4핀 커넥터에 연결합니다.
  • <울>
  • 6-12V 전원 어댑터를 Arduino UNO 보드의 전원 입력에 연결합니다.
  • 전원을 켜면 TFT 실드의 화면이 빨간색으로 변해야 합니다. 이는 Android 휴대전화에서 명령을 수신하려는 의지를 의미합니다.

    데모

    Android 휴대전화에서 다음 작업을 수행합니다.

    <울>
  • ArduinoTFT 실행 Android 휴대전화의 애플리케이션
  • <울>
  • 휴대전화를 가로로 돌립니다.
  • <울>
  • Bluetooth 연결을 활성화하고 감지된 Bluetooth 모듈(HC-06)을 선택합니다.
  • 두 개의 창과 네 개의 버튼이 화면에 나타나야 합니다.

    <울>
  • 오른쪽 상단 창은 휴대전화의 카메라 뷰파인더 창입니다.
  • <울>
  • 큰 왼쪽 창 - 이미지를 받거나 보냈습니다.
  • 버튼 기능:

    <울>
  • Android 휴대전화에서 Arduino로 단일 이미지 전송
  • <울>
  • Android 휴대전화에서 Arduino로 이미지를 지속적으로 전송
  • <울>
  • Arduino에서 Android 휴대전화로 단일 이미지 전송
  • <울>
  • Arduino에서 Android 휴대전화로 이미지를 지속적으로 전송합니다.
  • 이미지 크기는 320x240픽셀(2-5kB)입니다. 이 장에는 데모 동영상이 있습니다.

    제 글이 마음에 드셨다면 평가해주시면 감사하겠습니다. 아마도 이것은 나에게 새로운 기사에 대한 동기를 줄 것입니다. :-)

    시청해주셔서 감사합니다!

    이전 기사:

    1) Arduino Uno용 고유 TFT 쉴드 - 시작,

    2) 독특한 Arduino TFT Shield - OV7670 Cam.

    다음 기사:

    3) 아두이노 나노용 TFT 실드 - 시작,

    4) TFT SPI 디스플레이의 사진 및 RGB 비디오.

    5) 블루투스를 통해 스마트폰 4WD 로봇 카로 제어합니다.

    2021년 4월 1일 업데이트:

    다시 안녕! 현재 두 개의 실드와 두 개의 브레이크아웃 보드로 구성된 일련의 화면에 대한 업데이트된 라이브러리가 있습니다. 스케치는 선택한 버전(1~4)과 마이크로 컨트롤러 유형(MegaAVR 또는 ESP-32)에 따라 컴파일됩니다. 사진, 예를 추가했습니다. 자세한 내용은 https://github.com/Ekaburg/EkaTFT에서 확인할 수 있습니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    TFT 실드용 라이브러리
    http://github.com/YATFT/YATFT

    맞춤형 부품 및 인클로저

    OV7670 및 리모컨 TV로 실험 카메라 OV7670 및 TV 리모컨으로 실험

    제조공정

    1. 카메라
    2. 카메라 렌즈
    3. BrickPi 북리더
    4. Bluetooth를 통해 제어되는 Raspberry Pi Robot
    5. Arduino Bluetooth 제어 전동 카메라 슬라이더
    6. Bluetooth가 탑재된 Arduino로 LED 제어!
    7. OK Google이 포함된 Bluetooth 음성 제어 기기
    8. 모바일 원격 감시 카메라
    9. Arduino, Windows 및 Azure를 기반으로 하는 추락 감지 시스템
    10. Arduino Uno + 전기 장치(전구) + Android 전화