Creare passo a passo radiosveglia con Dot Matrix

Ciao a tutti, chiedo il vostro aiuto per creare una radiosveglia con Arduino.

Non mi interessano funzioni particolari, online si trovano diverse guide, ma nessuna è completa.
Alcune sono in lingua straniera, altre sospese a metà oppure hanno una marea di funzioni in più, come la visualizzazione dei follower aggiornata, che non mi interessa.
In pratica, un clone della LaMetric ma semplificata nelle funzioni.

Per la costruzione dell'involucro pensavo al legno, dove non avrei particolari problemi per costruirmela.
Mentre per i componenti, come Arduino, devo comprare ancora tutto, per questo chiedevo aiuto a voi su come procedere.

Mi piacerebbe creare qualcosa di questo tipo:
Alimentazione da rete, eventualmente una batteria tampone per mantenere data/ora
Usare come display dei Dot Matrix
Funzione di sveglia con snooze
(Se non troppo complesso) Visualizzazione della temperatura del luogo dove si trova la sveglia e di radio FM

Resto in attesa dei vostri consigli
A presto :smiley:

Ciao.
Per la parte orologio con sveglia, cicalino sveglia e temperatura vanno bene più o meno tutti gli arduino, anche un semplice nano. Aggiungi un rtc tipo ds1307 o ds3231 per la funzione orologio (prevedono già una piccola batteria tampone per non perdere l'ora) e un comunissimo buzzer per il cicalino.
Per la temperatura puoi prevedere un DHT22 o forse il ds3231 ha già un sensore di temperatura incorporato (non ricordo).
La cosa che vedo più complessa (almeno per le mie capacità) è la parte radio fm...
Se passi a ESP8266 ho visto che c'è questo progetto, ma non lo conosco bene e non l'ho provato:
https://create.arduino.cc/projecthub/earlephilhower/esp8266-digital-radio-ee747f

Per la parte radio FM qui c'è un articolo che sembra ben fatto. Puoi integrare il codice con quello della sveglia che devi creare.

Ciao,
P.

Grazie per i consigli, diciamo che non ho problemi a seguire uno schema elettrico, quello che mi manca sono i componenti da utilizzare e la parte di programmazione.

Per chiarire, vorrei comandare il tutto con dei pulsanti, da installare sopra la scatola.
Come Arduino e componenti da comprare, non ho problemi, anzi preferisco spendere qualcosa in più adesso per avere una buona base per il tutto.

Sapete indicarmi una lista di tutto il necessario, comprensivo di Dot Display?
Grazie

Guarda... prendere tutto quello che serve al primo colpo e prenderlo tutto giusto la vedo dura... o almeno a me non è mai riuscito. In più dici di avere qualche problema con la programmazione...
Onestamente partirei per gradi, cominciando con un kit con vari componenti già inclusi, tipo lo starter-kit che trovi nello store ufficiale oppure uno dei tanti che trovi su internet. Così fai un minimo di pratica e poi cominci col progetto.

Riguardo il tuo progetto, posso provare a dirti cosa prenderei io, ma non è detto che sia l'unica soluzione e neppure la migliore...

  • arduino nano (equivale alla uno ma è più piccola)
  • dot matrix max 7219
  • rtc ds3231 che dovrebbe avere anche un sensore di temperatura
  • pulsanti, led, resistenze alla bisogna
  • per la parte FM vedi link di pgiagno

Permettimi di darti alcuni consigli:

  • Se non hai un pusher (=fornitore) di elettronica preferito, rivolgiti a quelli online, scegliendo quelli italiani. Spendi un pelo di più, ma la merce arriva prima e hai sempre comunque qualcuno con cui arrabbiarti. In italiano.
  • Comincia col procurarti un Arduino nano, una breadboard, dei cavetti dupont, un display MAX7219 8x32 e comincia a pasticciare con elettronica e programma.

Già con queste due cose puoi cominciare a creare un orologio che funziona col quarzo dell'Arduino. Estremamente impreciso nel tempo, ma ti insegna a creare e visualizzare i numeri sul display.

In seguito, trattandosi di una sveglia, compra alcuni pulsanti e un buzzer e modifica il programma per:

  • Impostare l'ora corrente
  • Impostare l'ora di sveglia
  • Attivare/disattivare la sveglia con segnalazione sul display.

Quando anche questo funzionerà, compra un modulo rtc DS3231 e integra anche quello nel programma.

Lascia il modulo FM alla fine.

Ciao, buon lavoro,
P.

Grazie per le risposte, lascio per ultimi il modulo RTC e quello per la radio.
Visto che non ho alcun accessorio e poca esperienza, credo sia giusto partire con uno starter kit.

EDIT: Lo starter-kit con Arduino Uno va bene lo stesso?
Per me avrebbe il Plus da non poco conto del libro che ti insegna passo passo dalle fondamenta.
Oppure esiste un libro similare a se per comprare il resto tutto diviso o un kit più economico?

Grazie

Se il tuo dubbio riguarda arduino nano vs arduino uno considera che cambiano solo le dimensioni, tutto il resto è praticamente uguale. Per cominciare va bene la uno, se poi vorrai miniaturizzare il progetto passerai ad un modello di dimensioni minori.
Riguardo lo starter kit... io avevo preso l'originale ed ammetto che il libro mi è stato davvero utile. Non saprei dirti se ci sono kit più economici con un libro simile...

Ciao.
Mi permetto di aggiungere qualche suggerimento agli ottimi già ricevuti, visto che gran parte dei miei progetti sono simili a quanto vuoi fare.
A parte il valido consiglio di prendere uno starter kit ed iniziare a fare pratica, per lo specifico io consiglierei, oltre al Rda 5807M nudo, una breakout della Groove che ha già a bordo il convertitore di livelli e l'alimentazione a 5 V: unico svantaggio è l'antenna integrata nel jack dell'audio pertanto si potrebbero avere problemi di ricezione se si utilizza un cavo corto ed interno.
Altrimenti, più semplice da utilizzare c'è il TEA5767: è già montato su una breakout con i 4 pin dell'I2C e i 2 jack per l'antenna e per l'audio.
Per l'orologio va bene il DS 3231 ma, per il sensore di temperatura integrato, non sono sicuro che sia utile, perchè potrebbe darti delle letture relative ai chip o perlomeno dell'interno del contenitore della sveglia.
Per temperatura, umidità e pressione atmosferica potresti usare un BME 280 magari anche qui una versione su una breakout (su Amazon cercando BME 280 si trova: ha in dotazione il cavetto con 6 fili per I2C o SPI) posizionandola in modo che non risenta del problema di cui sopra.
Per il display a matrice, mi chiamo fuori; non li ho mai utilizzati (però puoi cercare in rete: ci sono tutorial anche in in italiano ben fatti); inoltre io suggerirei di utilizzare un LCD 20 x 4 I2C per la radio ed i dati ambientali; potrai spegnere sia la retroilluminazione sia il testo con i comandi della libreria .
Poi, per cominciare, proverei ogni singolo componente da solo partendo dagli esempi delle librerie(a proposito: ve ne sono diverse per ogni componente, soprattutto per le radio e bisognerebbe provarle per vedere quella che è più utile) e pian piano li integrerei fra loro( es. RTC con il display matrix, la radio con l'LCD ecc.).
Inoltre io prenderei altri libri su Arduino; anche qui cerca in rete, magari cominciando dal forum, perchè ad un certo punto non ti basterà quello dello starter kit.
Alla fine, quando avrai preso confidenza con la scrittura del codice, potrai sbizzarrirti con le funzioni da implementare: per esempio potresti impostare allarmi diversi per i vari giorni della settimana; oppure accendere la radio al posto del cicalino(è relativamente semplice: nei comandi delle librerie dovrebbe essere presente un metodo radio/no radio o simile per accendere e spegnere), imparare ad usare la EEPROM per memorizzare le stazioni e magari gli orari, aggiungere una fotoresistenza per regolare la luminosità dei display ecc. ecc.
La finisco qui perchè ho già scritto più della media, ma per il progetto definitivo ci sarebbero altri suggerimenti, soprattutto sull'alimentazione.

Saluti , Valter

Sono finalmente in possesso di un kit fornitomi da un negozio di elettronica
Oltre all’Uno, ho una scatola di componenti utili per il mio progetto e per iniziare

Nel misto, c’è già RTC (non capisco quale) sensore temperatura, buzzer, fotoresistenza, LCD ed ecc
Alcuni sembrano davvero piccoli e delicati, sicuramente una bella sfida, già iniziare a fare qualcosa su Breadboard

Parto per prendere dimestichezza con la guida del libro ufficiale, poi vi aggiorno per iniziare il progetto vero e proprio

Ciao a tutti,
In questo periodo, ho avuto un po' di tempo e sono riuscito ad andare avanti nel progetto.
Ho fatto qualche prova iniziale seguendo il libro, tipo quella dei LED in sequenza premendo i pulsanti (Astronave).
Infine seguendo delle guide su Youtube, ho provato i componenti singoli dentro al kit.

Per alcuni sketch sono partito dagli esempi delle librerie, altri scritti con le guide e modificando a piacimento la visualizzazione

Come sensore di temperatura ho un DHT11 su CNT5, cioè i 3 pin (VCC, GND e dati) questo funziona e ordina come voglio i dati nel monitor seriale, devo solo verificare se affidabile.

Come RTC ho un DS1302 con 4 pin (VCC, GND, CLK, DAT e RST) con questo non ho concluso molto, perchè mi visualizzava solo caratteri speciali, dovrò provare con un altro sketch in rete.

Come display LCD, sinceramente non ho capito quale sia, ma usando l'esempio della libreria LiquidCrystal I2C "Hello World" riesco a farlo funzionare e scrivere cosa voglio

Nel kit ho anche un fotoresistore, che dovrò vedere come utilizzare in futuro.

Adesso se volessi mettere tutto assieme, almeno per iniziare, creo uno sketch unico, ma per i collegamenti?
Oppure conviene fare altro prima?

Grazie

Puoi procedere per gradi.
Prendi uno degli sketch che hai fatto e che funziona (tipo quello della temperatura con DHT11) e ci aggiungi un pezzo (per esempio lcd i2c).
Quando questo nuovo sketch con 2 "funzioni" è apposto allora aggiungi un altro pezzo.

Ciao a tutti,
Vi aggiorno sui pochi passi avanti fatti nel tempo libero.
Riesco a far funzionare tutti i pezzi singolarmente, grazie agli esempi delle librerie e visualizzo i dati nel Serial Monitor
Per esempio il DS1302 RTC, non funzionava , ma con una nuova libreria, modificando nello sketch i pin di collegamento e impostando il Serial.begin a 9600 ora visualizzo i dati corretti.

Ora, non riesco a mettere assieme 2 pezzi, tipo visualizzare RTC sul display, perchè escono errori di vario genere, seguendo guide online non riesco a risolvere.
Ho provato a fondere gli esempi, ma si incasina tutto comunque

Qualche consiglio?

Grazie

Posta quello che hai fatto e gli errori che ti da il compilatore.

Questa mattina ho fatto un piccolo passo avanti, ho messo assieme i 2 esempi funzionanti e mi stampa sul LCD data e ora di collegamento.
Ora il display non si aggiorna ogni secondo, ma resta fisso all'ora di caricamento.

Copio il programma completo qui sotto, scusatemi per gli errori grossolani, ma sono delle prove, faccio ancora fatica a capire bene tutte le parti del programma.
Per esempio riesco a impostare il testo centrato nel LCD, ma non a scrivere la data in italiano.

Grazie per il supporto

// Connessioni DS1302:
// CLK --> PIN digitale 6
// DAT --> PIN digitale 7
// RST --> PIN digitale 8
// 
// Connessioni LCD
// SDA --> PIN analogico A4
// SCL --> PIN analogico A5

#include <ThreeWire.h>  
#include <RtcDS1302.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

ThreeWire myWire(7,6,8);            // DAT,CLK,RST
RtcDS1302<ThreeWire> Rtc(myWire);
LiquidCrystal_I2C lcd(0x27,16,2);   // Setta indirizzo I2C LCD a 0x27 per un display a 16 righe e 2 colonne

void setup () 
{
  lcd.init();                      // Reset lcd 
  lcd.backlight();
     
  Serial.begin(9600);
  Serial.print("compiled: ");
  Serial.print(__TIME__);
  Serial.println(__DATE__);

    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__TIME__, __DATE__);
    printDateTime(compiled);
    Serial.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        // Common Causes:
        //    1) first time you ran and the device wasn't running yet
        //    2) the battery on the device is low or even missing

        Serial.println("RTC lost confidence in the DateTime!");
        Rtc.SetDateTime(compiled);
    }

    if (Rtc.GetIsWriteProtected())
    {
        Serial.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
    }

    if (!Rtc.GetIsRunning())
    {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
    }
    else if (now > compiled) 
    {
        Serial.println("RTC is newer than compile time. (this is expected)");
    }
    else if (now == compiled) 
    {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
    }
}

void loop () 
{
    lcd.setCursor(2,0);
    lcd.print(__DATE__);
    lcd.setCursor(4,1);
    lcd.print(__TIME__);
    
    RtcDateTime now = Rtc.GetDateTime();

    printDateTime(now);
    Serial.println();

    if (!now.IsValid())
    {
        // Common Causes:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
    }

    delay(1000); // ten seconds
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printDateTime(const RtcDateTime& dt)
{
    char datestring[20];

    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
            dt.Month(),
            dt.Day(),
            dt.Year(),
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    Serial.print(datestring);
}

ti posso dare un consiglio solo:

non sei lontano dalla soluzione (almeno di questa parte)
ma se vuoi imparare adesso il boccino è a te (significa che devi metterti a studiare)
altrimenti se anche ne uscissi col nostro aiuto, da qui
ti impantaneresti subito dopo

ti posso solo consigliare di "studiare" cosa fa ogni singola riga del tuo programma

sono sicuro che dopo poche righe capirai la soluzione del primo problema e poco dopo anche quella del secondo
ma come ho detto il boccino sta da te

e aggiungo

indenta come BSD comanda e metti i commenti giusti per quello che il programma fa

Ciao, grazie per il consiglio
So che devo imparare e quando ho tempo da dedicarci, riesco sempre a fare un passo avanti, da soddisfazione vedere il risultato su Arduino, cose che credevo decisamente più complicate.

Grazie al forum e all'enorme diffusione, cerco sempre qualche diritta per avanzare nel modo corretto e sfruttare tutte le enormi potenzialità di Arduino.

Per esempio: "indenta come BSD comanda sarebbe?"
La maggioranza dello sketch deriva dagli esempi delle librerie, ho solo tradotto quello che ho capito e che potrebbe venire comodo in futuro.

Grazie per i consigli

Indenta il codice

Formattalo, dagli una veste grafica che sia facile da capire

Ora ho il pc in manutenzione

Cerca un po' qui sul forum

Il codice, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Guglielmo

Ok, vedrò d'imparare a scrivere meglio il codice, nel frattempo leggo qualche guida .

Per copiarlo ho usato la funzione presente in IDE, cioè Modifica --> Copia per il forum, quindi incollato qui direttamente.
Al momento utilizzo Ubuntu, ma credo sia indifferente qualunque sistema per IDE