Go Down

Topic: Dúvida ligação máquina fotográfica DSLR ao Arduino (Read 3 times) previous topic - next topic

Pedro_Silva


Multimetro... Eventualmente vais querer cortar o jack estéreo e usar os fios para garantir que não tens problemas de ligações.



Se ligar os fios directamente não há problema?



Ok... colisão entre duas gotas? Como assim?



Algo deste género,são colisões entre duas ou mais gotas: http://www.google.pt/search?hl=pt-PT&q=water+drop+collision&bav=on.2,or.r_qf.&bvm=bv.45645796,d.d2k&biw=1366&bih=606&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=Iqx6UfSgDKir7AaQx4HYDw



Sim, faz sentido. Se os números estiverem correctos. Mas então, para que queres controlar a máquina? A luz vai definir tudo com esta estratégia. Então apenas tens de controlar os flashs e a gota.



Vejo como vantagem poder controlar a máquina,o facto de poder ir apertando o tempo de exposição à medida que vou afinando o sistema e isso vai-me permitir trabalhar com mais luz ambiente.Outra vantagem é não ter que me preocupar em estar sempre com o comando na mão para abrir e fechar o obturador,o sistema fica mais autónomo,digámos.Mas é perfeitamente possível fazer o que quero sem controlar a máquina,o preço será trabalhar na escuridão.



Não gosto. :\



Gostos não se discutem,mas dá para ter uma ideia do que pretendo.


Sim, isso funciona para a válvula. Nota que a válvula não vai funcionar (ou dificilmente) com 5V do Arduino. Logo vais precisar duma fonte externa. Dito isto, se meteres um optoacoplador a activar a válvula será muito mais seguro.


Será uma válvula de 12V alimentada com pilhas...vou estudar a dica do optoacoplador  ;)



Sim. Podes testar tudo com LEDs.

Algumas dicas:
NÃO USES O DELAY!!! ISSO NÃO SERVE PARA O QUE QUERES.
O millis ou micros talvez resultem... mas se usares os timers internos consegues resultados mais rápidos (pode não ser necessariamente o que pretendes).
Não uses o digitalWrite.
Pensa se pretendes ter um interface série ou um interface de botões e um LCD... Um interface série talvez seja mais simples de implementar... mas por outro lado é pior para usar. E tens de ter o computador por perto... o que estraga o plano da escuridão.

Com teclas ou uma espécie de encoder talvez seja simples de fazer isto. Uns quantos botões para escolher a variável que pretendes alterar... talvez diferentes modos de disparo...



Posso colocar um led no lugar da válvula para testar?Não estou a ver bem como fazer.

Sem dúvida que é muito mais prático poder operar o sistema através de um LCD com botões e esse será o caminho a seguir...Qual te parece melhor um LCD Shield  já com botões ou comprar LCD e botões separadamente e montar à posteriori?Por acaso já tenho um LCD Siheld 16x2...



Mas ainda falta muito para isso ficar pronto.


Acho que aqui dizes muita coisa  :smiley-eek: ainda tenho muita pedra para partir!

Obrigado pela tua disponibilidade em ajudar!

bubulindo

Se queres ver a correspondência entre o pino que liga na máquina e o contacto do Jack usas um multimetro. A que te referes quando dizes ligar os fios directamente?
Em todo o caso, acho que não deves usar o jack e deves usar os fios directamente.

As fotos parecem-me todas iguais. Não leves a mal, mas não vejo distincão entre uma gota a bater na água e várias gotas. No entanto, isso são gostos e não importa para o proposito do projecto.

Ok... Mas se o tempo de abertura da máquina é demasiado grande ao ponto de quereres controlar a exposicão só com o flash, terás sempre de trabalhar no escuro para obteres os resultados que queres. No entanto, teres controlo da abertura pode permitir-te maior flexibilidade... e por mais um contacto, não é nada de extraordinário de se fazer.

12V e pilhas são dois termos que não ligam muito bem... Podes ter problemas de corrente ao tentar activar a válvula. Até porque não vais ter o Arduino alimentado pelo computador (lembra-te que o computador emite luz que pode facilmente estragar a exposicão.

O LCD shield é muito prático de utilizar e tem uma vantagem que é o controlo do backlight do LCD. Ao disparares uma sequência, podes desligar o backlight do LCD, esperar um pouco e iniciar tudo de seguida tendo garantido que estás em escuridão. Uma possibilidade, apesar de gastar mais hardware, até seria ter o Arduino a controlar todo o setup.
Ou seja, tinhas a válvula para soltar gotas, o controlo do flash, controlo do disparo e podias adicionar uma luz externa de 230V controlada por relé que era desligada sempre que quisesses bater a foto. Tu vais precisar duma boa luz para fazer o foco da foto, logo essa funcionalidade facilitaria o processo. Em vez de fazeres o setup, desligares a luz da sala e voltares a ligar depois de terminada a foto.

Se pesquisares na net sobre como ligares LEDs no Arduino, encontras imenso. Não precisas de muito, apenas uma resistência por LED.

Faz um bom plano do que pretendes antes de comecares o software para poderes dividir tudo por funcões.

Este até é um projecto que tem algum interesse para mim... mas não para fotografar gotas. Mais para apanhar os meus gatos... LOL
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pedro_Silva

#12
Apr 28, 2013, 02:28 pm Last Edit: Apr 28, 2013, 02:31 pm by Pedro_Silva Reason: 1

Se queres ver a correspondência entre o pino que liga na máquina e o contacto do Jack usas um multimetro. A que te referes quando dizes ligar os fios directamente?
Em todo o caso, acho que não deves usar o jack e deves usar os fios directamente.


OK,já percebi,basta testar a continuidade dos fios.
Quanto a ligar os fios directamente,o que queria dizer era cortar o jack e fazer a ligação dos fios directamente no circuito ficando o cabo sempre ligado e depois era só ligar na máquina...não sei se me faço entender.



As fotos parecem-me todas iguais. Não leves a mal, mas não vejo distincão entre uma gota a bater na água e várias gotas. No entanto, isso são gostos e não importa para o proposito do projecto.



Acreditas que já tive a mesma opinião que tu?Tive mesmo e continuo a achar que fazer este tipo de imagens continuamente se torna monótono e não é isso que pretendo,o que quero é experimentar coisas novas na fotografia.

De qualquer forma para teres ideia da colisão entre gotas que falei vê estes vídeos: http://www.t-braeuning.de/index.php?ste=hsmv&lan=en



12V e pilhas são dois termos que não ligam muito bem... Podes ter problemas de corrente ao tentar activar a válvula. Até porque não vais ter o Arduino alimentado pelo computador (lembra-te que o computador emite luz que pode facilmente estragar a exposicão.



Então vou ter que procurar outra solução,talvez encontre uma fonte de alimentação barata...



O LCD shield é muito prático de utilizar e tem uma vantagem que é o controlo do backlight do LCD. Ao disparares uma sequência, podes desligar o backlight do LCD, esperar um pouco e iniciar tudo de seguida tendo garantido que estás em escuridão. Uma possibilidade, apesar de gastar mais hardware, até seria ter o Arduino a controlar todo o setup.
Ou seja, tinhas a válvula para soltar gotas, o controlo do flash, controlo do disparo e podias adicionar uma luz externa de 230V controlada por relé que era desligada sempre que quisesses bater a foto. Tu vais precisar duma boa luz para fazer o foco da foto, logo essa funcionalidade facilitaria o processo. Em vez de fazeres o setup, desligares a luz da sala e voltares a ligar depois de terminada a foto.



Parece-me que estou com um problema com o LCD Shield que comprei,é o modelo 'A' aqui: http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino

È o seguinte,depois de encaixar o LCD no Arduino fico sem acesso ás portas do mesmo...vou ter que encontrar uma solução para isto,tens alguma sugestão?

A ideia de adicionar uma luz externa ao setup é realmente muito bem pensado e interessante!



Se pesquisares na net sobre como ligares LEDs no Arduino, encontras imenso. Não precisas de muito, apenas uma resistência por LED.

Faz um bom plano do que pretendes antes de comecares o software para poderes dividir tudo por funcões.



Bem acho que está na hora de apresentar algum trabalho,estive a testar com leds e resistências e escrevi um código para ver se consigo aquilo que quero...de notar que nunca programei nenhum Arduino e há 3-4 semanas atrás nem sabia o que isso era,portanto o código que escrevi pode não fazer sentido nenhum,mas aparentemente pelo que observo no funcionamento dos leds,faz aquilo que pretendo.
Segue o código:

Code: [Select]
//
unsigned long time;

const int pushButton = 13;  //botão de inicio ligado ao pinp 13
const int cameraPin = 10;   //shutter da máquina ligado ao pino 10
const int valvulaPin = 11;  //válvula ligada ao pino 11
const int flashPin = 12;    //flash ligado ao pino 12

//

void setup()
{
   pinMode(pushButton,INPUT);    //inicia o botão como input
   pinMode(cameraPin,OUTPUT);    //inicia o shutter como output
   pinMode(valvulaPin,OUTPUT);   //inicia a válvula como output
   pinMode(flashPin,OUTPUT);     //inicia o flash como output

    digitalWrite(pushButton,HIGH);   //inicia o programa ao pressionar o botão
    digitalWrite(cameraPin,HIGH);    //abre o obturador no modo bulb
    delay(10);                       //esta pausa é só para garantir que o obturador está completamente aberto
    digitalWrite(valvulaPin,HIGH);   //abre a vávula
    delay(200);                      //tameanho da gota 1
    digitalWrite(valvulaPin,LOW);    //fecha a válvula
    delay(360);                      //pausa para a gota um cair dentro do recipiente
    digitalWrite(valvulaPin,HIGH);   //abre novamente a válvula
    delay(50);                       //tamanho da gota 2
    digitalWrite(valvulaPin,LOW);    //fecha a válvula
    delay(400);                      //pausa pra gota 2 colidir com gota 1
    digitalWrite(flashPin,HIGH);     //dispara o flash
    delay(5);                        //muito pequena pausa
    digitalWrite(flashPin,LOW);      //deliga sinal para flash
    digitalWrite(cameraPin,LOW);     //fecha obturador
     
}

void loop()
{
Serial.print("Time: ");
time = millis();
Serial.println(time);
delay(1000);
}




Este até é um projecto que tem algum interesse para mim... mas não para fotografar gotas. Mais para apanhar os meus gatos... LOL


Muito bom o trocadilho,LOL

bubulindo


OK,já percebi,basta testar a continuidade dos fios.
Quanto a ligar os fios directamente,o que queria dizer era cortar o jack e fazer a ligação dos fios directamente no circuito ficando o cabo sempre ligado e depois era só ligar na máquina...não sei se me faço entender.

Era isso que eu estava a dizer. O jack fica com maus contactos e não é fácil de meter numa placa.


Acreditas que já tive a mesma opinião que tu?Tive mesmo e continuo a achar que fazer este tipo de imagens continuamente se torna monótono e não é isso que pretendo,o que quero é experimentar coisas novas na fotografia.

Na boa... como disse, também dá para apanhar os meus gatos. LOL


Então vou ter que procurar outra solução,talvez encontre uma fonte de alimentação barata...

Isso não será difícil, creio... um bom carregador de telemóveis talvez dê.


Parece-me que estou com um problema com o LCD Shield que comprei,é o modelo 'A' aqui: http://linksprite.com/wiki/index.php5?title=16_X_2_LCD_Keypad_Shield_for_Arduino

Pois... percebi isso agora. Talvez arranjar um shield que dê para soltar componentes e colocar os fios a sair da parte de trás. Ou usar um mega para teres acesso aos pinos da parte de trás.


È o seguinte,depois de encaixar o LCD no Arduino fico sem acesso ás portas do mesmo...vou ter que encontrar uma solução para isto,tens alguma sugestão?

Podes também pesquisar por uns LCDs que trazem um módulo de comunicação SPI ou I2C. Assim só precisas de 2 pinos (o que é muito bom, tendo em conta que o LCD te leva 7).
http://www.ebay.co.uk/itm/New-Blue-IIC-I2C-TWI-2004-20x4-Serial-LCD-Module-Display-Arduino-compatible-/151003806901?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item2328873cb5


A ideia de adicionar uma luz externa ao setup é realmente muito bem pensado e interessante!

Pelo menos poupava-te trabalho. Mas adiciona um pouco mais de complicação... Pode ser um upgrade interessante mais à frente talvez, já que não é muito complicado de realizar e não interfere com as sequências.


Bem acho que está na hora de apresentar algum trabalho,estive a testar com leds e resistências e escrevi um código para ver se consigo aquilo que quero...de notar que nunca programei nenhum Arduino e há 3-4 semanas atrás nem sabia o que isso era,portanto o código que escrevi pode não fazer sentido nenhum,mas aparentemente pelo que observo no funcionamento dos leds,faz aquilo que pretendo.


E se for algo assim?

Code: [Select]
//
unsigned long time;

#define PASSOS     8

const char pushButton = 13;  //botão de inicio ligado ao pinp 13
const char cameraPin = 10;   //shutter da máquina ligado ao pino 10
const char valvulaPin = 11;  //válvula ligada ao pino 11
const char flashPin = 12;    //flash ligado ao pino 12

//sequências...
/*
As sequências são definidas por bits. cada unsigned char tem 8 bits.
Estados                  0     1    2     3    4    5     6     7
bit 0 - Luz exterior  1 -- 0 -- 0 -- 0 -- 0 -- 0 -- 0 -- 1
bit 1 - válvula          0 -- 0 -- 0 -- 1 -- 0 -- 0 -- 0 -- 0
bit 2 - obturador      0 -- 0 -- 0 -- 0 -- 1 -- 1 -- 1 -- 0
bit 3 - flash.            0 -- 0 -- 0 -- 0 -- 0 -- 1 -- 0 -- 0

*/
unsigned char sequencia_pinos[8]; //imagine que a sequência tem 8 estados
unsigned long sequencia_tempo[8]; //tempos entre sequências...

void executa_sequencia(unsigned long start) {
   unsigned char seq_counter = 0;
   
   for (int i = 0; i < PASSOS; i++) { //percorre as sequencias
      do {
          digitalWrite(luz_exterior, (sequencia_pinos[i] & 0x1));
          digitalWrite(valvula, (sequencia_pinos[i] >> 1) & 0x1);
          digitalWrite(obturador, (sequencia_pinos[i] >> 2) & 0x1);
          digitalWrite(flash, (sequencia_pinos[i] >> 3) & 0x1);
      }while (millis() - start <= sequencia_tempos[i]); 
      start = millis(); //reinicializa temporizacção
   }//end for   
       
}

void setup()
{
//inicializa sequencia de pinos.
   sequencia_pinos[0] = 0b00000001;
   sequencia_pinos[1] = 0b00000000;
   sequencia_pinos[2] = 0;
   sequencia_pinos[3] = 0b00000010;
   sequencia_pinos[4] = 0b00000100;
   sequencia_pinos[5] = 0b00001100;
   sequencia_pinos[6] = 0b00000100;
   sequencia_pinos[0] = 0b00000001;

//inicializa sequencia de tempos. 
   sequencia_tempos[0] = 1000; //1000 para testar e ver se tudo funciona como deve ser.
   sequencia_tempos[1] = 1000;
   sequencia_tempos[2] = 1000;
   sequencia_tempos[3] = 1000;
   sequencia_tempos[4] = 1000;
   sequencia_tempos[5] = 1000;
   sequencia_tempos[6] = 1000;
   sequencia_tempos[7] = 1000;
   sequencia_tempos[8] = 1000;


   pinMode(pushButton,INPUT);    //inicia o botão como input
   pinMode(cameraPin,OUTPUT);    //inicia o shutter como output
   pinMode(valvulaPin,OUTPUT);   //inicia a válvula como output
   pinMode(flashPin,OUTPUT);     //inicia o flash como output

     
}


void loop() {
    if (digitalRead(pushButton) == 1) { //carregaste no botão
        executa_sequencia(millis());
    }


}




Nota que isto tem bugs, mas é muito mais flexível pois podes aumentar o numero de saidas e tempos à sequência. Se perceberes como é feita a configuração das saídas com os tempos estás lançado. :)
Tenta ver se compila e se faz o que pretendes (coloca uma sequência simples com alterações de luzes em todos os níveis para testar)
Se isto funcionar, depois é uma questão de adicionar o LCD. Isso será o mais complicado. :\ LOL


Muito bom o trocadilho,LOL

Não estava a fazer um trocadilho... uma das minhas ideias seria mesmo apanhar os meus gatos desprevenidos. LOL
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pedro_Silva

Bem,acho que ando a puxar demais pela cabeça...ainda não consegui perceber como controlar as sequências com oito bits,consigo perceber a ideia de ver isto como sequências e estados que se vão repetindo,mas a sequência de pinos não consigo compreender...

Consegui por o código a compilar,mas não o compreendi e não consigo trabalhar com ele...

Code: [Select]
//
unsigned long time;

#define PASSOS     8

const char luz_exteriorPin = 9;
const char pushButtonPin = 13;  //botão de inicio ligado ao pinp 13
const char cameraPin = 10;   //shutter da máquina ligado ao pino 10
const char valvulaPin = 11;  //válvula ligada ao pino 11
const char flashPin = 12;    //flash ligado ao pino 12

//sequências...
/*
As sequências são definidas por bits. cada unsigned char tem 8 bits.
Estados                  0     1    2     3    4    5     6     7
bit 0 - Luz exterior     1 -- 0 -- 0 -- 0 -- 0 -- 0 -- 0 -- 1
bit 1 - válvula          0 -- 1 -- 0 -- 1 -- 0 -- 0 -- 0 -- 0
bit 2 - obturador        0 -- 1 -- 1 -- 1 -- 1 -- 1 -- 1 -- 0
bit 3 - flash.           0 -- 0 -- 0 -- 0 -- 0 -- 1 -- 0 -- 0

*/
unsigned char sequencia_pinos[8]; //imagine que a sequência tem 8 estados
unsigned long sequencia_tempos[8]; //tempos entre sequências...

void executa_sequencia(unsigned long start) {
   unsigned char seq_counter = 0;
   
   for (int i = 0; i < PASSOS; i++) { //percorre as sequencias
      do {
          digitalWrite(luz_exteriorPin, (sequencia_pinos[i] & 0x1));
          digitalWrite(valvulaPin, (sequencia_pinos[i] >> 1) & 0x1);
          digitalWrite(cameraPin, (sequencia_pinos[i] >> 2) & 0x1);
          digitalWrite(flashPin, (sequencia_pinos[i] >> 3) & 0x1);
      }while (millis() - start <= sequencia_tempos[i]); 
      start = millis(); //reinicializa temporizacção
   }//end for   
       
}

void setup()
{
//inicializa sequencia de pinos.
   sequencia_pinos[0] = 0b00000001;
   sequencia_pinos[1] = 0b00000000;
   sequencia_pinos[2] = 0;
   sequencia_pinos[3] = 0b00000010;
   sequencia_pinos[4] = 0b00000100;
   sequencia_pinos[5] = 0b00001100;
   sequencia_pinos[6] = 0b00000100;
   sequencia_pinos[0] = 0b00000001;

//inicializa sequencia de tempo. 
   sequencia_tempos[0] = 1000; //1000 para testar e ver se tudo funciona como deve ser.
   sequencia_tempos[1] = 1000;
   sequencia_tempos[2] = 1000;
   sequencia_tempos[3] = 1000;
   sequencia_tempos[4] = 1000;
   sequencia_tempos[5] = 1000;
   sequencia_tempos[6] = 1000;
   sequencia_tempos[7] = 1000;
   sequencia_tempos[8] = 1000;


   pinMode(pushButtonPin,INPUT);    //inicia o botão como input
   pinMode(cameraPin,OUTPUT);    //inicia o shutter como output
   pinMode(valvulaPin,OUTPUT);   //inicia a válvula como output
   pinMode(flashPin,OUTPUT);     //inicia o flash como output

     
}


void loop() {
    if (digitalRead(pushButtonPin) == 1) { //carregaste no botão
        executa_sequencia(millis());
    }


}




Nota que isto tem bugs, mas é muito mais flexível pois podes aumentar o numero de saidas e tempos à sequência. Se perceberes como é feita a configuração das saídas com os tempos estás lançado. :)
Tenta ver se compila e se faz o que pretendes (coloca uma sequência simples com alterações de luzes em todos os níveis para testar)
Se isto funcionar, depois é uma questão de adicionar o LCD. Isso será o mais complicado. :\ LOL



Se me puderes abrir os olhos ali na parte do void setup()  e na sequência de pinos talvez compreenda...
Adicionar o LCD é ainda mais complicado ainda?
Então acho que é melhor ficar por aqui,LOL

Go Up