Dúvida ligação máquina fotográfica DSLR ao Arduino

Olá pessoal,

O meu nome é Pedro,sou de Barcelos e tenho apenas os conhecimentos básicos de electrónica,que adquiri enquanto frequentei o curso de electrotecnia no secundário (já lá vão 15 anos :roll_eyes: ) sem nunca ter trabalhado na área.

No entanto o bichinho da electrónica continua comigo e recentemente foi despertado por outra das minhas paixões:a fotografia!

Sou um fotografo entusiasta que se dedica sobretudo à macrofotografia e pretendo neste momento construir um sistema para fotografia de alta velocidade,nomeadamente para fotografar gotas de água!Só há relativamente pouco tempo tive conhecimento da existência do Arduino,mas desde aí já li bastante sobre o assunto e apesar de,como disse anteriormente,não ter muitos conhecimentos de electrónica e praticamente nulos de programação,sempre fui bastante autodidacta e sinto-me capaz de construir o tal controlador.

O que pretendo é um sistema baseado num Arduino que me permita controlar uma válvula solenoide,a máquina fotográfica e os flash's...neste momento ainda estou na fase inicial,já vi alguns esquemas eléctricos e já não tenho dúvidas quanto ao circuito para a válvula solenoide,mas ainda não sei muito bem como ligar os flash e a máquina (DSLR Nikon).Sei que tenho que usar optoacopoladores (dois no caso da máquina),mas ainda não vi nenhum circuito que me deixe 100% seguro daquilo que vou fazer.

Alguém me sabe dizer se o circuito que vou colocar a seguir está correcto?Ou sugerem outro?

Nota:Os optoacopoladores serão 4N25!

Um abraço,
Pedro

Ola bem vindo
Parece relativamente fácil de fazer, olhando para o teu circuito pra já só não estou a entender se na parte do flash, o Flash + é a alimentação a todo o flash ou apenas o sinal para fazer o flash disparar, algo como um sinal de comando e não de alimentação.Pergunto isto porque se a idea for desligar a alimentação do flash no foto-acoplador isso será de mais para ele pois ele apenas tolera uns mili-amperes.Necessitaras de um andar de potencia adicional.Se a ideia for apenas fazer o trigger do flash então parece me bem pra já.
Ja escreveste algum código?
Também não dizes o que o circuito tem de fazer em termos programa.

Olá Pedro. Se não se importar de me dizer, qual o modelo exato de sua DSLR?

HugoPT:
Ola bem vindo
Parece relativamente fácil de fazer, olhando para o teu circuito pra já só não estou a entender se na parte do flash, o Flash + é a alimentação a todo o flash ou apenas o sinal para fazer o flash disparar, algo como um sinal de comando e não de alimentação.Pergunto isto porque se a idea for desligar a alimentação do flash no foto-acoplador isso será de mais para ele pois ele apenas tolera uns mili-amperes.Necessitaras de um andar de potencia adicional.Se a ideia for apenas fazer o trigger do flash então parece me bem pra já.
Ja escreveste algum código?
Também não dizes o que o circuito tem de fazer em termos programa.

Obrigado HugoPT!

Na parte do flash é apenas para o fazer disparar quando eu quero,ele será alimentado normalmente pelas 4 pilhas e estará ligado ao Arduino através de um cabo de sincronismo.

Quanto ao código ainda não fiz nada e este nada é mesmo absoluto...nunca fiz nenhum código para Arduino!mas já tenho as pestanas queimadas de tanto estudar sobre o assunto.
Estou mesmo na fase inicial como disse,mas basicamente o que quero que o circuito faça é o seguinte:

1-Inicia o sistema,ainda não sei bem como,mas estou a pensar num botão ligado a um pino do Arduino (?)
Ainda nesta fase também não sei se posso abrir o obturador através do Arduino (?) ou se vou ter que fotografar em Bulb
2-Válvula abre/fecha para que saia uma primeira gota
3-Pausa em milisegundos
4-Válvula abre/fecha novamente para que saia a segunda gota
5-Dispara o flash
6-Fecha o obturador

AlxDroidDev:
Olá Pedro. Se não se importar de me dizer, qual o modelo exato de sua DSLR?

Olá :slight_smile:

Claro que não,é uma Nikon D90...

A máquina e o flash vão ligar ao circuito através dos respectivos cabos com fichas jack macho 3,5 mm...o flash é uma ficha mono e não tenho dificuldade em saber qual é o +,mas a máquina é uma ficha stereo,alguém me consegue dizer qual é o GND/Shutter/Autofocus (isto na ficha macho)

O cabo que a minha máquina utiliza é o Nikon MC-DC2

Olá,
Eu infelizmente sei mais de electrónica que fotografia (a julgar pelas minhas fotos pelo menos Carlos Cardoso | Flickr). Também tenho uma D90 parada lá por casa e não tenho ideia de como funciona o cabo de ligacão. Já tens um?

Assim de repente não tenho a certeza do funcionamento do flash (em tempos andei à ler sobre a D300 e as coisas ficaram confusas), mas sei que podes controlar o flash em avanco e atraso. Ou seja, quando tiras uma foto com tempos de exposicão longos, podes fazer com que o flash bata no inicio da exposicão ou no final. Isto dá o efeito de paragem no tempo... não consigo explicar melhor, só mesmo testando.

No entanto, no teu caso, tu queres tempos de exposicão curtos (daí o flash) para garantir que a foto sai bem focada e por isso acho que é preferível deixar a máquina controlar o flash e tu só controlas o disparo do sistema. Isto, claro está, se apenas usares um flash. Com um sistema coordenado, as coisas complicam exponencialmente.

Já viste isto?

http://arduino.cc/forum/index.php/topic,78336.0.html

Infelizmente creio que a marca era Canon. Mas dá para ver as possibilidades. Neste caso, o utilizador escolhe o delay entre a gota e fotografia para obter o melhor efeito.
Eu tenho ideia que houve mais um post aqui no fórum, mas não encontro. No entanto, isto já foi há mais de um ano. :\

O problema a meu ver é mais no hardware e ligacão do cabo à m´quina. O resto (software) é simples de fazer.

bubulindo:
Olá,
Eu infelizmente sei mais de electrónica que fotografia (a julgar pelas minhas fotos pelo menos Carlos Cardoso | Flickr). Também tenho uma D90 parada lá por casa e não tenho ideia de como funciona o cabo de ligacão. Já tens um?

Assim de repente não tenho a certeza do funcionamento do flash (em tempos andei à ler sobre a D300 e as coisas ficaram confusas), mas sei que podes controlar o flash em avanco e atraso. Ou seja, quando tiras uma foto com tempos de exposicão longos, podes fazer com que o flash bata no inicio da exposicão ou no final. Isto dá o efeito de paragem no tempo... não consigo explicar melhor, só mesmo testando.

No entanto, no teu caso, tu queres tempos de exposicão curtos (daí o flash) para garantir que a foto sai bem focada e por isso acho que é preferível deixar a máquina controlar o flash e tu só controlas o disparo do sistema. Isto, claro está, se apenas usares um flash. Com um sistema coordenado, as coisas complicam exponencialmente.

Já viste isto?

http://arduino.cc/forum/index.php/topic,78336.0.html

Infelizmente creio que a marca era Canon. Mas dá para ver as possibilidades. Neste caso, o utilizador escolhe o delay entre a gota e fotografia para obter o melhor efeito.
Eu tenho ideia que houve mais um post aqui no fórum, mas não encontro. No entanto, isto já foi há mais de um ano. :\

O problema a meu ver é mais no hardware e ligacão do cabo à m´quina. O resto (software) é simples de fazer.

Olá,

Também não sou nenhum expert na fotografia,mas ainda assim sinto-me mais à vontade do que na electrónica XD

Concordo contigo o hardware é uma parte importante para aquilo que quero fazer e preciso de ter a certeza que faço as coisas como deve ser,pois caso contrário corro o risco de fritar o equipamento.

Ainda não tenho o cabo que vai ligar a máquina ao sistema,mas tenho um disparador remoto que é praticamente igual,a única diferença é que em vez de ter uma ficha jack 3.5mm é de 2.5mm.

As fichas são estas:

Máquina

Saída jack 3.5

O problema é que não tenho 100% certeza se a pinagem para o jack é como mostra a figura.Pelo que pesquisei penso que sim,mas na Cannon por exemplo é diferente e estou confuso aí...ás tantas vou ter que abrir um cabo para me certificar.

Já tinha visto o post que referiste e a minha ideia é avançar para algo mais elaborado com 2-3 válvulas e 2-3 flash's (até porque neste momento tenho 2),mas quero começar com algo mais simples primeiro e quando me sentir mais à vontade,então sim,vou avançando aos poucos e talvez chegue a um controlador completo para fotografia de alta velocidade com vários sensores (som,infravermelho,impacto,válvulas solenoide),mas vamos com calma XD para já o que quero é sincronizar uma válvula com máquina/flash.

Até o Júlio César sabia da táctica "Dividir para conquistar"...

Comeca pro conseguires controlar a máquina e como controlar os flashes (continuo a achar que é mais simples ser a máquina fazê-lo) e depois o resto é simples.

Eu encontrei eisto:

http://pinoutdiagram.com/nikon-d90-d3100-d5000-d7000-focus-shutter-mc-dc2-connector-pinout/

Que é o pinout. Se quiseres um cabo por causa do conector, tens isto:

http://www.ebay.co.uk/itm/Remote-Shutter-Control-cord-for-Nikon-D90-D5000-D3100-D7000-MC-DC2-/150894518771?pt=UK_Photography_DigitalCamAccess_RL&hash=item232203a1f3

Ainda mais barato:

http://www.ebay.co.uk/itm/MC-DC2-MCDC2-Remote-Cordfor-Nikon-D90-D5000-D3100-D7000-/190829945627?pt=Camera_Camcorder_Remotes&hash=item2c6e59e31b

http://www.ebay.co.uk/itm/Remote-Shutter-Release-Cord-MC-DC2-for-Nikon-D90-D3100-D5000-/130582896498?pt=UK_Photography_DigitalCamAccess_RL&hash=item1e6758df72

O interesse disto é apenas para teres acesso ao conector.

Qual é o teu flash? Vais precisar dum cabo para isso também....

Os optoacopladores devem funcionar bem... mas não sei exactamente o que está dentro da máquina e o que dizem na net é para ligar dum para o outro. Por isso, acho que é uma boa maneira com o opto-acoplador.

Quando tu tiveres o hardware montado para isto, podes comecar com o código. A minha sugestão é comecares com a funcionalidade primeiro e depois preocupares-te com o interface de utilizador.

Dito isto, também tens de arranjar a electroválvula...

Uma nota...

Tirar fotos a gotas não me excita... já isto:

Já tinha visto o pinout do conector que liga à máquina e o tal disparador remoto que tenho é igual ao do teu primeiro link do ebay,portanto não tenho dúvidas aí,só não estou a ver é como vou saber a correspondência correta do conector para a ficha jack estéreo macho,na outra ponta do cabo.

Tenho dois flah's,um Nikon SB-900 e um SB-700,mas como vou começar apenas com um,vou optar pelo SB-900 pelo facto de ter uma ficha PC Sync incorporada para ligar o cabo que o SB-700 não tem (este,além do cabo,é necessário um Hot Shoe com ficha PC Sync).

Quanto a deixar que a máquina controle o disparo do flash,não me parece a melhor solução porque fico muito limitado e talvez não consiga aquilo que pretendo,passo a explicar:a máquina só permite disparar o flash à primeira ou à segunda cortina,ou seja,logo após a abertura do obturador ou imediatamente antes do fecho do obturador,mas eu quero controlar o timing certo para que ele dispare (colisão entre duas gotas,por ex.) pois no fundo vai ser o clarão emitido pelo flash que vai congelar a acção e não o tempo de exposição (obturador aberto)

Isto pode parecer confuso,mas no fundo é uma questão de timing certo já que tudo se desenvolve num espaço de tempo na ordem dos milissegundos e mesmo utilizando a velocidade máxima que a minha (nossa :smiley: ) máquina permite (1/4 000 segundos) não é suficiente para congelar o movimento.

Acho que era preferível controlar apenas o flash e a válvula com o Arduino e fotografar ás escuras com a velocidade de obturador definida como Bulb (abre o obturador quando carregas no botão do obturador e só fecha quando largares) ou mesmo definir 2-3 segundos e deixar que o clarão emitido pelo flash congele o movimento no timing certo,isto com o SB-900 na potência mínima (é mesmo mínima) resulta num clarão que dura aproximadamente 1/40 000 segundos,uma velocidade 10x maior que a permitida pela máquina.
Para perceberes melhor isto das velocidades do flash,vê aqui: Capability of flash units for high speed photography

O controlador da Cognysis (também têm um sistema para líquidos) é muito bom,mas também é muito caro e eu não ganho nada com a fotografia,antes pelo contrário :smiley: Com os teus conhecimentos podes meter mãos à obra e fazer um parecido :slight_smile:

Concordo que fotografar uma simples gota de água não é nada de mais,mas eu queria elevar um pouco a fasquia...Já ouviste falar do Markus Reugels? Dá uma espreitadela: Markus Reugels | Flickr

Resumindo,acho que tenho tudo o que preciso para meter mãos à obra menos os cabos e a válvula,por falar em válvula,que acham deste circuito:

Vou seguir o teu conselho e vou tentar montar o hardware com leds e começar a escrever código para ver no que dá e depois viro-me para a interface.Uma dúvida,como não tenho a válvula,posso testar o funcionamento do circuito com led?

Pedro_Silva:
Já tinha visto o pinout do conector que liga à máquina e o tal disparador remoto que tenho é igual ao do teu primeiro link do ebay,portanto não tenho dúvidas aí,só não estou a ver é como vou saber a correspondência correta do conector para a ficha jack estéreo macho,na outra ponta do cabo.

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

Pedro_Silva:
Quanto a deixar que a máquina controle o disparo do flash,não me parece a melhor solução porque fico muito limitado e talvez não consiga aquilo que pretendo,passo a explicar:a máquina só permite disparar o flash à primeira ou à segunda cortina,ou seja,logo após a abertura do obturador ou imediatamente antes do fecho do obturador,mas eu quero controlar o timing certo para que ele dispare (colisão entre duas gotas,por ex.) pois no fundo vai ser o clarão emitido pelo flash que vai congelar a acção e não o tempo de exposição (obturador aberto)

Isto pode parecer confuso,mas no fundo é uma questão de timing certo já que tudo se desenvolve num espaço de tempo na ordem dos milissegundos e mesmo utilizando a velocidade máxima que a minha (nossa :smiley: ) máquina permite (1/4 000 segundos) não é suficiente para congelar o movimento.

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

Tu obviamente já pesquisaste isto... eu não, e o que dizes faz sentido.

Pedro_Silva:
Acho que era preferível controlar apenas o flash e a válvula com o Arduino e fotografar ás escuras com a velocidade de obturador definida como Bulb (abre o obturador quando carregas no botão do obturador e só fecha quando largares) ou mesmo definir 2-3 segundos e deixar que o clarão emitido pelo flash congele o movimento no timing certo,isto com o SB-900 na potência mínima (é mesmo mínima) resulta num clarão que dura aproximadamente 1/40 000 segundos,uma velocidade 10x maior que a permitida pela máquina.
Para perceberes melhor isto das velocidades do flash,vê aqui: Capability of flash units for high speed photography

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.

Pedro_Silva:
Concordo que fotografar uma simples gota de água não é nada de mais,mas eu queria elevar um pouco a fasquia...Já ouviste falar do Markus Reugels? Dá uma espreitadela: Markus Reugels | Flickr

Não gosto. :\

Pedro_Silva:
Resumindo,acho que tenho tudo o que preciso para meter mãos à obra menos os cabos e a válvula,por falar em válvula,que acham deste circuito:

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.

Pedro_Silva:
Vou seguir o teu conselho e vou tentar montar o hardware com leds e começar a escrever código para ver no que dá e depois viro-me para a interface.Uma dúvida,como não tenho a válvula,posso testar o funcionamento do circuito com led?

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...

Mas ainda falta muito para isso ficar pronto.

bubulindo:
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?

bubulindo:
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

bubulindo:
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.

bubulindo:
Não gosto. :\

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

bubulindo:
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 :wink:

bubulindo:
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...

bubulindo:
Mas ainda falta muito para isso ficar pronto.

Acho que aqui dizes muita coisa :astonished: ainda tenho muita pedra para partir!

Obrigado pela tua disponibilidade em ajudar!

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

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.

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.

bubulindo:
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: Tropfenfotografie Setup, Aufbau und Technik

bubulindo:
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...

bubulindo:
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: 16 X 2 LCD Keypad Shield for Arduino - LinkSprite Playgound

È 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!

bubulindo:
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:

//
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);
 }

bubulindo:
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

Pedro_Silva:
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.

Pedro_Silva:
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

Pedro_Silva:
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ê.

Pedro_Silva:
Parece-me que estou com um problema com o LCD Shield que comprei,é o modelo 'A' aqui: 16 X 2 LCD Keypad Shield for Arduino - LinkSprite Playgound

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.

Pedro_Silva:
È 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

Pedro_Silva:
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.

Pedro_Silva:
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?

//
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. :slight_smile:
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

Pedro_Silva:
Muito bom o trocadilho,LOL

Não estava a fazer um trocadilho... uma das minhas ideias seria mesmo apanhar os meus gatos desprevenidos. LOL

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...

//
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());
    }


 }

bubulindo:
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. :slight_smile:
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

Não fiques assim... o teu código também funciona, mas não é muito flexível por causa dos delays.

Este é um pouco mais complexo, mas após compreenderes o objectivo torna-se simples.

Reparei que a parte da sequência estava desalinhada, se meteres alinhado talvez consigas ver melhor.
Os bits são vistos da direita para a esquerda, ou seja, o bit mais à direita é o zero, o seguinte à o um, etc... Esses bits indicam o estado das luzes ou válvula em cada momento. Como podes ver, no primeiro estado a lampada externa (que ainda não tens no teu sistema) está ligada para tu preparares tudo. Depois o estado 1 diz-te que a lâmpada está apagada e a válvula e obturador estão abertos. Depois apenas o obturador, depois o obturador e a válvula.

No setup tens a definicão da sequencia. Onde eu escrevi a explicacão da sequencia, o numero do estado é o indice do vector sequencia_pinos e o valor que eu coloquei é visto por de cima para baixo. Ou seja:

estado zero - 0b00000001
estado um - 0b00000110
estado dois - 0b00000100

... estás a ver a mecânica?

O vector estado_tempos indica o tempo que demora a passar de estado para estado.
Hoje talvez tenha algum tempo para ver isto por casa com uns leds e se a sequencia funciona (ontem usei um bocado de código semelhante para simular um encoder, por isso deve dar).

bubulindo:
Não fiques assim... o teu código também funciona, mas não é muito flexível por causa dos delays.

Este é um pouco mais complexo, mas após compreenderes o objectivo torna-se simples.

Reparei que a parte da sequência estava desalinhada, se meteres alinhado talvez consigas ver melhor.
Os bits são vistos da direita para a esquerda, ou seja, o bit mais à direita é o zero, o seguinte à o um, etc... Esses bits indicam o estado das luzes ou válvula em cada momento. Como podes ver, no primeiro estado a lampada externa (que ainda não tens no teu sistema) está ligada para tu preparares tudo. Depois o estado 1 diz-te que a lâmpada está apagada e a válvula e obturador estão abertos. Depois apenas o obturador, depois o obturador e a válvula.

No setup tens a definicão da sequencia. Onde eu escrevi a explicacão da sequencia, o numero do estado é o indice do vector sequencia_pinos e o valor que eu coloquei é visto por de cima para baixo. Ou seja:

estado zero - 0b00000001
estado um - 0b00000110
estado dois - 0b00000100

... estás a ver a mecânica?

O vector estado_tempos indica o tempo que demora a passar de estado para estado.
Hoje talvez tenha algum tempo para ver isto por casa com uns leds e se a sequencia funciona (ontem usei um bocado de código semelhante para simular um encoder, por isso deve dar).

AHH,da direita para a esquerda :slight_smile: era isso que me estava a fazer confusão pois estava a tentar ler ao contrário,assim já estou a ver melhor,mas aquele primeiro "0" da esquerda e o "b",o que significam?

Vou estar uns dias sem internet e em principio só posso continuar isto no fim de semana,mas volto aqui logo que possa :wink:

o 0b é para indicar ao arduino que o numero que está à frente é para ser pensado como um numero binário e não um inteiro. Se nõa indicares isso, o arduino pensa que aquilo é um numero inteiro na ordem dos milhões. :wink:

bubulindo:
... depois é uma questão de adicionar o LCD. Isso será o mais complicado. :\ LOL

Olá :slight_smile:

Estive a ver onde conseguia chegar na configuração e nos menus do lcd,mas não me safo :astonished: é mesmo complicado para mim,podes abrir um pouco o caminho?Sozinho está visto que não vou lá!

Para começar tens de ter teclas... tendo isso, podes definir o que é que elas fazem.

Por exemplo, ter um cursor para andar para cima e outra para baixo, ou só uma para andar em frente e dar a volta. Uma tecla para cancelar e uma tecla para confirmar será o minimo.

Depois tens de definir a árvore dos menus. Depois torna-se mais fácil de codificar pois dá para ver as interacções que são necessárias para mexer nos menus. :slight_smile:

Começa por aí e depois eu coloco aqui um exemplo (genérico) para implementar um sistema de menus.

Nota também que os menus podem ocupar imenso espaço de memória se pretenderes colocar imensas strings com descrições do menu. Por isso acho melhor fazer algo bem simples no menu, ou então usar indices em vez de strings de texto.