Boa noite amigos garagistas, estou usando este código para liberar a ração do meu cachorro com horário, usando um motor de passo Nema17 e Um RTC  3231, Esta funcionando perfeitamente, o único problema e quando cai a energia, ao retornar a energia o Motor de Passo Gira no Sentido Horário 20 Passos, Alguém Para me ajudar A resolver esse problema, gostaria que ele ficasse parado ate receber um comando, Alguém para me ajudar por favor! Segue o Código em Anexo..

Exibições: 931

Anexos

Responder esta

Respostas a este tópico

Alguém para me da uma luz, consegui resolver colocando um rele na saída Positiva da fonte que alimenta o motor de passo, quando da o horário o rele liga e manda energia para o motor roda, depois de cinco segundo o rele desliga,  sera que tem outra forma, dentro do código sem colocar rele? 

Olá.

  Esquisito, não tem que dar pulso nenhum..

  Sugestões para debug:

   - Inclua na rotina que faz virar um texto saindo pela serial: "Virando!" Assim vc sabe se é a rotina que está mandando ir.

   - Coloque um led+resistor no pino Step para ver se na inicialização nao são enviados pulsos. Recomendo colocar a inicialização do pino como output antes de tudo. alguns pinos, como o tx, realmente pulsam.

   - Tente trocar de pino.

   

olá Marcela, boa noite.

      Acredito que vc se lembra de mim, pois já ajudei vc em outros tópicos aqui no LDG.

      Vou te ajudar a resolver este seu problema, de forma simples e 100% confiável. Mas sob uma condição:  que vc escute e siga meus conselhos que irei postar depois que tivermos feito seu Sistema funcionar perfeitamente. Ok?

      Caso façamos isso, por favor dê mais detalhes sobre seu Sistema. Especificamente estes:

      1) qual a plataforma específica de Hardware vc está usando?  Arduino UNO ? ESP8266 ? etc..

      2) qual o modelo específico do seu Motor Nema 17 ?  por favor, informe o PN (Part Number) do modelo.

      3) vc está usando alguma placa intermediária como "Driver" elétrico para o Motor? se está usando, qual o modelo desse Driver?

      4) há algum Relé sendo usado no seu circuito original ? (não conta aquele que vc conectou depois pra fazer "gambi")

      5) Vc usa alguma fonte para alimentar seu Sistema ? qual a tensão de saída desta fonte ? como está conectando esta fonte ao seu Sistema ?

      6) coloque aqui no post, uma foto do seu Sistema montado. Coloque também uma foto mostrando qual a plaquinha do RTC vc está usando (há diversos modelos no mercado).

      Já sobre seu código, ele está um tanto bagunçado. Tem algumas "tranqueiras" nele que nem estão sendo usadas. Mas já o ajeitei de forma que seja possível trabalhar nele adequadamente.

      Fico no aguardo de seu retorno. E caso diga "sim", então forneça a maior quantidade de informações possíveis, mas o mínimo são as que eu perguntei.

      E sem querer ser chato: escreva num português claro e possível de se entender, NÃO aquele português desesperado, sem fôlego, e em pânico que o povo usa aqui no LDG (obs.: o seu texto está muito bom no post).

      Se achar que estou sendo exagerando  e inconveniente, tranquilo, pode me mandar à m****.

     Abrçs,

     Elcids

Boa noite Elcids estou usando :

Arduino Uno, motor de passos  nema 17hs4401 bipolar 4 fios, Rtc Ds3231, Driver A4899, capacitor de 220uf x 16v,  acrescentei um sensor de temperatura DHT22 no código 

oi Marcela...

      Melhorou bastante com estas informações. E ainda bem que vc não me mandou pra aquele lugar.

     Com isto já dá pra analisar o que pode estar acontecendo no seu Sistema, e dar a solução mais adequada e confiável para ele.

     Mas antes por favor, coloque o código atualizado (o que tem o sensor de temperatura), para que eu possa dar tratamento adequado para as informações lidas do DHT22, e assim haja harmonia entre os elementos no seu Sistema.

     Logo que possível, retorno aqui com algum resultado (mas tenha alguma paciência, pois estarei muito ocupado este fim de semana, e quase não terei muito tempo disponível).

     Abrçs,

     Elcids

Boa noite  Elcids fico agradecida com as palavras, cada vez aprendo mais com vcs, segue o código, acrescentei um DHT22 e um LCD 16/2 com I2C para visualizar a temperatura do ambiente

Anexos

ok, Marcela.

     Só pelo código consigo ver as ligações do LCD, embora não tenha analisado ainda. Estas informações todas, ajudarão não somente a resolver seu problema, mas também a deixar seu código harmonioso, e "liso" no funcionamento.

     Sobre o problema em si, já tenho uma desconfiança de duas possibilidades. Mas vou analisar com mais cuidado para ver qual das duas pode ser.

     Uma coisa que pode ajudar, é se vc mostrar detalhes da "gambi" que fez com o Relé. Essencialmente como ligou o Relé no seu Sistema para "contornar" o problema.

     Um das minhas desconfianças, reside no fato de que os pinos do Arduino ficam em alta-impedância (modo entrada) após o Powerup (quando o Sistema é energizado). Nestas condições, ruídos espúrios podem cadenciar o Driver do Step-Motor, causando o problema que vc está observando. Mas não tenho certeza de que pode ser isto.

     Um teste simples pode ser feito para verificar se pode ser a questão que mencionei acima. Altere o código na rotina "setup" conforme mostro a seguir:

      Observe que alterei a ordem da inicialização, dando prioridade de tempo aos pinos de controle do Driver do Step-Motor. Além disso coloquei o estado "inativo" para o sinal "STEP".

      Para o teste, basta vc simular uma desconexão da alimentação, coisa que eu acho que vc já vem fazendo em seus testes. Mas quando desconectar, aguarde alguns segundos antes de reconectar, para ter certeza de que não há mais energia no Sistema.

       Se constatarmos que o problema é este, ainda que o código tenha "resolvido", aconselho colocar um resistor de 10k entre o pino "3" do Arduino e o "GND" do circuito, pois isto tornará o Sistema imune à ordem e tempos de inicialização do código no Arduino. O resistor não precisa ser exatamente o de 10k, e caso vc tenha à mão um resistor entre 4.7k e 15k, já pode fazer a ligação.

      Caso o teste resolva o problema (não posso garantir, pois pode ser a outra questão que mencionei acima), então você estará dispensada da promessa de seguir meus conselhos, mas ainda assim terá que rezar 10 Ave-Maria e 15 Pai-Nosso.

      Abrçs,

      Elcids

Não deu certo Elcids , mesmo dando LOW, eu já tinha feito esse teste e  continua avançando 20 passos horário, só consegui resolver dessa forma que esta no esquemático e alterando o código dessa forma segue em anexo, só gostaria de saber se tem algum problema, ficar ligando e desligando o motor de passos do driver?     Completo_DHT22_e_LCD_16_2_com_I2C.ino 

bom dia Marcela.

       Como o seu post ontem (aquele onde vc mostrou como ligou o Relé)  mostrou que não eram ruídos espúrios cadenciando o "STEP" do "A4988", então também descartei esta possibilidade.

       Então provavelmente é uma inicialização inadequada do "A4988". Isto pode estar sendo provocado por "leakage" de corrente nos circuitos internos do "A4988". Na página 13 do datasheet, vê-se que há possibilidade de "leakage" dos pinos VBB para os pinos VCP e CP2, possivelmente alcançando alguma lógica interna do "A4988".

       Enquanto o Arduino está desligado e não alimenta o VDD do "A4988", nada ocorre. Mas quando a energia volta e o Arduino e "A4988" são alimentados, a lógica interna do "A4988" pode ficar em algum estado latente, desencadeando um "startup" anormal. E claro: isto só ocorre por causa da Bateria que continua fornecendo energia mesmo quando o Arduino está desligado. Quando vc desliga a Bateria via Relé, não ocorre mais o "leakage" de corrente nos circuitos internos do "A4988", e assim a anomalia não ocorre.

      Baseado nisto, implementei no código, o controle dos sinais "ENABLE#" e "RESET#" do "A4988". No caso, o "RESET#" é usado para uma inicialização forçada do "A4988" quando o Arduino é ligado. Já o "ENABLE#" é usado para ligar a alimentação do Motor somente quando ele deve ser girado. Quando o Arduino é ligado, o Motor é mantido desligado. Após cada acionamento do Motor, sua alimentação é desligada, de forma que permanece assim 99,99% do tempo (semelhante ao que ocorria com seu Relé).

      Para isto, obviamente vc precisa usar seu circuito original, sem o Relé. Precisa também ligar os sinais "RESET#"  e "ENABLE#" do "A4988", conforme mostro na figura a seguir:

(clicke na figura para "zoom")

     As ligações a serem feitas, são as dos fios rosa e azul claro, que saem respectivamente dos pinos 5 e 6 do Arduino. Vc pode usar outros pinos, desde que também altere isso no programa do Arduino.

     Os dois Resistores de 10k não precisam ser montados agora, mas se vc os tiver aconselho já ligá-los. Estes Resistores tem efeito quando o Arduino é ligado mas ainda não inicializou completamente, e por isso são muito importantes para evitar comportamentos anormais do "A4988". Eles podem ficar fisicamente perto do Arduino ou perto do "A4988", mas preferencialmente próximos deste último. De qualquer forma, no seu projeto final, vc deve incluir estes dois resistores.

    O código foi compilado e também testado no Proteus, e é este:  DOG_FEED_01.ino

    Há algumas considerações a serem feitas sobre este código:

    1)  não altere a ordem de execução dentro do código. Algumas funções devem ser executadas em ordem específica para que tenham o efeito esperado.

    2)  usei apenas caracteres padrões dos LCDs disponíveis no mercado. Digo isto, pois vi que no seu código haviam caracteres "estranhos", dando a entender que vc possa estar usando algum LCD específico (ou que tenha pré-programado o LCD com caracteres especiais). Enquanto estamos testando, peço que não use caracteres que não sejam padrões, para não dificultar os testes que faço aqui.

    3)  o código agora possui temporizações mais sofisticadas, de forma a otimizar a execução de cada tarefa. Nos seus testes vc não perceberá isso. Nas simulações no Proteus, isso ajuda também a ter respostas mais rápidas. As temporizações foram calculadas de forma a não influenciar no funcionamento do Sistema de liberação da ração.

    4)  os horários das etapas de liberação da ração, foram as que encontrei no seu código "Completo_DHT22_e_LCD_16_2_com_I2C(cIQwas).ino". Nos outros códigos que vc postou, isto estava uma bagunça.

    5)  no seu código, não havia no "setup" a chamada para o "dht.begin", e eu acrescentei, embora isso possa não ser absolutamente necessário. Além disso, o modelo dentro do código é DHT11 e não o DHT22 que vc informou. Eu mantive o DHT11.

    6)  há um "#include" para a biblioteca "NewTone.h", mas esta biblioteca não está sendo usada em nenhum momento. Então eu comentei essa linha. Acredito que vc a tenha colocado com o objetivo de fazer alguma sinalização sonora quando for o momento da liberação da ração.

    Procurei implementar o código de forma mais confiável e organizada possível dentro do tempo disponível. E evitei alterações "pesadas" no seu Hardware, pois ninguém gosta de alterar o Hardware, mesmo que isto signifique resolver definitivamente os problemas.

    Fico no aguardo dos seus testes.

    Abrçs,

    Elcids

boa tarde Elcids, agora deu certo, muito obrigada pelo seu tempo em mim ajudar e resolver a minha dor de cabeça, agora resolvido, fiz o teste de queda de energia tudo OK..o motor fica parado ate receber o comando, operando certinho...a respeito do DHT11 e DHT22 e que fico trocando de sensor, vou usar usar o 22, mais e só eu trocar o numero 11 para o 22 correto..a biblioteca   "NewTone.h" e que vou incluir um buzzer, valeu pela atenção

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço