Show Posts
|
|
Pages: [1]
|
|
1
|
International / Hardware / Arduino due con gldc touch, mouse e tastiera
|
on: December 03, 2012, 09:06:01 am
|
|
Ciao a tutti. Premetto che è un progetto che ho in testa, quindi devo ancora definire cosa comprare e non ho un codice su cui lavorare. Infatti prima di iniziare vorrei vedere se è fattibile.
La mia idea era di creare una specie di mini-tablet, come quelli che girano ora. In generale vorrei collegare ad Arduino due un lcd grafico (non per forza touch) e creare una interfaccia grafica dove posso muovere un puntatore guidato dal mouse, e a seconda di dove clicco far partire dei sotto-programmi, uno di questi può essere un semplice editor di testo su cui scrivere con la tastiera.
Però non so se è fattibile...Arduino due dovrebbe permettere di gestire mouse e tastiera no? E contemporaneamente? Su internet ho trovato molti glcd a colori di vario tipo, voi ne avete qualcuno da consigliarmi?
Grazie a tutti
|
|
|
|
|
3
|
Using Arduino / Sensors / Problems with optical encoder and motor shield.
|
on: November 18, 2012, 03:25:36 pm
|
Hi everybody, i have a problem with optical encoder and the motor shield. When the two motors are stopped, the encoders function properly: making them rotate by hand, they count 20 steps per spin but when the motors are on, some interferences make much many steps be counted instead of their real number. I paste the code but not the whole one because it’s too long. I don’t think there’s something wrong, but there could be something to better. #define LEFT 0 #define RIGHT 1
//i pin usati per i due motori int SX = 6; int M1 = 7; int DX = 5; int M2 = 4; //le due "velocità" dei motori int velocita_sx = 100; int velocita_dx = 100;
//array per l'encoder long coder[2] = {0,0};
void setup(){ attachInterrupt(LEFT, LwheelSpeed, CHANGE); //inizializzo il pin 2 per l'interrupt attachInterrupt(RIGHT, RwheelSpeed, CHANGE); //inizializzo il pin 3 per l'interrupt pinMode(M1, OUTPUT); //pin per il controllo dei due motori pinMode(M2, OUTPUT); Serial.begin(9600); }
void loop(){ Serial.print("Coder value: "); //stampo a monitor il valore dell'array Serial.print(coder[LEFT]); Serial.print("[Left Wheel] "); Serial.print(coder[RIGHT]); Serial.println("[Right Wheel]"); digitalWrite(M1,LOW); //per definire il senso di rotazione digitalWrite(M2, LOW); if(coder[LEFT] < 50 && coder[RIGHT] < 50){ //dovrebbe fare 50 passi dell'encoder e poi fermarsi analogWrite(SX, velocita_sx); analogWrite(DX, velocita_dx); } if(coder[LEFT] >= 50 && coder[RIGHT] >= 50){ analogWrite(DX, 0); analogWrite(SX, 0); } }
//le due funzioni chiamate dall'interrupt per aumentare il contatore dei passi void LwheelSpeed() { coder[LEFT] ++; } void RwheelSpeed() { coder[RIGHT] ++; }
Thanks for your help.
|
|
|
|
|
4
|
International / Hardware / Problemi encoder ottico
|
on: August 10, 2012, 03:43:03 am
|
Ciao a tutti, ho un problema con l'encoder ottico e il motor shield. Quando i due motori sono fermi gli encoder funzionano perfettamente, infatti facendoli girare a mano contano 20 passi per giro completo, quando invece aziono i motori vengono fuori certe interferenze che fanno contare molti più passi di quanti non lo siano realmente. Posto il codice interessato, non tutto perchè sarebbe troppo lungo. Anche se non credo ci sia qualcosa di sbagliato, però magari ci potrebbero essere delle migliorie da fare. #define LEFT 0 #define RIGHT 1
//i pin usati per i due motori int SX = 6; int M1 = 7; int DX = 5; int M2 = 4; //le due "velocità" dei motori int velocita_sx = 100; int velocita_dx = 100;
//array per l'encoder long coder[2] = {0,0};
void setup(){ attachInterrupt(LEFT, LwheelSpeed, CHANGE); //inizializzo il pin 2 per l'interrupt attachInterrupt(RIGHT, RwheelSpeed, CHANGE); //inizializzo il pin 3 per l'interrupt pinMode(M1, OUTPUT); //pin per il controllo dei due motori pinMode(M2, OUTPUT); Serial.begin(9600); }
void loop(){ Serial.print("Coder value: "); //stampo a monitor il valore dell'array Serial.print(coder[LEFT]); Serial.print("[Left Wheel] "); Serial.print(coder[RIGHT]); Serial.println("[Right Wheel]"); digitalWrite(M1,LOW); //per definire il senso di rotazione digitalWrite(M2, LOW); if(coder[LEFT] < 50 && coder[RIGHT] < 50){ //dovrebbe fare 50 passi dell'encoder e poi fermarsi analogWrite(SX, velocita_sx); analogWrite(DX, velocita_dx); } if(coder[LEFT] >= 50 && coder[RIGHT] >= 50){ analogWrite(DX, 0); analogWrite(SX, 0); } }
//le due funzioni chiamate dall'interrupt per aumentare il contatore dei passi void LwheelSpeed() { coder[LEFT] ++; } void RwheelSpeed() { coder[RIGHT] ++; }
|
|
|
|
|
6
|
International / Italiano / Re: Interferenze Motor Shield e servomotori.
|
on: July 08, 2012, 11:45:39 am
|
potrebbe anche essere un problema legato al codice, postalo se puoi.
Non credo, perchè anche con semplici test il servo non teneva l'angolo. Lo posterò appena ci si potrà capire qualcosa  Hai provato tutte le soluzioni assieme compreso l'optoisolatore? I condensatori di disaccoppiamento vanno il più vicino possibile al servo
Ciao
L' optoisolatore ancora no perchè non ce l'ho. Comunque ho provato a cambiare servo e ora vedo che questo sembra essere stabile. Rimonto tutto per bene e vediamo se va.
|
|
|
|
|
8
|
International / Italiano / Interferenze Motor Shield e servomotori.
|
on: July 07, 2012, 06:13:27 pm
|
|
Ciao a tutti, sto tentando di costruire un robottino con due motori comandati dal motor shield, e un servomotore che supporta il sensore a ultrasuoni. Il problema sorge quando devo far funzionare le due cose contemporaneamente, il servomotore risente di una qualche interferenza e non riesce più a stare fermo all'angolo impostato. Ho provato a mettere un diodo all'alimentazione del servo perchè avevo letto che aiutava ad evitare interferenze ma non ha funzionato. Allora ho provato a usare "servo.detach()" ogni volta che non mi serviva muovere il servomotore ma non funziona ugualmente. Come fare?
Grazie dell'aiuto in anticipo.
|
|
|
|
|