Go Down

Topic: realizzazione di un ascensore a 3 piani  (Read 9276 times) previous topic - next topic

simonsdec

se ci mette troppo per spostarsi basta cambiare il delay(2) con delayMicrosecons(10) (per esempio e riprovare....)

e chi lo dice?   tu lo supponi ma non è detto che sia così infatti hai detto che il programma non fa più nulla. Ergo non ha premuto il micro...
se ci mette troppo per spostarsi basta cambiare il delay(2) con delayMicrosecons(10) (per esempio e riprovare....)

e chi lo dice?   tu lo supponi ma non è detto che sia così infatti hai detto che il programma non fa più nulla. Ergo non ha premuto il micro...
ok domani riprovo e vediamo che succede

per quanto riguarda il mio sketch cosa posso provare a fare?
o provato il monitor seriale ma noto che usando
Code: [Select]

Serial.println("....")

e utilizzando il monitor seriale fa tutto da solo prende parte va al piano 1 ad esempio e si blocca come fa senza il seriale... è normale?

provo sempre a portare avanti più strade possibili così mi preparo i codici e vado a testarli considerando che meno di un mese ho l'esame spero di trovare la soluzione

Patrick_M

non è che hai molte scelte :) sia con il tuo modo di operare che con quello che ti ho suggerito è imperativo che tu controlli se lo switch del piano desiderato è premuto altrimenti non sei arrivato al posto giusto
cioè: non esiste un ascensore reale in cui venda calcolato di quanti metri deve sollevarsi la cabina e poi dividere questi metri per il numero di rotazioni di un motore :D hai presente l'empire states... sarebbero ancora tutti bloccati dentro dal giorno dell'inaugurazione :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

simonsdec

nono certo
però il mio diciamo era un'ascensore "semplice" almeno doveva esserlo  :D
e chiedendo anche ai miei professori per semplificarmi le cose prendevo i passi di tutti i piani e da li gli dichiaravo le varie sequenze che dovevano fare se alcune variabili erano high o Low etc etc il problema è che si sono create altre cose che non avevo previsto!
diciamo che quest'ascensore lo volevo fare secondo le mie conoscenze di arduino e di ciò che ho fatto negli anni ed il metodo che ho usato mi sembrava il più semplice ma forse non il più funzionale visto le conclusioni e da quanto tempo gli sto appresso..... sicuramente arriveremo al giorno che funzioni anche perché non doveva essere un progetto difficile sbaglierò qualcosa stupidamente io

Patrick_M

se vuoi renderlo più semplice allora elimina gli switch di piano raggiunto e usi solo il numero di passi per stabilire se sei arrivato al piano oppure no
per cui lo shetch diventa:
chiamo l'ascensore
se da un piano diverso da quello dove si trova
eseguo il movimento dell'ascensore
imposto il piano a cui è arrivato
aspetto nuovo comando
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

simonsdec

diventerebbe troppo ridicolo no...?
io punto tutto nel farlo venire così o il metodo tuo o il mio vecchio metodo
forse sbaglio qualche if else
o qualche collegamento non è possibile che si blocca tutto il sistema

brunello22

#125
Jun 08, 2018, 06:42 pm Last Edit: Jun 08, 2018, 06:52 pm by brunello22
Scusa, ma visto che hai dei microswitch ad ogni piano, non fai prima a controllare a che piano sei quando viene apppunto premuto lo switch ?

Code: [Select]

#include <Stepper.h>




Patrick_M

:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

brunello22

:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
Ah, allora lo tolgo
Era solo per fargli capire che con il suo sistema non arrivava da nessuna parte

Patrick_M

hahaha no dai ... questa è perfidia :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Standardoil

Ah, allora lo tolgo
Era solo per fargli capire che con il suo sistema non arrivava da nessuna parte

hahaha no dai ... questa è perfidia :)
No realismo, secondo me
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

simonsdec

Scusa, ma visto che hai dei microswitch ad ogni piano, non fai prima a controllare a che piano sei quando viene apppunto premuto lo switch ?

Code: [Select]

#include <Stepper.h>




esattamente quello faccio
quando ho i 3 casi
microsw0 high sta al piano 0
microsw1 high sta al piano1
microsw2 high sta al piano2

e da qui in base a che pulsante premo faccio tot passi
quello che voglio che faccia il mio sistema è esattamente questo

simonsdec

:D sono 9 pagine che non gli metto uno sketch completo sperando che lo faccia da solo...:D
il tuo sketch l'ho completato,finito il problema ne abbiamo già parlato in precedenza no?

brunello22

Quote
..... e da qui in base a che pulsante premo faccio tot passi
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

Code: [Select]

#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);
}



Silente

Ma idee di questo tipo contimuiamo a dargliene. Il problema é che, sembra, il motore non possa muoversi di un passo alla volta
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Silente

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 ....
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
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Go Up