LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: bmventura em 09 de Setembro de 2013, 21:17
-
Boas noites,
Queria fazer um programador horário com o arduino UNO.
Qual a melhor solução? É possivel fazer com software ou
tenho de comprar algum shield?
Cumprimentos.
-
Podes usar um timer para te gerar uma base de tempo, mas o ideal será usar um RTC com bateria de backup, o mais simples é mais que batido DS1703, que fala i2c.
Dependendo do que queres controlador é muito provavel que precises de relés ou triacs.
-
Existem uns módulos com o DS1307 e todos os componentes necessários, incluindo a pilha. Compras um desses e fazes o relógio em muito pouco tempo.
-
Não é para fazer nada especifico, apenas para aprender...
vou pesquisar os módulos.
Obrigado!
-
Tens este, com um tutorial fixe para o arduino:
http://bildr.org/2011/03/ds1307-arduino/ (http://bildr.org/2011/03/ds1307-arduino/)
-
smp podes arranjar um shield destes...pelo menos a parte do hardware estava já lá toda
http://www.g7electronica.net/pt/stock-off-30set/604-7-segment-shield.html (http://www.g7electronica.net/pt/stock-off-30set/604-7-segment-shield.html)
-
Lol oh Hugu, o que ele quer é uma maneira do Arduino saber as horas, não de as mostrar. Não bebes mai nada hoje! :P
-
ehhehhehhe
Exactamente ;)
Além do lcd ser bastante mais barato!
Obg
Lol oh Hugu, o que ele quer é uma maneira do Arduino saber as horas, não de as mostrar. Não bebes mai nada hoje! :P
-
Olá,
Aqui à tempos decidi fazer um relógio com o Arduino Uno. Mas ele é todo descodificado a nível de hardware , ou seja , o arduino só gera o clock. Em anexo encontra-se o projeto do relógio ( ele abre com o Proteus ), e os ficheiros com o código do arduino.
Na simulação do relógio no Proteus o relógio vai parecer avançar com pouca velocideade ( muito lento ) . Isto acontece porque o software de demora a simular . Se se usar este código de arduino com este hardware ao experimentar sem ser em simulação ele vai funcionar à velocidade correcta. Ou se se quiser modificar esta velocidade basta aumentar ou diminuir os "delays" no código do arduino.
No Proteus, o ficheiro .hex com o código do arduino deve ser injetado no atmega 328... Para isso: segundo botão do rato no atmega328 e selecionar : edit properties. Dentro da janela Edit Properties, em "Program File" seleccionar o ficheiro .hex
É tudo.
Espero ter ajudado.
-
::)
Qual é a lógica de meter um Arduino nesse projeto?!?!?!?
Edit:
E qual é a lógica de ressuscitar um tópico com 5 anos?!?!?!?
-
Olá, eu quando comecei o projeto estava com ideias em fazer por programação do arduino , só que o arduino uno não tem portas digitais suficientes para lidar com tantos catodos digitais então eu acabei por fazer quase um relógio todo com contadores e descodificadores e ficou o arduino só a gerar o clock . Claro que há maneiras mais fáceis de gerar o clock e mais baratas, mas para incluir o arduino neste projeto, ficou assim.
-
595's ou multiplexing dá para ligar segmentos mais que suficientes para um relógio.
Acho que devias re-pensar o projecto.
-
Olá,
Pois, mas na altura eu só tinha os contadores e os descodificadores binários aqui em casa para testar e acabou por ficar assim . Não precisei de apresentar a ninguém este projeto. Fi-lo só para me entreter um bocado e ao fazer , tinha que fazer com os componentes que tinha :-)
-
E estou a dizer isto numa vertente didática, facilmente fazes multiplexing com meia duzia de transistores banais.
-
Sim, mas eu agora já não estou muito interessado em desenvolver melhor este relógio. Mas obrigado pela dica.
-
Vivas Joanito,
Então e tens feito coisas mais recentemente, ou entretanto perdeste o interesse nesta área?
-
Olá, eu quando comecei o projeto estava com ideias em fazer por programação do arduino , só que o arduino uno não tem portas digitais suficientes para lidar com tantos catodos digitais então eu acabei por fazer quase um relógio todo com contadores e descodificadores e ficou o arduino só a gerar o clock . Claro que há maneiras mais fáceis de gerar o clock e mais baratas, mas para incluir o arduino neste projeto, ficou assim.
Just for the record, por um pino high e low com um delay pelo meio não produz um clock particularmente estavel.
Não compreendo o código abaixo, mas gera um clock de 4 MHz no pino 11 de um arduino nano, tenho a certeza que funciona também no uno e não necessita de ter absolutamente nada a correr dentro da função loop(). Não estou certo se o prescaler permite descer até 1 Hz
setup()
{
pinMode(11,OUTPUT);
TCCR2A = ((1 << WGM21) | (1 << COM2A0));
TCCR2B = (1 << CS20); // prescaler = 1
TIMSK2 = 0;
OCR2A = 1;
}
A minha maior duvida é onde é que é dito que o output é para o pino 11.
-
ja agora uma achega visto que realmente usar um arduino para nao comprar 2 ou 3 transistores para fazer um clock, tem que se lhe diga... ;)
http://cosinekitty.com/digitalclock/ (http://cosinekitty.com/digitalclock/)
se 3 resistencias e 1 transistor nao for suficientemente bom, deixo aqui uma soluçao mais "em conta"... ;)
http://transistorclock.com/ (http://transistorclock.com/)
-
Olá, acho que falta qualquer funçãozita aí que faça saír o valor pelo pino 11, Vasco.
Gostei do relógio só com transistores, LVirtual. Deve haver tambem um relogio só com relés ;-) Já imaginas-te o som daqueles relés todos a baterem : tic tac, tic tac nem era preciso nada para fazer o bip a cada segundo que passasse, os próprios relés já o faziam ;-)
-
Olá , sim continuo com interesse nesta área :-)
Porque é que um HIGH com latencia seguido de um LOW com latencia num loop não geram um bom clock ?
-
Olá, acho que falta qualquer funçãozita aí que faça saír o valor pelo pino 11, Vasco.
Gostei do relógio só com transistores, LVirtual. Deve haver tambem um relogio só com relés ;-) Já imaginas-te o som daqueles relés todos a baterem : tic tac, tic tac nem era preciso nada para fazer o bip a cada segundo que passasse, os próprios relés já o faziam ;-)
imagino sim. basta ires ás estaçoes de comboio que tenham relaogios daqueles feitos com segmentos amarelos e vais ouvir o barulho das bobines dos segmentos a bater a cada segundo. adoro é no virar da hora :) batem todos quasem em simultaneo.
as bobines destes segmentos sao iguais as dos relays...
tenta adormecer numa estaçao de comboio na zona do relogio que vais ver... ;)
-
Olá, acho que falta qualquer funçãozita aí que faça saír o valor pelo pino 11, Vasco.
Não falta nada, está completo o código (tirando a parte da frequencia gerada não ser 1Hz).
O proximo capitulo a ler é sobre timers.
O timer 2 pode contolar os pinos OC2A e/ou OC2B que correspondem aos pinos do atmega PB3 e PD3, que correspondem no arduino aos pinos 11 e 3.
Porque é que um HIGH com latencia seguido de um LOW com latencia num loop não geram um bom clock ?
Respondeste-te a ti próprio e nem reparaste. A latência não é determinística (pode variar e varia!), o sinal não vai ser estável nem preciso.
-
E se fosse um processador de um computador dos dias de hoje feito só com relés ? Quantos campos de futebol eram precisos para fazer o processador ? ;-) E o barulho daqueles relés todos a baterem ? ;-) Estrondo !
-
...Mas se for por exemplo: loop { pino 3=High ; delay (1000) ; pino 3=Low ; delay (1000) ; } Isto gera um clock normal, certo ?
-
É disso que estamos a falar.
Gera um clock "normal" mas não é estável nem preciso. O delay não tem precisão nem demora sempre o mesmo (mesmo que o nº que lá está seja igual).
Um delay(1000) pode demorar 1000ms, como 1000,5ms, como 1000,4ms, como outro qualquer valor aproximado, e não tens como saber o que demora de cada vez que o chamas.
Para garantir a consistência precisas de usar timers.
-
ah ok , não sabia , obrigado
-
imagino sim. basta ires ás estaçoes de comboio que tenham relaogios daqueles feitos com segmentos amarelos e vais ouvir o barulho das bobines dos segmentos a bater a cada segundo. adoro é no virar da hora :) batem todos quasem em simultaneo.
as bobines destes segmentos sao iguais as dos relays...
tenta adormecer numa estaçao de comboio na zona do relogio que vais ver... ;)
Já não será do tempo da maior parte dos frequentadores do forum, mas quando eu era criança ainda fui umas quantas vezes "à Portela ver os aviões voar", já nessa altura ficava fascinado com os quadros informativos que tinham os nomes dos destinos em plaquinhas separadas... Só os barulhos estranhos que aquilo fazia eram metade da piada.
A definição mais básica de um transístor diz que ele é um interruptor, logo não é de espantar que toda a logica que se faz com transístor também se possa fazer com relés.
-
Olá, acho que falta qualquer funçãozita aí que faça saír o valor pelo pino 11, Vasco.
Não falta nada, está completo o código (tirando a parte da frequencia gerada não ser 1Hz).
O proximo capitulo a ler é sobre timers.
O timer 2 pode contolar os pinos OC2A e/ou OC2B que correspondem aos pinos do atmega PB3 e PD3, que correspondem no arduino aos pinos 11 e 3.
Não, não, esses valores são para 4 MHz. Não tenho a certeza se se consegue só com o prescalar descer até 1 Hz, mas o que não faltam são chips que podem servir como divisores.
Eu acho que já percebi a ideia dos timmers, carrega-se um dado valor (num registo) que é decrementado à frequência do clock dividido pelo prescalar, quando essa valor chega a zero acontece "qq coisa", é a definição da "qq coisa" que me baralha.
-
Está tudo na datasheet de qualquer AVR que tenha um timer.
Há vários modos de contagem, pode ser para cima, para baixo, para cima e para baixo...
E pode contar até ao limite dos bits, ou até ao valor constante de um outro registo.
E quando o contador "dá a volta", ou quando o valor fica igual ao contido num outro registo, pode por exemplo ocorrer uma interrupção, ou pode iniciar-se/fazer toggle/... o sinal de saída se o modo for PWM.
A "velocidade" de contagem é o clock do timer quem decide. Esse clock pode ser directamente o clock do chip (system clock), ou um valor reduzido (dividido) por um "pre-scaler", um sinal digital que vem do exterior do chip (se quiseres por exemplo contar transições de um sinal digital), ou ainda a saída de um multiplicador do system clock (por exemplo o attiny26(x) tem um multiplicador interno que pode gerar clocks até 64MHz).
-
imagino sim. basta ires ás estaçoes de comboio que tenham relaogios daqueles feitos com segmentos amarelos e vais ouvir o barulho das bobines dos segmentos a bater a cada segundo. adoro é no virar da hora :) batem todos quasem em simultaneo.
as bobines destes segmentos sao iguais as dos relays...
tenta adormecer numa estaçao de comboio na zona do relogio que vais ver... ;)
Já não será do tempo da maior parte dos frequentadores do forum, mas quando eu era criança ainda fui umas quantas vezes "à Portela ver os aviões voar", já nessa altura ficava fascinado com os quadros informativos que tinham os nomes dos destinos em plaquinhas separadas... Só os barulhos estranhos que aquilo fazia eram metade da piada.
A definição mais básica de um transístor diz que ele é um interruptor, logo não é de espantar que toda a logica que se faz com transístor também se possa fazer com relés.
eu tive a sorte de trabalhar numa empresa que ha 15 anos atras quase que empestou tudo o que era serviços publicos de transportes com paineis de informaçao ao publico com com caracteres feitos com tecnologia eletromagnetica.
A maior parte foi parar as estaçoes de comboios mas tambem chegaram a existir em estaçoes de outros veiculos de transporte alguns.
sempre que tinha algum para reparar em bancada era uma maravilha ouvir os segmentos a bater todos cadenciados. quem nao gostava muito do ruido "tipo relogio de sala" era o resto do pessoal ;)
ja agora assim estilo àparte, os paineis que informam os preços dos combustiveis nas autoestradas sao todos com segmentos magneticos. esses é que eu gostava de reparar porque sao muito rapidos a mudar os digitos...
era sempre um cagaçal na sala, porque a placa de cpu assim que é alimentada faz um autoteste a todos os digitos da linha que sao 8, vezes 7 segmentos cada um... e dentro duma sala com 30 M2 faz mesmo cagaçal as chapas de aluminio dos segmentos a bater dentro da caixa metalica de cada digito...