Difference between revisions of "Domotica Device Arduino Progetti"
From Aino Wiki
(→Con modulo TEA5767) |
(→Con modulo TEA5767) |
||
| Line 184: | Line 184: | ||
* [https://www.instructables.com/Arduino-TEA5767-FM-Radio-Receiver/ instructables.com] | * [https://www.instructables.com/Arduino-TEA5767-FM-Radio-Receiver/ instructables.com] | ||
* [https://projecthub.arduino.cc/valerioceccoli/radio-arduino-uno-tea5767-0a4432 projecthub.arduino.cc] | * [https://projecthub.arduino.cc/valerioceccoli/radio-arduino-uno-tea5767-0a4432 projecthub.arduino.cc] | ||
| + | NOTE | ||
| + | * la libreria <TEA5767N.h> di Marcos R. Oliveira (scaricata da https://github.com/mroger/TEA5767) da per scontato il collegamento del modulo TEA5767 sui pin I2C ed usa l'indirizzo 0x60 (è una costante, TEA5767_I2C_ADDRESS, cablata nel file "TEA5767N.h"). | ||
<syntaxhighlight lang="csharp"> | <syntaxhighlight lang="csharp"> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 14:43, 28 November 2025
Contents
Implementazioni
Radio FM
Con modulo Si4703
E' un utile esercizio anche se sinceramente la qualità della ricezione è decisamente scarsa, l'antenna è praticamente nelle cuffie e sembrerebbe non ci sia possibilità di migliorare con un allacciamento specifico.
Il progetto base l'ho copiato da maker.pro / Scott Hatfield portando poi mie modifiche.
Il dispositivo che ho usato è del produttore HiLetgo, questo (preso su Amazon con 14,50€ ne ho presi 2), ma c'è anche un altra scheda con lo stesso chip della SparkFun, questo ma decisamente più costoso.
Rispetto al progetto originario (Su maker.pro di Scott Hatfield), che consiglio come primo step, qui ho aggiunto 5 pulsanti per alzare e diminuirre il volume, cercare le stazioni e per impostare una stazione preferita.
Come si usa Arduino
Lo scrivo anche se è una precondizione, Arduino si interfaccia con la scheda che ha a bordo il chip Si4703 per pilotarlo. Arduino ha bisogno di programmazione per interagire con questo chip e lo fa mediante un programma (si chiamano sketch). Nella prima versione dello sketch si può integragire con la radio solo attraverso un PC e l'IDE di Arduino, nello specifico i comandi si inviano ad Arduino attraverso un tool chiamato "Serial Monitor".
Per rendere indipendente l'assemblaggio Arduino-Scheda con la radio ho aggiunto dei pulsanti e cambiato lo sketch per lavorare con i pulsanti messi sulla bradboard accando Arduino.
Libreria
Prima di caricare o programmare qualsiasi sketch occorrerà installare una libreria specifica per lavorare col chip Si4703. Segue la procedura di installazione:
- Scaricare la liberia "Si4703_Breakout.zip" da sparkfun.com
- Installarla. Se la libreria non è già inclusa nel set predisposto da Arduino, si scaricherà la libreria che è in un file .zip essa conterrà cartelle e files in una configurazione riconosciubile dal compilatore C++ di Arduino.
- Si scarica il file .zip in una cartella temporanea o la stessa cartella di default dei downloads.
- Dall' IDE di sviluppo, Arduino IDE, cliccare su Sketch\Include Library\Include .Zip Library...
- Selezionare il file dalla cartella in cui è stato riposto prima. Nelle finestra "Output" si avrà conferma della installazione.
- Nel file di default creato nell'IDE basta aggiungere in testa il riferimento alla libreria:
#include <Si4703_Breakout.h>
#include <Wire.h>
void setup()
{
}
void loop()
{
}
- A questo punto si prova a compilare lo sketch cliccando sul pulsante "Verify".
- Si procederà all'implementazione del programma principale ma se fosse già pronto basta "Uplodarlo" sul dispositivo Arduino cliccando sul pulsante "Upload". NOTA non impegnare mai i pin digitali 0 e 1 mentre si fa l' upload.
Mio progetto
Il seguente schema realizzato con ThinkerCAD è una variante di quello originale, il vantaggio è che i pulsanti inseriti, con la tecnica "Pull Down" (video di Paolo Aliverti, qui), rendono il dispositivo complessivo indipendentemente dal PC ovvero si posson usare direttamente i pulsanti per la ricerca canali (i primi due da SX), per alzare o abassare il volume (pulsanti 3 e 4) e per una sola stazione preferita.
Mio Sketck
Il seguente codice è un mio adattamento per comandare la radio senza l'uso del Monitor dell'IDE di Arduino.
/* DESCRIPTION: This sketch for the Arduino Uno controls a simple FM radio using an Si4703 radio receiver. The sketch allows control of the system and feedback to the user over serial. The system can seek radio stations, store three favorited radio stations, adjust volume, and print RDS information. HARDWARE CONNECTIONS: * Si4703 VCC --> 3.3V * Si4703 GND --> GND * Si4703 SDIO --> A4 * Si4703 SCLK --> A5 * Si4703 RST --> D2 * Si4703 GPIO2 --> D3 */ #include <Si4703_Breakout.h> // Load the SparkFun Si4703 library < https://cdn.sparkfun.com/assets/learn_tutorials/2/7/4/Si4703_Breakout.zip > #include <Wire.h> int resetPin = 2; // The Si4703 breakout RST pin connects to the Arduino D2 pin int SDIO = A4; // The Si4703 breakout SDIO pin connects to the Arduino A4 pin int SCLK = A5; // The Si4703 breakout SCLK pin connects to the Arduino A5 pin // Initialize the Si4703_Breakout object Si4703_Breakout radio(resetPin, SDIO, SCLK); int channel; int volume = 5; char rdsBuffer[10]; // Favorite stations int favA = 1076; // Radiopopolare int favB = 1067; int favC = 930; // //1025 1036 void setup() { // The Arduino communicates with the computer via serial Serial.begin(9600); // Si attende che la porta seriale sia pronta... necessaria da Arduino R4 in su while(!Serial); Serial.println("\n\nSi4703_Breakout Basic Radio"); Serial.println("\n\nControls:"); Serial.println("a, b, c Favourite stations"); // In the configuration above, you can set three favorite stations Serial.println("+, - Volume (max 15)"); Serial.println("u, d Seek up / down"); Serial.println("r, Print RDS Data (15 sec timeout)"); Serial.println("\n\n"); radio.powerOn(); // Enable the Si4703 radio.setVolume(5); // Set the starting volume to 5 (out of 15) // Mie aggiunte, uso pulsanti pinMode(13, INPUT); // Ricerca canale UP pinMode(12, INPUT); // Ricerca canale DOWN pinMode(10, INPUT); // Volume + pinMode(9, INPUT); // Volume - pinMode(7, INPUT); // Preferito 1 } void loop() { //---- Pulsanti ---- //--SINTONIZZAZIONE if (digitalRead(13) == HIGH) { channel = radio.seekUp(); displayInfo(); delay(500); } else if (digitalRead(12) == HIGH) { channel = radio.seekDown(); displayInfo(); delay(500); } //--VOLUME if (digitalRead(10) == HIGH) { volume ++; if (volume == 16) volume = 15; radio.setVolume(volume); displayInfo(); delay(800); } else if (digitalRead(9) == HIGH) { volume --; if (volume < 0) volume = 0; radio.setVolume(volume); displayInfo(); delay(800); } //--PREFERITI if (digitalRead(7) == HIGH) { radio.setChannel(favA); displayInfo(); delay(500); } // Listen for serial commands if (Serial.available()) { char ch = Serial.read(); if (ch == 'u') { // u = seek up channel = radio.seekUp(); displayInfo(); } else if (ch == 'd') { // d = seek down channel = radio.seekDown(); displayInfo(); } else if (ch == '+') { // + = increase volume volume ++; if (volume == 16) volume = 15; radio.setVolume(volume); displayInfo(); } else if (ch == '-') { // - = decrease volume volume --; if (volume < 0) volume = 0; radio.setVolume(volume); displayInfo(); } else if (ch == 'a') { // a = favorite station a channel = favA; radio.setChannel(channel); displayInfo(); } else if (ch == 'b') { // b = favorite station b channel = favB; radio.setChannel(channel); displayInfo(); } else if (ch == 'c') { // c = favorite station c channel = favC; radio.setChannel(channel); displayInfo(); } else if (ch == 'r') { // r = print RDS information Serial.println("RDS listening..."); radio.readRDS(rdsBuffer, 15000); Serial.print("RDS info: "); Serial.println(rdsBuffer); } } } // The displayInfo function prints the current channel and volume over serial void displayInfo() { Serial.print("Channel:"); Serial.print(channel); Serial.print(" Volume:"); Serial.println(volume); }
Con modulo TEA5767
Progetti ispiratori:
NOTE
- la libreria <TEA5767N.h> di Marcos R. Oliveira (scaricata da https://github.com/mroger/TEA5767) da per scontato il collegamento del modulo TEA5767 sui pin I2C ed usa l'indirizzo 0x60 (è una costante, TEA5767_I2C_ADDRESS, cablata nel file "TEA5767N.h").
Info utili
Utilità
- Simulatore on-line di circuiti elettronici circuitlab.com Web based simulator
- Tool per disegnare ma anche simulare circuiti TinkerCAD In particolare si posson simulare circuiti interfaccaiti con Arduino.
Visualizzazione Codice C++
Modalità 1
while (!Serial);
Modalità 2
while (!Serial)
Mappa e Link
Arduino indice | Arduino | Arduino Integrazioni tipiche
C++ Info fondamentali | Dizionario Elettronica | Elettronica | Elettronica Appunti
Parole chiave:
