Go Down

Topic: Dúvida com programação !!! (Read 6159 times) previous topic - next topic

danielbit

Olá amigos,
estou com uma pequena dúvida na programação !
sempre utilizei DEV C/C++ para meus programas e utilizo várias bibliotecas como oistream, conio.h etc !mas no arduino nao estou conseguindo !
estou desenvolvendo um projeto com arduino que preciso que um MOTOR funcione num sentido enquanto mantenho apertada a seta direcional para cima, e quando solto ele desliga, enquanto mantenho apertado a sete direcional para baixo, ele roda em outro sentido!

se alguem puder me dar uma luz serei muito agradecido !
segue um pequeno cod que faz essa inversão no meu motor shield !
já tentei utilizar tratamento ASCII mais o arduino nao aceita a biblioteca conio.h !

agradeço a todos

Code: [Select]

//Arduino PWM Code?
//M1: Direction for Motor1
//M2: Direction for Motor2
//E1: PWM control for Motor1
//E2: PWM control for Motor2
int E1 = 5;
int M1 = 4;
int E2 = 6;
int M2 = 7;
void setup()
{
    pinMode(M1, OUTPUT);
    pinMode(M2, OUTPUT);
}
void loop()
{
    int value;
    for(value = 0 ; value <= 255; value+=5)
    {
         digitalWrite(M1,HIGH);
        digitalWrite(M2, HIGH);
         analogWrite(E1, 128); //PWM Speed control
         analogWrite(E2, 128); //PWM Speed control
         delay(30);
    }
}

trunet

O arduino não C/C++ e sim Wiring que é uma mistura dos 2. Embora as bibliotecas sejam parecidas, não é 100% compatível.

Não tem as libs conio e oistream no Wiring(portanto no arduino).

Dê uma olhada no http://arduiniana.org/libraries/streaming/ que é uma lib que da suporte de streaming para o arduino. Entretando para a recepção dos dados no arduino, você não tem como escapar do Serial.available() e Serial.read() que eu saiba.

Tem inúmeros exemplos de como fazer isto funcionar por exemplo http://www.arduino.cc/en/Serial/Read.

[]s

Wagner Sartori Junior

danielbit


O arduino não C/C++ e sim Wiring que é uma mistura dos 2. Embora as bibliotecas sejam parecidas, não é 100% compatível.

Não tem as libs conio e oistream no Wiring(portanto no arduino).

Dê uma olhada no http://arduiniana.org/libraries/streaming/ que é uma lib que da suporte de streaming para o arduino. Entretando para a recepção dos dados no arduino, você não tem como escapar do Serial.available() e Serial.read() que eu saiba.

Tem inúmeros exemplos de como fazer isto funcionar por exemplo http://www.arduino.cc/en/Serial/Read.

[]s

Wagner Sartori Junior


Fala Wagner,

meu camarada,
li... li ... li.... testei... testei... e nao entendi nada !

rs....

tá complicado !

abs


danielbit


Você é de SP?


Não, sou do interior do Rio !

Aqui nao tem cursos sobre arduino, sei que em SP tem vários !

to precisando resolver isso para meu TTC ! senão, nada de CREA !
haahh

abs

trunet

Eu não vou conseguir te ajudar, é muito difícil "ensinar" a distância, além de eu ser um péssimo professor e não ter muita paciência.

Em SP, temos um hackerspace chamado GAROA(http://www.garoa.net.br/). Toda quinta-feira a noite tem a noite do arduino e as pessoas vão para tocar projetos e se ajudar.

Como está longe, fica difícil. Você vai precisar se virar e estudar um pouco. Ainda mais para fazer um TCC. Leve a sério, faça um trabalho descente que o trabalho recompensará.

Comece devagar, o arduino é muito bom para iniciantes. Tem vários exemplos na própria IDE. Não desista.

danielbit


Eu não vou conseguir te ajudar, é muito difícil "ensinar" a distância, além de eu ser um péssimo professor e não ter muita paciência.

Em SP, temos um hackerspace chamado GAROA(http://www.garoa.net.br/). Toda quinta-feira a noite tem a noite do arduino e as pessoas vão para tocar projetos e se ajudar.

Como está longe, fica difícil. Você vai precisar se virar e estudar um pouco. Ainda mais para fazer um TCC. Leve a sério, faça um trabalho descente que o trabalho recompensará.

Comece devagar, o arduino é muito bom para iniciantes. Tem vários exemplos na própria IDE. Não desista.


eu já até consigo fazer bastante coisa no arduino, só nao estou conseguindo fazer , por exemplo, que um led fique aceso enquanto eu mantenho uma tecla precionada, e quando eu a solto ele desliga !

agradeço sua atenção,
vou continuar pesquisando

abs

bubulindo

Procura por debounce... Esse pode ser um dos problemas que estás a ter com a tecla.
Teclas com pouco debounce regra geral são extremamente caras (para hobbies, pelo menos).

Para deixar o LED ligado terias de fazer algo como:

Code: [Select]


#define PRESSIONADO   0
#define SOLTO             1

...

botao_liga = digitalRead(PINO);
if (botão_liga == PRESSIONADO) {
    digitalWrite(LED, HIGH);
    delay(4); //um pequeno delay para cortar com algum do debounce. Esta não é a melhor maneira de fazer isto, mas resulta.
    }

botao_desliga = digitalRead(PINO_desliga);
if (botão_desliga == PRESSIONADO) {
    digitalWrite(LED, LOW);
    delay(4); //um pequeno delay para cortar com algum do debounce. Esta não é a melhor maneira de fazer isto, mas resulta.
    }


Se tiveres acesso a um osciloscópio, liga-o entre os terminais do teu botão e vê o comportamento quando pressionas o botão. Vais ver que não é uma onda quadrada perfeita, mas sim vários pulsos. Principalmente quando largas o botão.
This... is a hobby.

danielbit


Procura por debounce... Esse pode ser um dos problemas que estás a ter com a tecla.
Teclas com pouco debounce regra geral são extremamente caras (para hobbies, pelo menos).

Para deixar o LED ligado terias de fazer algo como:

Code: [Select]


#define PRESSIONADO   0
#define SOLTO             1

...

botao_liga = digitalRead(PINO);
if (botão_liga == PRESSIONADO) {
    digitalWrite(LED, HIGH);
    delay(4); //um pequeno delay para cortar com algum do debounce. Esta não é a melhor maneira de fazer isto, mas resulta.
    }

botao_desliga = digitalRead(PINO_desliga);
if (botão_desliga == PRESSIONADO) {
    digitalWrite(LED, LOW);
    delay(4); //um pequeno delay para cortar com algum do debounce. Esta não é a melhor maneira de fazer isto, mas resulta.
    }


Se tiveres acesso a um osciloscópio, liga-o entre os terminais do teu botão e vê o comportamento quando pressionas o botão. Vais ver que não é uma onda quadrada perfeita, mas sim vários pulsos. Principalmente quando largas o botão.


Tranquilo, deu uma clareada !
estou pesquisando bastante, e a prendendo aos poucos !

mais uma pequena dúvida !

pq quando eu ligo dois motores no meu motorshield, um gira mais lento que o outro ???
os motores são identicos !
estranho isso !

Abraços !

bubulindo

Que motor shield tens?
Tens a certeza que os motores são iguais?
A diferença é bastante óbvia?
Os motores são completamente novos, ou já lhes aplicaste tensão? Normalmente, se aplicaste mais tensão do que o motor suporta, podes ficar com o motor "colado.

Por outro lado, estás a usar os pinos de PWM, logo pode ter a ver com a maneira como isso está a funcionar. Tenta colocar um osciloscópio nos pinos de PWM para ver o que está a sair de lá.
Senão, podes sempre configurar o PWM pelos registos do microprocessador e ter um pouco mais de controlo sobre como funcionam.
This... is a hobby.

danielbit


Que motor shield tens?
Tens a certeza que os motores são iguais?
A diferença é bastante óbvia?
Os motores são completamente novos, ou já lhes aplicaste tensão? Normalmente, se aplicaste mais tensão do que o motor suporta, podes ficar com o motor "colado.

Por outro lado, estás a usar os pinos de PWM, logo pode ter a ver com a maneira como isso está a funcionar. Tenta colocar um osciloscópio nos pinos de PWM para ver o que está a sair de lá.
Senão, podes sempre configurar o PWM pelos registos do microprocessador e ter um pouco mais de controlo sobre como funcionam.


Olá meu amigo,

o motor shield que esotu usando é este :
http://www.ebay.com/itm/Arduino-Motor-Shield-L298P-2A-Dual-H-Bridge-Controller-/160649313360?pt=UK_ToysGames_RadioControlled_JN&hash=item256771fc50

Os motores que eu comprei , são exatamente iguais, e novos, eles susporam até 24V eu coloquei apenas 12V !

vc deu uma dica importante, eu posso controlar essa rotção com os valores no PWM !

eu usei ó cod abaixo para testar ! é bem simples, mas funciona !

Valeu mais uma vez !
Code: [Select]

//Arduino PWM Code?
//M1: Direction for Motor1
//M2: Direction for Motor2
//E1: PWM control for Motor1
//E2: PWM control for Motor2
int E1 = 5;
int M1 = 4;
int E2 = 6;
int M2 = 7;
void setup()
{
    pinMode(M1, OUTPUT);
    pinMode(M2, OUTPUT);
}
void loop()
{
    int value;
    for(value = 0 ; value <= 255; value+=5)
    {
         digitalWrite(M1,HIGH);
        digitalWrite(M2, HIGH);
         analogWrite(E1, value); //PWM Speed control
         analogWrite(E2, value); //PWM Speed control
         delay(30);
    }
}

bubulindo


Code: [Select]

void loop()
{
    int value;
    for(value = 0 ; value <= 255; value+=5)
    {
         digitalWrite(M1,HIGH);
        digitalWrite(M2, HIGH);
         analogWrite(E1, value); //PWM Speed control
         analogWrite(E2, value); //PWM Speed control
         delay(30);
    }
}



Eu invejo-te. Como é que consegues detectar diferença de velocidade se ela está sempre a mudar? Experimenta isto

Code: [Select]

void loop()
{
    int value=128;
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);
    analogWrite(E1, value); //PWM Speed control
    analogWrite(E2, value); //PWM Speed control
    delay(30);
   
}


Assim será mais simples de ver s diferença de comportamento dos motores.
This... is a hobby.

danielbit



Code: [Select]

void loop()
{
    int value;
    for(value = 0 ; value <= 255; value+=5)
    {
         digitalWrite(M1,HIGH);
        digitalWrite(M2, HIGH);
         analogWrite(E1, value); //PWM Speed control
         analogWrite(E2, value); //PWM Speed control
         delay(30);
    }
}



Eu invejo-te. Como é que consegues detectar diferença de velocidade se ela está sempre a mudar? Experimenta isto

Code: [Select]

void loop()
{
    int value=128;
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);
    analogWrite(E1, value); //PWM Speed control
    analogWrite(E2, value); //PWM Speed control
    delay(30);
   
}


Assim será mais simples de ver s diferença de comportamento dos motores.



na verdade bubulindo,  eu coloco uma fita no eixo dos motores !
elas começam girando juntas, e depois é nitidamente que uma tá mais rápido que a outra!

ABS

fabio_h

Apesar de serem 2 motores iguais, há tolerância tanto no eixo que passa pela bucha(um pode estar mais justo que o outro), paralelismo das buchas do motor...
Isso pode ser ajustado no software, veja:
Code: [Select]

const  int value=128, ajuste=5;
void setup()
{
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);
    analogWrite(E1, value+ajuste);Se este é o motor que gira menos, faça com que receba mais "força".
    analogWrite(E2, value); //PWM Speed control
}


testa ai e nos diz...

danielbit


Apesar de serem 2 motores iguais, há tolerância tanto no eixo que passa pela bucha(um pode estar mais justo que o outro), paralelismo das buchas do motor...
Isso pode ser ajustado no software, veja:
Code: [Select]

const  int value=128, ajuste=5;
void setup()
{
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);
    analogWrite(E1, value+ajuste);Se este é o motor que gira menos, faça com que receba mais "força".
    analogWrite(E2, value); //PWM Speed control
}


testa ai e nos diz...


show de bola !

essa eu desconhecia !

funcionou bem !

valeu !

agora eu só tenho que quebrar a cabeça pra descobrir e aprender, como eu faço para controlar o sentido dos motores
pelo teclado !

eu estive lendo alguma coisa sobre capaturar o estado da tecla, tipo, enquanto mantenho precionado a tecla W o motor gira pra frente, quando a solto ele para ! e assim para os outros lados !

vi tb algo sobre.... quando teclado sem manter precionado, o motor gira, e quando eu teclo espaço ele para...

mas... ainda é muito difícil pra mim !
to tentando achar um cod já funcionado para que eu posso estudar por ele !

valeu !

abs

Go Up