Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Arduino UNO (programmazione)

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Arduino UNO (programmazione)

Messaggioda Foto UtenteAndreDS » 7 dic 2011, 17:58

Salve a tutti, premetto che non so se questo è il posto giusto dove mettere il mio argomento dato che si tratta di programmazione.
Ho voluto riproporre questo argomento dato che nel precedente post (riferito a questo) nessuno mi aveva risposto.
Si tratta della programmazione dell'Arduino UNO.
Esso deve essere programmato in modo che 5 potenziometri possano comandare 5 servomotori.
Premetto anche che non mi intendo assolutamente di programmazione ma credo che quando avrò un po' più di tempo libero cercherò qualcosa che mi aiuti nel mio problema (come libri...).
Ovviamente prima di postare ero andato sul sito dell'Arduino e lì ho trovato proprio il codice che mi permetteva di comandare un servomotore con un potenziometro.
Credevo che sarebbe stato sufficiente copiare il codice e incollarlo sul programma della programmazione dell'Arduino cambiando pin ogni volta che lo copiavo. Ma invece no: mio fratello (che ha studiato informatica molto bene) mi disse che non era giusto utilizzare quel metodo, ma poiché aveva gli esami e adesso frequenta l'università, non ha mai avuto tempo di spiegarmi un po' le basi e come si faceva.
Quindi son tornato a rivolgermi a voi.
CODICE
Codice: Seleziona tutto
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

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

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}


SCHEDA ELETTRONICA
Per la scheda ho utilizzato una millefori ed ho seguito lo schema del sito dell'Arduino ma aggiungendo altre uscite per altri potenziometri e servi. (http://arduino.cc/en/uploads/Tutorial/knob_schem.png)


Spero mi possiate aiutare,
Grazie. ;-)
Avatar utente
Foto UtenteAndreDS
5 1 3
New entry
New entry
 
Messaggi: 93
Iscritto il: 25 nov 2010, 12:49

0
voti

[2] Re: Arduino UNO (programmazione)

Messaggioda Foto UtenteTardoFreak » 7 dic 2011, 18:35

Spostato nella sezione appropriata.

Vorrei tanto :mrgreen: ma non ti posso aiutare poiché non conosco minimamente le librerie di arduino.

sorry
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[3] Re: Arduino UNO (programmazione)

Messaggioda Foto Utentekrossk2 » 22 gen 2012, 10:49

Ciao, se ho capito bene il tuo problema dovrebbe essere semplicissimo. Devi cominciare con dichiarare 5 servi e devi comunicare all'arduino, tramite la funzione setup, a quali pin sono collegati. Di seguito, nella funzione loop fai muovere i servi a seconda del valore letto sui pin analogici, prima però facciamo una proporzione in modo che il valore letto da ogni potenziometro (che va da 0 a 1023) possa essere letto dal servo che accetta valori da 1 a 180 (a meno che il tuo servo non arrivi fino a 360°). Ecco come dovrebbe essere:

Codice: Seleziona tutto
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;

int pot1 = 0;
int pot2 = 0;
int pot3 = 0;
int pot4 = 0;
int pot5 = 0;
int gradi1;
int gradi2;
int gradi3;
int gradi4;
int gradi5;   

void setup()
{
  servo1.attach(5);
  servo2.attach(6);
  servo3.attach(7);
  servo4.attach(8);
  servo5.attach(9);
}

void loop()
{
  gradi1=analogRead(pot1);
  gradi2=analogRead(pot2);
  gradi3=analogRead(pot3);
  gradi4=analogRead(pot4);
  gradi5=analogRead(pot5);

gradi1=map(gradi1, 0, 1023, 0, 179);
gradi2=map(gradi2, 0, 1023, 0, 179);
gradi3=map(gradi3, 0, 1023, 0, 179);
gradi4=map(gradi4, 0, 1023, 0, 179);
gradi5=map(gradi5, 0, 1023, 0, 179);

   servo1.write(gradi1);
   servo2.write(gradi2);
   servo3.write(gradi3);
   servo4.write(gradi4);
   servo5.write(gradi5);
}


non l'ho provato, ma dovrebbe funzionare. Facci sapere! :)
Avatar utente
Foto Utentekrossk2
5 4
New entry
New entry
 
Messaggi: 58
Iscritto il: 21 gen 2012, 22:48


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti