Problemi Progetto Scarafaggio

Salve gente! Sto progettando uno scarafaggio comandato da Arduino. Come si può notare dalle foto, è composto da 6 zampe e 3 servomotori. Un primo servomotore controlla la zampa posteriore e anteriore destra; un secondo servomotore controlla la zampa posteriore e anteriore sinistra; infine, un terzo servomotore controlla le due zampe centrali che hanno la semplice funzione di sollevarsi e permettere il passo. Inoltre vi sono due antenne, collegate a due pulsantini, in modo tale che, quando quest'ultime vengono inclinate dopo aver incontrato un ostacolo, il ragno si giri.
Il programma che ho scritto è il seguente:

#include <Servo.h>
Servo motore1;
Servo motore2;
Servo motore3;
int pos1 = 20;
int pos2 = 150;
int pos3 = 0;

void setup () {
 motore1.attach(2);
 motore2.attach(3);
 motore3.attach(7);
} 

void loop () {

 for (pos1= 20; pos1 <170; pos1+= 1) {
          motore1.write (pos1);
           delay(10);
 }
 for (pos2= 150; pos2 >20; pos2-= 1) {
          motore2.write (pos2);
          delay(10);
           }}

Il ragno cammina correttamente,cioè muove le zampe in maniera alternata consentendo così il passo. Ho un problema però: Non so come aggiungere il motore 3. Avevo provato a scrivere il motore3, senza un for, con: motore3.write (140), si alzava la zampa centrale destra; con motore3.write(60), si alzava la zampa centrale sinistra. Ho provato a mettere 100, credendo che fosse il valore esatto per farle alzare contemporaneamente, ma non va. Sapreste dirmi quale comando dovrei inserire o modificare al mio programma ? Inoltre, cosa ve ne pare? Avete altre idee per far fungere il progetto? Per qualsiasi altra informazione sono qui. In attesa di una vostra risposta, vi ringrazio in anticipo. :slight_smile:

oddio che schifo uno scarafaggio :slight_smile: :slight_smile: :slight_smile:
comunque ricordati di mettere il codice nella funzione "insert code" perché così è un pasticcio.....
comunque prova a fare una cosa del genere

void loop() {
  
  
  digitalWrite(ledPin, HIGH);
  delay(100);
  digitalWrite(ledPin, LOW);
  delay(100); 
}

questo era uno dei miei primi codici per far accendere e spegnere un led... prova a modificarlo per il tuo servo

MadeInItaly:
oddio che schifo uno scarafaggio :slight_smile: :slight_smile: :slight_smile:
comunque ricordati di mettere il codice nella funzione "insert code" perché così è un pasticcio.....
comunque prova a fare una cosa del genere

void loop() {

digitalWrite(ledPin, HIGH);
  delay(100);
  digitalWrite(ledPin, LOW);
  delay(100);
}



questo era uno dei miei primi codici per far accendere e spegnere un led... prova a modificarlo per il tuo servo

Modificato, scusami!
Comunque, quel programma che dicevi tu l'ho provato come dicevo nell'ultima parte della discussione. Ma non me li alza contemporaneamente :confused:

allora non so come fare ad aiutarti a parte dirti di utilizzare due servo per le "zampe" centrali

Sarebbe utile secondo me tu indicassi come dovrebbero muoversi i tre motori con un psudocodice, oppure a parole.
Cioè, M1 e M2 devono muoversi in tempi alternati ? E quindi il M3 (centrali) quando si deve muovere?

A me sembra una discussione tipo "non guardarmi tanto non ti sento" :smiley: :smiley:

nid69ita:
Sarebbe utile secondo me tu indicassi come dovrebbero muoversi i tre motori con un psudocodice, oppure a parole.
Cioè, M1 e M2 devono muoversi in tempi alternati ? E quindi il M3 (centrali) quando si deve muovere?

Allora M1 comanda le due zampe di destra, mentre M2 le due zampe di sinistra. Quando le due zampe di destra vanno avanti, subito dopo vanno avanti le altre due di sinistra, poi tornano indietro quelle di destra, poi quelle di sinistra, e si ripete il ciclo. E questo a me va bene. M3 gestisce le zampe centrali, che semplicemente si aprono o si chiudono, permettendo cosi il passo del robot. Quando stanno chiuse, restano bloccate per terra, invece quando si aprono, si sollevano da terra e permettono il passo. Io non riesco a gestirle o meglio, non so quale comando utilizzare affinché si aprano come dico io. Io, facendo una serie di prove, ho visto che scrivendo il comando "motore3.write (140)" (senza utilizzare il for) si alza la zampa destra; mentre con "motore3.write(60)" si alza la zampa sinistra. Vorrei farle alzare contemporaneamente, ma non ci riesco. Sapreste dirmi quale comando utilizzare? A me serve alzarle entrambe perchè se alzo una sola zampa, l'altra resta bloccata a terra e fa da palo: ovvero il robot non va dritto ma si gira.

Il servomotore è un motore che ruota solo di 180 gradi e quindi l'asta del servo si muove una verso il basso e l'altra verso l'alto e viceversa quindi sarebbe impossibile alzarli tutte e due (le zampe) contemporaneamente quindi ti servono 2 servo
Pensaci no? :grin:

Non ho l'oggetto in mano perciò è difficile verificare. A me viene in mente che un animale a 6 zampe dovrebbe muoversi con 3 zampe alla volta. 2 da un lato e 1 dall'altra.
http://www.arxterra.com/hexapod-forward-and-backward-movement-calculation-and-algorithm/#
Abbasso a DX davanti e dietro e a SX il centrale. Poi movimento opposto DX centrale e SX davanti e dietro.
Così ha un senso che il servo centrale non metta in terra le 2 zampe centrali contemporaneamente ma solo alternate.
Quando una zampa centrale è giù allora in quel momento dovrebbero essere sollevati davanti e dietro quelle del suo lato.
Ma ripeto, non posso provarlo. Magari @Astro saprebbe rispondere meglio.