• Welcome to LusoRobótica - Robótica em Português.
 

RC car

Started by Bony, 20 de July de 2012, 22:07

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Bony

Actualizacao seguem umas fotos:



















Estou a pensar em usar esse comando, mas o problema é que o arduino Uno e shield com o xbee nao cabem dentro do telecomando, e nao queria estar só a tirar o joysticks, queria mesmo usar o telecomando todo até porque se torna mais pratico :) estava a pensar num arduino mini mas dps tb nao dá para o shield :S

senso

Livra-te da doença que são os shields..
Eu num nunchuck enfiei um atmega8 dip de 28 patas, se usasses um nRF do ebay, ficava o atmega e o nrf de um dos lados, se tirares os motores de vibração e do outro lado dá para meter uma célula LiPo de 1000mAh.
Avr fanboy

Bony

mas para que serve o nRF ? para meter os xbee a comunicar nao preciso dos shields ?

senso

O nRF é um módulo de comunição, muito mais barato que os Xbee, claro que podes usar Xbee sem o shield, o shield é basicamente um conjunto de header soldados num pedaço de pcb.
Avr fanboy

Bony

agora já que os comprei vou usar :) qual é a distancia maxima de comunicação desses nRF ? agora o objectivo é arranjar uma maneira de meter um arduino e o xbee dentro desse comando... mas como ?

qual é a diferenca este isto:

http://www.ptrobotics.com/product.php?id_product=1434

http://www.ptrobotics.com/product.php?id_product=230

mesmo que um desses brinquedos dê para adaptar dentro do comando, fico sem saber como adaptar o modulo xbee... até agora tinha sempre visto projectos em que usavam o shield...
Quando comprei isto nao tinha ideia de usar mesmo um telecomando estava a pensar em fazer um numa pcb e tal, mas agora com ele ali, vejo que se torna até muito mais pratico dps quando andar a brincar com o carro !

senso

O nano tem interface USB/FTDI para o programares o mini não, usas outro arduino ou um cabo usb-serial com DTR para o auto-reset, os nomes são parvos e para o tamanho de cada estão trocados..

Então, ligas meia duzia de fios, os Xbee é rx tx alimentação e pouco mais, esse é um dos efeitos de só se usar shields e bibliotecas de código já feitas, nunca sabes como funciona..
Avr fanboy

Bony

mas tu tinhas me dito por ai em algures que os xbee´s nao se podiam utilizar sem os shield, isto é, que nao dava para ligar directamente ao arduino sem passar primeiro pelo shield... pelo menos foi o que entendi !

Agora neste caso por exemplo do nano, já fiz uma pesquisa rápida e tb há shield para os xbee mas neste caso fico no mesmo porque já fica mto grande... mas dá para meter os xbee a funcar no nano sem shield ?

senso

O shield é isto:
http://www.arduino.cc/en/uploads/Main/XbeeShieldSchematic.pdf

Ou seja, um divisor de tensão para que o Tx do arduino chegue ao Xbee com 3.3v, uns transistores não sei bem para quê, e um regulador de tensão de 3.3v, porque o Xbee funciona a 3.3v.
Avr fanboy

Bony

Bem o gajo ja vira com o joystick mas ainda atrofia nao sei pk... tenho que fazer mais uns testes aquilo.

Mas no joystick, quando este nao está a virar para lado nenhum, ele tem que asumir que valor ?

senso

Supostamente metade da tensão que estás a aplicar, se for 5v são cerca de 2.5v, com adc do arduino que é de 10 bits deve andar por volta de 512 contagens, mas como o joystick não vai totalmente a 0 nem a 1023, nem o centro é precisamente 512, tens de meter isso a imprimir na consola para veres os valores, mas para o centro para parar, adicionas uma histerese ai de 10 contagens, ou seja, se o valor for entre 502 e 522 assumes que está parado, tambem podes fazer umas funções para calibrar isso automático.
Avr fanboy

Bony

pois... entao o problema deve estar ai... é que ele na consola nao esta mesmo a 512 e o servo atrofia... mostra-me um exemplo de uma histerese de 10 contagens, nao sei o que é isso :S já agora outro exemplo de como calibrar isto automaticamente, se calhar até era a melhor solução :P pk quando viro todo para direita ou todo para a esquerda o o servo atrofia e fica com tiques, provavelmente isso resolvia com uma histerese ou calibração automatico como tinhas dito... desconheco!

senso

Quoteadicionas uma histerese ai de 10 contagens, ou seja, se o valor for entre 502 e 522 assumes que está parad

Esta parte é bastante simples, é um if, acho que o texto é explicito..
if(potVal>502 & potVal<522){  //assume que joystick está ao centro
     //codigo aqui
}



Estás a dar que valores aos servos?
Mostra ai o código.
Avr fanboy

Bony

Deixo aqui um video do problema: Teste direccao RC.mp4

ao principio do filme o servo esta desligado dps ligo ele vira todo para a esquerda sozinho e nem estou a carregar em nada do joystick :| dps viro para a direita ele vira na boa, mas dps quando esta totalmente virado para a direita fica com aqueles tiques, e o mesmo acontece quando viro totalmente para a esquerda, sem carregar em nada no joystick ele fica tb virado para a esquerda com dos tiques :|

este é o codigo que estou a usar, nao vejo nada de errado:



#include <Servo.h>

const int servo1 = 3;       // first servo
const int joyH = 4;        // Joystick Horizontal Axis
const int joyV = 5;        // Joystick vertical Axis

int servoVal;           // variable to read the value from the analog pin

Servo myservo1;  // create servo object to control a servo



void setup() {

  // Servo
  myservo1.attach(servo1);  // attaches the servo

  // Inizialize Serial
  Serial.begin(9600);
}


void loop(){

    // Display Joystick values using the serial monitor
    outputJoystick();

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyV);
    servoVal = map(servoVal, 0, 1023, 70, 180);     // scale it to use it with the servo (result between 70 and 180)

    myservo1.write(servoVal);                          // sets the servo position according to the scaled value

    delay(15);                                     // waits for the servo to get there

}


/**
* Display joystick values
*/
void outputJoystick(){

    Serial.print(analogRead(joyH));
    Serial.print ("---");
    Serial.print(analogRead(joyV));
    Serial.println ("----------------");
}



Deixo aqui uns print´s dos valores do monitor:
- Quando nao estou a carregar em nada no joystick:

http://i296.photobucket.com/albums/mm184/CrazyBony/RC%20Xuning/Semcarregaremnada.jpg[/img]]

- Tudo para a direita:

http://i296.photobucket.com/albums/mm184/CrazyBony/RC%20Xuning/Tudoparaadireita.jpg[/img]]

- Tudo para a esquerda:

http://i296.photobucket.com/albums/mm184/CrazyBony/RC%20Xuning/Tudoparaaesquerda.jpg[/img]]


zordlyon

Eu nunca lidei com esta função mas já experimentas te nesta linha mudar:

servoVal = map(servoVal, 0, 1023, 70, 180);

para:

servoVal = map(servoVal, 0, 1023, 0, 180);
Cumprimentos,
André Carvalho.

senso

O servo tremer muito possivelmente é porque estás a exceder os limites do servo e o motor do servo está a forçar as engranagens contra os batentes de plástico.
Avr fanboy