Главная > Hard > Arduino Uno и камера ov7670 — пример использования

Arduino Uno и камера ov7670 — пример использования

Arduino Uno и камера ov7670В настоящий момент камера ov7670 является самым доступным модулем получения изображения для любителей Arduino. Когда-то она стоила около 12$, сейчас же её цена упала до менее 5$.

ov7670 (datasheet) имеет хорошие возможности для своей цены:

  • различные разрешение VGA (640 х 480); — QVGA (320 х 240); — CIF (352 х 240); — QCIF (176 × 144);
  • скорость передачи до 30 fps,
  • несколько способов кодирование изображения RAW RGB, RGB 565/555, YUV/YCbCr 4:2:2
  • интерфейс взаимодействия I2C.

Она была бы идеальна если бы не одна проблема — подключение и получение хотя бы тестового изображения, как и в любой мало-мальски сложной железке. В интернете много обсуждений, статей, рекомендаций, но четких шагов найти не получается: кто-то ленится их писать, кто-то выкладывает только схему или код, кто-то вообще ничего не выкладывает, а рапортует только об успешном подключении. Особо хочется отметить ComputerNerd, который выложил прекрасный пример с небольшим описанием, но для начинающего этого мало.

Данная статья призвана показать, как подключить, настроить и получить тестовое изображение с помощью  небольшой программки на java, что станет превосходной отправной точкой для дальнейших экспериментов.

Свои эксперименты я проводил на Arduino Uno, тк она лучше всего была описана — схемы подключения и статьи. Была попытка настроить на Arduino Mega, но закончилась она плачевно. Оказалось, что на ножнах A4 и A5 данная плата имеет уже опорное напряжение в 5v, которое спалило камеру.

В моём примере будет использована камера

  • AtmelStudio + arduino plugin
  • ov7670 без буфера, режим работы qvga (320×240), кодирование YUV
  • Arduino Uno
  • 2 резистора на 10кОм
  • 2 резистора на 4.7кОм
  • компьютер.

1. Схема подключения ov7670 к Arduino Uno

Программирование камеры нужно начать с правильно подключения.  Напряжение входов камеры местами отличается от напряжения Arduino, поэтому нужны резисторы.

Схема подключения ov7670 к Arduino Uno

 

2. Программа для ov7670 и Arduino Uno

Для составления программы был использован пример от ComputerNerd, который пришлось немного обрезать и доделать местами. Код можно скачать по ссылке.

Основные шаги в коде следующие:

1. Настройка ШИМ Arduino Uno, чтоб она выдавала 8mhz на 11 ножке.

DDRB |= (1 << 3); //pin 11
ASSR &= ~(_BV(EXCLK) | _BV(AS2));
TCCR2A = (1 << COM2A0) | (1 << WGM21) | (1 << WGM20);
TCCR2B = (1 << WGM22) | (1 << CS20);
OCR2A = 0;//(F_CPU)/(2*(X+1))
DDRC &= ~15; //low d0-d3 camera
DDRD &= ~252; //d7-d4 and interrupt pins

2. Настройка интерфейса I2C

TWSR &= ~3;//disable prescaler for TWI
TWBR = 72;//set to 100khz

3. Настройка RS232.

UBRR0H = 0;
UBRR0L = 1;//0 = 2M baud rate. 1 = 1M baud. 3 = 0.5M. 7 = 250k 207 is 9600 baud rate.
UCSR0A |= 2;//double speed aysnc
UCSR0B = (1 << RXEN0) | (1 << TXEN0);//Enable receiver and transmitter
UCSR0C = 6;//async 1 stop bit 8bit char no parity bits

4. Настройка камеры

….
wrReg(0x12, 0x80);
_delay_ms(100);
wrSensorRegs8_8(ov7670_default_regs);
wrReg(REG_COM10, 32);//PCLK does not toggle on HBLANK.

5. Получение изображения

Режим работы камеры передачи изображения был задан YUV. В этом случае каждый пиксель кодируется двумя байтами. Первый байт кодирует градацию серого, второй — цветоразностная составляющая.

yuv_ov7670

Задача у нас — получить хотя бы черно-белое изображения, поэтому второй байт можно отбросить.

Далее следует привести осциллограмму из которой станет ясно, каких сигналов мы ожидаем с high и low значением.

осциллограмма ov7670

StringPgm(PSTR("*RDY*"));

//VSYNC
while (!(PIND & 8));//wait for high
while ((PIND & 8));//wait for low

y = hg;
while (y--){
   x = wg;
   while (x--){
      //PCLK
      while ((PIND & 4));//wait for low
      UDR0 = (PINC & 15) | (PIND & 240);
      while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit
      while (!(PIND & 4));//wait for high
      while ((PIND & 4));//wait for low
      while (!(PIND & 4));//wait for high
   }
}
_delay_ms(100);

3. Программа на java для получения изображения с ov7670 через Arduino Uno

Программа для получения изображения предельно простая. Она получает данные с порта COM9, используя Java Communication API и сохраняет в виде bmp. Все переменные заданы прямо в коде, поэтому придётся поменять на ваши.

grabber

4. Результаты

out221out21

out122out189

На основе полученных изображений сразу можно сделать вывод о недостатках:
1. Отсутствие внутреннего буфера приводит к смазывание картинки, тк она сразу передается на компьютер, а это занимает время.
2. Наблюдаются артефакты в виде горизонтальных полосок — сбой синхронизации в получении картинки. Вместо градации серого отправляется цветоразностная составляющая.
3. Объект должен быть в фокусе камеры для четкого изображения

На этом статью можно закончить. Жду замечаний и предложений.

Categories: Hard Tags: , , ,
  1. alejost848
    2 Январь 2016 в 21:37 | #1

    Hello, thanks for your tutorial, I’ve been trying to get the OV7670 working for a few days without any luck until now. Have you been working on this project a bit further? I guess the next step for me is to get a color image, have you achieved that yet?

    Thanks again :D

    • Admin
      3 Январь 2016 в 23:24 | #2

      I will continue my work, but it will be a bit later. Now I’m trying to send data to my phone.

  2. alejost848
    3 Январь 2016 в 06:42 | #3

    Also, how can I save the data from the photos to an SD card instead of transferring them through the USB port?

  3. vRockZ
    7 Январь 2016 в 18:12 | #4

    Hello,
    with the help of google translator, this was the only tutorial which worked for me.
    Thanks for this nice tutorial!!!

    There a still some problems left.
    I use your arduino code and the java frame grabber.

    Is it normal, that i have to take about 60 pictures and then can say about 3-4 pictures are real pictures and the others have stripes or are so noisy that you can’t identify objects?

    I adjusted the lens distance, so does the divider register 0x11 and the lens must fit together? Because for the value 12 of divider register does not work for me. The pictures are too noisy.

    And one last point is, could you explain in a few sentences how the frame grabber works?

    Thanks a lot.

  4. Admin
    8 Январь 2016 в 17:44 | #5

    @vRockZ
    Code for ov7679 is also a magic for me. Since it is part from ComputerNerd example, it is better to look for answers here:
    https://github.com/ComputerNerd/ov7670-no-ram-arduino-uno/issues

  5. Rapeepong
    14 Январь 2016 в 15:49 | #6

    thanks for your tutorial, but I am beginner.
    I have senior project using ov7670 and arduino uno.
    Could you tell me about «how to run Java Communication API»

    Thanks again

  6. Admin
    16 Январь 2016 в 11:58 | #7

    @Rapeepong
    In the article there is link to the grabber.
    http://privateblog.info/files/FrameGrabber.7z
    It includes Java Communication API already. All you need is to configure my source codes in the Eclipse and run them.

  7. Slavas
    21 Январь 2016 в 07:49 | #8

    можно ли эту схему применить к mini pro (выходов/входов достаточно)?

    • Admin
      22 Январь 2016 в 10:55 | #9

      Надо пробовать. Вопрос в подаче сигнала синхронизации на камеру (8kHz), подключены ли подтягивающие резисторы поумолчанию (на Mega они поключены к 5V, что портит камеру), хватит ли места в памяти на программу, поддерживает ли UART нужную скорость (пишут, что не все версии arduino правильно работают)

  8. Slavas
    23 Январь 2016 в 05:53 | #10

    с uart разобрался. для mini pro ЭТО «UBRR0L = 1;//0 = 2M baud rate. 1 = 1M baud. 3 = 0.5M. 7 = 250k 207 is 9600 baud rate» не верная инфа (по формулам в интернете настроил). т.е. до настройки реально бред приходил. после этого появился *RDY*. у меня linux (kubuntu). не могли бы подсказать альтернативу comm библиотеки (она у Вас для винды) для линукса? я не хорошо разбираюсь в джаве, а тем более в библиотеке RXTX. я даже начал на с++ переписывать код (QT). вроде бы все хорошо.. но чет файл bmp не идет..можете подсказать с как быть на линуксе? (на винде 10 не идет у меня uart. т.е. java программа не видит)

  9. Slavas
    23 Январь 2016 в 08:18 | #11

    ура. черно-белое изображение идет. схема подключения к MINO RPO та же.
    в код кидаем такие вещи: #define F_CPU 16000000UL
    #define USART_BAUDRATE 1000000
    #define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) — 1)
    далее в коде присваиваем UBRR0H и UBRR0L — UBRR0H = (uint8_t)(UBRR_VALUE>>8); и UBRR0L = (uint8_t)UBRR_VALUE; (функция arduinoUnoInut()). UART настроен. теперь вторая проблема — (у меня kUbuntu 64 бит) eclipse выдает ошибку типа «дамп отключен. юзай ulimint -c unlimited». РЕАЛЬНО решение проблемы: качаем файлы с http://jlog.org/rxtx-lin.html и кидаем в проект eclipse (.jar кинуть в папку src. потом в Property -> Java Build Path -> Libraries добавить этот jar. потом разворачиваем (жмем треугольник) и в Native library location указать путь к .so файлу). после этого закидываем скетч, запускаем джаву и все поехало (максимальный рабочий baud rate у меня — 1 млн).

    Но. тут нет никак 6 fps или я не понимаю что это… Подскажите можно ли вообще увеличить скорость передачи (картинок/секунда) и как получать ЦВЕТНОЕ изображение?
    во всем остальном огроомное спасибо :) реальное рабочее руководство (+ можете mini pro дописать) :-)

  10. Admin
    24 Январь 2016 в 20:02 | #12

    @Slavas
    Попробовал на Nano c ATmega328 ту же схему — работает.
    Насчёт получения цветного изображения. Картинка передаётся в формате YUV (описание его можно найти в google), в статье есть картинка с описанием передаваемых байт. Для получения цветного изображения придётся правильно обработать второй байт и немного подправить код.

    //PCLK
    while ((PIND & 4));//wait for low
    UDR0 = (PINC & 15) | (PIND & 240);
    while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit while (!(PIND & 4));//wait for high while ((PIND & 4));//wait for low UDR0 = (PINC & 15) | (PIND & 240); while (!(UCSR0A & (1 << UDRE0)));//wait for byte to transmit while (!(PIND & 4));//wait for high

  11. Admin
    24 Январь 2016 в 21:38 | #13

    Если будет приходить мусор, можно увеличить wrReg(0x11, 10);
    Этот параметр отвечает за скорость выдачи картинок

  12. Slavas
    25 Январь 2016 в 07:56 | #14

    для увеличения fps необходимо увеличить частоту PWM?
    TCCR2A = (1 << COM2A0) | (1 << WGM21) | (1 << WGM20);
    TCCR2B = (1 << WGM22) | (1 << CS20);
    OCR2A = 0;//(F_CPU)/(2*(X+1))
    при wrReg(0x11, 80); выдает около 1-2 кадров в секунду. как вообще можно увеличить fps? на сколько я понимаю, нужно увеличить частоту на XCLK.. но как?

  13. Admin
    25 Январь 2016 в 12:00 | #15

    Насколько я понимаю, входную частоту нет смысла увеличивать, т.к. контроллер и UART не справляются с потоком данных. 0x11 отвечает за выходную частоту. Уже при значении 6 выдаётся мусор. У меня нормальная картинка начинается при 10. (Максимальное значение делителя 31)

  14. Slavas
    25 Январь 2016 в 15:13 | #16

    да, UART это фигня. просто может можно было к нему подключить SD.. или радио модуль высокоскоростной. тогда получается, что нужно использовать более мощные платы (типа Rasberry и т.д.) для получения и обработки нормальных картинок на большой скорости

  15. Admin
    26 Январь 2016 в 10:42 | #17

    Сейчас пытаюсь передать через Bluetooth картинку на телефон, но безрезультатно. HC-06 не может работать на 1000000, только на 921000. Надо присмотреть другой модуль.

    Есть мысль тоже перебраться на Rasberry, но там можно и обычную web камеру подключить.

  16. Cody
    26 Январь 2016 в 12:32 | #18

    Thanks for your brilliant work, I’m really new to Java and currently working on a project using ov7670 camera and arduino uno,
    if I may ask, when running the FrameGrabber, I ran the src\com\epam\simpleread.java and encountered an error
    simpleread.java:70: error: cannot find symbol
    BMP bmp = new BMP;

    I already have the Java Communication App installed, but currently stuck trying to run the framegrabber. (I already ran the BMP.java on cmd but the error with simpleread persists)

  17. Cody
    28 Январь 2016 в 17:45 | #20

    Okay, after trying the Java files out in Eclipse instead, the program worked via 32 bit JRE library.

    But for the Arduino side, after I ran the Java script once, it looked for image and was unable to detect anything from COM7; on 2nd attept, the Arduino IDE displays an error:

    avrdude: ser_open(): can’t open device «\\.\COM7″: The system cannot find the file specified.

  18. Gohi
    28 Январь 2016 в 20:44 | #21

    @Cody
    Port is busy. Try to stop application which uses it.

  19. Константин
    3 Февраль 2016 в 21:56 | #22

    Доброго времени суток, подскажите пожалуйста, что именно должно быть в COM порте при получения изображения

    • Admin
      4 Февраль 2016 в 00:07 | #23

      На com-порт приходит маркер начала изображения «*RDY*», а потом само изображение 320*240 байт

      *RDY*

  20. Noob
    3 Февраль 2016 в 23:02 | #24

    Здравствуйте. Помогите пожалуйста, во время заливки прошивки на ардуино мне выдает ошибки 478, 442, 572 и 450.Как я понял ругается на строку «static uint8_t twiRd(uint8_t nack)»
    Как это можно исправить?

  21. slavas
    4 Февраль 2016 в 00:58 | #26

    здравствуйте. никак не могу настроить pmw на arduino mini pro. мне необходимо получать 30fps на плату. без дальнейшей обработки. просто «поднять» скорость.. как это возможно сделать? уже все режимы перепробовал.. никак не получается. осциллографа нет

    • Admin
      4 Февраль 2016 в 11:57 | #27

      Не думаю, что у вас получится, arduino слабая для этого. Тут лучше подойдёт ПЛИС.

  22. Noob
    4 Февраль 2016 в 21:24 | #28

    @Admin
    Я может что то неправильно понял? Нужно подключить камеру к ардуине, залить на нее прошивку из начала пункта №2, подключить к компьютеру и активировать программу из пункта №3?

  23. slavas
    5 Февраль 2016 в 01:07 | #29

    @Noob
    нужно скачать программу по ссылке (http://privateblog.info/files/arduino_uno_ov7670.ino). её закидываем в arduino ide и заливаем в ардуину. далее качаем программу на java. я создал проект в еклипсе и закинул туда эти файлы. далее необходимо подключить драйвер для uart. он лежит в архиве по ссылке в статье. если ос на линуксе — я писал выше что нужно сделать. в конце необходимо указать в главном java файле скорость uart (там стоит 1млн сейчас) и порт (указан вроде COM3). нажимаем запуск — и камера начинает передавать на ардуину, она через uart на компьютер, java ловит байты и создает bmp файл по указанному пути. вот и все

  24. Noob
    5 Февраль 2016 в 21:15 | #30

    @slavas
    У меня не получается залить на ардуину, ругается на строчку «static uint8_t twiRd(uint8_t nack)» и что то еще. Может ли повлиять на это то что у меня не оригинальная плата, а копия?

  25. slavas
    5 Февраль 2016 в 22:36 | #31

    @Noob
    у меня тоже копия. как бы twiRd() и подобное можно убрать т.к. это настройки камеры. изначально камера имеет определенные настройки. их можно глянуть в доках http://privateblog.info/files/ov7670.pdf
    но а вообще это просто язык си. любые проблемы можно решить в интернете или на форуме

  26. Elisey
    15 Февраль 2016 в 00:54 | #32

    Вот такая ошиба всплывает
    Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre1.8.0_74\bin\win32com.dll: Can’t lad IA 32-bit .dll on a AMD 64-bit platform
    Из-за чего то понятно, а вот как исправить хз. В гугле решения не нашел, использовал и 32 битную библеотеку jre — не помогло. Может кто знает что делать?

  27. Noob
    17 Февраль 2016 в 00:24 | #33

    @slavas
    Я убрал эти строки но теперь компилятор ругается на функцию captureImg которую нельзя просто убрать
    «Camera:572: error: ‘void captureImg(uint16_t, uint16_t)’ was declared ‘extern’ and later ‘static’ [-fpermissive]»

  28. Dia
    20 Февраль 2016 в 16:33 | #34

    Hey, this was the only tutorial the which worked for me.
    Thanks for the nice tutorial the this !!! I’ve been trying to get the OV7670 working for a few days without any luck.My next step is to get a color image, have you achieved that yet?
    Thanks again :)

  29. Arun
    14 Март 2016 в 14:00 | #35

    @Dia
    hii Dia
    i have been trying to interface OV7670 . But i am facing various problems . can you share your code and schematics.

  30. Иван
    17 Март 2016 в 13:47 | #36

    Нужна помощь, дуб дубом.
    Залил программу в ардуинку и теперь пытаюсь разобраться с java грабером. Не знаю как его запустить, кто может достаточно подробно рассказать как, с помощью чего можно это сделать.
    Я уже и нашел у себя еклипс для java, туда вроде закидал файлы — при запуске ругается:
    Exception in thread «main» java.lang.Error: Unresolved compilation problem:

    at SimpleRead.main(SimpleRead.java:21)

    Не сочтите за труд, и простите за тупняки)

    • Admin
      17 Март 2016 в 23:29 | #37

      Вы, наверное, comm.jar не добавили в classpath проекта.

  31. Иван
    18 Март 2016 в 10:39 | #38

    @Admin
    Все добавлено, если правильно конечно это сделал.
    Добился новой проблемы
    Теперь следующая ошибка:

    Exception in thread «main» java.lang.NoClassDefFoundError: SerialPort
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: SerialPort
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    … 6 more

  32. Admin
    18 Март 2016 в 11:40 | #39

    @Иван
    Google? — это направо :)

  33. Иван
    18 Март 2016 в 12:01 | #40

    @Admin
    спасибо…

  34. Иван
    21 Март 2016 в 09:39 | #41

    @Admin
    Разобрался вроде с компилированием, но есть другая проблема.
    При запуске пишет, что есть 6 warnings — я так понимаю так и должно быть? Ругается что какие-то методы не используются.
    И второе — после запуска консоль пишет:
    » SimpleRead [Java Application] C:\Progam Files\Java\jre7\bin\javaw.exe (дата)»
    После чего ничего не происходит.
    И еще вопрос, если в ардуино IDE смотреть в монитор порта — я должен ведь там увидеть слова *RDY* или нет ? (у меня вообще пусто)

  35. Stefano
    22 Март 2016 в 21:20 | #42

    hey, how do i configure your source codes on eclipse? i started java programmig just some weeks ago so im pretty noob with it.

  36. AJINKYA
    29 Март 2016 в 06:25 | #43

    i am not able to run this project:
    arduino ide 1.0.5 used (not the atmel studio)
    and 5 k instead of 4.7 K ohm , does it affectt?
    and i was not able to understand baudrate .. please refer

  37. Marcus
    2 Апрель 2016 в 00:55 | #45

    Hello!
    Thanks for tutorial.
    I have a problem with my OV7670.
    I get http://images76.fotosik.pl/469/24f2b7dad7f68952med.jpg.
    What am I doing wrong?
    Thanks

  38. Admin
    2 Апрель 2016 в 10:24 | #46

    @Marcus
    Maybe speed is not the same on PC and Arduino.
    You can try to increase value at register 0x11

  39. 4 Апрель 2016 в 13:42 | #47

    Thanks. I corrected the power and increased value at register 0x11 to 24. Photos appear ingrabber.
    Now, I have a problem with the brightness of images. They are too bright.
    Besides, the camera makes a good picture only when the subject is not moving — probably from lack of fifo.

  40. SPS
    6 Апрель 2016 в 15:49 | #48

    Запустил камеру, получил вот такую картинку
    http://www.fotosik.pl/zdjecie/ba107d495b1ef1de
    Не могу понять что это за точки на всех переходах цвета? Есть подозрения что проблема в настройках камеры, код я правил. Но вот в каких, пока не нашел, только начал с ней разбираться.

  41. SPS
    6 Апрель 2016 в 18:07 | #49

    Уже разобралсся))
    Всем кто столкнется с такой же проблемой советую снизить скорость передачи по UART, увеличить значение предделителя CLKRC[0x11] и поигратся параметром EDGE[0x3F], это сглаживание границ, максимальное значение делает градиент между оттенками более плавным.
    Точки же, о которых я выше писал, появлялись из за неудачного соотношения скорости UART и скорости выдачи байтов камерой, она была на пределе возможностей моего COM-порта и некоторые байты криво читались, особенно это заметно если настроить камеру на вывод настроечной таблицы.
    Всем удачных экспериментов ;)

  42. Евгений
    8 Апрель 2016 в 00:45 | #50

    Подскажите пожалуста, как проверить рабочий модуль камеры или нет? Подключаю к мега2560 порты переназначил, программа останавливается на ожидании VSYNC (*RDY* приходит и все)

    • Admin
      8 Апрель 2016 в 09:36 | #51

      Я думаю, вы её уже спалили, как и я когда-то. На mega ножки A4 и A5 уже подключены через подтягивающие резисторы к 5V.

  43. Евгений
    10 Апрель 2016 в 01:25 | #52

    I2C на меге на других контактах и инициализацию вроде проходит.

  44. alexandr
    14 Апрель 2016 в 15:36 | #53

    добрый день. появилось несколько вопросов, проясните, пожалуйста.
    Вы пишете, что все будет пучком, если не использовать в meg’е внутренние подтягивающие резисторы, а поставить внешние и подтянуть их к 3.3В, тогда все будут счастливы. но в схеме используются ножки и на вход и на выход:
    1. ножка назначена на вход и мы подключаем внутренний подтягивающий резистор, тогда мк выдаст на пин большой ток, можно спалить другую мк.
    2. ножка назначена на вход и мы отключаем внутренний подтягивающий резистор, тогда все будет хорошо, ток будет мизерный.
    3. а если ножка назначена на выход — тогда что? в этом состоянии внутренний подтягивающий резистор включен всегда? если нет, то как его отключить? почему не сгорит ножка второй мк? и как на это отреагирует внешний подтягивающий?

  45. Waheed
    19 Апрель 2016 в 22:55 | #54

    Everyone working on Mega with OV7670 should comment these lines in «twi.c»

    digitalWrite(SDA, 1);
    digitalWrite(SCL, 1);

    or the internal pull ups will burn the camera.

    Now use 10K pull up to 3.3 line…

    Also check the Xclk (pin 10 on pwm bank of Mega) for effective 8Mhz.

    Goodluck.

  46. SPS
    25 Апрель 2016 в 12:30 | #55

    @alexandr
    1. МК выдаст на пин большое напряжение (5В), а не ток. Т.к. внутренняя подтяжка в мегах порядка 100к, и ток при 5В будет даже в КЗ будет всего 50 мкА. Но тем не менее прямое подключение к контроллеру со входными цепями рассчитанными на 3.3В неизбежно убьет их.

    2. При настройке на вход, из контроллера тока вообще не будет, сигнал поступает на вход внутреннего триггера шмидта. А так как это вход, он воспринимает любое напряжение и никак на него не влияет. В этом случае ты ничего не спалишь.

    3. Если ножка назначена на выход то тут подтягивающий резистор вообще не участвует. Если на ножку подается ноль, она ложится на землю, если единица то подключается к шине +5В питания. Согласуя в таком случае 5В и 3.3В контроллер нужно использовать делитель напряжения из резисторов или конвертер на полевиках, тогда ничего не сгорит.

  47. SaqibApplied
    1 Май 2016 в 10:26 | #56

    I’ve made connections and obtained a serial output viewed at arduino serial monitor. but I have no clue how to operate java your blog hasn’t explained the java part much please elaborate further so it’ll be helpful for beginners. ASAP

  48. Admin
    1 Май 2016 в 11:55 | #57

    @SaqibApplied
    Java part is the simpliest part of the example. It waits for the code ‘*RDY*» and reads bytes of the image. After that it saves all as ‘BMP’ file.

  49. laison007
    7 Май 2016 в 16:02 | #58

    @SaqibApplied
    Hi,
    How did you get to display the image on the monitor serial arduino ?
    I connected all the cables but only get symbols on the monitor serial.

    How you could send photos to an SD instead of the pc?
    thanks

  50. Aclecio
    27 Май 2016 в 09:17 | #59

    O único que funcionou. Muito Obrigado amigo. From Brazil!

  51. Jethro
    27 Май 2016 в 19:19 | #60

    Hi…
    Can i ask something ?

    What is the trigger for the ov7670 to get the snapshot picture ?
    and…
    in FrameGrabber, you have COM9 in there, which is mean that is the output port ?
    Example, my Arduino are connected in COM3, so what should i get for the output port ?

    Sorry i’m newbie for this… :)

    and Thanks before :)

  52. Admin
    27 Май 2016 в 22:59 | #61

    @Jethro
    The frames are taken by OV7670 in sequence one after one.
    Arduino waits in the following code to start sending a new frame.

    //VSYNC
    while (!(PIND & 8));//wait for high
    while ((PIND & 8));//wait for low

    You should update FrameGrabber to use your port with connected Arduino (COM3).

  53. Jethro
    3 Июнь 2016 в 15:40 | #62

    @Admin
    I did what you said before….
    and its still not working well….
    it’s said that «Looking for image»…

    i tried to changed the number of wrReg(0x11, 12)..
    but the outcome still the same….

    thanks for answering before anyway :)

  54. Unknown
    5 Июнь 2016 в 02:52 | #63

    @Admin .Добрый день. Я новичёк в работе с Ардуино. Но так уж сложилась судьба, и я пытаюсь реализовать проект по этому туториалу. К сожалению, я не совсем смог разобраться с работой Java api. Вы не могли бы объяснить еще раз для меня, пожалуйста.

  55. Admin
  56. krishna
    10 Июнь 2016 в 18:02 | #65

    Hi,

    Where does the pictures get saved? and How can i cross check that camera is working?

  57. Unknown
    11 Июнь 2016 в 18:44 | #66

    @krishna
    c:/new/out

  58. Unknown
    11 Июнь 2016 в 18:45 | #67

    Спасибо огромное за эту работу. Получилась передача картинок. Правда очень плохих, примерно таких, как у Nik. возможно что-то посоветуете и насчет это?

  59. Unknown
    11 Июнь 2016 в 19:06 | #68

    @Nik
    Имел ту же самую проблему, вроде бы смог пофиксить закреплением контактов, т.к у меня все провода держались очень свободно, и как мне кажется это и было причиной

  60. MUSTAFA CAKIR
    11 Июнь 2016 в 23:26 | #69

    is it possible to take a video tutorial on youtube? Thanks.

  61. İlkin Ege
    14 Июнь 2016 в 17:17 | #70

    Hello,
    How can i use java api from eclipse and what should i change for grabber part? Can you explain it.Thanks…

  62. Bruno
    23 Июнь 2016 в 23:06 | #72

    gostava de saber como executo o programa de gerar imagens,
    obrgado

  63. Agustín
    14 Июль 2016 в 03:35 | #74

    Hello, my images look very blurry that it could be ?. I’ve done everything you’ve published

  64. joric
    1 Август 2016 в 08:39 | #76

    @Slavas
    See cppgrabber.cpp here http://pastebin.com/p4BZniNV
    It works precisely the same way as FrameGrabber.
    Doesn’t need any libraries or Java SDK.

  65. Boris
    2 Август 2016 в 18:51 | #77

    The .bmp images appearing from the codes in arduino uno and the java code from FrameGrabber are very blurred;not at all clear.
    We have checked all connections they are correct and none of them are loose…
    Please help and reply asap
    URGENT !!!!!!!

  66. Boris
    10 Август 2016 в 18:01 | #79

    static const struct regval_list vga_ov7670[] PROGMEM = {
    {REG_HREF,0xF6}, // was B6
    {0x17,0x13}, // HSTART
    {0x18,0x01}, // HSTOP
    {0x19,0x02}, // VSTART
    {0x1a,0x7a}, // VSTOP
    {REG_VREF,0x0a}, // VREF
    {0xff, 0xff}, /* END MARKER */
    };

    Can you please expalin this part of the code clearly?
    It is in the ov7670.c file

    PLEASE REPLY ASAP !!!

  67. yaqoob
    12 Август 2016 в 00:15 | #80

    @Dia
    hi, you said its worked for you, i tried this method but i cannit capture image but it seems somthing happening from arduino side, can you help me how can i get image?

  68. yaqoob
    12 Август 2016 в 00:19 | #81

    hello admin, i tried your method it seems something happening but i cannot capture image, the java and grabber are like not executing, can you help me please?

  69. Vishwanath
    20 Август 2016 в 16:38 | #82

    Hello sir, Thank you..

    I am using Arduino uno and OV7670 camera and i did the connections as per your instructions and i am using your Arduino uno Example code but not getting how to check captured image in serial monitor Please Help me. One more thing you mentioned as AtmelStudio+Arduino plugin so i checked serial port output in Atmel studio getting some Hexadecimal values but not getting How to check the captured image please Help me.
    Sir, did you get images from OV7670 camera using arduino uno..??

  70. riiiiiiiiiiiiiiiiiiii
    2 Сентябрь 2016 в 13:53 | #83

    i’m working with your tuto , but the picture is not clear, can you help me

  71. riiiiiiiiiiiiiiiiiiii
    2 Сентябрь 2016 в 14:41 | #84

    @Agustín
    it works for you?? the pictures i get are so blurry

  72. Johnf843
    9 Сентябрь 2016 в 09:25 | #85

    Good writeup, I am normal visitor of one’s site, maintain up the excellent operate, and It’s going to be a regular visitor for a long time. eddedkdeceda

  73. riiiiiiiiiiiiiiiiiiii
    14 Сентябрь 2016 в 13:10 | #86

    can i store the images on an SD card, i’ve been trying but it doesn’t work , can you help me??

  74. Алексей
    27 Сентябрь 2016 в 02:11 | #87

    Большое спасибо за пример. Именно блогодаря ему камера заработала. Правда как-то корявенько, но скорее всего из-за не правильных номиналов резисторов(под рукой не оказалось 10к, пришлось делать последовательно 2 по 4.7к). Но все равно рад результату)

  75. aman
    30 Сентябрь 2016 в 11:31 | #88

    where the values of camera output are been displayed?

  76. Harika
    4 Ноябрь 2016 в 00:19 | #89

    Hello,I am working with Ov7670+Arduino uno i am able to upload the .ino code without any errors,but the problem is nothing is being displayed on the serial monitor i am unable to understand what the problem is?? can anyone fix this problem???

  77. TNikitos
    12 Ноябрь 2016 в 12:22 | #90

    Привет!
    Залил код на ардуино, и на сколько я понял у меня происходит ошибка в программе. Мигает светодиод L. Я думаю дело в функции twiWriteByte. Кто-нибудь сталкивался с такой проблемой? Автор, может подскажешь пути решения?
    Grabber не работает само собой. Виснет на строчке (char) inputStream.read() . Думаю это связано с тем, что от ардуино ничего не приходит.
    У меня Arduino UNO, подключил согласно схеме.

  78. Алексей
    19 Ноябрь 2016 в 12:30 | #91

    Добрый день!
    А как правильно подключить резисторы? я не понял на схеме. от вывода А5 к S10C провод, а между ними резистор?

  79. Johne392
    24 Ноябрь 2016 в 13:49 | #93

    Valuable information. Fortunate me I discovered your web site by chance, and I am surprised why this coincidence didn’t happened in advance! I bookmarked it. ccegebdeefdd

  80. kvv86
    24 Ноябрь 2016 в 15:42 | #94

    How can we capture color image ?

  81. Алексей
    3 Декабрь 2016 в 23:19 | #95

    Добрый день!
    У меня win 10 64 бит, я установил ява-машину 64 бит, и теперь эклипс ругается, что Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Users\Алексей\Downloads\FrameGrabber\win32com.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform. Что можно сделать?

  82. Merl1n
    4 Декабрь 2016 в 18:19 | #96

    @Алексей
    Использовать Java 32bit

  1. Пока что нет уведомлений.