Arduino (IoT): Simple Tutorial Camara JPEG IR TTL

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Camara JPEG IR TTL

Si vamos a tener un robot explorador, a veces vamos a querer ver lo que el ve.  Podemos perfectamente agregar un modulo para tomar fotos.  En este tutorial veremos como controlar un modulo para toma de fotos, una Camara JPEG.  TutorialJPEGIRTTLCamerav2.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Modulo Camara JPEG
  4. Modulo SD para almacenar la imágen
  5. Breadboard
  6. Arduino IDE (https://www.arduino.cc/en/Main/Software)

 

Arduino Tutorial Camara JPEG Santiapps Marcio Valenzuela
Arduino Tutorial Camara JPEG

Veamos el código:

//*******************************************************
// www.linksprite.com
// Note:
// 1. SD must be formated to FAT16
// 2. As the buffer of softserial has 64 bytes,
// so the code read 32 bytes each time
// 3. Please add the libaray to the lib path
//
// * SD card attached to SPI bus as follows:
// * MOSI - pin 11
// * MISO - pin 12
// * CLK - pin 13
// * CS - pin 4
//*******************************************************
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
SoftwareSerial mySerial(5,6); // Set Arduino pin 4 and 5 as softserial
byte ZERO = 0x00;
byte incomingbyte;
long int j=0,k=0,count=0,i=0x0000;
uint8_t MH,ML;
boolean EndFlag=0;
File myFile;
void SendResetCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x26);
mySerial.write(ZERO);
}
/*************************************/
/* Set ImageSize :
/* &lt;1&gt; 0x22 : 160*120
/* &lt;2&gt; 0x11 : 320*240
/* &lt;3&gt; 0x00 : 640*480
/* &lt;4&gt; 0x1D : 800*600
/* &lt;5&gt; 0x1C : 1024*768
/* &lt;6&gt; 0x1B : 1280*960
/* &lt;7&gt; 0x21 : 1600*1200
/************************************/
void SetImageSizeCmd(byte Size){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x54);
mySerial.write(0x01);
mySerial.write(Size);
}
/*************************************/
/* Set BaudRate :
/* &lt;1&gt; 0xAE : 9600
/* &lt;2&gt; 0x2A : 38400
/* &lt;3&gt; 0x1C : 57600
/* &lt;4&gt; 0x0D : 115200
/* &lt;5&gt; 0xAE : 128000
/* &lt;6&gt; 0x56 : 256000
/*************************************/
void SetBaudRateCmd(byte baudrate){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(baudrate);
}
void SendTakePhotoCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(ZERO);
}
void SendReadDataCmd(){
MH=i/0x100;
ML=i%0x100;
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write(ZERO);
mySerial.write(0x0a);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(MH);
mySerial.write(ML);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(ZERO);
mySerial.write(0x20);
mySerial.write(ZERO);
mySerial.write(0x0a);
i+=0x20;
}
void StopTakePhotoCmd(){
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}
void setup(){
Serial.begin(38400);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT);
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
Serial.println("please waiting ....");
}
void loop(){
byte a[32];
int ii;
mySerial.begin(115200);
delay(200);
SendResetCmd();//Wait 2-3 second to send take picture command
delay(2000);
SetBaudRateCmd(0x2A);
delay(500);
mySerial.begin(38400);
delay(100);
SetImageSizeCmd(0x21);
delay(100);
SendTakePhotoCmd();
delay(3000);
while(mySerial.available()&gt;0)
{
incomingbyte=mySerial.read();
}
myFile = SD.open("picture.jpg", FILE_WRITE);
while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();
delay(5);
while(mySerial.available()&gt;0)
{
incomingbyte=mySerial.read();
k++;
delayMicroseconds(100);
if((k&gt;5)&amp;&amp;(j&lt;32)&amp;&amp;(!EndFlag))
{
a[j]=incomingbyte;
if((a[j-1]==0xFF)&amp;&amp;(a[j]==0xD9)) //tell if the picture is finished
EndFlag=1;
j++;
count++;
}
}
for(j=0;j&lt;count;j++){
if(a[j]&lt;0x10) Serial.print("0");
Serial.print(a[j],HEX); // observe the image through serial port
Serial.print(" ");
}
for(ii=0; ii&lt;count; ii++)
myFile.write(a[ii]);
Serial.println();
}
myFile.close();
Serial.print("Finished writing data to file");
while(1);
}

Ahora repasemos las conexiones:

Arduino Tutorial Conexiones Camara JPEG Santiapps Marcio Valenzuela
Arduino Tutorial Conexiones Camara JPEG

En este caso consultamos el manual del modulo y notamos que el cable rojo no es Vcc.  Así que hay que tener cuidado.

Ese proyecto se puede ver aquí:

FinalWorkingJPEGIRCameraSDSetup

 

Excelente!  Podemos hacer varias cosas con estas imágenes, desde almacenarlas en una SD hasta postearlas a internet!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s