Página 1 de 1

Será que um Arduino faz isso ?

MensagemEnviado: 18 Out 2013 15:52
por edison
Quero bolar um comandinho "caixa preta" p/ acionar um motor via reles de modo que :
O nº de giros seja proporcional a medida do material a ser tracionado. (o material vai e vem tracionado por rolos)
O giro vai gerar sinais a serem lidos (encoder incremental ou um sensor que gere pulsos )
Aceite programação via teclado dessa medida e atingido valor atue o rele de retono.
Indique num display LCD ou leds a medida programada e nº de ciclos vai-vem ocorridos.

Algo assim:
Imagem

Re: Será que um Arduino faz isso ?

MensagemEnviado: 18 Out 2013 16:32
por xultz
Deve fazer, mas por que você quer fazer isso num Arduino?

Re: Será que um Arduino faz isso ?

MensagemEnviado: 18 Out 2013 18:26
por edison
xultz escreveu:.......... por que você quer fazer isso num Arduino?


Como citei num outro post ,meu filho quer botar em prática as aulas de "C" da facul e eu preciso de algo assim.
Já fiz (parcialmente) com eletrica convencional mas lotou um painel 300x400 e faltou as firulas.
Se o moleque se der bem posso aproveitar e sair da "idade dapedra" com outras idéias engavetadas.
Outra coisa ,cods. aulas etc. p/ Arduino tem de monte ,dando uma peneirada se tira algo que preste.
Baixo custo ,versatilidade......!
Pode até ter outras platafomas mas desconheço . Alguma dica ?
:shock:

Re: Será que um Arduino faz isso ?

MensagemEnviado: 17 Nov 2015 16:49
por Djalma Toledo Rodrigues
Será que um Arduino faz isso ?
Mensagempor edison » Sex Out 18, 2013 4:52 pm


Naquela época, longínquo ano 2013 não existia Router CNC.
:?
Desculpe Edson a tardia brincadeira mas não pude evitar.

DJ. Nov / 2015

Re: Será que um Arduino faz isso ?

MensagemEnviado: 17 Nov 2015 20:42
por andre_luis
Re: Será que um Arduino faz isso ?


Não sei como está o cardápio de microcontroaldores atualmente, mas não faz muito tempo que penei pra achar uCs que tivessem módulo de hardware embutido para lidar com contagem de Encoder rotativo. Acho que pra responder á essa questão, voce teria de procurar especificamente se há Shields que façam isso.

edison escreveu:O giro vai gerar sinais a serem lidos (encoder incremental ou um sensor que gere pulsos )

Re: Será que um Arduino faz isso ?

MensagemEnviado: 18 Nov 2015 10:41
por brasilma
Para mim o Arduíno é um microcontrolador com um "algo mais", permitindo que se utilize as funções das bibliotecas e/ou shields dedicadas, e quando isso não é adequado, fazer tudo diretamente e/ou mesmo modificar as bibliotecas (retirando o que não vai usar, para reduzir o consumo de memória, ou modificando para adequar ao seu sistema) e/ou shields.

É isso que tenho feito, ajuda muito a startar rapidamente uma aplicação.

Com certeza dá para fazer com Arduíno!

Re: Será que um Arduino faz isso ?

MensagemEnviado: 18 Nov 2015 17:57
por norad58
Acho que não é dificil, tem placas compativeis com Arduino como aquela da intel com processador Pentium 32bits ou a placa Mega Arduino, em relação a processamento dá e sobra.
Para ler um encoder de modo simples sem se preocupar com o sentido de rotação, dá pra usar a porta T/C (timer/counter) que deve estar disponivel na interface do Arduino e ler a largura do pulso do encoder ou sensor, use o canal Z do encoder pra adquirir e calcular a velocidade de deslocamento.
Se for para ler quantidades de pulsos do encoder/sensor tambem pode usar a porta T/C ou alguma que gere interrupções no MCU.
Já fiz algo parecido usando o Atmega8/16/32 que é praticamente o mesmo MCU das placas do Arduino 8 bits.
Deve tomar cuidado com a interface entre encoder/sensor e placa do Arduino que aceita I/O de até 5Vdc. Encoder pode achar facilmente com saída TTL de 5V mas sensores magnéticos por exemplo são na maioria para interface 12V/24V.

Re: Será que um Arduino faz isso ?

MensagemEnviado: 18 Nov 2015 18:54
por Red Neck Guy
Pra baixa rotação eu faço assim:
Encoder incremental:
A-> Ligo na int
B-> Uso para verificar o sentido de giro e também ligo em um IO
Aí consigo saber a posição
Com B, além de ler o bit, também capturo a largura (Com timer, capture ou semelhante) aí sei a rotação.
Eu costumo colocar um filtro externo para limitar a frequência máxima, tipo dois 40106 com um RC na malha.

Re: Será que um Arduino faz isso ?

MensagemEnviado: 05 Fev 2016 21:24
por Silvio51
Para mim o Arduíno é um microcontrolador com um "algo mais"...( )...


Para mim é a mesma coisa....só que ao contrário: Um microcontrolador com "algo" a menos...

Você já viu como as placas "aleijam" os micros?

Já percebeu que o Arduino DUE, por exemplo, tem um AT91SAM que na verdade é um ARM de 32 bits que roda a 84Mhz com 100 MIPs!!!

Como os caras queriam manter a compatibilidade com as porcarias anteriores, botaram pra F**** no chip...a grosso modo, este DUE só serviria para piscar 54 LEDS com no mínimo 10Kbytes de programa...com velocidade não superior a 1 MIP. Não se pode utilizar a Ethernet inside chip...ele apanha para ler um SD card...aleijaram no sentido restrito da palavra...porém, quem não é um garoto das libs Arduino, consegue fazer coisas interessantes como até mesmo utilizar os dois módulos de Quadrature Encoder internos. Algumas "libs" são para uso com artifícios de software, mas consegue-se "na unha" utilizar diretamente o hardware interno.

Em tempo: este código abaixo lê o encoder conectado nos pinos indicados (Canais A e B):

Código: Selecionar todos
const int quad_A = 2;
const int quad_B = 13;
const unsigned int mask_quad_A = digitalPinToBitMask(quad_A);
const unsigned int mask_quad_B = digitalPinToBitMask(quad_B);

void configuraQEI() {
       
    // activate peripheral functions for quad pins
    REG_PIOB_PDR = mask_quad_A;     // activate peripheral function (disables all PIO functionality)
    REG_PIOB_ABSR |= mask_quad_A;   // choose peripheral option B   
    REG_PIOB_PDR = mask_quad_B;     // activate peripheral function (disables all PIO functionality)
    REG_PIOB_ABSR |= mask_quad_B;   // choose peripheral option B
   
    // activate clock for TC0
    REG_PMC_PCER0 = (1<<27);
    // select XC0 as clock source and set capture mode
    REG_TC0_CMR0 = 5;
    // activate quadrature encoder and position measure mode, no filters
    REG_TC0_BMR = (1<<9)|(1<<8)|(1<<12);
    // enable the clock (CLKEN=1) and reset the counter (SWTRG=1)
    // SWTRG = 1 necessary to start the clock!!
    REG_TC0_CCR0 = 5;

}   
void main{

configuraQEI() ;
...
...
int minha variavel = REG_TC0_CV0 ;  // lê a posição

...
...
...
}