Serratura scatola tramite servo+Attiny85

Buongiorno, in passato mi sono divertito a costruire delle puzzle box con arduino.
Fino ad ora utilizzavo la stessa scatola che utilizzava il meccanismo di un cassetto di un lettore CD per aprire e chiudere la serratura; dalla scatola uscivano i due cavi del motore che venivano collegati di volta in volta ad un diverso pannello con un indovinello che permetteva di sbloccare la scatola.
Questo mi permetteva, in caso di errore di aprire o chiudere la scatola semplicemente appoggiando una batteria da 9v sui cavetti collegati al motore: a seconda della polarizzazione il motore gira in un senso o nell'altro aprendo o chiudendo la scatola. Tramite Arduino e un ponte H autocostruito governavo la serratura,

Ora vorrei costruire altre 4 scatole e ho deciso di acquistare altrettanti servo come meccanismo di chiusura e utilizzare un Attiny85 (schedina della digispark con finta usb) come controller dei servo.

La prima scatola è già montata e sono riuscito a programmare il tny per aprire e chiuderla (per ora continua a loopare aperture e chiusure ad intervalli di 2 sec).

Ecco le mie domande:

  1. Ogni tanto il servo non risponde in modo corretto: fa un doppio movimento e poi il ciclo riprende normalmente. Può dipendere dal fatto che la frequenza del segnale è sfasata con i miei delay? Non sono andato a fondo nello studio della libreria che governa i servo.

  2. Dopo qualche ciclo di aperture e chiusura tutto si ferma; siccome tutto il meccanismo e l'elettronica sono nella scatola, quando si bloccava con la scatola chiusa dovevo letteralmente smontare la scatola. Da cosa può dipendere?

  3. Stavo pensando a costruire un meccanismo di backup simile ai due cavetti che uscivano dalla scatola originale, ma con i servo è tutto un po' più complicato. La mia idea, forse folle, è di far uscire due cavetti come prima a cui collegare una batteria a 9V. Pensavo di costruirmi un ponte di diodi per fare in modo che comunque io attacchi la batteria (in un verso o nell'altro) io possa comunque alimentare il tny in modo corretto. Oltre a questo collegherei i due cavi (prima del ponte e dopo un diodo) a due pin del tny come segnale per governare l'apertura o la chiusura del servo (ovviamente metterei un regolatore di tensione a 5v per ogni pin e una resistenza adeguata per non rischiare di bruciare il pin).
    Ricapitolando: con qualunque polarità arriveranno 0V al GND e 9V al VIN del tny, inoltre se il più è sul cavo 1 dovrebbero arrivare 5v sul pin0 se la polarità è invertita dovrebbero arrivare 5V sul pin1; leggendo quale pin ha 5v in entrata il tny deciderà se aprire e chiudere la scatola.....è folle?

3B) l'alternativa potrebbe essere smontare l'elettronica dei servo, lasciare solo motore ed ingranaggi e trattarli come un normale motore bidirezionale...mi pare uno spreco, ma sarebbe possibile?

  1. Ho faticato non poco a programmare i tny via usb...dopo molte fatiche mi sono accorto che solo uno non funzionava: lo sketch non veniva caricato. Mi vengono i mente 3 opzioni:
  • opzione a: lo butto e magari recupero il regolatore di tensione.
  • opzione b: provo ad utilizzare un arduino come programmatore e baipasso l'usb.
  • opzione c: chiedo a voi.

Senza vedere il codice ed uno schema è difficile rispondere.

Ciao, Ale.

Questo è lo schema di come ho cablato servo e tny

Mi son dimenticato di scriverlo: il servo è un SG90

Questo invece è il codice:

#include "tinyServo85.h"
byte motor1 = 2; // motor1 will be connected to PB2 (using guide above)
tinyServo85 myServos;     // declare object called myServos of class tinyServo85
void setup() {
  myServos.setCTC();
  myServos.attachServo(motor1); // attach motor1
}

void loop() {
#define arc_min 60
#define arc_max 155
  //CHIUDI
  myServos.setServo(motor1, arc_min);
    delay(1000);
  //apri
  myServos.setServo(motor1, arc_max);
    delay(1000);
  }

Sto testando il meccanismo:

  1. al primo tentativo ho notato che quando si è bloccato il loop di aperture e chiusure si è acceso il led rosso: un qualche errore?
  2. ho spento e riacceso e quando si è bloccato il led rosso era spento.
  3. Il numero di aperture e chiusure prima del blocco sembra del tutto aleatorio come la frequenza del doppio scatto. Anche l'accensione del led rosso al momento del blocco sembra del tutto casuale.
  4. è normale che dal momento in cui do corrente passino dai 5 ai 7 secondi prima che il ciclo di aperture chiusure cominci?

Siccome non avevo pieno controllo della libreria mi sono riscritto lo sketch generando manualmente il segnale pwm:

void setup() {
pinMode(2,OUTPUT);
}

void loop() {
//#define arc_min 1333//60 gradi
//#define arc_max 1861//155 gradi 
#define arc_min 1166//60 gradi 2000/180*60+500
#define arc_max 2222//155 gradi 
  //CHIUDI
  for(int i=0;i<2;i++)
  {
  digitalWrite(2,HIGH);
  delayMicroseconds(arc_max);
  digitalWrite(2,LOW);
  delayMicroseconds(20000-arc_max);
  }
  delay(1500);
  //APRI
  for(int i=0;i<2;i++)
  {
  digitalWrite(2,HIGH);
  delayMicroseconds(arc_min);
  digitalWrite(2,LOW);
  delayMicroseconds(20000-arc_min);
  }
  delay(1500);
  }

Sembrava funzionare perfettamente ma quando ho scollegato l'usb e ho collegato la batteria da 9V sono ricominciati i doppi movimenti ed è andata in blocco dopo qualche ciclo. Deduco che il problema sia la batteria che non riesce a fornire abbastanza corrente.

Esatto, le batterie da 9V non sono in grado di fornire la corrente necessaria per muovere il servo. In alternativa puoi usare o 3 stilo in serie, o, meglio, una batteria al litio 18650. In entrambi i casi collega il positivo direttamente ai +5V, escludendo il regolatore.

Ciao, Ale.

Grazie Ale per le risposte celeri, mi stai aiutando molto a ragionare.

Leggendo vari commenti sul forum, avevo letto più volte che si sconsiglia l'utilizzo di batterie a 9v proprio per questo motivo. Ingenuamente ho pensando che utilizzando batterie 9v ricaricabili (con capacità doppia se non tripla rispetto alle normali 9v alcaline) avrei evitato questo problema. Credevo fossero sostanzialmente normali batterie al litio "travestite" da batterie a 9v (proverò a smontarne una per capire come è fatta).

Qualcuno sa come si può capire la corrente di picco di una batteria? Datasheet non ne trovo.

Se ho capito bene il mio problema è dovuto alla massima corrente erogata dalla batteria e non dalla capacità della stessa. Farò comunque una prova bypassando il regolatore della scheda ed utilizzando un regolatore più potente: sulla scheda è montato un regolatore da 0,5A che è di poco superiore alla corrente assorbita dal servo.

Farò sapere appena ho il tempo di fare dei test.

Provando con un regolatore esterno L7805CV il problema del blocco sembra risolto. Il ciclo si è bloccato solo dopo 5/10 minuti di apertura e chiusura (probabilmente batteria scarica anche se misurando col tester è passata da 8,2V a 8,1V), ma il doppio scatto continua a saltar fuori.

Provando con 3 stilo da 1,2V collegate direttamente al 5V, sembra invece funzionare senza problemi. Temevo che la tensione fosse troppo bassa per governare il servo (da datasheet dovrebbe girare a 4,8V) ma in realtà funziona.

Darei quindi per risolti i punti 1 e 2.
Grazie!

Per segnare come risolti i primi due punti come faccio? modifico il post originale? il titolo?

Per il punto 3 avevo invece pensato a un circuito di questo tipo:


E' una vaccata o ha un minimo di senso? Come ho detto dalla presentazione sono un autodidatta smanettone, so di avere grandissimi lacune in elettronica e fatico a capire se una cosa che in teoria (la mia teoria molto traballante) dovrebbe avere senso, poi funzionerà nella realtà.

Ammesso che questa cosa funzioni rimane il problema dei 7 secondi (un'eternità) prima che il tny risponda dopo essere stato alimentato. E' un limite insuperabile del tny o magari è dovuto al bootloader usb? Nel secondo caso potrei risolvere programmandolo diversamente?

Non c'è modo; quando tutta la discussione è risolta, si mette la spunta nell'apposita casella.

Guglielmo

Grazie!
Pur avendo letto le politiche del forum, sono nuovo e quindi incline all'errore.
Forse ho sbagliato a mettere tanta carne al fuoco in unico post, ma mi pareva sensato fare così trattandosi di un unico progetto.

Corretto! :slight_smile:

Guglielmo

Non conosco la scheda in questione (forse ce l'ho anche, in qualche cassetto, ma non l'ho mai usata) ma questo immagino succeda sempre, confermi?

Probabile che il bootloader aspetti una risposta dall'USB, 7 secondi sono comunque tanti. Tieni conto che l'USB usato su quella scheda è un accrocchio, l'MCU non ha un supporto USB nativo, è stato implementato via software il minimo indispensabile ma è lontano dalle prestazioni di un vero USB.
Venendo al terzo problema, forse la stai facendo troppo complicata. Porta fuori solo un cavo per aprire in caso di emergenza (batteria scarica es.), ti consiglierei una prolunga USB, metti un diodo saldato sul PCB sul postivo dell'USB e con quello vai ad un pin. Se leggi HIGH su quel pin aziona il servo per aprire la scatola, seguito da un loop infinito (while(1)) così sei sicuro che non accade altro. Perchè dovresti avere bisogno di chiudere la scatola?
Comunque l'ATtiny si può programma anche senza USB, ti serve un programmatore USBasp o un arduino da usare come programmatore ISP, ti rimane anche più memoria a disposizione perchè fai a meno del bootloader.

Ciao, Ale.

Per ogni diodo cade ai suoi capi una tensione che si aggira attorno a 0.6V, ci saranno 2 diodi del ponte in conduzione, quindi Vin = Vbatt - 0.6 x 2.
Tieni conto di ciò. In breve con Vbatt = 9 (nominale) non vedo problemi.

Per abbassare la tensione da fornire ai pin più che usare un 7505 proverei con i diodi zener 4.7v, in sostanza un regolatore shunt in cui scorre 1mA sulla resistenza serie "dovrebbe" bastare.

Mentre per il problema legato al funzionamento discontinuo del servo ti consiglio di controllare il servo 5 gradi per step e tra ogni step un delay(50), in totale il servo coprirà i 95° richiesti in poco meno di 1 secondo. La corrente istantanea assorbita si riduce e ciò è un bene. Da matematico con la legge di ohm non avrai problemi a fare il calcolo della tensione utile quando in serie alla Vbatt ci metti una resistenza di valore costante. Questa resistenza serie esiste quando il generatore di tensione è reale. Con i generatori ideali ci si aggiunge una R serie per simulare il comportamento del generatore reale.

La resistenza interna della batteria (non è costante) la si può misurare collegando una resistenza di precisione alla batteria e con un voltmetro di precisione si misure la VBatt. Quindi avremo due, VBatt(sotto carico) e una VBatt(a vuoto), dalla differenza tramite la legge di ohm si ricava il valore di R serie interno alla batteria.

Quelle batterie 9V ricaricabili dentro hanno una batteria a litio 3.7V associata ad un circuito convertitore step-up.

Ciao.

E qui si vede la differenza tra la teoria (la mia molto traballante) e la realtà.

Qui invece mi manca anche la teoria...dovrò studiare e magai fare anche la spesa.

Della pochissima elettronica che avevo visto al liceo l'unica cosa che non avevo capito era questa della resistenza interna delle batterie, ma rileggerò la tua spiegazione farò dei test e questa volta la capisco!

Immaginavo, per questo speravo che non si presentasse il problema che c'è con le normali batterie 9V.

Vorrei costruire 4 scatole alcune con elettronica tutta interna altre con elettronica esterna, dentro rimarrebbe solo il servo e il tny che lo governa.
Almeno inizialmente l'idea era di fare una progettazione unica per l'apertura, dopo la prima però ho già cambiato idea sul meccanismo quindi alla fine del progetto mi sa che mi troverò con 4 scatole con 5 chiusure diverse.

Mi sa che queste schede con finta USB non siano una gran cosa. Quando le ho comprate stavo pensando di prendere solo il chip, ma mi costava di più che prendere la schede già confezionate.

Ma potrebbero contenere due pile 3.7v messe in serie che da cariche dovrebbero arrivare a 4.2v, se sulla tua misuri con il tester circa 8.4 allora quasi certamente ci sono due pile in serie. Nel contenitore della pila ci dovrebbe essere pure un circuito di ricarica, per le litio è obbligatorio.

In ogni caso il problema si può presentare anche con l'accoppiata di pila 3.7v più step-up, ii vero problema è che queste pile sono descritte con capacità di carica stratosferiche (28000mA), cioè 28Amper? o 2.8A, fatico a crederci..

https://it.aliexpress.com/item/1005007813395999.html?spm=a2g0o.productlist.main.13.2528PDRRPDRRLb&algo_pvid=28af86ac-688e-4e31-b448-76808cec4da8&algo_exp_id=28af86ac-688e-4e31-b448-76808cec4da8-6&pdp_npi=4%40dis!EUR!9.41!6.59!!!69.19!48.45!%40211b6c1717386285330131263e8c3a!12000042293209466!sea!IT!4862968976!X&curPageLogUid=K9w36Ri0gtow&utparam-url=scene%3Asearch|query_from%3A
PS: link a simulatore LTspice.
Ciao.

... e questa cosa non ti fa pensare? ... specie sulla qualità dei chip usati su quelle schedine?

Guglielmo

Immaginavo che il chip fosse poi sempre lo stesso. E' marcato atmel come i chip singoli. Sbaglio?
Male che vada utilizzo solo il chip attiny bypassando usb, regolatore ecc.

Su amazon 5 schedine le ho pagate 20€, il chip singolo di per se costerebbe un quarto, ma con la spedizione mi sarebbero costati di più. Purtroppo l'unico rivenditore di elettronica in provincia di Como non li aveva in catalogo....dici che è stato un acquisto incauto? Purtroppo non ho gli strumenti per valutare la qualità dei componenti elettronici quindi mi affido un po' al caso e cerco di non spendere cifre folli per dei componenti che potrei bruciare alla prima distrazione.