max246
January 23, 2012, 2:13pm
1
Sono alla ricerca di una Camera CMOS più supportata per Arduino, quella che ho trovato è la LinkSprite JPEG Color.
Il mio problema è se la LinkSprite è la migliore camera per sviluppare su Arduino, vorrei semplicemente scattare una foto e salvarla sull'sd.
Se LinkSprite non è la migliore potete dirmi quale potrei comprare?
uwefed
January 23, 2012, 2:37pm
2
Dimenticalo. L'Arduino non ha la potenza necessaria per farlo.
Ciao Uwe
max246
January 23, 2012, 2:57pm
3
Fare una foto? Ho gia provato con la LinkSprite e riesci a fare le foto.
Scattare una foto e salvare quello che ritorna in un file
max246
January 23, 2012, 3:12pm
4
Se guardi sul sito della LinkSprite c'è un esempio molto semplice e funzionante, invece se usi la library JPEG hai un esempio già fatto.
Allora tu mi consigli di usare la LinkSprite? Perchè a me si è rotta e non sapevo se ricomprare la stessa o passare a qualcos'altro. Alla fine devo solo scattare e salvare su SD.
Per curiosità, quanto ci mette a fare il salvataggio? A me ci impiegava tipo 20-30 sec, sei riuscito a cambiare il bitrate?
legacy:
Per chi non sapesse di cosa stiamo parlando
ahhh dopo 7 post pensavo parlaste di camera da letto
allora non mi interessa
max246
January 23, 2012, 11:29pm
6
Percio I'll tempo di invio tra la camera el a tua scheda non l hai mai fatto?
Volevo aumentare I'll bitrate per avere un trasferimento piu veloce, vedrò allora di ricomprarla e vedere cosa posso fare.
Grazie per l aiuto
max246
January 24, 2012, 8:48am
7
Ah non lo so ho fatto un viaggio CH => UK con l'aereo e ora mi ritorna informazioni tutte confuse
max246
January 24, 2012, 3:36pm
8
Del tipo che mando il comando di reset o altri e mi ritorna una stringa lunga cosi:
B6
80
93
40
C0
96
A1
98
13
69
9
9
B2
C1
C1
15
14
D
E1
E4
AC
90
B4
57
59
5C
A8
2C
AF
D5
17
57
88
AC
6A
D5
E4
5A
A4
B2
B3
1A
6B
45
5
DA
D5
DC
E6
AF
B9
8D
85
9B
49
8D
21
E1
A9
B7
B4
5A
48
Invece dei soliti 5-7 esadecimeli
max246
January 31, 2012, 11:24pm
9
Forrse si è sputtanata con un voltaggio più alto o non lo so.... ma suppongo che sia il viaggio.
La cosa che mi da fastidio è che quando cambi il bitrate dopo non lo tiene in memoria perciò devi rifarlo.
Inizio mese ne compro una nuova
max246
February 1, 2012, 12:09am
10
Ho trovato che sparkfun è quello meno costoso
Dai ti faccio poi sapere a metà mese se tutto funziona
max246
March 3, 2012, 1:19pm
11
Finalmente è arrivata.
Fatto un po di prove e sembra "funzionare" ma mi scrive sull'sd un file da 20 kb che non posso aprire con nessun programma di grafica.
Ho provato questo codice: http://www.sparkfun.com/datasheets/Sensors/Imaging/JPEG%20Camera%20Libraries.zip
Non capisco cosa sbaglio '-.-
system
June 20, 2012, 2:58pm
12
Scusate, ma qualcuno l'ha provata con Arduino UNO rev3?
A me fa delle strisciate strane.
Lavorando sul delay dopo il request dei dati migliora.
La velocità la alscio a 38.400 ma ci impiega un po troppo.
Sapete aiutarmi?
#include <SoftwareSerial.h>
#include <SD.h>
byte incomingbyte;
SoftwareSerial mySerial(6,7); //Configure pin 4 and 5 as soft serial port
int a=0x0000,j=0,k=0,count=0; //Read Starting address
uint8_t MH,ML;
boolean EndFlag=0;
void SendResetCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();
void HiRes();
void MiRes();
void LoRes();
void ImageSize();
void Speed9600();
void Speed38400();
void Speed115200();
File imgFile;
char buffer[20];
uint8_t i;
int led = 9;
void setup()
{
mySerial.begin(38400);
pinMode(10, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
SD.begin(4);
}
void loop()
{
//Speed38400();
//delay(1000);
HiRes();
delay(100);
SendResetCmd();
delay(1000); //After reset, wait 2-3 second to send take picture command
strcpy(buffer, "NICJPG00.JPG");
for (i = 0; i < 100; i++) {
buffer[6] = '0' + i/10;
buffer[7] = '0' + i%10;
// create if does not exist, do not open existing, write, sync after write
if (! SD.exists(buffer)) {
break;
}
}
imgFile = SD.open(buffer, FILE_WRITE);
digitalWrite(led, HIGH);
SendTakePhotoCmd();
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}
byte a[32];
while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();
delay(35); //con tempi piu bassi sembrano esserci piu errori
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
k++;
if((k>5)&&(j<37)&&(!EndFlag)) //portato a 37 e scarto gli ultimi 5
{
if (j<32)
{
a[j]=incomingbyte;
if((a[j-1]==0xFF)&&(a[j]==0xD9)) //Check if the picture is over
EndFlag=1;
count++;
}
j++;
}
}
for(j=0;j<count;j++)
{
// if(a[j]<0x10)
// Serial.print("0");
// Serial.print(a[j],HEX);
imgFile.write(byte(a[j])); //il piu vicino ai jpeg
// trovato anche così imgFile.write((char*)a);
// Serial.print(" ");
} //Send jpeg picture over the serial port
// Serial.println();
//delay(25);
}
imgFile.close();
digitalWrite(led, LOW);
while(1);
}
//Send Reset command
void SendResetCmd()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x26);
mySerial.write(byte(0x00));
}
//Send take picture command
void SendTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(byte(0x00));
}
//Read data
void SendReadDataCmd()
{
MH=a/0x100;
ML=a%0x100;
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write(byte(0x00));
mySerial.write(0x0a);
mySerial.write(byte(0x00));
mySerial.write(byte(0x00));
mySerial.write(MH);
mySerial.write(ML);
mySerial.write(byte(0x00));
mySerial.write(byte(0x00));
mySerial.write(byte(0x00));
mySerial.write(0x20);
mySerial.write(byte(0x00));
mySerial.write(0x0a);
a+=0x20; //address increases 32£¬set according to buffer size
}
void StopTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}
void HiRes()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write(byte(0x00));
mySerial.write(0x19);
mySerial.write(byte(0x00));
}
void LoRes()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write(byte(0x00));
mySerial.write(0x19);
mySerial.write(0x22);
}
void MiRes()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write(byte(0x00));
mySerial.write(0x19);
mySerial.write(0x11);
}
void ImageSize()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x34);
mySerial.write(0x01);
mySerial.write(byte(0x00));
}
void Speed9600()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0xAE);
mySerial.write(0xC8);
}
void Speed38400()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0x2A);
mySerial.write(0xF2);
}
void Speed115200()
{
mySerial.write(0x56);
mySerial.write(byte(0x00));
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0x0D);
mySerial.write(0xA6);
}