Visualizza un messaggio singolo
Vecchio 29-04-20, 05:40 PM   #1
wrighizilla
Utente
 
Registrato dal: May 2002
Messaggi: 592
wrighizilla inizia ad ingranare.
predefinito centralina 4 ruote sterzanti con arduino nano

volevo condividere con voi questo progetto capace di gestire il servo di sterzo posteriore su crawler e automodelli con 4 ruote sterzanti.
la centralina al momento permette di:
invertire la direzione del servocomando
impostare gli end points
settare la centratura delle ruote

materiale occorrente:
-una board arduino nano v3 ATmega328p la trovate anche su ebay a partire da 2 euro, in Italia costa circa 5 euro spedita.
- un cavetto Y per servocomandi (1 femmina 2 maschi)
-un cavetto per servocomandi maschio
-un cavetto per servocomandi femmina
-il programma arduino ide https://www.arduino.cc/en/main/software
-il driver CH341SER per le schede nano clone CH341SER.EXE è scritto in cinese ma basta premere il rettangolino azzurro
-un cavetto usb-miniusb

allego 2 foto dello schema per la costruzione

1) scaricate arduino ide, installate il driver.

2) aprite arduino ide e collegate la vostra board nano, non importa se ancora non avete saldato nulla.
andate in "strumenti" e settate la "porta" com (io ho la com3 ma varia, la com1 non è mai quella corretta)
settate il tipo di "scheda" arduino nano" e "processore" ATmega328p"

3) saldate il cavetto per servocomando maschio (che andrà poi a collegarsi al servo posteriore) ai piedini VIN (positivo rosso) GND (nero massa) piedino D10 segnale di uscita del servo posteriore

4) saldate il cavetto femmina (che collegherete a una delle 2 estremità del cavetto a Y) ai piedini VIN , GND, piedino D8 (entrata del segnale di sterzo)
l'altra estremità della Y la collegate al servo anteriore, mentre l'ingresso della Y la collegate al canale radio dello sterzo del vostro automodello.

5) settate alla meglio lo sterzo anteriore delle vostra macchina cercando di non avere subtrim indecenti, il settaggio migliore va fatto sempre e comunque con la giusta lunghezza dei rinvii e la squadretta centrata.
collegate la nano alla spina usb, ovviamente collegate la Y e i servi in modo di verificare tutto il progetto.

6) fate un test del segnale di entrata per vedere i valori massimi e minimi del vostro raggio di sterzata, di default li ho messi a 1000-2000 con centratura 1500 ma possono logicamente variare in base a tanti fattori.
i valori li leggete nel "serial monitor" >strumenti di arduino ide girando lo sterzo del radiocomando da un estremità all'altra.

questo è lo sketch per testare gli endpoints, lo copiate in un nuovo tab vuoto e lo lanciate con la freccia nel cerchietto
codice:
int rxpulse;
void setup() {
Serial.begin(9600);
}
void loop() {
rxpulse = pulseIn(8, HIGH); //-- per sapere qual'è il valore del segnale di sterzo
Serial.println(rxpulse);
}
7) una volta determinati gli endpoints del vostro sterzo anteriore ve li segnate e finalmente caricate lo sketch della controller di sterzo

https://pastebin.com/s27QJ37c

8 ) riportate i valori del vostro sterzo nelle stringhe iniziali "DEFINE" antsx antdx sostituendo i numeri di default con i vostri valori ottenuti dal test fatto nel serial monitor.

9) caricate lo sketch nella nano dal menu "sketch> carica" oppure usando la freccina nel cerchietto.
provate la macchina e vedete come siete messi, se la corsa è troppa o poca, se la centratura va rivista, se le ruote girano nel verso giusto etc..

al che, se dovete modificare i parametri.. e sarà molto probabile..

10) cambiate i valori di endpoint "define postdx e postsx che adesso sono approssimativi settati su 30 e 150
per invertire il servo basta invertire i valori di postdx e postsx scambiandoli tra loro
rivedete la centratura delle ruote cambiando il valore 0 con un numero negativo o positivo (es -5, +10 etc.)
se il servo vibra alzate la tolleranza.
di default la tolleranza l'ho impostata a 5 ma se il servo è buono potrebbe essere portata anche a zero. più alta è la tolleranza e più il servo si muoverà a step by step, ad esempio se la mettere a 30 avrete un servo che si sposta come un selettore a scatti.

tutto qui.

allego lo sketch scritto, nel quale ho snellito una procedura con una piccola modifica rispetto al link pastebin.
non avete da fare altro che copiarlo e incollarlo in un nuovo tab
codice:
#define antsx 1000 //-- segnale ingresso  servo anteriore finecorsa sx
#define antdx 2000 //-- segnale ingresso servo anteriore finecorsa dx
#define postsx 30//-- finecorsa servo posteriore sx se invertito con postdx il servo reversa
#define postdx 150 //-- finecorsa servo posteriore dx se invertito con postsx il servo reversa
#define centro 0 //-- aggiunge o sottrae xx valore per correggere la centratura
#define tolerance 5 //-- tolleranza per eventuali vibrazioni ritmiche

#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int newPos, oldPos;
void setup() {
myservo.attach(10); //-- piedino di uscita segnale servo posteriore
pinMode(8, INPUT); //-- piedino di ingresso segnale servo anteriore
void loop() {
rxpulse = pulseIn(8, HIGH);
newPos = map(rxpulse, antsx, antdx,postsx, postdx); 
if (abs (newPos - oldPos)> tolerance) {
oldPos = newPos;

myservo.write(newPos + centro);
}
}
i piedini potete sceglierli voi.. io ho usato l'8 e il 10 ma se volete entrare nella scheda da altri piedini non avete altro da fare che cambiare quei numeri nello schetch e saldarvi ai vostri piedini preferiti.

infine se volete stravolgere il progetto, avete in mente altre possibili feature da aggiungere, siete i benvenuti per qualsiasi modifica possiate proporre, idem dubbi e domande
Icone allegate
centralina 4 ruote sterzanti con arduino nano-rear_servo_2.jpg   centralina 4 ruote sterzanti con arduino nano-servo_2ch_steering.jpg  

Ultima modifica di wrighizilla; 06-05-20 a 09:06 PM
wrighizilla non è in linea   Rispondi quotando