工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Bluetoothカメラ(ABC)

コンポーネントと消耗品

>
Arduino UNO
× 1
HC-05Bluetoothモジュール
× 1
Camera OV7670
× 1
ArduinoTFTシールド
× 1

このプロジェクトについて

今日、カメラ付きの携帯電話、ワイヤレスガジェット、その他の技術的進歩を持っている人を驚かすことはほとんどありません。 Arduinoプラットフォームのおかげで、何百万もの人々がエレクトロニクスとプログラミングの素晴らしい世界を発見しました。ブルートゥースを介して携帯電話とArduinoの間でデータを交換する方法について100、500の指示が書かれました...私は何について話しているのですか?はい。 Androidの携帯電話とArduinoUNOの間で、Bluetoothを介して100、501回データを交換したいと思います。しかし、文字や数字のセットだけでなく、写真も送信したいのです。

これは不可能だと誰かが言うでしょう。Arduinoは遅すぎて大量のデータを高速で処理できません。そして彼は絶対に正しいでしょう。そして、Arduinoを少しでも助けて、他のデバイスの肩にかかっているすべての「ハード」な作業を転送するとしたらどうでしょうか?そして、そのようなデバイスがあります!

これはArduino用のユニークなTFTシールドです。このロゴに関する情報は、次の記事にあります。記事1、記事2このチュートリアルでは、Bluetoothを介してArduinoとAndroidスマートフォンを接続し、ArduinoUNOのOV7670カメラから写真を取得してAndroidスマートフォンに転送する方法を説明します。次に、逆に、AndroidフォンからArduino UNOに画像(カメラからの画像)を転送し、独自のTFTシールドの画面に表示します。

Androidフォン用に特別なアプリケーションが作成されました。

TFTシールドの簡単な特徴:

  • サイズ3.5 "対角線
  • 解像度320x240、
  • 色数65536(16ビット)、
  • 抵抗膜方式タッチスクリーン(XPT2046コントローラー)
  • 5つのボタン
  • 3Vリチウム電池CR1220を搭載したRTCIC DS1307、
  • マイクロSDカードを接続するためのスロット
  • BluetoothモジュールHC-05(-06)、ESP8286 WiFiモジュールを接続するための4ピン(2.54 mm)コネクタ。
  • カメラ(OV7670)用の20ピン(2.54 mm)コネクタ。

必要なコンポーネントのリスト

ハードウェア

  • Arduino UNO;
  • 独自のTFTシールド;
  • AC-DC電源アダプター6〜12ボルト、> 600mA;
  • カメラOV7670;
  • BluetoothモジュールHC-06(HC-05);
  • Androidフォン。

重要:USBからの最大電流500 mAでは通常の動作には不十分であるため、TFTシールドを動作させるには6〜12ボルトの電源アダプターを使用する必要があります(!)。

ソフトウェア

  • Arduino IDE;
  • 独自のTFTシールドのライブラリ;
  • Android携帯用のAPKファイル。

準備中

ソフトウェア

すべてのデモスケッチはArduinoIDE環境で記述されているため、最初にArduino IDEをインストールする必要があります-https://www.arduino.cc/en/main/software次に、TFTシールド用のライブラリをインストールする必要があります--github.com / YATFT / YATFT(ライブラリをダウンロードして、Arduino IDEディレクトリの「libraries」フォルダに解凍します)。

Arduino IDEをインストールした後、ArduinoUNOボードをプログラムする必要があります。簡単にするために、TFTシールドなしで個別にフラッシュすることをお勧めします。このために:

  • USBケーブルをArduinoUNOボードに接続します。
  • コンピューターでArduinoIDEを実行します。
  • ArduinoUNOが接続されている対応するポートを選択します。
  • ArduinoBluetoothCamera.ino をダウンロードします デモスケッチ(およびファイル ov7670_regs.h カメラの初期化用);
  • [アップロード]ボタンをクリックします

Arduino UNOボードが正常にプログラムされたら、次のステップに進むことができます。

ArduinoBluetoothCamera.ino スケッチ:

  / ******************************************* ****************************ソフトウェアとドキュメントは「現状有姿」で提供され、明示または黙示を問わず、いかなる種類の保証もありません。制限なしに、商品性、権原、非侵害、および特定の目的への適合性の保証。いかなる場合も、著者またはそのライセンサーは、契約、過失、無過失責任*、貢献、保証違反、またはその他の法定責任理論に基づいて*責任を負わないものとします。特別、間接的、懲罰的または結果的な損害賠償*、利益の損失またはデータの損失、代替品の調達費用*、技術、サービス、または第三者による請求(ただし、それらの防御を含むがこれに限定されない)、またはその他。************************************************* ********************** /#include  #include  #include  #include  #include "ov7670_regs.h" JPEG_DECODE jpeg_decode; YATFT tft(0); INTRFC ifc; CAM cam; CODEC codec; SRL srl; #define IMG_SizeX 320#define IMG_SizeY 240uint8_t mode =0; uint8_t last_mode =0; uint8_t start_capt =0; uint16_t err; void setup(){//シリアルポートを初期化しますSerial.begin(115200); //表示を初期化しますtft.begin(); tft.SetColor(BRIGHTRED); tft.ClearDevice();} void loop(){//メインコードをここに配置して、繰り返し実行します。if(Serial.available()){uint8_t temp =Serial.read(); switch(temp){case 0x10://単一の写真モードを送信=1; start_capt =1; if(last_mode!=mode &&last_mode!=2){tft.begin(); tft.SetRGB(); // RGBモードに切り替えますcam.CamInit(&OV7670_QVGA [0] [0]); cam.CamVideoPreview(0、0、1、true); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX、IMG_SizeY); delay(1000); } 壊す; case 0x20://連続送信写真モード=2; start_capt =2; if(last_mode!=mode &&last_mode!=1){tft.begin(); tft.SetRGB(); // RGBモードに切り替えますcam.CamInit(&OV7670_QVGA [0] [0]); cam.CamVideoPreview(0、0、1、true); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX、IMG_SizeY); } 壊す; case 0x30://単一の写真モードを受信=3; start_capt =3; if(last_mode!=mode &&last_mode!=4){tft.begin(); tft.SetYUV(); // YUVモードに切り替えます} break; case 0x40://連続受信写真モード=4; start_capt =4; if(last_mode!=mode &&last_mode!=3){tft.begin(); tft.SetYUV(); // YUVモードに切り替えます} break;デフォルト:ブレーク; }} if(mode ==1)//単一の写真を送信{if(start_capt ==1){start_capt =0; last_mode =モード;モード=0; CamCapture(); }} else if(mode ==2)//写真の連続送信{while(1){uint8_t temp =Serial.read(); if(start_capt ==2){start_capt =0; } if(temp ==0x21)//停止しますか? {start_capt =0; last_mode =モード;モード=0;壊す; } if(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)//連続受信写真{uint8_t temp =Serial.read(); while(1){if(start_capt ==4){//キャプチャを開始start_capt =0; } if(temp ==0x41)//停止しますか? {start_capt =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; bool is_header =false; uint32_t長さ=0;長さ=codec.JPEGStart(); uint32_t en_jpeg_address =ifc.rdReg32(0x414)<<2; int k =0; if((length> =0x5FFFF)|(length ==0)){start_capt =2; 1を返します。 } temp =ifc.GetMem(en_jpeg_address + k); k ++;長さ -; while(length-){temp_last =temp; temp =ifc.GetMem(en_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(temp); } if((temp ==0xD9)&&(temp_last ==0xFF))//終わりを見つけたら、break while、break; } is_header =false; 0を返す;}  

OV7670_regs.h:

  #ifndef OV7670_REGS_H#define OV7670_REGS_Hconst uint8_t OV7670_VGA [] [2] PROGMEM ={{1、0x42}、//バイトのサイズ、アドレス(ID){640 / 16、480 / 16}、//サイズX、サイズY {0b01000010、0b00000100}、// Reset_Enable_N、7 | 6 | 5 | 4 | 3 | Vsync Invert | Hsync Invert | 0 {0x3a、0x0C}、{0x40、0xC0}、{0x12、0x00}、 {0x0c、0x00}、{0x3e、0x00}、{0x70、0x3A}、{0x71、0x35}、{0x72、0x11}、{0x73、0xF0}、{0xa2、0x02}、{0x11、0x80}、{0x7a 、0x18}、{0x7b、0x02}、{0x7c、0x07}、{0x7d、0x1F}、{0x7e、0x49}、{0x7f、0x5A}、{0x80、0x6A}、{0x81、0x79}、{0x82、0x87 }、{0x83、0x94}、{0x84、0x9F}、{0x85、0xAF}、{0x86、0xBB}、{0x87、0xCF}、{0x88、0xEE}、{0x89、0xEE}、{0x13、0xE0}、 {0x00、0x00}、{0x10、0x00}、{0x0d、0x00}、{0x24、0x98}、{0x25、0x63}、{0x26、0xD3}、{0x2a、0x00}、{0x2b、0x00}、{0x2d 、0x00}、{0x13、0xe5}、{0x13、0xe7}、{0x1e、0x30}、{0x74、0x60}、{0x01、0x80}、{0x02、0x80}、{0x15、0x10}、{0x4f、0x40 }、{0x50、0x34}、{0x51、0x0C}、{0x52、0x17}、{0x53、0x29}、{0x54、0x40}、{0x57、0x80}、{0x58、0x1e}、{0x41、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 | Vsync Invert | Hsync Invert | 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}、{0x7b、0x02}、{ 0x7c、0x07}、{0x7d、0x1F}、{0x7e、0x49}、{0x7f、0x5A}、{0x80、0x6A}、{0x81、0x79}、{0x82、0x87}、{0x83、0x94}、{0x84、 0x9F}、{0x85、0xAF}、{0x86、0xBB}、{0x87、0xCF}、{0x88、0xEE}、{0x89、0xEE}、{0x13、0xE0}、{0x00、0x00}、{0x10、0x00} 、{0x0d、0x00}、{0x24、0x98}、{0x25、0x63}、{0x26、0xD3}、{0x2a、0x00}、{0x2b、0x00}、{0x2d、0x00}、{0x13、0xe5}、{ 0x13、0xe7}、{0x1e、0x30}、{0x74、0x60}、{0x01、0x80}、{0x02、0x80}、{0x15、0x10}、{0x4f、0x40}、{0x50、0x34}、{0x51、 0x0C}、{0x52、0x17}、{0x53、0x29}、{0x54、0x40}、{0x57、0x80}、{0x58、0x1e}、{0x41、0x10}、{0x75、0x60}、{0x76、0x50} 、{0x77、0x48}、{0x3d、0x92 }、{0x3b、0x00}、{0x04、0x00}、{0xff、0xff}、}; #endif  

Android

Androidスマートフォンでは、 ArduinoTFT.apk をインストールする必要があります 。アプリにBluetoothとカメラの使用を許可します。

2020年5月26日更新!

ArduinoTFT.apkのソースコードを追加しました。そのまま! ArduinoTFT.zip.h をダウンロードします

、名前を ArduinoTFT.zip に変更します 解凍します。楽しみ!

2020年7月25日更新!

「こんにちは、Androidアプリで同じ問題が発生しましたが、機能しません。アプリにスマートフォンのカメラでのアクセスを許可した後、解決しました。それだけです。さようなら」(c)

Bluetoothモジュール

Bluetoothモジュールの為替レートを115200に設定する必要があります(コマンド「AT + UART =115200、0、0」)。これは、ArduinoUNOがデータの受信と処理を管理するのに最適な速度です。 (理論的には、速度を上げ、データの受信と処理を最適化できますが、これには大量のRAMが必要です)為替レートの設定方法の詳細については、インターネット(https:/など)を参照してください。 /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/。

(!) BluetoothモジュールはArduinoUNOのデバッグポートに接続することに注意してください。したがって、Bluetoothを使用する場合、デバッグポートは使用できません。また、Arduino UNO(Bluetoothモジュールを完備)をプログラミングする前に、Bluetoothモジュールを切断する必要があります。そしてプログラミング後、それを元に戻します(!)

組み立て

デバイスの組み立ては非常に簡単です:

  • ArduinoUNOとTFTシールドを接続します。
  • OV7670カメラをシールドのTFTシールドの20ピンコネクタに接続します(アダプタとして、ピッチが2.54 mmの角度の付いた18〜20ピンコネクタを使用する場合があります)。
  • BluetoothモジュールHC-06(HC-05)をTFTシールドに「Bluetooth」と表示された4ピンコネクタに接続します。
  • 6-12V電源アダプターをArduinoUNOボードの電源入力に接続します。

電源を入れると、TFTシールドの画面が赤くなります。これは、Androidフォンからコマンドを受け取る意欲を意味します。

デモンストレーション

Androidフォンで次の操作を実行します。

  • ArduinoTFT を起動します Androidフォンのアプリケーション;
  • スマートフォンを水平に向けます。
  • Bluetooth接続を有効にし、検出されたBluetoothモジュール(HC-06)を選択します。

2つのウィンドウと4つのボタンが画面に表示されます:

  • 右上のウィンドウは、携帯電話のカメラのファインダーウィンドウです。
  • 大きな左ウィンドウ-受信または送信された画像。

ボタンの機能:

  • Android携帯からArduinoに単一の画像を転送します;
  • AndroidフォンからArduinoへの画像の継続的な転送;
  • 単一の画像をArduinoからAndroid携帯に転送します;
  • ArduinoからAndroid携帯への画像の継続的な転送。

画像サイズは320x240ピクセル(2-5 kB)です。この章にはデモビデオがあります。

私の記事が気に入ったら、評価をいただければ幸いです。おそらくこれは私に新しい記事へのモチベーションを与えるでしょう。 :-)

ご覧いただきありがとうございます!

以前の記事:

1)ArduinoUno用のユニークなTFTシールド-開始

2)ユニークなArduinoTFTシールド-OV7670カム。

次の記事:

3)ArduinoNano用のTFTシールド-開始

4)TFTSPIディスプレイ上の写真とRGBビデオ。

5)Bluetoothを介したスマートフォン4WDロボットカーによる制御。

アップデート01.04.2021:

またあったね!一連の画面用に更新されたライブラリがあり、現在2つのシールドと2つのブレークアウトボードで構成されています。スケッチは、選択したバージョン(1から4)およびマイクロコントローラーのタイプ(MegaAVRまたはESP-32)に応じてコンパイルされます。写真、例を追加しました。詳細については、https://github.com/Ekaburg/EkaTFTをご覧ください。

コード

TFTシールドのライブラリ
http://github.com/YATFT/YATFT

カスタムパーツとエンクロージャー

OV7670とリモコンTVを試してみてください カメラOV7670とテレビのリモコンを使った実験

製造プロセス

  1. カメラ
  2. カメラレンズ
  3. BrickPi Bookreader
  4. Bluetoothで制御されるRaspberryPi Robot
  5. ArduinoBluetooth制御の電動カメラスライダー
  6. LEDを制御するBluetoothを搭載したArduino!
  7. OKGoogleのBluetooth音声制御アプライアンス
  8. モバイルリモート監視カメラ
  9. Arduino、Windows、Azureをベースにした転倒検知システム
  10. Arduino Uno +電気機器(電球)+ Androidフォン
  11. スマートフォンを使用してライトシステムを制御する