This instructable is for all the people struggling to just take a picture/grab a frame with their OV7670 without FIFO. I made this purely as an introduction. I do not yet posses the necessary coding skills to make a really great description. This was made to hopefully save some people a lot of the hours I used researching the OV7670 wanting to see if it worked.

All the coding provided is copied from these links:

http://forum.arduino.cc/index.php?topic=159557.0 (From a really cool guy but obviously not a fan of the arduino IDE or windows)

http://embeddedprogrammer.blogspot.dk/2012/07/hack... (Provides a lot of usefull information for understanding how the OV7670 works)

http://privateblog.info/arduino-uno-i-kamera-ov767... (is in russian, but with google translate you can actually extract some useful information)

Other useful documents are captured in the rar file.

Step 1: Identify Your Camera

This might be a little redundant but before you get down to the nitty-gritty make sure that the camera you bought is the one without FIFO. I bought mine from http://www.dx.com/p/jtron-ov7670-300kp-vga-camera-.... If your pins mention fifo or you do not have 18 pins for exits this is not the tutorial for you! Btw, if you are thinking about buying the OV7670 and you don't do coding let me save you some time. Spend a more little money and go for one that is better supported by the community for non-coders.

Step 2: Connecting the Pieces

The OV7670 is not rated for voltages above 3.0v. Hence the voltage divider for the XCLK. Futhermore the OV7670 does not provide higher voltages than 3.0 which is a little low to be sure the arduino reads the input as high (it starts at 3.0v). Therefore we connect pull-up resistors.

Step 3: Upload Sketch to Arduino

The sketch is borrowed from this link:


and put together in the ino file I uploaded (From_Computernerd).

Just insert the ino file in the Arduino IDE and upload it. Don't mind that it does not recognize some libraries in the beginning of the file. If it bothers you, comment the whole line out with //

Step 4: Different Option to "grab" Picture

If you only care about making the OV7670 work, proceed to the next step.

This is just to inform people of some of the different options to retrieve the pictures from the Arduino. I tried using the framegrabber from ComputerNerd:


It seems to be written in UNIX/Linux. Hence I tried downloading the MinGW, which should be able to run the code. After adding several packages in MinGW I had to stop because MinGW does not contain the termios.h library which is used in the code.

Another option to run GNU in windows is Cygwin. In Cygwin you also install packages with different libraries. I tried running the code installing new packages whenever Cygwin told me a library was missing. In the end I was able to compile an exe file but it wouldn't run because allegedly cygjpeg-8.dll and cygSDL-1-2-0.dll was missing even though I had installed both packages.

Finally abandoning all hope of running the "original" framegrabber I found a russian website where a guy had made his own framegrabber in java instead.

Step 5: 1. Half.

-Create a new folder on your c drive called out, like c:\out. This is where the pictures will end up.

-Download and install java SDK 32bit (don't install the 64 bit version even if your system is 64 bit) I've tested this with version 8u74.(I've included it as a rar-file because it wouldn't let me upload the exe-file)

-Find out what USB port your Arduino is connected to, something like COM3 or COM4. Check pictures to understand how.

-Depending on what port number your Arduino is connected to, download the corresponding file: COM1 = com_1.rar etc.

Step 6: 2. Half.

-Go to the "bin" folder, where you installed the Java SDK. By default it should be C:\Program Files (x86)\Java\jdk1.8.0_74\bin.

-Unpack your corresponding com_#.rar files in the directory. Check picture for help. (it might ask for adm. permission)

-Download and extract the Extra.rar file. The "win32com.dll" is placed in the "...\jdk1.8.0_74\jre\bin" direktory.

the "comm.jar" in "...\jdk1.8.0_74\jre\lib\ext" and the "javax.comm.properties" in the "...\jdk1.8.0_74\jre\lib" directory.

-Open cmd

-Open the folder wherein the code is (mine is): cd C:\Program Files (x86)\Java\jdk1.8.0_74\bin

Write: java code.SimpleRead

Enjoy! (It isn't much but at least you got it working)

Step 7: Troubleshooting and Pictures

-If your cmd does not "FIND" images try switching the USB of the arduino from a USB2.0 to a USB3.0 (blue socket) or vice versa.

-If your cmd does not "FIND" images or if you recieve SCRAMBLED pictures, you need to edit the ino file. Edit the line: wrReg(0x11, 12);

try changng the 12 to 11 or 10 or 9 or 13. Upload it to the arduino and run the cmd code again.

Good luck!

<p>my images keeps scrambled even if i change the values</p>
<p>My Arduio is using COM 7 and no other port is free. Where to get the codes for more than com 5 ports?</p>
<p>I didn't like the java app either, so I wrote a simple Windows Forms application which basically does the same thing, but it's easier to use and to setup. You only have to run the app, select your COM port and start listening.</p><p>The app is here: https://cesarab.blob.core.windows.net/public/ReadSerialPortWin.exe</p><p>It only requires .net framework 3.5 (just run the app, and if it shows you an error saying you don't have the .net framework installed, follow these instructions to enable it on your Windows: https://msdn.microsoft.com/en-us/library/hh506443(v=vs.110).aspx)</p>
<p>I tried this but its not working. It shows something like this... Please help..</p><p>:( :(</p>
<p>Hi CesarA94,.</p><p>Thanks for your update and kind gesture to help others. But unfortunately im not sure what to do after the files are downloaded. Can you please help me with steps.</p><p>Regards,</p><p>Shariq</p>
<p>sir, I load the arduino code to port 4</p><p>and then i install the .net framwork3.5</p><p>then,i run your app</p><p>and select serial port (com4)&gt; click start</p><p>the status :com 4 port opened </p><p>but no any image i can get?</p><p>how to solve it?</p>
<p>sir, even i am facing the same issue. Have you got any improvements..?</p>
<p>Hi <a href="https://www.instructables.com/member/C%C3%A9sarA94" rel="nofollow">C&eacute;sarA94</a>, Thank you very much Your Application is working perfectly. I am modifying this project to get the colour image. </p><p>Can You Please Share me the source code of your windows application.</p><p>prasadideas@gmail.com</p><p>Thank you very much in advance.</p><p>--Prasad</p>
<p>Sure. Here it is: https://cesarab.blob.core.windows.net/public/ReadSerialPort.zip</p>
<p>sir ,if i stop in &quot;looking for image&quot; </p><p>can i use your app and get the picture?</p>
<p>Hi CesarA94, </p><p>I have tried out your application and it is work for me. Hovewer, I have face this problem that the image is not completed and scattered by pieces. may I know what cause of this? It wont not happen when i using java application from tutorial</p>
<p>Hi C&eacute;sar, </p><p>Your app is much needed since it seems like the java solution is getting outdated. </p><p>I installed and compiled your app (in Visual Studio) and it runs fine. </p><p>And yet - there seems to be a port conflict when I start sending data from the Arduino on the COM port.</p><p>What is the correct startup sequence of the app and the arduino (given the arduino first need to load the program)?<br>Can I use the port monitor simultaneously?<br>How do I set bitrate, parity etc. to match the Arduino settings?</p><p>thanks, Nikolaj</p>
<p>System.UnauthorizedAccessException was unhandled</p><p>Message: An unhandled exception of type 'System.UnauthorizedAccessException' occurred in System.dll</p><p>Additional information: Access to the port COM6&quot; was denied</p>
<p>I forgot to attach a screenshot of the app running:</p>
<p>hey sir. How can you get the picture.</p><p>i use cmb but I stop in &quot;Looking for image&quot;</p><p>plz help me !!</p>
<p>Do you mind to share me the source code of your windows application?</p><p>ethankiu@gmail.com</p><p>thanks.</p>
<p>Thanks. That worked. Sorry for the late reply.</p>
<p>Thanks for the app, I'll try it.</p>
<p>its not a problem :) just follow thoses steps<br></p><p>PC&gt; devise manager &gt; PORT(COM and LPT) &gt; arduino uno (com#) &gt;port settings&gt;advanced &gt; port number . </p><p>changed it what ever you want </p>
<p>Even I faced the same problem. </p><p>Solution:</p><p>Goto ControlPanel&gt;DeviceManager.</p><p>In the tool bar,go to &quot;View&quot; and check the &quot;Show hidden devices&quot; option.</p><p>Now you must be able to see all the devices which are using your COMs. Just right-click on them and uninstall that which you aren't using.</p><p>This worked for me!</p>
<p>Not working... </p><p>It just says looking for image. Nothing helps. :(</p>
<p>hi, i got this error, can you help me out?</p>
<p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/8V-XBA2qAKY helped.. you can see my smile after 10 days of effort :D" width="500"></iframe></p><p>dont forget swap <strong>A5 and A4</strong></p>
<p>I done with these steps ,still I get scarembled images. I m using win 7 64 bit</p>
<p>I meet the same problem too</p><p>the cmd is stop in &quot;Looking for image&quot;</p><p>I follow the steps 100% and I download your JDK version as well</p><p>and my ov7670 is without FIFO too</p><p>My arduino upload files in port4 and I use your port4 files too&quot;</p><p>What can I do?</p><p>this project is important to me</p><p>plz help me!!!</p>
<p>I have the same problem as you and how can you fix it?I have done an important project as you, can you please help me?</p>
<p>I am done now.</p><p>plz check the wiring.</p><p>A4&gt;SIOD</p><p>A5&gt;SIOC</p><p>XCLK&gt;D11 directly (don't use any resistance)</p><p>and don't connect HREF</p><p>Just try it</p><p>I am not following the top of schematic</p>
<p>Hi</p><p>I wouldn't recommend this as the OV7670 is can only take around 3v on its inputs. Although it &quot;may&quot; work at 5v it probably wont last long.</p><p>thanks</p>
<p>hey, i done it</p><p>I think the problem is because the wiring</p><p>plz check the schematic sir</p><p>I AM SO HAPPY</p><p>&quot;HERF&quot; don't need to connect</p><p>and then &quot;SIOC&quot; -&gt;A4 NOT A5</p><p>&quot;SIOD:-&gt;A5 NOT A4</p><p>&quot;XCLKF&quot; -&gt;D11 directly (Don't use any Resistance)</p><p>PLZ TRY THIS</p><p>AND I can capture now</p>
<p>Thanks for ur detailed explanations,though it still doesn't work.May I ask u one more question, what value of resistors u use to connect with the SIOC and SIOD?</p>
<p>10k</p><p>let try this schematic.</p><p>and SIOD,SIOC connect with 3.3v</p>
<p>Really thanks for your help.I can take pictures now. But it seems the resolution is too low which cannot be acceptable.How can you tune he resolution?</p>
<p>if you keep stop in &quot;looking for image&quot;</p><p>Switch SIOC&gt;D4 /SIOD&gt;D5 OR SIOC&gt;D5/SIOC&gt;D4</p>
<p>And the Uno L red light keeps flashing and I am wondering if it is noraml.Did you have the same situation before?</p>
<p>where to put the src-com-epam-BMP.java and src-com-epam-SimpleRead.java? because my cmd says &quot;could not find or load main class code.SimpleRead&quot; please helppp!</p>
<p>I'm having the same problem........</p>
<p>The .java files are just the source code files. You don't need them to run the program because you have the .class files which are the compiled version.</p><p>If change directory to the bin folder and you have copied your .class files into the bin/code folder then from the bin folder just type</p><p>java code.SimpleRead</p><p>Make sure its correct as case is important.</p><p>HTH</p>
I hv also tried rotating the focus ring of camera. But nothing helped. I am getting images like this.
I am using the java framegrabber, i am getting images in my out folder, but they are not at all clear, i tried troubleshooting techniques given by you, but no luck.<br>What could be the possible problem?<br>Please help.
<p>It seems in the 16 pins model only the reset and powerdown pins are missing. I connected all the pins as opposed, and i use the framegrabber, provided here for windows. The framegrabber connects right in the com 5 but does not display anythiong. I press start and after a while stop and save as bmp and I only get a black image. Now one of the circuits shows to connect the 5 volt vcc and the other the 3.3V. Which is the right one? The L LED on the arduino blinks after i connect the vsync pin. </p>
<p>Hello, my camera that I bought as an &quot;ov7670&quot; from ebay, has only 16 pins. How should I proceed?</p>
<p>After inputting the cmd, it always says &quot;Looking for image&quot;. Nothing else pops up after and no images are saved in the out file. How do I fix this?</p>
<p>Hey Kepp27, I am getting improper images after following your example, what should I change in the code to get perfect images. I have followed all your steps, please take a look at the attached image, it is not blurred but it is NOT intact.</p><p>I have edited wrReg(0x11, 12); to Edit line: wrReg(0x11, 13); in order to get this image, any other setting gives lines/blurs the image</p>
<p>Does anyone know how to alter the codes since I only need to take a picture every 30 minutes or even longer?</p>
<p>Here is the problem I faced, and my arduino uses com20 something actually, and almost com 1 to com 6 are occupied.So, what should I do so that I can upload the programmes to the arduino. Thanks.</p>
<p>After including the &quot;code&quot; file in the bin folder, the com cannot be found and I cannot upload the proramme to arduino. Whats wrong with that?</p>
<p>how to transfer captured photos(using OV7670) to an app via bluetooth? can anyone help me? </p>
<p>Based on your program, I made the camera color and created a program for display.</p><p>If you like, please look at my program at the following URL</p><p><a href="http://qiita.com/hi631/items/0170a531457e717f3606" rel="nofollow">HTTP://qiita.com/hi631/items/0170a531457e717f3606</a></p>
<p>Thanks for creating this instructable Kepp27 - worked like a charm. Thanks to C&eacute;sarA94 for the windows VS.</p><p>@hi631 - I tried your colour version, but the code you posted does not compile - variable KD, which looks like it is part of the receive ISR is not defined, plus there are some brackets missing in the area of if(UCSR0A &amp; (1&lt;=0x20). I've bodged a way around it and it kind-of works. Thanks for sharing.</p>

About This Instructable




More by Kepp27:Mini LED Lamp With Movement- (PIR) and Lightssensor (LDR) Lightning LED RGB cloud with mechanical switch OV7670 without FIFO very simple framecapture with Arduino, black/white 
Add instructable to: