Ciao,
Leggevo le specifiche e se ho capito bene per alimentare Arduino con un trasformatore da parete dovrebbe andare bene uno da 9V (con ground al centro se uso il connettore barrel).
Deve fare data loging della temperatura e uplodare via FTP i files giornalieri.
Non è ci abbia attaccato un sacco di roba MBP380, SD, RTC.
Per la rete uso la wifi integrata.
Ma l'amperaggio?
2 Ampere vanno bene? E 1 A va bene lo stesso?
Lo chiedo perché da PC va alla grande (anche con PC spento viene alimentato e fa tutto) ma col trasformatore che uso ora a muro con cui ricarico i cellulari (che ora non ricordo ma potrebbe essere solo 1A) sembra non faccia nulla.
Cioè i led si accendono ma non logga e non uploada.
Boh, secondo me non gli arriva abbastanza corrente.
Secondo voi può essere o sto sbagliando strada?
Il Power jack o barrel plug di Arduino accetta 9Vdc con positivo centrale, quelli con negativo centrale o negativo on Heart è lo standard per alimentare i pedali per strumenti musicali.
C'è un diodo in serie sui 9vdc che protegge l'ingresso di Arduino dall' inversione di polarità accidentale
Come vedi diodo, chip e condensatori accettano fino a 40vdc, l' unico motivo per limitare a 24v è che i 2 condensatori non sono stati equalizzati, quindi quando saranno invecchiati uno sarebbe potuto scoppiare, bastavano 2 resistenze in più per equalizzarli
Ciao. Capisco di non essermi espresso bene.
Ora uso un cavo USB con quello che ho definito, forse erroneamente, trasformatore.
È una scatoletta a forma di parallelepipedo che dà una parte ha l'attacco per la spina a muro, dall'altra una USB femmina.
Il cavo è lo stesso che uso quando lo collego al PC.
Mi aspettavo che con questo tipo di alimentazione potesse funzionare, ma non va.
Il pensiero era quindi che il "trasformatore" non eroghi abbastanza corrente per far funzionare tutto (ed.in effetti devo controllare anche i V).
Pensando quindi ad un alimentazione alternativa ma sempre a muro, cosa dovrei usare per non avere carenze?
icio, come sempre mi adeguo alle specifiche del produttore ... se indicano quel range avranno i loro motivi ... del resto, basta che guardi che cosa hanno combinato con C13 e C19 ... in serie
Si, uso quella per alimentarlo da parete.
E per forza anche quella,la stessa, per caricare il codice/librerie ecc... dall' IDE del PC.
Se fosse un problema software me ne dovrei accorgere quando monitoro l'ampio log della seriale dall'IDE. Perché vedrei scritte parlanti che ho inserito nel codice nel caso di anomalie. Invece dopo ore ed ore di esecuzione non vedo anomalie: i file vengono caricati via FTP, le notifiche telegram arrivano, i file vecchi vengono cancellati, data e ora si aggiornano, e così via...
No, intendo dire che se usi la Serial e il programma NON la trova (NON sei connesso alla seriale se usi solo un alimentatore USB-C) ... si blocca e resta li ...
Metti l'inizio del Setup() ... così vediamo come apri la seriale ...
void setup() {
Serial.begin(115200);
while (!Serial);
Wire.begin();
// Check/Set RTC
URTCLIB_WIRE.begin();
// Comment out below line once you set the date & time.
// Following line sets the RTC with an explicit date & time
// for example to set January 13 2022 at 12:56 you would call:
//rtc.set(0, 02, 9, 7, 21, 7, 24);
// rtc.set(second, minute, hour, dayOfWeek, dayOfMonth, month, year)
// set day of week (1=Sunday, 7=Saturday) // La disabilito perchè non ce l'ho bisogno.
//Check/Set SD
if (!SD.begin(4)) {
Serial.println("SD initialization failed!");
while (1);
}
Serial.println("SD initialization done.");
//Check/Set termometro
if (!bmx280.begin())
{
Serial.println("begin() failed. check your BMx280 Interface and I2C Address.");
while (1);
}
bmx280.resetToDefaults();
bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16);
bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16);
// Set the Telegram bot properies
myBot.setUpdateTime(2000);
myBot.setTelegramToken(token);
// Arretro volontariamente l'ultima rilevazione wifi così da farla già al primo ciclo senza aspettare
millis_ultima_rilevazione_wifi= millis() - intervallo_di_rilevazione_wifi_minuti*1000*60;
// Arretro volontariamente l'ultima notifica telegram così da farla già al primo ciclo senza aspettare
millis_ultima_notifica_temperatura= millis() - intervallo_di_notifica_temperatura_telegram_secondi*1000;
// Arretro volontariamente l'ultimo upload FTP del file corrente così da farl0 già al primo ciclo senza aspettare
millis_ultimo_upload_FTP = millis() - intervallo_di_notifica_temperatura_telegram_secondi*1000;
Serial.println("server");Serial.println(server);
}
Ciao a tutti,
riprendo l'argomento perchè ho implementato la modifica ma evidentemente ho ancora qualche problema, nel senso che anche inserendo la riga che hai suggerito al posto della mia alimentato a muro non va.
Allora ho anteposto a tutti i "Serial.print" e "Serial.println" la condizione sulla seriale facendo diventare le istruzioni da così
Serial.print("COLLEGATO A WIFI !!");
a così:
if(Serial) Serial.print("COLLEGATO A WIFI !!");
poichè ho pensato che se la Seriale non è inizializzata allora il tentativo di scriverci un messaggio poteva bloccare l'esecuzione del codice.
Domanda 1: ho fatto bene e serve anteporre questo oppure non serve a nulla e posso toglierlo?
Lo chiedo perchè comunque staccando dal PC e alimentando via USB con un caricatore da parete non ho alcun tipo di riscontro: sembra che Arduino non faccia nulla. Quindi sono ancora nella situazione dove attaccato al PC funziona, al muro no.
Ho pensato di usare la matrice a LED (ricordo che sono su un Arduino uno r4 wifi) per effettuare una sorta di debug: se creo delle matrici con i numeri interi a all'interno del codice mostro prima "1" poi "2" e poi "3" sulla matrice ma durate l'esecuzione si ferma al "2" vuole dire che il codice di inchioda tra il "2" e il "3".
Domanda 2: Ha senso fare questo per capire dove si blocca quando lo alimento dal muro?
NON serve a nulla ... o all'avvio c'è la seriale oppure non c'è ...
... in tale secondo caso, potresti semplicemente segnarti la cosa (una flag) e condizionare tutti i Serial.print a tale flag.
Questo non dovrebbe accadere mai, se accade c'è un errore di progettazione hardware/software.
Per esempio se fai l'upload di uno sketch banale come il blink che fa lampeggiare il led on board, questo deve funzionare sia quando connesso e alimentata via USB al PC o alla presa a muro, sia alimentata dal Jack (Vin).
Se con questo semplice sketch non funziona con la presa a muro, la causa è la presa a muro, cioè l'alimentatore/caricabatteria non è adatto, ma anche il cavetto potrebbe essere la causa. Mentre se il blink funziona anche con la presa a muro forse vuole dire che la tua applicazione consuma troppa corrente e che l'alimentatore a muro non è adatto.
Ho approfondito ancora.
Ho creato un array per la matrice a led con i numeri da 0 a 24 e li ho sparpagliati nel codice utilizzando il numero mostrato dalla matrice a led per identificare il punto in cui il codice si blocca.
Quando è attaccato al PC va fino a 20 (l'ultimo inserito) e tutto viene eseguito correttamente.
Quando invece è attaccato a parete la matrice mostra "5" e questo corrisponde al codice :
//Check/Set SD
matrix.loadFrame(coda[4]);
if (!SD.begin(4)) {
Serial.println("SD initialization failed!");
matrix.loadFrame(coda[5]);
while (1);
}
Serial.println("SD initialization done.");
In altre parole il "5" segnala un errore nell'inizializzazione della scheda SD.
Ora però la domanda: come mai questo errore avviene solo con l'alimentazione a muro?
E come posso fare per evitarlo?