OK, mi pare o mi illudo di seguire ... Secondo me un controllo di tempo va inserito in tutti i cicli while, inoltre non vedo qual è il comando digitalWrite(potenziometro,LOW) che toglierebbe assistenza, se dopo una mezza pedalata in avanti, pedalassi al contrario.
E così?
const byte potenziometro = 10; // pin a cui collegare il potenziometro
const byte sensore_1 = 11; // pin ingresso sensore di HALL il primo ad essere interessato dal magnete se rotazione corretta
const byte sensore_0 = 12; // pin ingresso sensore di HALL
const byte test = 13; // il led presente su arduino si accende ad ogni passaggio del magnete
const unsigned long T_MAX = 500 ; // espresso in milliSecondi adesso attende 0.5 Sec da tarare in funzione del numero di magneti determina il numero minimo di pedalate
// piu' è alto e maggiore è il tempo prima che si ferma il motore quando smetto di pedalare
unsigned long timer = 0; // salva nella variabile timer il tempo che il magnete tiene attivo il sensore
boolean flag = false; // aggiungo una variabile per stabilire l'ordine di nattivazione dei sensori
void setup() {
Serial.begin(9600); // abilita l'uso della seriale per il debug a soft OK lo si puo eliminare
pinMode(potenziometro, OUTPUT); // configura i pin
pinMode (test, OUTPUT);
pinMode(sensore_1, INPUT);
pinMode(sensore_0, INPUT);
}
void loop() {
while (digitalRead(sensore_1) == LOW || digitalRead(sensore_0) == LOW || millis() - timer >= T_MAX) { // in attesa dell'attivazione di un sensore o del tempo limite
}
if (digitalRead(sensore_1) == LOW) flag = true; // flag true se è stato attivato prima sensore_1
while (digitalRead(sensore_1) == LOW && digitalRead(sensore_0) == LOW || millis() - timer >= T_MAX) { // in attesa dell'attivazione di entrambi i sensori o del tempo limite
}
if (millis() - timer >= T_MAX || flag == false) {
digitalWrite(potenziometro, LOW);
digitalWrite(test, LOW);
}
timer = millis();
digitalWrite(potenziometro, HIGH);
digitalWrite(test, HIGH);
flag = false;
}
void loop() {
while (digitalRead(sensore_1) == LOW || digitalRead(sensore_0) == LOW || millis() - timer >= T_MAX) { // in attesa dell'attivazione di un sensore o del tempo limite
}
if (digitalRead(sensore_1) == LOW) flag = true; // flag true se è stato attivato prima sensore_1
while (digitalRead(sensore_1) == LOW && digitalRead(sensore_0) == LOW || millis() - timer >= T_MAX) { // in attesa dell'attivazione di entrambi i sensori o del tempo limite
}
if (millis() - timer >= T_MAX || flag == false)
{
digitalWrite(potenziometro, LOW);
digitalWrite(test, LOW);
timer = millis();
flag = false;
}
else
{
timer = millis();
digitalWrite(potenziometro, HIGH);
digitalWrite(test, HIGH);
flag = false;
}
}
Lo detto che mi sfuggiva qualcosa...... ho pensato al passaggio tra i due sensori , ma non al tempo per ricevere il passaggio del prossimo sensore, nel verso giusto. Devo finire un lavoro, poi mi applico piu' seriamente,devo fare un simulatore altrimenti mi perdo. Prima di continuare bisogna verificare che si riescano a mantenere attivi due sensori con un magnete, altrimenti perdiamo tempo. Ciao Imer
Se metti un delay blocchi il programma , bisogna mettere un ciclo while che controlli i millis() trascorsi. Dammi un momento ieri sera ho fatto un simulatore con arduino , non mi posso mettere la bici sul tavolo di lavoro.
Per mè questa è la strada giusta, bisogna solo che i sensori siano ad un angolo inferior della meta della distanza tra i magneti. Vediamo se trovi qualche stupidata. la libreria leOS2 la devi installare altrimenti non compili , se non sei capace fammi un fischio. Ciao IMer
#include "leOS2.h" leOS2 pas;
/* per funzionare i due magneti devono avere una distanza tale che non si attivino assieme */ const byte led = 13; const byte potenziometro = 12; const byte sensore_0 = 11; const byte sensore_1 = 10; boolean Passaggio = false; boolean motore = false; byte statusLed = 1;
digitalWrite(led, LOW); digitalWrite(potenziometro, LOW); pas.begin(); pas.addTask( attesa, pas.convertMs(10)); // bisogna impostare il tempo max che si ammette tra il pasasggio del magnete sui due sensori pas.addTask(magnete, pas.convertMs(500)); // bisogna impostare il tempo max tra due magneti pas.haltScheduler(); }
void loop() { if (sensore_0 == LOW) { // attende che passi il magnete sul sensore Passaggio == true; pas.haltScheduler(); // ferma e riavvia i timer pas.restartScheduler(); } if (sensore_1 == LOW && Passaggio == true) { // attende attivazione sensore 1 mentre Passaggio è true vuol dire che pedalo nel verso giusto motore = true; digitalWrite(led, HIGH); digitalWrite(potenziometro, HIGH); }
if (motore == false) { // Se entro il tempo fissato nel timer magnete non si ripete il ciclo si spengne il motore pas.haltScheduler(); digitalWrite(led, LOW); digitalWrite(potenziometro, LOW); } }
quello scritto sopra puo non funzionare se I tempi sono inferiori ad un certo valore,devo trovare la vecchia libreria. si puo' provare cosi:
/* per funzionare i due magneti devono avere una distanza tale che non si attivino assieme */ const byte led = 13; const byte potenziometro = 12; const byte sensore_0 = 11; const byte sensore_1 = 10; const int attesa = 10; // bisogna impostare il tempo max che si ammette tra il pasasggio del magnete sui due sensori const int magnete = 500; // bisogna impostare il tempo max tra due magneti boolean Passaggio = false; boolean motore = false; unsigned long = tempo;
void loop() { if (sensore_0 == LOW) { // attende che passi il magnete sul sensore Passaggio == true; tempo = millis(); } if (sensore_1 == LOW && Passaggio == true) { // attende attivazione sensore 1 mentre Passaggio è true vuol dire che pedalo nel verso giusto motore = true; digitalWrite(led, HIGH); digitalWrite(potenziometro, HIGH); }
if (motore == false) { // Se entro il tempo fissato nel timer magnete non si ripete il ciclo si spengne il motore pas.haltScheduler(); digitalWrite(led, LOW); digitalWrite(potenziometro, LOW); } if (millis() - tempo >= attesa) { Passaggio = false; } if (millis() - tempo >= magnete) { motore = false; } } Ciao Imer
mah ... ora mi perdo un po' ... nel flusso, nella sintassi e anche nell'uso della libreria. Ho visto solo un 'me' accentato. Mi leggo https://github.com/leomil72/leOS2 per vedere se ne esco ...
Son sempre qua ! se ho detto che ti aiuto non abbandono il progetto. Oggi ho usato la bici elettrica con la moglie, ogni tanto fammi uscire di casa. vanno bassi assieme o uno prima dell'altro, se è cosi non ci son problemi. con arduino si posso leggere i microsecondi quindi non dovrebbe essere un problema, altrimenti c'è ancora un'altra soluzione ma la lasciavo per ultima perché i tempi diventano un po empirici da calcolare.
Uno prima dell'altro!! Per 6 mm solo uno, per 6 mm entrambi, per 6mm solo l'altro. Oggi li ho resinati in un unico sensore con quattro fili: + - h1 h2. Aspetto la scheda ...
Schedina pervenuta. Il doppio sensore funziona come ideato, con un resistore tra V+ e ciascun OUT. Ho messo 8KOhm, va bene? Come si dovrebbe dimensionare questo componente? Proverò a giocare coi tempi, che ora, col mio codice, l'assistenza (anzi, la lucina led) va e viene.
Non avevo visto ieri sera troppo tardi per mè!, la mia sveglia suona alle 5.30. La resistenza sull'uscita non serve puoi toglierla se vuoi , al limite abbassala a 1K , tanto per proteggere il sensore , in caso di errori. Se posti il codice vediamo se ti posso aiutare. Se hai modo di poter far girare i pedali tenendo la bici ferma ,togliendo la catena per esempio e usando la seriale di arduino si possono monitorare i tempi e capirci qualcosa in piu'.
Dimenticavo se non avevi mai usato arduino complimenti !!!
Avevo letto male scusami la resistenza è verso positivo non in serie all'uscita, abbassala comunque a 1K. Diciamo che piu' bassa meno rischi disturbi , ma non si puo' neppure esagerare. Se mi dai la sigla del sensore magari dai datasheet si vede qual'è la corrente massima.
Chiedermi scusa poi … ieri ho tirato tardi, preso dalla concitazione del gingillo nuovo ... Prima di affrontare il codice vorrei capire il sensore, purtroppo ormai doppio, avendo io resinato tutto insieme. Non si legge più niente, e nel negozio eBay era solo "Hall sensor" ...
La resistenza è messa così:
Senza, l’uscita del sensore è bassa ed erratica.
Ho stimato a “braccio” (diciamo), che la corrente che vi circola debba essere sensatamente inferiore di quella che passa nel sensore. Nel sensore ( in ciascun Hall) passano quattro o tre mA, a seconda che sia eccitato o meno, con un resistore 10K aggiungo un assorbimento di 0,5 mA. Con uno da 1K 5 mA ...
La situazione al momento è questa ( lo scarafaggio rosso è il sensore): l’analogico misura la corrente su V+ (che alimenta DUE sensori), e il digitale la tensione su OUT di UN sensore.
Il tutto sembra abbastanza “robusto”. Devo far diverso? Con quale criterio?
Ciao, non ho risposto prima perché è due giorni che non riuscivo a connettermi al forum. Ho dato un'occhiata ai datasheet dei sensori hall quelli che ho visto e a parte uno che bisogna alimentare a 28 V e ha uno OUT di 1 mA gli altri come corrente minima sono 10 mA sul pin di OUT, quindi penso che sei in sicurezza. L'unico dubbio è se quello che hai preso è lineare o sull'uscita c'è un trigger. Se è quello lineare se avvicini la calamita lentamente dovresti vedere l'uscita che varia in funzione della distanza del magnete dal sensore , se è quello con il trigger raggiunta una certa distanza scatta basso di colpo. Stupendo il tester ICE 680 R ne ho ancora 2 , ma li tengo nel museo Con il software ci son problemi ?
Certo ne hai di pazienza ... ho usato "while" con significato capovolto, ... le fesserie sulle aggiunte di correnti ... Grazie per il supporto. Il sensore si comporta praticamente ON/OFF. Il tester è un ricordo di mio padre, e cerco di trattarlo con cura, ma sono contrario alle reliquie. Comunque è uno degli ultimi. Il codice seguente funziona al banco senza difetti evidenti. In settimana proverò ad affrontare le mille sfighette "tra il dire e il fare".
/*
PAS
Attiva l'assistenza, fornendo al potenziometro alimentazione 5V quando i pedali girano col verso corretto e sufficiente velocità.
Il circuito:
* sensore di Hall G collegato al pin 12
* sensore di Hall W collegato al pin 11
* resistori 5,7K collegati tra V+ e pin 11 e 12
* uscita V+ 5V dal pin 10 quando viene attivata l'assistenza.
* Accende il LED giallo sulla scheda, pin 13, quando viene attivata l'assistenza.
*
09.09.2016
by Washer
*/
// costanti:
const byte sensoreG = 11; // pin del sensore G
const byte sensoreW = 12; // pin del sensore W
const byte potenziometro = 10; // pin dell'uscita al potenziometro
const byte led = 13; // pin dell'uscita al LED
unsigned long tempoMax = 2000; // imposta a un tot secondi un intervallo di tempo
// variabili:
boolean revR = false; // variabile per controllare il senso di rotazione
unsigned long tempo = 0; // variabile per controllare i tempi di attivazione dei sensori
void setup() {
// inizializza i pin led e potenziometro come output:
pinMode(led, OUTPUT);
pinMode(potenziometro, OUTPUT);
// initializza i pin sensoreG e sensoreW come input:
pinMode(sensoreG, INPUT);
pinMode(sensoreW, INPUT);
digitalWrite(potenziometro, LOW);
digitalWrite(led, LOW);
}
void loop() {
// controlla l'eccitazione del sensoreG:
if (digitalRead(sensoreG) == LOW) {
revR = true;
}
// controlla l'eccitazione del sensoreW:
if (digitalRead(sensoreW) == LOW) {
revR = false;
}
// attende l'eccitazione di entrambi i sensori e revR true:
if (digitalRead(sensoreG) == LOW && digitalRead(sensoreW) == LOW && revR == true) {
// se in tempo utile attiva l'assistenza, accende led, resetta tempo:
if ( millis() - tempo < tempoMax) {
digitalWrite(potenziometro, HIGH);
digitalWrite(led, HIGH);
tempo = millis();
revR = false;
}
}
// se scade il tempo utile taglia l'assistenza, spegne led, resetta tempo:
if (millis() - tempo > tempoMax){
digitalWrite(potenziometro, LOW);
digitalWrite(led, LOW);
tempo = millis();
revR = false;
}
}
Pazienza perché , se non volevo aiutare non ti offrivo il supporto , se risolvi il problema aiuti anche me o altri, per me il forum è questo spirito di aiuto e collaborazione, ogni uno ci mette del suo e si va avanti. Il software non mi è chiaro i primi 2 if il sensorrW e sensorG allora tu confermi l'avvio quando sono tutte e due bassi e hai la costante revR = vera, se ruoti al contrario la metti falsa in modo che non può accettare la condizione di avvio.
Vediamo se mi è chiaro: sensorG è il primo che incontra, mette revR = vera si aspetta che tutte e due vanno bassi per caricare il timer e avviare il motore a questo punto sono in uscita sul sensorW che lo porto a falso e a questo punto attendo o il timer a 0 e spengo o di ripetere il ciclo.
Se giro i pedali al contrario attivo sensroW = falso quindi non posso attivare il motore.
cosi può andare ma non vedo dove usi while vedo solo dei if
L'unico dubbio ma penso che ne sei cosciente sono i 2 secondi, mi sembra troppo alto , quanti magneti ci sono ?
Se l'appetito vien mangiando io ci metterei anche la gestione freni e tensione minima di batteria
Sembra funzionare, ma non mi piace l'idea che il corretto valore di flag per l'attivazione, si basi sui cicli di esecuzione del programma. Preferisco il tuo approccio a stati.
Con questo codice:
/*
PAS
Attiva l'assistenza, fornendo al potenziometro alimentazione 5V quando i pedali girano col verso corretto e sufficiente velocità.
Il circuito:
* sensore di Hall G collegato al pin 12
* sensore di Hall W collegato al pin 11
* resistori 5,7K collegati tra V+ e pin 11 e 12
* uscita V+ 5V dal pin 10 quando viene attivata l'assistenza.
* Accende il LED giallo sulla scheda, pin 13, quando viene attivata l'assistenza.
*
11.09.2016
by Washer
*/
// costanti:
const byte sensoreG = 11; // pin del sensore G
const byte sensoreW = 12; // pin del sensore W
const byte potenziometro = 10; // pin dell'uscita al potenziometro
const byte led = 13; // pin dell'uscita al LED
unsigned long tempoMax = 1000; // imposta a un tot secondi un intervallo di tempo
// variabili:
boolean errore = false; // variabile per controllare anomalie nel senso di rotazione o nei tempi
unsigned long tempo = 0; // variabile per controllare i tempi di attivazione dei sensori
byte passo = 0; // variabile per controllare la sequenza di attivazione dei sensori
void setup() {
// inizializza i pin led e potenziometro come output:
pinMode(led, OUTPUT);
pinMode(potenziometro, OUTPUT);
// initializza i pin sensoreG e sensoreW come input:
pinMode(sensoreG, INPUT);
pinMode(sensoreW, INPUT);
digitalWrite(potenziometro, LOW);
digitalWrite(led, LOW);
}
void loop() {
tempo = millis();
while (digitalRead(sensoreG) == HIGH && digitalRead(sensoreW) == HIGH && millis() - tempo < tempoMax ){ // stato iniziale con entrambi i sensori diseccitati
passo = 0;
errore = false;
}
while (digitalRead(sensoreG) == LOW && digitalRead(sensoreW) == HIGH && millis() - tempo < tempoMax ){ // controlla l'esecuzione del primo passo della sequenza di attivazione in tempo utile
if (millis() - tempo > tempoMax){
errore = true;
}
else {
if (passo == 0 || passo == 1){
passo = 1;
}
else {
errore = true;
}
}
}
while (digitalRead(sensoreG) == LOW && digitalRead(sensoreW) == LOW && millis() - tempo < tempoMax ){ // controlla l'esecuzione del secondo passo della sequenza di attivazione in tempo utile
if (millis() - tempo > tempoMax){
errore = true;
}
else {
if (passo == 1 || passo == 2){
passo = 2;
}
else {
errore = true;
}
}
}
while (digitalRead(sensoreG) == HIGH && digitalRead(sensoreW) == LOW && millis() - tempo < tempoMax ){ // controlla l'esecuzione del terzo passo della sequenza di attivazione in tempo utile
if (millis() - tempo > tempoMax){
errore = true;
}
else {
if (passo == 2 || passo == 3){
passo = 3;
}
else {
errore = true;
}
}
}
if (passo == 3 && millis() - tempo < tempoMax && errore == false){ // attiva assistenza e accende led se la sequenza di attivazione è stata eseguta correttamente in tempo utile
digitalWrite(led, HIGH);
digitalWrite(potenziometro, HIGH);
//passo = 0;
}
else { // toglie assistanza e spegne led se sequenza non corretta o oltre tempo limite
digitalWrite(led,LOW);
digitalWrite(potenziometro, LOW);
}
}
Direi che ci sei ,adesso devi installarlo e li avrai la prova del nove. Il mio unico dubbio è se usi un magnete solo, il tempo sarà alto di conseguenza lo spegnimento perchè smetti di pedalare avverra dopo "molto" tempo.
Ci sono cinque magneti sulla circonferenza. Il tempo sarà settato sui risultati pratici, ma credo che non sia critico, con l'acceleratore a manopola. Come pure la gestione dei freni. Ovviamente l'appetito sale ...
Dai che sta venedo fuori qualcosa di carino, tu che all'inzio non mi sembravi molto convinto. Se vai avanti cosi ti fai la centralina completa . Se vuoi integrare i freni conviene usare interrupts(), ti svincoli dal programma principale , stai attento che non tutti i pin si possono usare devi far riferimento al tipo di arduino che usi.
topic OFF Una domanda ma come lo alimenti arduino ? Io ho fatto delle prove con il mio sensore di cambiata, ma ho problemi di alimentazione, la tensione che prelevo dalla centralina del bafang è gia bassa di suo e con il motore a vuoto funziona bene, ma come il motore va a carico (appoggio la ruota a terra) mi manda in reset il micro per tensione bassa. Sto cercando uno step-down che sopporti 50V e che riesca ad essere infilato nella base della batteria.
Sono contento di aver seguito il tuo consiglio. Guarderò gli interrupts per prendere sonno, ma con l'acceleratore a manopola i freni possono stare dove sono.
Al momento alimento solo da USB. Al banco. Dalla mia centralina è improponibile. Dimmi se trovi lo step down, io ho pensato a LM317. La schedina mi consuma 22 mA, è un consumo piuttosto costante, o varia parecchio a seconda dell'impegno?
Se non usi il led di segnalazione del pin 13 ci togli 5/10 mA. Per lo step-down sto guardando , non ho voglia di fare lo stampato e tutto il resto. Con che tensione entri ? Ciao Imer
Girellando per Arduino Reference, scopro che si possono abilitare i suoi resistori di pull up e che forse posso eliminare le resistenze sul sensore ...
Si lo puoi fare. Devi stare attento che tutto sia a 5V. Arduino ti ha stregato, vedo ti stai immergendo Ma lo hai montato l' ArduPas sulla bici? Ciao Imer
Sono al banco, la bici sta facendo i suoi 8 km/die con un interruttore sulla catena. Aspetto lo step down per poi inscatolare il tutto in maniera non provvisoria.
“Bisogna essere intelligenti per venire a Ibla….ci vuole una certa qualità d’anima, il gusto per i tufi silenziosi e ardenti, i vicoli ciechi, le giravolte inutili, le persiane sigillate su uno sguardo che spia: ma anche si pretende la passione per le macchinazioni architettoniche, dove la foga delle forme in volo nasconde fino all’ultimo il colpo di scena della prospettiva bugiarda. Ibla è città che recita a due voci insomma. Talvolta da un podio eloquente, più spesso a fior di labbra, in sordina, come conviene a una terra che indossa il suo barocco col ritegno di una dama antica”. (Gesualdo Bufalino, La Luce e il Lutto)
La vita è come una bicicletta con dieci velocità. La maggior parte di noi ha marce che non userà mai. Linus, in Charles M. Schulz, Peanuts, 1950/2000
...La tempesta primaverile scuote d'un latrato di fedeltà la mia arca, o perduti. (L'Arca di E.Montale).
“Bisogna essere intelligenti per venire a Ibla….ci vuole una certa qualità d’anima, il gusto per i tufi silenziosi e ardenti, i vicoli ciechi, le giravolte inutili, le persiane sigillate su uno sguardo che spia: ma anche si pretende la passione per le macchinazioni architettoniche, dove la foga delle forme in volo nasconde fino all’ultimo il colpo di scena della prospettiva bugiarda. Ibla è città che recita a due voci insomma. Talvolta da un podio eloquente, più spesso a fior di labbra, in sordina, come conviene a una terra che indossa il suo barocco col ritegno di una dama antica”. (Gesualdo Bufalino, La Luce e il Lutto)
La vita è come una bicicletta con dieci velocità. La maggior parte di noi ha marce che non userà mai. Linus, in Charles M. Schulz, Peanuts, 1950/2000
...La tempesta primaverile scuote d'un latrato di fedeltà la mia arca, o perduti. (L'Arca di E.Montale).
Ok, se ci sono problemi legati ai disturbi prova come ho indicato, o proviamo con un paio di condensatori. Rimango in tremante e trepidante attesa di sapere se funziona Ciao Imer
Mi hai messo sbrescia, domani lo istallo. Prenderò 3s dai paralleli della batteria. Il codice si può sfoltire, dallo stato iniziale, con entrambi i sensori diseccitati, sono sufficienti i due passi successivi.
Boh? Ho messo codici a muzzo per una settimana, senza problemi, ma ieri ha smesso di comunicare col PC. Ho provato vari balletti sul tasto reset senza esito. I numerosi post sul web per il mio errore, prevedono che la tappa successiva sia ricaricare il bootloader. Prima di buttare la scheda. Concordi?
Si il problema è la comunicazione. Puoi ricaricare il bootloader usando un altro arduino. Prima farei la prova a vedere se comunica su un'altro pc se ne hai la possibilita.
“Bisogna essere intelligenti per venire a Ibla….ci vuole una certa qualità d’anima, il gusto per i tufi silenziosi e ardenti, i vicoli ciechi, le giravolte inutili, le persiane sigillate su uno sguardo che spia: ma anche si pretende la passione per le macchinazioni architettoniche, dove la foga delle forme in volo nasconde fino all’ultimo il colpo di scena della prospettiva bugiarda. Ibla è città che recita a due voci insomma. Talvolta da un podio eloquente, più spesso a fior di labbra, in sordina, come conviene a una terra che indossa il suo barocco col ritegno di una dama antica”. (Gesualdo Bufalino, La Luce e il Lutto)
La vita è come una bicicletta con dieci velocità. La maggior parte di noi ha marce che non userà mai. Linus, in Charles M. Schulz, Peanuts, 1950/2000
...La tempesta primaverile scuote d'un latrato di fedeltà la mia arca, o perduti. (L'Arca di E.Montale).
Già provato il cambio di cavo e PC ... nisba. Oggi è arrivata una manciata di arduini cinesi: 4 funzionano, dopo lo sbattone per i driver. Vado a mettere un disco da ibla, e poi connetto ...
“Bisogna essere intelligenti per venire a Ibla….ci vuole una certa qualità d’anima, il gusto per i tufi silenziosi e ardenti, i vicoli ciechi, le giravolte inutili, le persiane sigillate su uno sguardo che spia: ma anche si pretende la passione per le macchinazioni architettoniche, dove la foga delle forme in volo nasconde fino all’ultimo il colpo di scena della prospettiva bugiarda. Ibla è città che recita a due voci insomma. Talvolta da un podio eloquente, più spesso a fior di labbra, in sordina, come conviene a una terra che indossa il suo barocco col ritegno di una dama antica”. (Gesualdo Bufalino, La Luce e il Lutto)
La vita è come una bicicletta con dieci velocità. La maggior parte di noi ha marce che non userà mai. Linus, in Charles M. Schulz, Peanuts, 1950/2000
...La tempesta primaverile scuote d'un latrato di fedeltà la mia arca, o perduti. (L'Arca di E.Montale).