spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 26-07-2013, 22.55.44
L'avatar di Ostrogoto0101
Ostrogoto0101 Ostrogoto0101 non è collegato
Robottaro senior
 
Data registrazione: 14-06-2012
Residenza: Italy
Età : 41
Messaggi: 73
Potenza reputazione: 33
Ostrogoto0101 E' per ora ancora un mistero
Predefinito 2 Arduino 2 xbee e segnale analogico "AIUTO"

Salve a tutti , ultimamente sto trovando alcune difficoltà nello scrivere un po di codice per Arduino ! Ho cominciato la realizzazione di un controller personalizzato per alcuni miei Mech !
Per inviare e ricevere comandi ho deciso di utilizzare due arduino e due xbee !
Sono riuscito ad inviare caratteri sia come valori digitali e valori analogici !
Il problema che non riesco a risolvere è quello di capire come posso inviare il valore del segnale analogico per muovere due servo in Pan&Tilt !
Utilizzando una sola scheda la cosa era più semplice !
Codice:
#include <Servo.h> 

Servo PanServo;  // Crea l'oggetto  per il movimento pan 
Servo TiltServo;  // Crea l'oggetto  per il movimento tilt 

int PanPin = 2;  // Input analogico per lo stick asse orizzontale
int TiltPin = 3;  // Input analogico per lo stick asse verticale
int PanVal;      // Legge il valore del Pan
int TiltVal;      // Legge il valore del Tilt

void setup()
{
  PanServo.attach(5);   // PanServo pin 5 
  TiltServo.attach(6);   // TiltServo  pin 6
}

void loop()
{
  PanVal = analogRead(PanPin);             // Legge la posizione dello stick 

  PanVal = map(PanVal, 0, 1023, 0, 179);   // Scala di lettura 

  PanServo.write(PanVal);                  // Muove il servo al valore

  TiltVal = analogRead(TiltPin);             // Legge la posizione dello stick 

  TiltVal = map(TiltVal, 0, 1023, 0, 179);   // Scala di lettura 

  TiltServo.write(TiltVal);                  // Muove il servo al valore 

  delay(15);                                 // Pausa 
}

Ma nel mio caso ho un Arduino trasmittente e un Arduino ricevitore !
Per quanto riguarda il trasmittente ho realizzato questo tipo di codice !


Codice:
int PanPin = 2;  // Input analogico per il joystick asse orizzontale
int PanVal ;
int TiltPin = 3;  // Input analogico per il joystick asse verticale
int TiltVal ;

void setup() {
  Serial.begin(9600);


}
void loop(){
  PanVal = analogRead(PanPin);
    PanVal = map(PanVal, 0, 1023, 0, 179);
    TiltVal= analogRead(TiltPin);
    TiltVal = map(TiltVal, 0, 1023, 0, 179); 
}
  if (PanVal>100) {
         Serial.print("P");
      Serial.println(PanVal);
               Serial.print("T");
      Serial.println(TiltVal);
      delay (500);
      }  else if (PanVal<90) {
         Serial.print("P");
      Serial.println(PanVal);
               Serial.print("T");
      Serial.println(TiltVal);
      delay (500);
      }  else if (TiltVal>100) {
         Serial.print("T");
      Serial.println(TiltVal);
      Serial.print("P");
      Serial.println(PanVal);
      delay (500);
      }  else if (TiltVal<80) {
         Serial.print("T");
      Serial.println(TiltVal);
      Serial.print("P");
      Serial.println(PanVal);
      delay (500);
      }
Ora per non avere sempre la seriale impegnata e per distinguere i due valori analogici ho utilizzato le lettere P e T rispettivamente pan e tilt ! che scriveranno sulla seriale solo dopo un certo valore ! Ho deciso di inviare in coppia i due valori per non avere solo un movimento per volta !
esempio
P120
T70

Ora nel ricevitore Arduino come devo comportarmi !
Piuttosto che continuare a scrivere codice senza senso gradirei l'aiuto di una anima Pia !
Io sono alla frutta !
Grazie comunque per l'attenzione !
__________________


La Guerra dei Mech http://forum.roboitalia.com/group.php?groupid=5
La Guerra dei Mech Machitalia Forumhttp://www.mechitalia.altervista.org/forum/
Rispondi citando
  #2  
Vecchio 26-07-2013, 23.58.57
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Dai un'occhiata a questo controllo e rielabora la sequenza del codice.

Ciao

Antonio
Rispondi citando
  #3  
Vecchio 27-07-2013, 12.25.07
L'avatar di Ostrogoto0101
Ostrogoto0101 Ostrogoto0101 non è collegato
Robottaro senior
 
Data registrazione: 14-06-2012
Residenza: Italy
Età : 41
Messaggi: 73
Potenza reputazione: 33
Ostrogoto0101 E' per ora ancora un mistero
Predefinito

Ciao Caronte grazie per la tempestiva risposta !
Questo fine settimana è dedicato alla famiglia !
Anche se negli ultimi tre giorni non ho concluso niente, ed ora la mia testa va sempre li !
Lunedì comincerò a riprovare qualcosa anche se non riesco a intuire come far capire ad Arduino ricevente quale sia il segnale P , e quale il T !
Ho dato una occhiata alla funzione matematica
constrain(x,a,b) - dove x è il valore costretto tra "a" e "b" ed usando min e max dovrei costringere il servo a non andare oltre certi valori !
Spero di riuscire anche se la vedo dura !
__________________


La Guerra dei Mech http://forum.roboitalia.com/group.php?groupid=5
La Guerra dei Mech Machitalia Forumhttp://www.mechitalia.altervista.org/forum/
Rispondi citando
  #4  
Vecchio 27-07-2013, 13.46.28
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da Ostrogoto0101 Visualizza messaggio
Lunedì comincerò a riprovare qualcosa anche se non riesco a intuire come far capire ad Arduino ricevente quale sia il segnale P , e quale il T !
Appunto! Che ti importa di farglielo sapere? ServoPan, ServoTilt.... lo sa già!

Ciao

Antonio
Rispondi citando
  #5  
Vecchio 28-07-2013, 23.32.35
L'avatar di Ostrogoto0101
Ostrogoto0101 Ostrogoto0101 non è collegato
Robottaro senior
 
Data registrazione: 14-06-2012
Residenza: Italy
Età : 41
Messaggi: 73
Potenza reputazione: 33
Ostrogoto0101 E' per ora ancora un mistero
Predefinito

Ciao Caronte , non potendo provare nessun codice fino a domani , le tue parole mi hanno fatto riflettere , passando il fine settimana con la testa fra le nuvole !
Con il telefono ho difficoltà a scrivere del codice !
Sulla trasmittente impostando questo valore ho ottenuto ben poco
PanVal = map(PanVal, 0, 1023, 0, 179);
Serial.print("P");
Serial.println(PanVal);
portando cosi a inviare
Es. P50

L'altro Arduino ha un programma che richiama le routine con switch (ch)
case 'W': ecc. ecc. Ed ad ogni case corrisponde un lettera o numero !
Avevo provato assegnando il case 'P' al pan ma l'unica cosa che ottenevo un movimento casuale del servo
Codice:
PanVal=Serial.read();
myservoPan.write(analogRead(PanVal));
  delay(PanVal); 
  break;
Il risultato migliore lo avuto dichiarando sul trasmettitore Arduino
Codice:
 PanVal = analogRead(PanPin);
    PanVal = map(PanVal, 0, 1023, 0, 5);
creando solo 5 "casi"
Codice:
case '5':

myservoPan.write(140);
delay(500);
break;
case '4':

myservoPan.write(120);
delay(500);
break;
case '3':

myservoPan.write(90);
delay(500);
break;
Ma ho la limitazione di un sistema pan poco preciso con poca risoluzione nel movimento !
Sarei stato disposto a mapparmi anche 179 casi per servo
__________________


La Guerra dei Mech http://forum.roboitalia.com/group.php?groupid=5
La Guerra dei Mech Machitalia Forumhttp://www.mechitalia.altervista.org/forum/
Rispondi citando
  #6  
Vecchio 29-07-2013, 10.09.44
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Infatti questo è il valore giusto

PanVal = map(PanVal, 0, 1023, 0, 5);
Comunque non sono mai andato oltre anche perchè uso cubloc e bx24 per le comunicazioni. Per gli arduini uso l'i2c.

Comunque se fossi in te mi andrei a studiare le stringhe e metterei tutte le letture in una stringa, trasmetterei quella (con opportuni limiter) e in ricezione andrei ad estrarre i valori. Perlomeno io faccio così. Per arduino non sono ferrato sulla 'manipolazione' delle stringhe (non ne ho avuto bisogno) ma al limite ci si guarda e ci si arriva.

Ciao

Antonio
Rispondi citando
  #7  
Vecchio 29-07-2013, 10.50.50
L'avatar di Ostrogoto0101
Ostrogoto0101 Ostrogoto0101 non è collegato
Robottaro senior
 
Data registrazione: 14-06-2012
Residenza: Italy
Età : 41
Messaggi: 73
Potenza reputazione: 33
Ostrogoto0101 E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da Caronte Visualizza messaggio
Infatti questo è il valore giusto

PanVal = map(PanVal, 0, 1023, 0, 5);
Ciao Caronte ringrazio per la tua disponibilità , e per avermi indicato la strada da percorrere !
Spesso rimango vittima della mia ignoranza , ma essendo duro come un caprone non mi arrendo facilmente !
Continuerò come da tua indicazione , poi farò sapere !
Saluti ... e GRAZIE !

Ps.

Ho ricevuto messaggi privati da spammer controllare washkvartal !
So che è una lotta continua !
Rispondi citando
  #8  
Vecchio 29-07-2013, 11.47.51
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da Ostrogoto0101 Visualizza messaggio
Ciao Caronte ringrazio per la tua disponibilità , e per avermi indicato la strada da percorrere !
Spesso rimango vittima della mia ignoranza , ma essendo duro come un caprone non mi arrendo facilmente !
Continuerò come da tua indicazione , poi farò sapere !
Saluti ... e GRAZIE !

Ps.

Ho ricevuto messaggi privati da spammer controllare washkvartal !
So che è una lotta continua !
Approvo la testardaggine. Vai su settorezero e/o gioblu: vedrai che trovi sicuramente qualche esempio. Comunque ho dato un'occhiata alla manipolazione di stringhe con arduino: sembra complicata ma non lo è.

Tranquillo, vai qui e leggiti ogni comando e vedrai che ci riesci. La strada che avevi preso va bene per un servo o due ma nel caso del tuo robot....

Ciao

Antonio

P.s. Cacciato fuori washschifochesegliprendeunaccidentecattivofaunfavo realmondo
Rispondi citando
  #9  
Vecchio 29-07-2013, 15.21.43
L'avatar di Ostrogoto0101
Ostrogoto0101 Ostrogoto0101 non è collegato
Robottaro senior
 
Data registrazione: 14-06-2012
Residenza: Italy
Età : 41
Messaggi: 73
Potenza reputazione: 33
Ostrogoto0101 E' per ora ancora un mistero
Predefinito

Grazie Caronte

Spero non aver esagerato per gli standard del forum !

Ti ringrazio per avermi fatto arrivare alla soluzione con le mie forze ! Amo capire quello che faccio ! Anche se in alcuni casi il mio "Hobby" diventa quasi un lavoro a tempo pieno ! E durante la giornata trovo sempre meno tempo ......
Alla fine ho risolto così !

Trasmettitore Arduino dopo le inizializzazioni
Codice:
 PanVal = analogRead(PanPin);
    PanVal = map(PanVal, 0, 1023, 1, 3);
    TiltVal= analogRead(TiltPin);
    TiltVal = map(TiltVal, 0, 1023, 4, 6);

Ricevente Arduino
Codice:
case '1':
if(anglePan > ANGLEPAN_STEP) {

anglePan = anglePan + ANGLEPAN_STEP; // step a sx

} else {

anglePan = 0;

}

myservoPan.write(anglePan);
break;
}
Spero possa essere utile per generazioni future , anche perché in rete non avevo trovato nulla di simile !
Grazie Caronte ! Da oggi hai un nuovo fan !!
__________________


La Guerra dei Mech http://forum.roboitalia.com/group.php?groupid=5
La Guerra dei Mech Machitalia Forumhttp://www.mechitalia.altervista.org/forum/
Rispondi citando
  #10  
Vecchio 29-07-2013, 16.33.26
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da Ostrogoto0101 Visualizza messaggio

Spero non aver esagerato per gli standard del forum !

Ti ringrazio per avermi fatto arrivare alla soluzione con le mie forze ! Amo capire quello che faccio ! Anche se in alcuni casi il mio "Hobby" diventa quasi un lavoro a tempo pieno ! E durante la giornata trovo sempre meno tempo ......
Alla fine ho risolto così !

Trasmettitore Arduino dopo le inizializzazioni
Codice:
 PanVal = analogRead(PanPin);
    PanVal = map(PanVal, 0, 1023, 1, 3);
    TiltVal= analogRead(TiltPin);
    TiltVal = map(TiltVal, 0, 1023, 4, 6);
Ricevente Arduino
Codice:
case '1':
if(anglePan > ANGLEPAN_STEP) {

anglePan = anglePan + ANGLEPAN_STEP; // step a sx

} else {

anglePan = 0;

}

myservoPan.write(anglePan);
break;
}
Spero possa essere utile per generazioni future , anche perché in rete non avevo trovato nulla di simile !
Grazie Caronte ! Da oggi hai un nuovo fan !!
Di niente! Ne bastava uno. Poi hai fatto tutto tu!

Alla prox!

Ciao!

Antonio
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
"delucidazioni"su xbee xctu e programmi affini blk012 Elettronica 0 22-02-2011 10.45.05
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Forum generale 3 25-10-2007 14.20.35
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Elettronica 2 22-10-2007 22.55.56
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Forum generale 0 22-10-2007 21.43.34
Nuova Funzione "Ricerca" e "Reputazione" R2D2 Suggerimenti 1 26-11-2005 13.29.33


Tutti gli orari sono GMT. Adesso sono le: 00.42.52.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB