Ma idee di questo tipo contimuiamo a dargliene. Il problema é che, sembra, il motore non possa muoversi di un passo alla volta
simonsdec:
ho testato il tutto
far fare un passo alla volta al Motore rende tutto impossibile a livello di peso della cabina
non ce la fa ad andare su ....
simonsdec:
ho testato il tutto
far fare un passo alla volta al Motore rende tutto impossibile a livello di peso della cabina
non ce la fa ad andare su ....
Ecvo il messaggio a cui mi riferisco
brunello22:
Ma se hai dei microswitch, perchè devi fare "Tot" passi ??
Manda il motore avanti o indietro fino a che non trovi il microswitch del piano che ti interessa, altrimenti a che ti servono i microswitch ?
effettivamente ci sono vari metodi per creare un progetto di un'ascensore
io avevo pensato di fatti a quello del contare i passi che mi servono per andare da npiano a npiano con l'ausilio del microsw
i microsw mi servono appunto per determinare a quale piano si trova l'ascensore e quanti npassi deve fare per andare da un piano all'altro.
Ripeto anche il tuo metodo è funzionante,sicuramente anche più completo e più elaborato ma inizialmente lo volevo provare a fare secondo l'idea del contare i passi
ora testerò il tuo e vediamo come risponde l'ascensore!
Grazie del tempo dedicato a scrivere un nuovo tipo di codice!
brunello22:
Ma se hai dei microswitch, perchè devi fare "Tot" passi ??
Manda il motore avanti o indietro fino a che non trovi il microswitch del piano che ti interessa, altrimenti a che ti servono i microswitch ?ok, ti rimetto l'esempio che avevo postato, per farti capire meglio
#include <Stepper.h>
int Puls_PT = 2;
int Puls_1P = 3;
int Puls_2P = 4;
int SW_PT = 5;
int SW_1P = 6;
int SW_2P = 7;
#define Steps 32
Stepper small_stepper(Steps, 9, 11, 10, 12);
int piano = -1 ;
int piano_che_chiama = -1 ;
int velocita = 700 ;
int a = 0 ;
void setup() {
pinMode(SW_PT, INPUT); // 5
pinMode(SW_1P, INPUT); // 6
pinMode(SW_2P, INPUT); // 7
pinMode(Puls_PT, INPUT_PULLUP); // 2
pinMode(Puls_1P, INPUT_PULLUP); // 3
pinMode(Puls_2P, INPUT_PULLUP); // 4
Serial.begin(9600);
// test iniziale per sapere a quale piano si trova
if (digitalRead(SW_PT) == HIGH ) piano = 0 ;
if (digitalRead(SW_1P) == HIGH ) piano = 1 ;
if (digitalRead(SW_2P) == HIGH ) piano = 2 ;
if (piano < 0) {
// deve muovere il motore fino a che non trova un piano
}
Serial.print("L'ascensore e' al piano ");
Serial.println(piano);
}
void loop() {
piano_che_chiama = piano;
if (digitalRead(Puls_PT) == LOW ) piano_che_chiama = 0 ;
if (digitalRead(Puls_1P) == LOW ) piano_che_chiama = 1 ;
if (digitalRead(Puls_2P) == LOW ) piano_che_chiama = 2 ;
if ( piano_che_chiama > piano ) {
a = 0 ;
sali(piano_che_chiama );
}
if ( piano_che_chiama < piano ) {
a = 0 ;
scendi(piano_che_chiama );
}
}
void sali(int valore ) {
Serial.print("E' stato chiamato dal piano ");
Serial.println(piano_che_chiama);
small_stepper.setSpeed(velocita);
while ( a == LOW ) {
if (valore == 0 ) a = digitalRead(SW_PT) ;
if (valore == 1 ) a = digitalRead(SW_1P) ;
if (valore == 2 ) a = digitalRead(SW_2P) ;
small_stepper.step(1);
}
piano = piano_che_chiama ;
Serial.print("Ora e' al piano ");
Serial.println(piano);
}
void scendi(int valore ) {
Serial.print("E' stato chiamato dal piano ");
Serial.println(piano_che_chiama);
small_stepper.setSpeed(velocita);
while ( a == LOW ) {
if (valore == 0 ) a = digitalRead(SW_PT) ;
if (valore == 1 ) a = digitalRead(SW_1P) ;
small_stepper.step(-1);
}
piano = piano_che_chiama ;
Serial.print("Ora e' al piano ");
Serial.println(piano);
}
ho provato a testarlo ma non riesce ne a fare salita ne discesa...
simonsdec:
ho provato a testarlo ma non riesce ne a fare salita ne discesa...
scusami ma te lo ripeto
stai dicendo una cavolata (sono stato gentile )
Patrick_M:
scusami ma te lo ripeto
stai dicendo una cavolata (sono stato gentile )
dammi un contatto ti giro il video
non voglio il video, ti giuro che ci credo che non ti funzionava!!!
il problema è dello sketch che hai scritto e non del muovere ad un passo alla volta il motore
CHE E' LA STESSA COSA CHE FA LA LIBRERIA QUANDO LO FAI MUOVERE PER 68*68 PASSI
il motore si muove SEMPRE ad un passo per volta
te lo ripeto, probabilmente il delay(2) che ti avevo messo è esagerato oppure hai fatto qualche altro errore
Patrick_M:
non voglio il video, ti giuro che ci credo che non ti funzionava!!!il problema è dello sketch che hai scritto e non del muovere ad un passo alla volta il motore
CHE E' LA STESSA COSA CHE FA LA LIBRERIA QUANDO LO FAI MUOVERE PER 68*68 PASSI
il motore si muove SEMPRE ad un passo per volta
te lo ripeto, probabilmente il delay(2) che ti avevo messo è esagerato oppure hai fatto qualche altro errore
#include <Stepper.h>
int pulsante0pin=2;
int pulsante1pin=3;
int pulsante2pin=4;
int microswitch0=5;
int microswitch1=6;
int microswitch2=7;
const int stepsPerRevolution = 32;
Stepper myStepper(stepsPerRevolution, 9, 11, 10, 12);
void setup() {
pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);
}
void loop() {
if (digitalRead(microswitch0) == HIGH ) { //STATO SWITCH PIANO 0
if (digitalRead(pulsante1pin) == LOW ) { //CHIAMATA P1
while (!digitalRead(microswitch1)) {
myStepper.step(1);
delay(2);
}
} else if (digitalRead(pulsante2pin) == LOW) { //CHIAMATA P2
while (!digitalRead(microswitch2)) {
myStepper.step(1);
delay(2);
}
}
}
else if (digitalRead(microswitch1) == HIGH) {
if(digitalRead(pulsante0pin) == LOW )
{ //chiamata PT
while(!digitalRead(microswitch0)) {
myStepper.step(-1);
delay(2);
}
}
else if(digitalRead(pulsante2pin) == LOW)
{
while(!digitalRead(microswitch2))
{
myStepper.step(1);
delay(2);
}
}
}
else if(digitalRead(microswitch2) == HIGH)
{
if(digitalRead(pulsante0pin) == LOW)
{
while(!digitalRead(microswitch0)) {
myStepper.step(-1);
delay(2);
}
}
else if (digitalRead(pulsante1pin) == LOW)
{
while(digitalRead(microswitch1))
{
myStepper.step(-1);
delay(2);
}
}
}
}
tralasciando il delay(2)
infatti lo vedi che manca l'istruzione
myStepper.setSpeed(600)
che ti avevo detto di aggiungere come ultima riga del setup
ma un minimo di verifica no?
e poi ti avevo anche detto di abbassare appunto il delay(2) con delayMiscoseconds(10) e probabilmente anche questo è inutile anzi sicuramente si potrebbe levare qualsiasi delay, ci pensa la libreria ad aggiungerli
riproverò sinceramente non Avevo notato il set.Speed... speriamo sia quello
Patrick_M:
infatti lo vedi che manca l'istruzionemyStepper.setSpeed(600)
che ti avevo detto di aggiungere come ultima riga del setup
ma un minimo di verifica no?
e poi ti avevo anche detto di abbassare appunto il delay(2) con delayMiscoseconds(10) e probabilmente anche questo è inutile anzi sicuramente si potrebbe levare qualsiasi delay, ci pensa la libreria ad aggiungerli
testato... risolto il problema della velocità sale e scende come faceva con il mio sketch però ha un'altro problema
l'ho simulato senza cabina chiudendo e aprendo i microsw a mano e spingendo i pulsanti
fa una cosa strana che non so come sistemarla:
premendo il pulsante il motore non va in funzione finché non il microsw di piano faccio esempio piano0 MicroSw0 HIGH
finché questo non diventa LOW l'ascensore non si muove.....
ciò nella realtà con la cabina non succederà mai perché questa starà sempre al piano 0 e spingerà sempre il microsw0 quindi ti troverai sempre nel caso0 (MICROSW0 HIGH) e il sistema non funziona perché spingendo il pulsante non fa niente finche il microsw0 diventa LOW aperto.....
mi sono spiegato?
ti sei spiegato ma vuol dire che hai fatto qualche errore nello sketch
if (digitalRead(microswitch0) == HIGH ) { //se PIANO 0
if (digitalRead(pulsante1pin) == LOW ) { // se CHIAMATA P1
while (!digitalRead(microswitch1)) { // fino a che switch piano1 è off
myStepper.step(1); // fai un passo
}
}
non centra nulla lo switch di piano 0 (una volta che è entrato nell'if)
strano.....
e avevo un'altro problema per alimentare il motore passo passo in modo esterno da arduino come posso fare?
5v max corrente 400mA ?
perché volevo liberare i 5v di arduino per i pulsanti e microsw
Tassativo non alimentare motori con Arduino!
ti prendi un normalissimo alimentatore di quelli per ricaricare i cellulari che abbia in uscita (almeno) 600 mA e lo usi per il motore
ah perfetto.... oppure potrei sfruttare la porta usb per arduino
usare i 5v per microsw led e pulsanti
e sfruttare VIN per il motore che ne pensi ?
no, vin per il motore no! Meglio alimentarlo a parte, tutto il resto si
il problema è che non so come alimentarlo
perché da quello che ho letto vuole 5v max 400mA
le pile arrivano a 4.8V e ok ma il problema è l'amperaggio che stiamo sopra i 550mA come posso fare?
che pile hai?
cioè: 550mAh sono un valore strano per le pile
comunque non è un problema se la CAPACITA' delle pile è superiore all'ASSORBIMENTO del carico
cambiano anche le unità di misura.........
spiega bene che pile hai
tanto per chiarire...
simonsdec:
il problema è che non so come alimentarloquesto devi leggerlo (parafrasando Totò)
perché da quello che ho letto vuole 5v max,;:. 400mA
cioè al massimo 5 V e come minimo 400 mA
le pile arrivano a 4.8V e ok ma il problema è l'amperaggio che stiamo sopra i 550mA come posso fare?
vuole 5v e 400mA max
devo ancora cercarle su internet le pile ma ho visto che vanno tutti dai 4.8v e minimo 550mAh ma ho paura che si fonda il motore