Zaloguje się
or
Tel +48 698 615 740

Budowa radia z wyświetlaczem

10 grudnia, 2021

W tym artykule pokaże jak sami możemy zbudować nasze prowizoryczne radio. W projekcie zostanie użyty również Moduł enkodera obrotowego KY-040 który pozwoli nam na zmianę częstotliwości odbiornika. Po krótce zostanie również przedstawiony opis tunera FM.

Spis treści

  • Krótki opis
  • Specyfikacja
  • Przykład
  • Pliki do pobrania

Krótki opis

Moduł TEA5767 pozwala nam po podpięciu do niego anteny na odbiór nadawanej częstotliwości. Jednak poza odbieraniem stacji istnieje również możliwość odbioru MONO lub STERO jak i wyświetlenie informacji o sile nadawanego sygnału.

Specyfikacja

Przykład

Elementy

  • TEA5767
  • enkodera KY-040
  • Arduino Uno Lub Mega
  • Słuchawki lub Głośnik z wejściem Jack
  • Oled 128×64

Podłączenie

  • Arduino -> Tuner FM
  • GND – GND
  • 5V – VCC
  • SDA REF3(ostatni pin po prawej stronie nad GND i AREF) – SDA
  • SCL REF3(przed ostatni pin po prawej stronie nad GND i AREF) – SCL
  • pin 21(MEGA)/A5(UNO) – SCL
  • Arduino -> Encoder
  • GND – GND
  • 5V(nad pinem 22) – +
  • pin 9 -SW
  • pin 10 – DT
  • pin 11 – CLK
  • Arduino->Oled
  • GND(pod pinem 53) -> GND
  • 5V(nad pinem 22 obok w równej linii) -> VCC
  • pin 20(MEGA)/A4(UNO)- SDA
  • pin 21(MEGA)/A5(UNO) -SCL

Kod

Na początku dołączamy wszystkie potrzebne nam biblioteki(zamieszczone poniżej) oraz definiujemy zmienne jakie będziemy później wykorzystywać w kodzie. Dla oled ustawimy wysokość i szerokość oraz deklaracje dla I2C. Jeżeli masz problemy z obsługą wyświetlacza odsyłam do tego artykułu

WYŚWIETLACZE OLED 0.91, 0.96 – AJmaker

#include <Wire.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <TEA5767.h>
#include <Encoder.h>
TEA5767 FMRadio;
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels


#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Encoder FRQ(4, 5);
//   avoid using pins with LEDs attached
double Nf = 0;
int stereo;
int signal_level;
unsigned char buff[5]; 

Następnym krokiem będzie funkcja void setup() w której najpierw ustalamy że jeżeli wyświetlacz nie rozpocznie wyświetlać obrazu pojawi nam się błąd na monitorze portu szeregowego. Rozpoczynamy również transmisję na porcie szeregowym.

void setup() {
  Serial.begin(9600);
    if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
}

Ostatnią rzeczą będzie ustawienie funkcji loop(). Po pierwsze musimy utworzyć 5 tabel zawierających częstotliwości stacji na które będziemy mogli ustawić radio. Zauważ, że te elementy są przypisane co drugiej liczby od 0 do 10. Ustawiłem je w ten sposób aby mieć większą wygodę zmiany stacji za pomocą enkodera. Następnie definiujemy kolejne 2 zmienne które będą nas informować o jakości sygnału stacji oraz czy jest ona wyposażona w tryb stereo. Potem wyświetlamy te wartości na Oledzie. Kolejnym krokiem jest odczyt stanu enkodera (na jakiej pozycji się obecnie znajduje). Jeżeli wartość jest inna od poprzedniej wykona się if który najpierw zweryfikuje czy wartość znajduje się w odpowiednim przedziale. Jeżeli nie to zmieni ją na właściwą. A potem nadpisze starą wartość obrotu. Po wykonaniu się tego działania funkcja for sprawdzi czy dla dana wartość jest równą któremuś elementowi tabeli. Jeśli tak na radiu zostanie ustawiona częstotliwość przypisana adekwatnemu elementowi tabeli.

long beforeF  = -999;

void loop() {
  double f[11];
  f[0] = 104.9;
  f[2] = 92.9;
  f[4]= 90.4;
  f[6] = 93.6;
  f[8] = 95.1;
  f[10] = 95.8;
  
  stereo = FMRadio.stereo(buff);
  signal_level = FMRadio.signal_level(buff);  
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE); 
    display.setCursor(5,1);
    display.print("FRQ:");
    display.print(Nf);
    if(stereo){
      display.setCursor(5,15);
      display.print("Stereo");
    } else {
      display.setCursor(5,15);
      display.print("Mono");
    }
   display.setCursor(7,29);
   display.print("SigLv:");
   display.println(signal_level);
   display.println("/15");
   display.display();
   
  
  long currentF = FRQ.read();
  if(currentF != beforeF) {
    if(currentF > 10){
       FRQ.write(10);
       currentF = 10;
      }
      if(currentF < 0) {
        FRQ.write(0);
        currentF = 0;
      }
      beforeF = currentF;
    for(int i = 0; i <= 10; i++){
      if(currentF == i){
         FMRadio.set_frequency(f[i]);
         Nf = f[i];
        }
      }
  }
}

Pliki do pobrania

Biblioteka Enkodera – github.com/PaulStoffregen/Encoder

Biblioteka tuneraFM – github.com/andykarpov/TEA5767

Sticky
Możliwość komentowania Budowa radia z wyświetlaczem została wyłączona
Dadas Bartosz

Dadas Bartosz

Jest Uczniem Technikum Budowlano-Elektronicznego w Świdnicy na kierunku Technik Informatyk. Na co dzień oprócz projektów z ardunio uczy się programować aplikacje mobile. W przyszłości chcę zostać programistą.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.