Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Bluetooth-Kamera (ABC)

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
HC-05 Bluetooth-Modul
× 1
Kamera OV7670
× 1
Arduino TFT-Schild
× 1

Über dieses Projekt

Mit einem Handy mit Kamera, kabellosen Gadgets und anderen technischen Neuerungen kann man heute kaum noch jemanden überraschen. Dank der Arduino-Plattform haben Millionen von Menschen die wunderbare Welt der Elektronik und Programmierung entdeckt. 100, 500 Anweisungen wurden geschrieben, wie man Daten zwischen einem Mobiltelefon und Arduino über Bluetooth austauschen kann... Was rede ich da? Ja. Ich möchte 100, 501 Mal Daten zwischen einem Mobiltelefon auf Android und Arduino UNO über Bluetooth austauschen. Aber ich möchte nicht nur eine Reihe von Zeichen und Zahlen übertragen, sondern Bilder.

Jemand wird sagen, dass dies unmöglich ist, Arduino ist zu langsam, um große Datenmengen mit guter Geschwindigkeit zu verarbeiten. Und er wird absolut Recht haben. Und was ist, wenn Arduino ein bisschen hilft - um die ganze "harte" Arbeit auf die Schultern anderer Geräte zu übertragen? Und es gibt so ein Gerät!

Dies ist ein einzigartiges TFT-Shield für Arduino. Informationen zu diesem Logo finden Sie in diesen Artikeln:Artikel 1, Artikel 2 In diesem Tutorial werde ich zeigen, wie Sie sich über Bluetooth zwischen Arduino und Android-Telefon verbinden, ein Bild von der OV7670-Kamera auf Arduino UNO erhalten und auf ein Android-Telefon übertragen. Übertragen Sie dann im Gegenteil das Bild (Bild von der Kamera) vom Android-Telefon auf Arduino UNO und zeigen Sie es auf dem Bildschirm eines einzigartigen TFT-Shields an.

Für das Android-Handy wurde eine spezielle Anwendung geschrieben.

Kurze Eigenschaften des TFT-Shields:

  • Größe 3,5" Diagonale,
  • Auflösung 320 x 240,
  • Anzahl der Farben 65536 (16-Bit),
  • Widerstandsfähiger Touchscreen (XPT2046-Controller),
  • 5 Tasten,
  • RTC IC DS1307 mit 3V Lithiumbatterie CR1220,
  • Steckplatz zum Anschließen einer Micro-SD-Karte,
  • 4-poliger (2,54 mm) Anschluss zum Anschluss des Bluetooth-Moduls HC-05 (-06), ESP8286 WiFi-Modul.
  • 20-poliger (2,54 mm) Anschluss für Kamera (OV7670).

Liste der benötigten Komponenten

Hardware :

  • Arduino UNO;
  • Einzigartiger TFT-Schild;
  • AC-DC-Netzteil 6-12 Volt,>600 mA;
  • Kamera OV7670;
  • Bluetooth-Modul HC-06 (HC-05);
  • Android-Telefon.

Achtung:Für den Betrieb des TFT-Shields ist es notwendig (!) ein 6-12 Volt Netzteil zu verwenden, da der maximale Strom von 500 mA aus USB für den normalen Betrieb nicht ausreicht.

Software :

  • Arduino-IDE;
  • Bibliothek für einzigartiges TFT-Schild;
  • APK-Datei für Android-Smartphones.

Vorbereitung

Software

Alle Demonstrationsskizzen sind in der Arduino IDE-Umgebung geschrieben, daher ist es zu Beginn notwendig, die Arduino IDE zu installieren - https://www.arduino.cc/en/main/software. Dann müssen Sie eine Bibliothek für TFT-Shield installieren - github.com/YATFT/YATFT (laden Sie die Bibliothek herunter und entpacken Sie sie in den Ordner "libraries" im Arduino IDE-Verzeichnis).

Nach der Installation der Arduino IDE müssen Sie das Arduino UNO Board programmieren. Der Einfachheit halber empfehle ich, es separat zu flashen, ohne TFT-Schild. Dafür:

  • Verbinden Sie das USB-Kabel mit der Arduino UNO-Platine;
  • Führen Sie die Arduino-IDE auf dem Computer aus;
  • Wählen Sie den entsprechenden Port aus, an den das Arduino UNO angeschlossen ist;
  • Laden Sie die ArduinoBluetoothCamera.ino herunter Demoskizze (und Datei ov7670_regs.h für Kamera-Init);
  • Klicken Sie auf die Schaltfläche Hochladen .

Wenn das Arduino UNO-Board erfolgreich programmiert wurde, können Sie mit dem nächsten Schritt fortfahren.

ArduinoBluetoothCamera.ino Skizze:

/******************************************** ************************** SOFTWARE UND DOKUMENTATION WERDEN "WIE BESEHEN" OHNE GEWÄHRLEISTUNG * JEGLICHER ART, ENTWEDER AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSLICH . BEREITGESTELLT OHNE EINSCHRÄNKUNG JEGLICHE* GARANTIE FÜR MARKTFÄHIGKEIT, TITEL, NICHTVERLETZUNG UND EIGNUNG FÜR EINEN* BESTIMMTEN ZWECK. IN KEINEM FALL SIND DER AUTOR ODER SEINE LIZENZGEBER* HAFTBAR ODER VERPFLICHTET AUS VERTRAG, FAHRLÄSSIGKEIT, STRENG HAFTUNG,* BEITRAG, GEWÄHRLEISTUNGSVERLETZUNG ODER ANDERER RECHTSGEMÄßER THEORIE JEGLICHE* DIREKTE ODER INDIREKTE SCHÄDEN ODER AUFWENDUNGEN, DIE NICHT B* EINSCHLIESSLICH B* SPEZIELLE, INDIREKTE, STRAF- ODER FOLGESCHÄDEN,* GEWINN- ODER DATENVERLUST, KOSTEN FÜR DIE BESCHAFFUNG VON ERSATZWAREn,* TECHNOLOGIE, DIENSTLEISTUNGEN ODER ANSPRÜCHE DRITTER (EINSCHLIESSLICH ABER* NICHT BESCHRÄNKT AUF SIMFLAR), ANSPRÜCHE DAVON .**************************************************** **********************/#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;modeuint8 =._t last_modeuint8 0; uint8_t start_capt =0; uint16_t err;void setup () {// Initialisieren der seriellen Schnittstelle Serial.begin (115200); // Anzeige initialisieren tft.begin(); tft.SetColor(BRIGHTRED); tft.ClearDevice();}void loop(){ // Setzen Sie Ihren Hauptcode hier, um ihn wiederholt auszuführen:if (Serial.available()) { uint8_t temp =Serial.read(); switch (temp) { case 0x10:// Einzelfotomodus senden =1; start_capt =1; if (last_mode !=mode &&last_mode !=2) { tft.begin(); tft.SetRGB(); // Wechsel in den RGB-Modus cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, wahr); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); Verzögerung (1000); } brechen; case 0x20:// Kontinuierliches Senden Fotomodus =2; start_capt =2; if (last_mode !=mode &&last_mode !=1) { tft.begin(); tft.SetRGB(); // Wechsel in den RGB-Modus cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, wahr); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); } brechen; case 0x30:// Einzelfotomodus empfangen =3; start_capt =3; if (last_mode !=mode &&last_mode !=4) { tft.begin(); tft.SetYUV(); // In den YUV-Modus wechseln} break; case 0x40:// Kontinuierlicher Empfang Fotomodus =4; start_capt =4; if (last_mode !=mode &&last_mode !=3) { tft.begin(); tft.SetYUV(); // In den YUV-Modus wechseln} break; Vorgabe:Pause; }} if (mode ==1) // Sende einzelnes Foto { if (start_capt ==1) { start_capt =0; last_mode =Modus; Modus =0; CamCapture(); aufrechtzuerhalten. aufrechtzuerhalten. Sonst if (Modus ==2) // Kontinuierliches Senden von Foto { während (1) { uint8_t temp =Serial.read (); if (start_capt ==2) { start_capt =0; } if (temp ==0x21) // Stopp? { start_capt =0; last_mode =Modus; Modus =0; brechen; } if (CamCapture()) fortfahren; aufrechtzuerhalten. aufrechtzuerhalten. Sonst if (mode ==3) // Empfange einzelnes Foto { if (start_capt ==3) {//Start Capture start_capt =0; last_mode =Modus; Modus =0; Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg decode structure 0, // x0 (links) 0, // y0 (oben) GetMaxX()+1, // x1 (rechts) GetMaxY()+1, // y1 (unten ) 32000); // maximale Bildgröße}} else if (Modus ==4) // Kontinuierlicher Empfang Foto {uint8_t temp =Serial.read (); while (1) { if (start_capt ==4) {// Erfassung starten start_capt =0; } if (temp ==0x41) // Stopp? { start_capt =0; last_mode =Modus; Modus =0; brechen; } Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg decode structure 0, // x0 (links) 0, // y0 (oben) GetMaxX()+1, // x1 (rechts) GetMaxY()+1, // y1 (unten ) 32000); // maximale Bildgröße}}} uint8_t CamCapture (void) { uint8_t temp =0xff, temp_last =0; bool is_header =false; uint32_t Länge =0; Länge =codec.JPEGStart(); uint32_t en_jpeg_address =ifc.rdReg32(0x414)<<2; intk =0; if ((Länge>=0x5FFFF) | (Länge ==0)) { start_capt =2; 1 zurückgeben; } temp =ifc.GetMem(en_jpeg_address+k); k++; Länge --; while (Länge--) { temp_last =temp; temp =ifc.GetMem(en_jpeg_address+k); k++; if (is_header ==true) { Serial.write (temp); aufrechtzuerhalten. Sonst if ((temp ==0xD8) &(temp_last ==0xFF)) { is_header =true; Serial.write (temp_last); Serial.write (temp); } if ( (temp ==0xD9) &&(temp_last ==0xFF) ) // Wenn das Ende finden, brechen während, brechen; } is_header =false; Rückgabe 0;} 

OV7670_regs.h:

#ifndef OV7670_REGS_H#define OV7670_REGS_Hconst uint8_t OV7670_VGA[][2] PROGMEM ={ { 1, 0x42}, // Größe des Bytes, Adresse (ID) { 640/16, 480/16}, // Größe X, Größe 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}, // Größe Byte, Adresse (ID) { 320/16, 240/16}, // Größe X, Größe 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

Auf dem Android-Telefon müssen Sie die ArduinoTFT.apk . installieren . Erlaube der App, Bluetooth und die Kamera zu verwenden.

Update 26.05.2020 !

Ich habe den Quellcode von ArduinoTFT.apk hinzugefügt. WIE ES IST! ArduinoTFT.zip.h herunterladen

, umbenennen in ArduinoTFT.zip und entpacken. Genießen!

Aktualisierung 25.07.2020 !

"Hallo, ich hatte das gleiche Problem mit der Android-App, die nicht funktioniert. Gelöst, nachdem die App für den Zugriff auf die Smartphone-Kamera autorisiert wurde. Das war's. Tschüss" (c)

Bluetooth-Modul

Es ist notwendig, den Wechselkurs im Bluetooth-Modul auf 115200 einzustellen (Befehl "AT+UART=115200, 0, 0"). Dies ist die optimale Geschwindigkeit, mit der Arduino UNO es schafft, Daten zu empfangen und zu verarbeiten. (Theoretisch kann man die Geschwindigkeit erhöhen, den Datenempfang und die Verarbeitung optimieren, dies erfordert jedoch mehr Arbeitsspeicher). Genauere Anleitungen zum Einstellen des Wechselkurses finden Sie beispielsweise im Internet hier:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/ .

(!) Bitte beachten Sie, dass das Bluetooth-Modul mit dem Debug-Port von Arduino UNO verbunden ist. Beim Arbeiten mit Bluetooth steht der Debug-Port daher nicht zur Verfügung. Und vor der Programmierung muss der Arduino UNO (komplett mit dem Bluetooth-Modul) das Bluetooth-Modul trennen. Und nach der Programmierung wieder zurücksetzen (!)

Montage

Der Zusammenbau des Gerätes ist ganz einfach:

  • Verbinden Sie Arduino UNO und TFT-Schild;
  • Schließen Sie die OV7670 Kamera an den 20-Pin-Anschluss am TFT-Schirm des Shields an (manchmal verwende ich einen abgewinkelten 18-20-Pin-Stecker mit 2,54 mm Rastermaß als Adapter);
  • Verbinden Sie das Bluetooth-Modul HC-06 (HC-05) mit dem 4-Pin-Anschluss mit der Aufschrift "Bluetooth" auf dem TFT-Schild;
  • Schließen Sie das 6-12-V-Netzteil an den Stromeingang des Arduino UNO-Boards an.

Nach dem Einschalten sollte der Bildschirm des TFT-Schilds rot werden. Dies bedeutet die Bereitschaft, Befehle vom Android-Telefon zu empfangen.

Vorführung

Führen Sie die folgenden Vorgänge auf dem Android-Telefon aus:

  • Starte das ArduinoTFT Anwendung auf dem Android-Telefon;
  • Drehen Sie das Telefon in eine horizontale Position;
  • Aktivieren Sie die Bluetooth-Verbindung, wählen Sie das erkannte Bluetooth-Modul (HC-06);

Auf dem Bildschirm sollten zwei Fenster und vier Schaltflächen erscheinen:

  • Das Fenster oben rechts ist das Sucherfenster der Kamera des Telefons;
  • Großes linkes Fenster - empfangene oder gesendete Bilder.

Tastenfunktionen:

  • Einzelbild vom Android-Handy auf Arduino übertragen;
  • Kontinuierliche Übertragung von Bildern vom Android-Handy auf Arduino;
  • Einzelbild vom Arduino auf das Android-Telefon übertragen;
  • Kontinuierliche Übertragung von Bildern vom Arduino zum Android-Telefon.

Die Bildgröße beträgt 320x240 Pixel (2-5 kB). Dieses Kapitel enthält ein Demo-Video.

Wenn Ihnen mein Artikel gefällt, würde ich mich über eine Bewertung freuen. Vielleicht motiviert mich das zu neuen Artikeln. :-)

Danke fürs Zuschauen!

Vorherige Artikel:

1) Einzigartiges TFT-Shield für Arduino Uno - Start,

2) Einzigartiges Arduino TFT-Schild - OV7670 Cam.

Nächste Artikel:

3) TFT-Schild für Arduino Nano - Start,

4) Fotos und RGB-Video auf TFT-SPI-Display.

5) Steuerung per Smartphone 4WD Robot Car über Bluetooth.

Update 01.04.2021:

Hallo wieder! Es gibt eine aktualisierte Bibliothek für eine Reihe von Bildschirmen, die derzeit aus zwei Shields und zwei Breakout-Boards besteht. Die Skizze wird je nach gewählter Version (von 1 bis 4) und der Art des Mikrocontrollers (MegaAVR oder ESP-32) zusammengestellt. Fotos, Beispiele hinzugefügt. Weitere Informationen finden Sie in der https://github.com/Ekaburg/EkaTFT.

Code

Bibliothek für TFT-Schild
http://github.com/YATFT/YATFT

Kundenspezifische Teile und Gehäuse

Experimentieren Sie mit OV7670 und TV-Fernbedienung Experiment mit Kamera OV7670 und TV-Fernbedienung

Herstellungsprozess

  1. Kamera
  2. Kameraobjektiv
  3. BrickPi-Bookreader
  4. Raspberry Pi Roboter über Bluetooth gesteuert
  5. Arduino Bluetooth-gesteuerter motorisierter Kamera-Slider
  6. Arduino mit Bluetooth zur Steuerung einer LED!
  7. Sprachgesteuerte Bluetooth-Geräte mit OK Google
  8. Mobile Fernüberwachungskamera
  9. Ein Sturzerkennungssystem basierend auf Arduino, Windows und Azure
  10. Arduino Uno + Elektrogerät (Glühbirne) + Android-Telefon