sto facendo la stessa cosa per un inseguitore solare...
ma sono in fase assemblaggio hardwere
di dove sei?
allora io sono partito pensando a motori in corrente continua reversibili (avanti e indietro) .... si potrebbero usare anche servomotori e/o motori passo passo.
ovviamente i motori necessitano di un riduttore.... sia er problemi di velocità/angolo (i passo passo hanno angoli minimi intorno ai 5 gradi) ....
se partiamo da mio "progetto" ti servono ... 2 uscite digitali per motore, avanti e indietro a seconda della potenza e della tensione del motore ti servono eventualmente 4 relè per motore.
Poi ti servono quelli che vengono chiamati “encoder” ? i misuratori di angolo .. io sto usando dei semplici potenziometri da 5kohm ad un giro e quindi due ingressi analogici per leggere la lettura.
Poi se proprio vuoi .. ci sono dei fermo-corsa (4) che possono interagire solo con il motore?. o anche riportarli ad arduino .. nel secondo caso altre 4 ingressi digitali.
Per cui ti servono .. 4 uscite/ingressi digitali
Eventualmente altre 4 uscite/ingressi digitali
2 ingressi analogici
il tuo programma deve essere in grado di leggere e scrivere i dati da dseriale (o usb) e confrontare gli angoli attuati con quelli calcolati ed eventualmente correggerli, inviano inviando comanndi con lettere " E O N S" intuetivamente per il muovimento dei motori e " A B" per spegnere i motori ...
il codice poi .. è molto semplice.
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pins:
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
}
void loop() {
// read the sensor:
if (Serial.available() > 0) {
int inByte = Serial.read();
// do something different depending on the character received.
// The switch statement expects single number values for each case;
// in this exmaple, though, you're using single quotes to tell
// the controller to get the ASCII value for the character. For
// example 'a' = 97, 'b' = 98, and so forth:
switch (inByte) {
case 'N':
if (digitalRead(24) ) {
digitalWrite(24, LOW);
digitalWrite(25, LOW);
}
digitalWrite(22, HIGH);
digitalWrite(24, HIGH);
break;
case 'S':
if (digitalRead(22) ) {
digitalWrite(22, LOW);
digitalWrite(23, LOW);
}
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
break;
case 'E':
if (digitalRead(28) ) {
digitalWrite(28, LOW);
digitalWrite(29, LOW);
}
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
break;
case 'W':
if (digitalRead(26) ) {
digitalWrite(26, LOW);
digitalWrite(27, LOW);
}
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
break;
case 'A':
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
break;
case 'B':
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
break;
}
}
delay(100);
Serial.print(analogRead(0), DEC);
Serial.print(";");
Serial.print(analogRead(1), DEC);
Serial.print(";");
Serial.println(analogRead(2), DEC);
}
:)))