Ciao a tutti, sono alle prime armi, si noterà dal tipo di codice che ho scritto, sicuramente ci saranno migliorie da fare e soprattutto troverete cosa ho sbagliato nello scriverlo che non me lo fa funzionare.
Vi spiego cosa devo fare con questo progetto.
Uso un Arduino Mega
Devo pilotare un driver per un motore passo passo (DM556) che mi azioni uno stepper nema 34 con il quale movimento l'asse X di una fresa hobbistica che ho a casa.
Per il funzionamento ho previsto un joystick con contatti NO per spostarmi a DX o SX, volendo potrei anche usare quello di arduino analogico, ma per iniziare e farlo più semplice come programmazione ho scelto questo.
Ho due finecorsa che metterò sulla tavola lungo l'asse X per interrompere il funzionamento quando raggiunge uno dei due limiti, questi sono microswitch NC in modo che se si dovesse tranciare il cavo o dovessi avere qualche problema mi si ferma il moto e non causi danni.
Ho un pulsante per avanzamento veloce (con un suo trimmer per regolare la velocità) e un trimmer per la velocità di base soggetta ai due interruttori presenti sul joystick.
Come uscite ho: 3 led, uno di stato come power on e 2 per indicare la direzione, i 3 pin per il driver dello stepper ENA,DIR,PUL.
Gli ingressi li ho settati come PULLUP così uso sempre il riferimento a massa
Quando faccio partire il mio sketch mi dà il messaggio Ready che c'è nella fase di setup, ma poi non riesco a far funzionare nulla.
allego lo sketch.
int puls_sx = 3; //pulsante controller SX
int puls_dx = 4; //pulsante controller DX
int ena = 5; //ENA stepper Driver
int dir = 6; //DIR stepper Driver
int pul = 7; //PUL stepper Driver
int rapid = 8; //Pulsante rapido
int potS = A0; //Potenziometro velocità normale
int potR = A1; //Potenziometro velocità Rapida
int fcsx = 10; //Fine corsa SX NC
int fcdx = 11; //Fine corsa DX NC
int ledSx = 12; //Led direzione SX
int ledDx = 13; //Led direzione DX
int buzzer = 9; // Buzzer segnalazioni acustiche
int power_on = 2; //led stato acceso
long currentMicros = 0;
long previousMicros = 0;
long delay_Micros = 0;
void setup() {
Serial.begin(9600);
pinMode(puls_sx, INPUT_PULLUP);
pinMode(puls_dx, INPUT_PULLUP);
pinMode(ena, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(pul, OUTPUT);
pinMode(potS, INPUT);
pinMode(potR, INPUT);
pinMode(fcsx, INPUT_PULLUP);
pinMode(fcdx, INPUT_PULLUP);
pinMode(ledSx, OUTPUT);
pinMode(ledDx, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(power_on, OUTPUT);
digitalWrite(power_on, LOW);
digitalWrite(ledSx,LOW);
digitalWrite(ledDx,LOW);
delay(200);
digitalWrite(ledSx, HIGH);
digitalWrite(ledDx, HIGH);
Serial.println ("Ready");
delay(1000);
digitalWrite(ledSx, LOW);
digitalWrite(ledDx, LOW);
tone(1, 1000, 600);
}
void tone_err() {
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
tone(2, 1200, 100);
delay(100);
}
/*
void direz() {
if (puls_sx == LOW) { //funziona a SX
if (fcsx == LOW) {
digitalWrite(ledSx, HIGH);
digitalWrite(dir, HIGH);
digitalWrite(ena, HIGH);
tone(4, 800, 300);
Serial.print("sinistra");
}
else { if (fcsx == HIGH) { //finecorsa sx aperto blocco movimento
digitalWrite(ledSx, LOW); {
digitalWrite(ena, LOW);
Serial.print("finecorsa sinistra");
tone_err();
}
}
}
}
if (puls_dx == LOW){
if (fcdx == LOW){ //funziona a dx
digitalWrite(ledDx, LOW);
digitalWrite(dir, LOW);
digitalWrite(ena, HIGH);
Serial.print("Destra");
tone(4, 800, 300);
}
else { //(fcdx = HIGH); finecorsa dx aperto blocco movimento
digitalWrite(ledDx, HIGH); {
digitalWrite(ena, LOW);
Serial.print("finecorsa destra");
tone_err();
}
}
}
if (puls_dx && puls_sx==LOW){
digitalWrite(ena,LOW);
}
}
*/
void start() {
currentMicros = micros();
if (digitalRead(rapid)==HIGH) { //se puls rapid non premuto
delay_Micros = map(analogRead(potS), 0, 1024, 50000, 1000); //legge velocita potS
if (currentMicros - previousMicros >= delay_Micros)
{
previousMicros = currentMicros;
digitalWrite(pul, HIGH);
delayMicroseconds(100); //impostare il valore
digitalWrite(pul, LOW);
}
}
else (digitalRead(rapid)==LOW);{ //se premo rapid
delay_Micros = map(analogRead(potR), 0, 1024, 1000, 300); //legge velocità potR
if (currentMicros - previousMicros >= delay_Micros)
{
previousMicros = currentMicros;
digitalWrite(pul, HIGH);
delayMicroseconds(100); //impostare valore
digitalWrite(pul, LOW);
}
}
}
void loop() {
if (puls_sx == LOW) { //funziona a SX
if (fcsx == LOW) {
digitalWrite(ledSx, HIGH);
digitalWrite(dir, HIGH);
digitalWrite(ena, HIGH);
tone(4, 800, 300);
Serial.print("sinistra");
start();
}
else { if (fcsx == HIGH) { //finecorsa sx aperto blocco movimento
digitalWrite(ledSx, LOW); {
digitalWrite(ena, LOW);
Serial.print("finecorsa sinistra");
tone_err();
}
}
}
}
if (puls_dx == LOW){
if (fcdx == LOW){ //funziona a dx
digitalWrite(ledDx, LOW);
digitalWrite(dir, LOW);
digitalWrite(ena, HIGH);
Serial.print("Destra");
tone(4, 800, 300);
start();
}
else { //(fcdx = HIGH); finecorsa dx aperto blocco movimento
digitalWrite(ledDx, HIGH); {
digitalWrite(ena, LOW);
Serial.print("finecorsa destra");
tone_err();
}
}
}
if (puls_dx && puls_sx==LOW){
digitalWrite(ena,LOW);
}
}
//start();