aiutooo

Ciao a tutti, da non molto mi cimento con ARDUINO, molto bello ed interessante....sono un po' a digiuno di elettronica, ma ce la metto tutta !

Ho intenzione di creare una serratura motorizzata che viene pilotata tramite una tastiera numerica con comunicazione Wiegand...
Ora....ho acquistato Arduino 2009, un ponte H(Tank 3A HP), un motore brushed, un sensore per porte(controlla se chiusa o aperta) ed un pulsante...intanto...

Ho collegato come da datasheet la Tank per gestirla con PWM, ma mi sta dando un mucchio di problemi...
inoltre il sensore che deve semplicemente vedere se aperto o chiuso, funziona a rovescio...ho letto da qualche parte che se non lo abbini a una resistenza, si invertono i comandi...?

In pratica: la porta e' chiusa, premendo il pulsante dall'interno, il motore deve girare per tre volte, fermarsi....a quel punto la porta e' aperta...quindi il sensore = aperto.

poi una volta chiusa la porta, il sensore diventa chiuso, quindi il motore deve girare per tre volte nel senso opposto....tutto qua...

non vi dico quante notti insonni ho fatto....non ne vengo fuori....qualcuno mi aiuta ? grazie mille

Cosa é un "motore brushed" un motore corrente continua con le spazzole? Spero con un ingranaggio.

Il pulsante lo hai collegato al pin di entrata arduino e a massa, attivando la resistenza pullup interna? Se sí puoi collegare il pulsante tra +5V e entrata e una resistenza da ca 10kOhm da entrata e massa. Il valore non é critico. Usa qualcosa che hai a casa sopra i 2,2kohm. Oppure cambia la logica del programma in modo che un HIGH viene interpretato come porta aperta.

Per far girare il motore 3 volte e poi fermare Ti servono 2 interuttori finecorsa e un piccolo ingranaggio 1 a 4 per demoltiplicare i giri. Cosi monti una levetta sul asse demoltiplicata e i finecorsa in modo che segnalano che il motore é arrivato alla fine dei 3 giri.
Se vuoi un ulteriore sicurezza aggiungi ancora 2 altri finecorsa che intervengono dopo i primi e interompono la corrente del motore. In questo modo quando il fermo attraverso Arduino doovesse non funzionare si blocca dopo senza bruciare il motore bloccato.

Prevedi anche una meccanica che puoi aprire la porta con la chiave anche col motore bloccato o impazzito.

Mandaci il codice senó Ti possimao aiutare poco.

Ciao Uwe

Milllllle grazie ad Uwe che e' stato cosi' solerte nel rispondermi :smiley:

MI sono espresso male...ho un motoriduttore con spazzole ed encoder a bordo che vorrei pilotare contando i giri tramite l'effetto Hall di cui dispone

manca ancora tutta la parte dell'encoder....ma quello e' un passo successivo...devo prima capire se serve uno shield o cos'altro....

Dunque, ti elenco lo schema delle connessioni:

Arduino pin 2 = connesso ad un cavo del pulsante, l'altro cavo a GND
Arduino pin 4 = connesso ad un cavo del sensore porta, l'altro cavo a GND
Arduino pin 6 = connesso al pin DIR della Tank 3A HP
Arduino pin 7 = connesso ad un piedino di un LED verde, l'altro piedino a GND
Arduino pin 9 = connesso al pin PWM della Tank
Arduino pin 13 = connesso ad un piedino di un LED rosso, l'altro piedino a GND

il codice e' questo:

//attribuzione dei pin
int pulsante = 2;
int sensore_porta = 4;
int dirPin = 6;
int led_verde = 7;
int motorPin = 9;
int led_rosso = 13;

//dichiarazioni delle variabili

int status_porta = 0;

void setup() {

//partendo da porta chiusa
pinMode(sensore_porta, INPUT);
pinMode(pulsante, INPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_rosso, OUTPUT);
digitalWrite(led_rosso, HIGH);
pinMode(dirPin, OUTPUT);

//attivo la seriale per monitorare il tutto
Serial.begin(9600);

}

void loop() {

if (status_porta == 0){
if (digitalRead(sensore_porta) == HIGH && digitalRead(pulsante) == HIGH) {

Serial.print(" apro la porta ");
digitalWrite(dirPin, LOW);
delay(1000);

Serial.print(" apro primo DX ");
analogWrite(motorPin, 255);
delay(1000);

Serial.print(" apro secondo DX ");
analogWrite(motorPin, 255);
delay(1000);

//segnalo la porta aperta
Serial.print(" ....fermo a porta aperta.... ");
digitalWrite(led_verde, HIGH);
digitalWrite(led_rosso, LOW);

//spengo il motore
analogWrite(motorPin, 0);

//inverto la direzione del motore
digitalWrite(dirPin, HIGH);

//comunico che la porta e' aperta e gli do' 10 secondi..
status_porta = 1;
delay(10000);

}
}

/////////////////////////////////////////
//ciclo di chiusura
///////////////////////////////////////
if (status_porta == 1){
if (digitalRead(sensore_porta) == HIGH && digitalRead(led_verde) == HIGH)
{

Serial.print(" chiudo primo SX ");
analogWrite(motorPin, 255);
delay(1000);

Serial.print(" chiudo secondo SX ");
analogWrite(motorPin, 255);
delay(1000);

//spengo il motore
analogWrite(motorPin, 0);
delay(1000);

//segnalo porta chiusa
Serial.print(" ....fermo a porta chiusa.... ");
digitalWrite(led_verde, LOW);
digitalWrite(led_rosso, HIGH);

}
}
}

spero che sia abbastanza chiaro....
di fatto alla fine non funziona niente....non credo sia il codice, piuttosto l'hardware mal configurato....magari mancano delle resistenze/condensatori su qualche pin....sono una frana in elettronica.....

il link del datasheet del tank e'

http://www.droids.it/cmsvb4/content.php?174-990.009-Tank-3A-HP-Motor-controller-Guida-Utente

quello del motoriduttore

help me again :fearful: tank you together