Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Bluetooth-camera (ABC)

Componenten en benodigdheden

Arduino UNO
× 1
HC-05 Bluetooth-module
× 1
Camera OV7670
× 1
Arduino TFT-schild
× 1

Over dit project

Tegenwoordig kun je bijna niemand meer verrassen met een mobiele telefoon met camera, draadloze gadgets en andere technische snufjes. Dankzij het Arduino-platform hebben miljoenen mensen de wondere wereld van elektronica en programmeren ontdekt. Er zijn 100.500 instructies geschreven over het uitwisselen van gegevens tussen een mobiele telefoon en Arduino via bluetooth... Waar heb ik het over? Ja. Ik wil gegevens uitwisselen tussen een mobiele telefoon op Android en Arduino UNO via bluetooth in 100, 501 keer. Maar ik wil niet alleen een reeks tekens en cijfers verzenden, maar ook afbeeldingen.

Iemand zal zeggen dat dit onmogelijk is, Arduino is te traag om grote hoeveelheden data met hoge snelheid te verwerken. En hij zal volkomen gelijk hebben. En wat als een klein beetje hulp Arduino - om al het "harde" werk over te dragen op de schouders van een ander apparaat? En er is zo'n apparaat!

Dit is een uniek TFT-shield voor Arduino. Informatie over dit logo staat in deze artikelen:artikel 1, artikel 2 In deze tutorial zal ik demonstreren hoe je via bluetooth verbinding kunt maken tussen Arduino en Android-telefoon, een foto kunt krijgen van de OV7670-camera op Arduino UNO en deze kunt overbrengen naar Android-telefoon. Breng vervolgens de afbeelding (afbeelding van de camera) van de Android-telefoon over naar Arduino UNO en geef deze weer op het scherm van een uniek TFT-schild.

Er is een speciale applicatie geschreven voor de Android-telefoon.

Korte kenmerken van TFT-schild:

  • Maat 3,5 inch diagonaal,
  • Resolutie 320x240,
  • Aantal kleuren 65536 (16-bits),
  • Resistief touchscreen (XPT2046-controller),
  • 5 knoppen,
  • RTC IC DS1307 met 3V lithiumbatterij CR1220,
  • Sleuf voor het aansluiten van een micro SD-kaart,
  • 4-pins (2,54 mm) connector voor het aansluiten van de Bluetooth-module HC-05 (-06), ESP8286 WiFi-module.
  • 20-pins (2,54 mm) connector voor camera (OV7670).

Lijst met benodigde componenten

Hardware :

  • Arduino UNO;
  • Uniek TFT-schild;
  • AC-DC voedingsadapter 6-12 volt,>600mA;
  • Camera OV7670;
  • Bluetooth-module HC-06 (HC-05);
  • Android-telefoon.

Let op:Het is noodzakelijk (!) om een ​​6-12 volt voedingsadapter te gebruiken om het TFT-scherm te bedienen, omdat de maximale stroom van 500 mA van USB niet genoeg is voor normaal bedrijf.

Software :

  • Arduino IDE;
  • Bibliotheek voor uniek TFT-schild;
  • APK-bestand voor Android-telefoon.

Voorbereiden

Software

Alle demonstratieschetsen zijn geschreven in de Arduino IDE-omgeving, daarom is het in het begin noodzakelijk om de Arduino IDE te installeren - https://www.arduino.cc/en/main/software. Daarna moet je een bibliotheek voor TFT-shield installeren - github.com/YATFT/YATFT (download de bibliotheek en pak deze uit in de map "bibliotheken" in de Arduino IDE-directory).

Na het installeren van de Arduino IDE, moet je het Arduino UNO-bord programmeren. Voor de eenvoud raad ik aan om het apart te flitsen, zonder TFT-schild. Hiervoor:

  • Sluit de USB-kabel aan op het Arduino UNO-bord;
  • Voer de Arduino IDE uit op de computer;
  • Selecteer de corresponderende poort waarop de Arduino UNO is aangesloten;
  • Download de ArduinoBluetoothCamera.ino demo schets (en bestand ov7670_regs.h voor camera init);
  • Klik op de knop Uploaden .

Als het Arduino UNO-bord met succes is geprogrammeerd, kunt u doorgaan naar de volgende stap.

ArduinoBluetoothCamera.ino schets:

/******************************************* ************************** SOFTWARE EN DOCUMENTATIE WORDEN GELEVERD "AS IS" ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF ZONDER BEPERKING, ELKE* GARANTIE VAN VERKOOPBAARHEID, TITEL, NIET-INBREUK EN GESCHIKTHEID VOOR EEN* BEPAALD DOEL. IN GEEN GEVAL ZULLEN DE AUTEUR OF HAAR LICENTIEGEVERS* AANSPRAKELIJK OF VERPLICHT ZIJN ONDER CONTRACT, NALATIGHEID, STRIKTE AANSPRAKELIJKHEID,* BIJDRAGE, GARANTIE-INBREUK OF ANDERE JURIDISCHE GELIJKE THEORIE IN ENIGE* DIRECTE OF INDIRECTE SCHADE INCLUSIEF OF KOSTEN BIJZONDERE, INDIRECTE, STRAFSCHADE OF GEVOLGSCHADE,* WINSTVERLIES OF GEGEVENSVERLIES, AANSCHAFKOSTEN VAN VERVANGENDE GOEDEREN,* TECHNOLOGIE, DIENSTEN OF ENIGE CLAIMS VAN DERDEN (INCLUSIEF MAAR* NIET BEPERKT TOT ENIGE DEFOUT), .************************************************** *********************/#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;uint 0; uint8_t start_capt =0; uint16_t err; void setup () { // initialiseer de seriële poort Serial.begin (115200); // initialiseer de weergave tft.begin(); tft.SetColor (HELDERROOD); tft.ClearDevice();}void loop(){ // plaats hier je hoofdcode om herhaaldelijk uit te voeren:if (Serial.available()) { uint8_t temp =Serial.read(); switch (temp) { case 0x10:// Send single Photo mode =1; start_capt =1; if (last_mode !=mode &&last_mode !=2) { tft.begin(); tft.SetRGB(); // Schakel over naar RGB-modus cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, waar); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); vertraging (1000); } pauze; case 0x20:// Continu verzenden Fotomodus =2; start_capt =2; if (last_mode !=mode &&last_mode !=1) { tft.begin(); tft.SetRGB(); // Schakel over naar RGB-modus cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, waar); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); } pauze; case 0x30:// Ontvang enkele fotomodus =3; start_capt =3; if (last_mode !=mode &&last_mode !=4) { tft.begin(); tft.SetYUV(); // Schakel over naar YUV-modus} pauze; case 0x40:// Continu ontvangen Fotomodus =4; start_capt =4; if (last_mode !=mode &&last_mode !=3) { tft.begin(); tft.SetYUV(); // Schakel over naar YUV-modus} pauze; standaard:pauze; } } if (mode ==1) // Stuur enkele foto { if (start_capt ==1) { start_capt =0; last_mode =modus; modus =0; CamCapture(); } } else if (mode ==2) // Continu foto verzenden { while (1) { uint8_t temp =Serial.read(); if (start_capt ==2) { start_capt =0; } if (temp ==0x21) // Stop ? { start_capt =0; last_mode =modus; modus =0; pauze; } als (CamCapture()) doorgaan; } } else if (mode ==3) // Ontvang enkele 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 (top) GetMaxX()+1, // x1 (right) GetMaxY()+1, // y1 (bottom) ) 32000); // max afbeeldingsgrootte}} else if (mode ==4) // Continu ontvangen foto {uint8_t temp =Serial.read(); while (1) {if (start_capt ==4) {//Start capture start_capt =0; } if (temp ==0x41) // Stop ? { start_capt =0; last_mode =modus; modus =0; pauze; } Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg decode structure 0, // x0 (links) 0, // y0 (top) GetMaxX()+1, // x1 (right) GetMaxY()+1, // y1 (bottom) ) 32000); // maximale afbeeldingsgrootte }}} uint8_t CamCapture (void) { uint8_t temp =0xff, temp_last =0; bool is_header =false; uint32_t lengte =0; lengte =codec.JPEGStart(); uint32_t en_jpeg_address =ifc.rdReg32(0x414)<<2; intk =0; if ((lengte>=0x5FFFF) | (lengte ==0)) { start_capt =2; retour 1; } temp =ifc.GetMem(en_jpeg_address+k); k++; lengte --; while (lengte--) { 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); Serieel.schrijven(temp); } if ( (temp ==0xD9) &&(temp_last ==0xFF)) //If vind het einde, pauze terwijl, pauze; } is_header =onwaar; retourneer 0;} 

OV7670_regs.h:

#ifndef OV7670_REGS_H#define OV7670_REGS_Hconst uint8_t OV7670_VGA[][2] PROGMEM ={ { 1, 0x42}, // Grootte van byte, adres (ID) { 640/16, 480/16}, // Maat X, Maat 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}, // Grootte van byte, Adres (ID) {320/16, 240/16}, // Grootte X, Grootte 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

Op de Android-telefoon moet u de ArduinoTFT.apk . installeren . Toestaan ​​dat de app Bluetooth en camera gebruikt.

Update 26-05-2020 !

Ik heb de broncode van ArduinoTFT.apk toegevoegd. ALS IS! Download ArduinoTFT.zip.h

, hernoem naar ArduinoTFT.zip en uitpakken. Genieten van!

Update 25-07-2020 !

"Hallo, ik had hetzelfde probleem met de Android-app die niet werkt. Opgelost nadat de app toestemming had gekregen om toegang te krijgen tot de camera van de smartphone. Dat is alles. Tot ziens" (c)

Bluetooth-module

Het is noodzakelijk om de wisselkoers in de Bluetooth-module in te stellen op 115200 (commando "AT+UART=115200, 0, 0"). Dit is de optimale snelheid waarmee Arduino UNO gegevens kan ontvangen en verwerken. (Theoretisch kunt u de snelheid verhogen, de gegevensontvangst en -verwerking optimaliseren, maar hiervoor is een grotere hoeveelheid RAM nodig). Meer gedetailleerde instructies over het instellen van de wisselkoers vindt u op internet, bijvoorbeeld hier:https:/ /www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/ .

(!) Houd er rekening mee dat de Bluetooth-module wordt aangesloten op de debug-poort van Arduino UNO. Dus bij het werken met bluetooth is de debug-poort niet beschikbaar. En voor het programmeren van de Arduino UNO (compleet met de Bluetooth-module) moet de Bluetooth-module worden losgekoppeld. En na het programmeren, zet het terug (!)

Montage

De montage van het apparaat is vrij eenvoudig:

  • Verbind Arduino UNO en TFT-shield met elkaar;
  • Sluit de OV7670 camera aan op de 20-pin connector op het TFT-schild van de shield (soms gebruik ik een haakse 18-20 pin connector met een 2,54 mm pitch als adapter);
  • Sluit de Bluetooth-module HC-06 (HC-05) aan op de 4-pins connector met de woorden "Bluetooth" op het TFT-schild;
  • Sluit de 6-12V voedingsadapter aan op de voedingsingang op het Arduino UNO-bord.

Nadat de stroom is ingeschakeld, moet het scherm van het TFT-schild rood worden. Dit betekent de bereidheid om opdrachten van de Android-telefoon te ontvangen.

Demonstratie

Voer de volgende handelingen uit op de Android-telefoon:

  • Lanceer de ArduinoTFT applicatie op de Android-telefoon;
  • Draai de telefoon in een horizontale positie;
  • Schakel de Bluetooth-verbinding in, selecteer de gedetecteerde Bluetooth-module (HC-06);

Er zouden twee vensters en vier knoppen op het scherm moeten verschijnen:

  • Het venster rechtsboven is het zoekervenster van de camera van de telefoon;
  • Groot linkervenster - ontvangen of verzonden afbeeldingen.

Knopfuncties:

  • Single afbeelding overzetten van Android-telefoon naar Arduino;
  • Continue overdracht van afbeeldingen van de Android-telefoon naar Arduino;
  • Single afbeelding overzetten van Arduino naar Android-telefoon;
  • Continue overdracht van afbeeldingen van Arduino naar Android-telefoon.

Het beeldformaat is 320x240 pixels (2-5 kB). Dit hoofdstuk bevat een demovideo.

Als je mijn artikel leuk vindt, zou ik een beoordeling op prijs stellen. Misschien geeft dit me motivatie voor nieuwe artikelen. :-)

Bedankt voor het kijken!

Vorige artikelen:

1) Uniek TFT-schild voor Arduino Uno - Start,

2) Uniek Arduino TFT-schild - OV7670 Cam.

Volgende artikelen:

3) TFT-schild voor Arduino Nano - Start,

4) Foto's en RGB-video op TFT SPI-display.

5) Bediening door smartphone 4WD Robot Car via Bluetooth.

Update 01.04.2021:

Welkom terug! Er is een bijgewerkte bibliotheek voor een reeks schermen, die momenteel bestaat uit twee schilden en twee breakout-borden. Afhankelijk van de gekozen versie (van 1 tot 4) en het type microcontroller (MegaAVR of ESP-32) wordt de schets samengesteld. Foto's, voorbeelden toegevoegd. Meer informatie is te vinden op https://github.com/Ekaburg/EkaTFT.

Code

Bibliotheek voor TFT-schild
http://github.com/YATFT/YATFT

Aangepaste onderdelen en behuizingen

Experimenteer met OV7670 en TV met afstandsbediening Experimenteer met camera OV7670 en tv-afstandsbediening

Productieproces

  1. Camera
  2. Cameralens
  3. BrickPi Bookreader
  4. Raspberry Pi-robot bestuurd via Bluetooth
  5. Arduino Bluetooth-gestuurde gemotoriseerde cameraschuifregelaar
  6. Arduino met Bluetooth om een ​​LED te bedienen!
  7. Bluetooth spraakgestuurde apparaten met OK Google
  8. Mobiele bewakingscamera op afstand
  9. Een valdetectiesysteem op basis van Arduino, Windows en Azure
  10. Arduino Uno + elektrisch apparaat (lamp) + Android-telefoon
  11. Bedien uw lichtsysteem met een smartphone