Ir ao conteúdo
  • Cadastre-se

ViniciusKruz

Membro Pleno
  • Posts

    724
  • Cadastrado em

  • Última visita

Tudo que ViniciusKruz postou

  1. @tiagopdutra Então, a ideia do @Fervolt de usar um triac vai funcionar melhor que com um rele. O sensor de temperatura mais comum é o ds18b20 e nos exemplos do Arduino tem um hello Word.
  2. Eu nem sei o que seria essa separadora de lcd, mas para as questões de programação está fácil, procura na IDE do Arduíno em Arquivo>>Exemplos que vai ter tudo pronto, inclusive exemplo de como ler um sensor de temperatura, é só você ir juntando tudo e as dúvidas que forem surgindo, vai apresentando aqui.
  3. @JONATHA19820 Certo, refiz as correções, agora ficou assim: Apertando e soltando o botão uma vez: >Liga o painel Apertando e soltando o botão pela segunda vez: >Sem o freio apertado: desliga o painel >Com o freio apertado: aciona o motor de partida pelo tempo em que o botão ficar apertado Apertando o botão pela terceira vez: >desliga o painel Coloquei uma proteção a mais: se o motor estiver ligado, o motor de partida não poderá ser acionado, veja no esquemático como ficou... Demorou um pouco porque tive que instalar as ferramentas pra testar na simulação. Segue o código: adicionado 1 minuto depois #include <16f628a.h> #use delay(clock=4000000) #fuses NOWDT,INTRC_IO,NOPROTECT,BROWNOUT,NOMCLR,NOLVP int conta=0; void desligaPainel(){ output_low(PIN_B1); } void ligaPainel(){ output_high(PIN_B1); } void partida(){ if(input(PIN_A4)){//se o freio estiver pressionado... while(input(PIN_A3)){ if(!input(PIN_A2)){//se o motor estiver funcionando, o motor de partida não poderá ser acionado output_high(PIN_B2);//liga o motor de partida enquanto o botão estiver pressionado } } output_low(PIN_B2);//desliga o motor de partida }else{ conta=0; desligaPainel(); while(input(PIN_A3)){} } } void aciona(){ switch(conta){ case 0: desligaPainel(); while(input(PIN_A3)){} break; case 1: ligaPainel(); while(input(PIN_A3)){} break; case 2: partida(); break; } } void main(void){ while(1){ if(input(PIN_A3)){ conta++; aciona(); } } } adicionado 11 minutos depois Opa, detectei um bug na rotina de partida, troca ela no código por esta: void partida(){ if(input(PIN_A4)){//se o freio estiver pressionado... if(!input(PIN_A2)){//se o motor estiver funcionando, o motor de partida não poderá ser acionado while(input(PIN_A3)){ output_high(PIN_B2);//liga o motor de partida enquanto o botão estiver pressionado } } output_low(PIN_B2);//desliga o motor de partida }else{ conta=0; desligaPainel(); while(input(PIN_A3)){} } } Sem esta correção, assim que o alternador começar a gerar carga, o micro vai entender que já deu partida e vai desligar o motor de arranque.
  4. @Lucas de souza correa Você sabe qual é o modelo desta peça para podermos consultar o datasheet? adicionado 8 minutos depois Andei pesquisando aqui, o ideal seria você ter a plaquinha que já vem com tudo pronto, porém, encontrei um esqueminha que liga esse sensor IR diretamente no arduíno, logo, toda a filtragem que existe na plaquinha, estará fora, mas isso é só um detalhe que você pode corrigir, por exemplo, no resistor de 10k da imagem abaixo, você pode controlar a sensibilidade. http://1.bp.blogspot.com/-zvkHqzPnu7I/U7WHzjrveBI/AAAAAAAAACc/UBEFCspWM1Y/s1600/Sem+título.jpg Site com o tutorial: http://centraldoarduino.blogspot.com.br/2014/07/controle-pid-em-c-sensor-de-chama.html
  5. @JONATHA19820 Óh mais que isso aqui eu vou cobrar viu!!! E o preço é caro: 50 conto de crédito no celular mais a grana do busão kkkk. #include <16f628a.h> #use delay(clock=4000000) #fuses NOWDT,INTRC_IO,NOPROTECT,BROWNOUT,NOMCLR,NOLVP void main(void){ int conta=0; while(1){ if(input(PIN_A3)){ if(conta==0){//esta rotina serve para impedir pressionamento repetitivo do botão while(input(PIN_A3)){}//se estiver ligando o painel ou //desligando tudo, usa esta trava para botão } conta++; if(conta >= 3){ conta=0;//desliga tudo } } if(conta >= 1){//liga o painel output_high(PIN_B1); }else{ output_low(PIN_B1); } if(conta == 2){ if(input(PIN_A4)){//se o freio estiver pressionado... while(input(PIN_A3)){ output_high(PIN_B2);//liga o motor de partida enquanto o botão estiver pressionado } output_low(PIN_B2);//desliga o motor de partida }else{//se o freio não estiver pressionado, desliga tudo... conta=0; //desliga tudo } } } } Tá na mão, fiz de cabeça, logo, terá que testar pra conferir a lógica da coisa. O que mudou é que agora tem mais um botão ligado no pino A4(freio). Boa sorte.
  6. @JONATHA19820 Segue o código, claro, bem simplesinho(é tão simples que vai completo, é só compilar e gravar): #include <16f628a.h> #use delay(clock=4000000) #fuses NOWDT,INTRC_IO,NOPROTECT,BROWNOUT,NOMCLR,NOLVP void main(void){ int conta=0; while(1){ if(input(PIN_A3)){ while(input(PIN_A3)){}//evita duplo aperto no botão conta++; if(conta > 3){ conta=0; } } if(conta >= 1){//liga o painel output_high(PIN_B1); }else{ output_low(PIN_B1); } if(conta == 2){//liga o motor por 1 segundo output_high(PIN_B2);//liga o motor de partida delay_ms(1000);//permanece ligado por 1 segundo output_low(PIN_B2);//desliga o motor de partida conta=3;//trava o contador e se for pressionado //o botão novamente, desliga tudo } } } Funciona assim: Microcontrolador sem cristal externo(vai usar o interno -> INTRC_IO) Botão -> pino A3 Painel -> pino B1 Partida -> pino B2 Espero que ajude!!
  7. @Victor 222222 Ok, entendi. Seu código que foi postado já é um relógio por programação, você precisa agora implementar o alarme né. Como esse relógio seu não tem menu de programação nem das horas, você vai precisar implementar isto, caso contrário não vai ter como acertar o alarme nem as horas. Vai querer fazer esta parte também? Se não for implementar os menus, é só criar as variáveis do alarme: int minutoAlarme; int horaAlarme; Depois compara dentro do main(): while(1){ minutoAlarme=0; horaAlarme=12;//alarme programado para as 12:00 if((minuto>=minutoAlarme) && (minuto<= minutoAlarme+1) && (hora==horaAlarme)){//aqui só vai entrar e permanecer em disparo por 1 minuto //dispara o alarme por um minuto } } Para disparar o alarme pressionando uma tecla, seria também dentro do while(1): while(1){ minutoAlarme=0; horaAlarme=12;//alarme programado para as 12:00 if((minuto>=minutoAlarme) && (minuto<= minutoAlarme+1) && (hora==horaAlarme)){//aqui só vai entrar e permanecer em disparo por 1 minuto //dispara o alarme por um minuto } if(botão pressionado){ //dispara o alarme } } Basicamente acho que a lógica seria esta, mas como eu disse, se você for implementar as telas de menu, aí já serão outros quinhentos.
  8. Isso tá mais pra erro de conversão do AD, embora você tenha dito que testou sem o AD e o erro persistiu. Verifica também a separação das unidades, dezenas, centenas e milhar pode haver erro nessa parte também. Se tudo isso estiver correto, desconfie do simulador.
  9. Amigo, qual RTC você vai usar? Pra te ser sincero, os que existem no mercado são umas belas porcarias em se tratando de precisão, eu te aconselharia usar o DS3231, é o mais preciso que já vi, sem contar os recursos de correção que ele possui. Caso você não vá usar um RTC e o relógio for implementado via programação, já te adianto que uma precisão razoável será difícil de ser conseguida, a não ser que você use uma frequência externa para servir de base ou então programe tudo em Assembler. Ainda assim insisto no RTC. Outra coisa, o seu alarme, vai despertar por dias da semana ou será somente por horário mesmo?
  10. @aphawk Não havia me atinado para a questão da velocidade do pulso não ser suficiente para carregar o capacitor, dê uma olhada no circuito abaixo, nele eu coloquei uma segunda etapa para amplificação do pulso, será que assim funcionaria? Caso possa funcionar, quais seriam os cálculos para dar certo? Tinha um erro no PNP, foi corrigido.
  11. O @aphawk é muito bom com esses cálculos de eletrônica.
  12. Só toma cuidado pra não medir a tensão com o PIC caso no capacitor tenha mais de 5v e você terá também que criar um mecanismo pra descarregar o capacitor após a leitura antes que outro pulso venha a carregá-lo novamente. adicionado 0 minutos depois Eu não sabia que isto é possível!!
  13. Paulo a ideia é que depois de ler a carga do capacitor ele precisa descarregá-lo : Na verdade o resistor e o diodo é só uma forma simplista de demonstrar o circuito que carregará o capacitor. Só não carrega, se o circuito limitador da tensão estiver muito forte, tipo, uma resistência muito alta. Mas com o AO, você só vai saber se ultrapassou certa tensão, mas quanto foi esse percentual não terá como saber. Nesse caso, um diodo zenner funcionaria da mesma forma.
  14. @Papibakigrafo Segundo pesquisei, a melhor opção de banco de dados é o indexedDB, porém vi em algum lugar que os navegadores não garantem que os dados permanecerão porque parece que se o navegador precisar liberar espaço ele apaga esses arquivos. Aí fiquei muito preocupado, pensei até na hipótese de usar um arquivo XML pra guardar os dados. Estou testando um banco de dados aqui no chrome, gravei algumas informações ontem e até hoje estão todas lá. Eu estive pensando, depois que o nosso site vira um App, ele deve usar outra forma de guardar o banco de dados, ou será que no App, rodando no android, esse banco de dados é guardado no navegador também?
  15. @Philippe Henrique Tem muitas formas de um PIC queimar, pode por exemplo queimar apenas uma ou mais portas, pode ter a eeprom com algum endereço danificado, enfim, esse tipo de defeito é só na programação mesmo, mas em caso de queima por excesso de tensão(muito acima de 5v), geralmente dá pra identificar de duas maneiras, uma é com o multímetro nos pinos negativo e positivo e também dá pra testar se a temperatura dele aumenta, se ele estiver esquentando já era. Vale ressaltar que como um microcontrolador é bastante complexo e tem inúmeras possibilidades de dar defeito, o ideal é ter algum de reserva e antes de quebrar a cabeça, substitua por um que se tem certeza que funciona, se nem ele não funcionar, com certeza o substituído não está queimado, aí precisa verificar a programação, e o hardware.
  16. @Bruno Andrade Almeida Na verdade o tempo de processamento não será alterado, só o que muda é que a interrupção não fica parada, ou seja, enquanto você trata a interrupção externa, as outras interrupções ficarão livres. Uma interrupção só é acionada depois que a atual terminar, enquanto que na dica que te passei, fica tudo liberado. Então, mas é exatamente por causa da velocidade do pulso que um capacitor vai resolver seu problema, imagina a situação, após dar o pulso, este pulso fica armazenado no capacitor, daí ao invés dele ser de 120us, vai ficar disponível até você descarregar o capacitor, entendeu? A forma que estou sugerindo seria assim:
  17. @Bruno Andrade Almeida Tem uma prática de programação no seu código que não é nada aconselhável e isto com certeza está te fazendo perder muito tempo, só não sei é se esta demora está chegando a atrapalhar, mas de qualquer maneira seria bom você mudar isto: Sua rotina de interrupção está assim: #INT_EXT void EXT_isr(void) { varredura_leitura_sensor_choque(); } E o mais viável seria assim: bool interrupt=false; #INT_EXT void EXT_isr(void) { if(interrupt==false) interrupt=true; } Desta forma sua interrupção apenas vai sinalizar que houve uma mudança de estado e no main.c ficaria a chamada da rotina caso esta interrupção tenha acontecido: while(TRUE) { if(interrupt){ varredura_leitura_sensor_choque(); interrupt=false; } pisca_led(0,0); corte(); } Desta forma aí, a sua interrupção não vai ficar travada até sua rotina ser executada. Isso é só uma dica mesmo e deve melhorar a execução do seu código e é provável que não resolva seu problema da medição. Para fazer a leitura da tensão do pico(que é realmente a sua dúvida), eu te aconselharia armazenar este pulso em um capacitor, daí fazer a leitura à partir dele. Como você disse que já fez a redução de 10kv para 5v, está fácil, é só mandar esta pequena tensão para um capacitor e depois de fazer a leitura, coloca um dispositivo para descarregá-lo para que possa fazer uma nova medição. Abraço.
  18. @Papibakigrafo Fiz esse tutorial: http://www.macoratti.net/15/03/html5_data.htm e funcionou certinho, tanto no navegador quanto no App. O localStorage só pra isso que você quer tá de bom tamanho, geralmente até mesmo um cookie resolve. Esse tutorial do Macorati é bem esclarecido mas ainda vou ter que descobrir como criar as relações entre as tabelas, inclusive esse conceito de relacionamento que temos, não sei se funciona com o indexedDB porque parece que muda um pouco.
  19. @Papibakigrafo Pelo que entendi do SQLite ele não roda em aplicações Web, somente em aplicações nativas do android e IOS, isso significa que ao testar o código no navegador, o banco não vai funcionar, estou começando a testar aqui o indexedDB, ele me parece rodar nos dois casos, tanto Web quanto nativos. Não estou tendo muito sucesso, mas estou tentando aqui.
  20. @Papibakigrafo LocalStorage é praticamente um arquivo XML de tão simples que é, mas por hora vai resolver. Porém não vou desistir de usar um banco de dados de verdade rerere.
  21. @Papibakigrafo Tô tentando rodar o SQLite mas não tá querendo não rerere, vou pesquisar sobre esse localStorage
  22. @Papibakigrafo No Phonegap você usa algum tipo de banco de dados?
  23. beleza pessoal, na criação de um App para android e IOS, usando programação Web, quais são as opções de banco de dados para gravar algumas configurações que temos? Abraço.
  24. Tenho apenas um fornecedor para confecção de placa de circuito impresso chamado Griffus em SP, estou precisando fazer uma cotação e gostaria de mais opções, alguém poderia me ajudar? Obrigado.
  25. Eu fiz meu próprio shield uma vez e era programado pelo CCS C utilizando de um PIC, funcionou direitinho, no seu caso, só testando, mas acho que não vai funcionar por causa do web server ativo. Eu uso um led piscando nos meus projetos com o ESP e o tempo da comutação é determinada pela interrupção do ESP que geralmente é de 1 segundo, porém quando estou acessando o ESP via web, esta comutação do led fica horrorosamente prejudicada, ou seja, provavelmente a prioridade no ESP é para o web server, se conseguir mudar esta prioridade passando para as outras interrupções, pode até ser que isso mude e até mesmo dê certo. Tem que testar pra ver. Quanto à sua segunda dúvida, eu uso a interrupção do timer assim: bool _timeout = false; //rotina que é acessada quando o timer estoura void tCallback(void *tCall){ _timeout = true;//flag que indica que a interrupção foi acionada } void usrInit(void){//configuração do timer os_timer_setfn(&mTimer, tCallback, NULL); os_timer_arm(&mTimer, 1000, true);//timer estoura em 1 segundo } void setup(void){ usrInit(); //inicializa o timer } void loop(void){ if(_timeout){//se houve estouro do timer... _timeout = false;//zera a flag de interrupção digitalWrite(led1, !digitalRead(led1));//acende ou apaga led dependendo do estado em que se encontra } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!