Introducere

Scopul acestui proiect este realizarea unui dispozitiv ce permite controlarea unei camere CMOS prin intermediul unui site. Prin accesarea unor pagini web se pot da diferite comenzi camerei: realizarea de poze si trimiterea lor la IP-ul care a facut cererea, realizarea de poze si stocarea lor pe un card SD, rotatia camerei la stanga sau la dreapta cu un unghi predefinit. Pentru transferul pozelor de la camera pe un computer este necesar un soft dedicat. Pe pagina principala se va afisa un log cu comenzile recente primite.

Descriere generala

Schema bloc:

Mod de utilizare / interactiunea dintre module

  1. Realizarea unei poze
    1. Se acceseaza de pe calculatorul de pe care se doreste descarcarea pozei pagina dedicata trimiterii comenzii de realizare poza
    2. Cererea http ajunge la controllerul ethernet si apoi la microcontroller
    3. Microcontrollerul trimite camerei comanda de realizare poza si incepe sa primeasca date de la camera
      1. In cazul in care se doreste stocarea pozei pe SD Card datele primite de la camera sunt reconstruite si salvate intr-un fisier pe cardul SD.
      2. In cazul in care se doreste trimiterea pozei in reteaua locala, pe masura ce camera trimite date microcontrollerului, acesta construieste pachete pe care le trimite apoi in retea. Pachetele ajung inapoi la calculatorul care a realizat cererea si este reconstruit fisierul pe hard disk folosind un soft dedicat.
    4. Se actualizeaza log-ul (ce va afisat pe pagina principala).
  2. Rotatia camerei
    1. Se acceseaza de pe un calculator pagina dedicata rotatiei camerei
    2. Cererea http ajunge la controllerul ethernet si apoi la microcontroller
    3. Microcontrollerul trimite motorului pas cu pas comanda
    4. Se actualizeaza log-ul

Hardware Design

Lista de piese

- placuta initiala (facuta pentru etapa 1)
- controller ethernet enc28j60
- card SD
- camera CMOS C3088
- mufa RJ45 TS8P8-PCB-TRAF
- quartz 25 MHz
- 2 x stabilizator tensiune 3.3V
- rezistente 4×50, 2×500, 3x1k, 3x3k3, 3x1k8, 1x2k7, 4x10k, 1×200
- condensatoare neelectrolitice 2x22pF, 2x10nF, 9x100nF
- condensatoare electrolitice 2x10uF, 1x470uF
- bobina
- 4x LED
- motor servo pas cu pas
- conector memorie Secure Digital CSD-09G
- buton

Schema electrica

Comunicatia seriala

Comunicatia seriala este realizata folosind circuitul de pe placuta realizata pentru etapa I. De pe microcontroller trimit pe seriala diferite siruri de caractere pentru a realiza debugging.

Camera CMOS C3088

Camera foloseste cipul OV6620 produs de Omnivision si functioneaza la tensiunea de 5V si nu avem nevoie de stabilizator. Pinii Y0-Y7 sunt conectati la portul A (PA0-PA7), PCLK e conectat la PD2, HREF la PD3, VSYNC la PD, SDA la PC1, SCL la PC0. PWDN si RST sunt conectati la masa. Comunicatia dintre camera si ATMEGA16 e realizata prin protocolul SBCC (similar cu protocolul I2C creat de Philips). Folosesc interfata TWI prezenta pe microcontroller. VSYNC indica existenta unei noi poze, HREF determina validitatea informatiei si realizeaza sincronizarea orizontala, PCLK este semnalul de ceas (datele sunt valide pe frontul crescator). Perioada de ceas poate fi modificata prin scrierea in registrele camerei (trebuia redusa frecventa camerei pentru ca era prea mare pentru a fi folosita direct cu microcontrollerul).

Controllerul Ethernet

Am folosit controllerul ENC28j60. E alimentat la 3.3 V, de unde si nevoia pentru un stabilizator. Schema completa de conectare la mufa RJ45 e similara cu cea oferita aici http://www.melektronikos.com/pdf/serial_ethernet_schematic.pdf.

SD Card

Cardul SD e alimentat la 3.3V printr-un stabilizator si comunica cu ATMEGA16 prin patru pini de pe portul B.

SPI Master Slave

Pinii PB7, PB6, PB5 (SCK, MISO, MOSI) sunt folositi atat de controllerul ethernet cat si cardul SD. Pentru a realiza o configuratie SPI Master Slave am folosit doi pini diferiti pentru intrarile de Chip Select ale celor doua dispozitive (CS pt ENC28j60 e legat la PB4 in timp ce CS de la SD Card e legat la PB3). Camera si controllerul Ethernet folosesc la comun pinii PD2 si PD3 (INT0 si INT1) si e nevoie de o tratare diferentiata in functia de starea controllerului ethernet (data de PB4).

Rezultatele simularii

Camera CMOS C3088 nu este prezenta in librariile Proteus si nu am putut realiza simularea.

Software Design

Codul va fi scris in C; mediul de dezvoltare va fi AVR Studio 4.
Pt partea de webserver voi folosi o parte din codul din laboratorul 6.
Pt partea de comunicatie intre microcontroller si camera voi folosi o parte din functiile implementate deja pentru protocolul SCCB. Formatul pozelor va fi BMP deoarece headerele sunt simple si scurte.
Pt partea de scriere pe cardul SD fie voi folosi o implementare deja existenta pentru sistemul de fisiere FAT, fie voi folosi un sistem de fisiere propriu.
Ce voi implementa:

  1. Functii pentru construirea si trimiterea de pachete avand ca date “bucati” din poza.
  2. Functii pentru crearea fisierelor BMP pe cardul SD.
  3. Functii pentru controlul motorului.
  4. Functii pentru actualizarea log-ului si a paginii principale.
  5. Un client pentru transferul pozelor pe computer.

Rezultate Obţinute

Am realizat partea hardware pentru conectarea camerei, a controllerului ethernet si a cardului SD la microcontroller. Nu am achizionat motorul pentru miscarea camerei deoarece numarul mare de fire care intra in camera nu permitea miscarea camerei. Din punct de vedere al functionalitatilor software am realizat:

  • accesarea paginii principale a webserver-ului unde utilizatorul primeste o lista de linkuri cu optiunile posibile
  • la accesarea unui link poza este trimisa pe interfata seriala (fiind vorba de un BMP necompresat de aproximativ 0,6 MegaPixeli dimensiunea datelor ce trebuie transmise este foarte mare si timpul mare de transfer al pozei pe seriala impiedica testarea amanuntita a ceea ce se trimite - timpul de transfer este de ordinul zecilor de minute)
  • la accesarea unui link poza este trimisa in retea - se initiaza un 3 way handshake cu calculatorul care a trimis cererea pe un port specificat; dupa ce s-a realizat conexiunea poza este trimisa linie cu linie (fiecare pachet ethernet trimis contine o linie din poza - sunt trimise 352 de linii); am realizat un script linux care se plaseaza in aceeasi retea cu microcontrollerul (adresa e hardcodata), asculta pe portul pe care microcontrollerul trimite poza si reconstruieste poza; poza rezultat este un BMP alb negru de aproximativ 85 MB - transferul unei poze este destul de lent (intre 2 si 3 minute)

Ce nu am realizat:

  • Nu am legat motorul pentru miscarea camerei.
  • Nu am testat circuitul cu cardul SD. Memoria de cod e ocupata in proportie de 65% si cea de date in proportie de 80% si din lipsa de spatiu pentru bufferele pentru transfer pe SD in memoria de date nu am testat si circuitul cu cardul SD.
  • Nu am realizat paginile cu logurile privind comenzile primite.

Poza cu camera:

ASCII

Schema cu controller-ul ethernet:

ASCII

Camera conectata la microcontroller:

ASCII

Tot proiectul:

ASCII

Concluzii

Am realizat functiile de baza mentionate mai sus. Functionalitatea proiectului poate fi extinsa destul de mult:

  • se poate gestiona mai bine consumul de memorie pentru bufferele de transfer poza si transfer pachet ethernet obtinandu-se astfel spatiul necesar pentru realizarea transferelor pe cardul SD
  • se poate adauga cod pentru a mentine un log cu comenzile
  • se poate adauga cod pentru a programa microcontroller-ul sa trimita poze la intervale regulate catre o adresa
  • se poate adauga cod pentru a modifica registrele camerei pentru a modifica dimensiunea pozei (caz in care ar trebui modificat si scriptul de preluare a pozei pe calculator)

Cod sursa

Bibliografie/Resurse

pm/pm/prj2009/cb/webserver_controlled_camera.txt · Last modified: 2020/02/14 10:01 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0