21
PERANCANGAN
3.1 Perancangan Hardware
Untuk merealisasikan alat pemancar fm digital berbasis Arduino Uno, maka langkah yang pertama kali dilakukan adalah dengan membuat blok diagram alat seperti pada Gambar 3.1
Gambar 3.1 Diagram Blok Rangkaian Pemancar FM Digital
Arduino Transmitter Antena
Display
3.1.1 Microcontroller Arduino
Setelah proses rangkaian selesai dibuat langkah selanjutnya adalah membuat program pada aplikasi Program Arduino IDE ( Integrated Development Enviroment ). Buka program aplikasi Arduino IDE kemudian bentuk tampilan kerja aplikasi Arduino IDE Sketch terlihat seperti gambar 3.2.
A. Bahasa Program Arduino IDE yang digunakan • Float
Float-point numbers sering digunakan untuk memperkirakan nilai analog dan berkelanjutan karena nilai tersebut memiliki resolusi yang lebih besar dari pada integers. Floating – point numbers dapat sebesar 3.4028235E + 38 dan dapat serendah 3.4028235E + 38. Angka tersebut disimpan sebanyak 32 bits (4 bytes) dari informasi. Float hanya memiliki 6 – 7 digit decimal. Pada Arduino, double sama nilainya dengan Float.
Examples
float myfloat;
float sensorCalbrate = 1.117; Syntax
float var = val;
var - your float variable name
val - the value you assign to that variable Example Code
int x;
int y;
float z;
x = 1;
y = x / 2; // y now contains 0, ints can't hold fractions
z = (float)x / 2.0; // z now contains .5 (you have to use 2.0, not 2)
• Integers
Integers adalah datatype dasar untuk menyimpan angka dengan nilai 2 byte. Integers menyimpan angka-angka negative dengan teknik yang disebut 2’s complement Math. Arduino dapat menjaga dan mengatur angka – angka negative, jadi operasi aritmatika dapat berkerja secara transparansi.
Example
int ledPin = 13;
Syntax
int var = val;
• var - your int variable name
• val - the value you assign to that variable Coding Tip
int x
x = -32,768;
x = x - 1; // x now contains 32,767 – rolls over in neg. direction
x = 32,767;
x = x + 1;// x now contains -32,768 –
rolls over
• Void (Setup)
Fungsi Setup muncul ketika memulai lembar kerja/Sketc. Kita dapat menggunakannya untuk mengartikan Variables, pin modes, Start using libraries, dan lain-lain. Fungsi Setup ini hanya akan berkerja sekali, setelah power up or reset pada Arduino.
Example:
// actions are performed in the functions "setup" and "loop"
// but no information is reported to the
larger program void setup() { // ... } void loop() { // ... }
• Serial begin()
Untuk komunikasi dengan komputer, digunakan satu dari angka berikut ini : 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, atau 115200. Kita juga dapat menggunakan angka spesifikasi yang lain, contohnya untuk berkomunikasi melewati pin 0 dan pin 1 dapat digunakan particular boud rate yang memenuhi syarat.
Syntax
Serial.begin(speed)
Arduino Mega only:
Serial1.begin(speed) Serial2.begin(speed) Serial3.begin(speed)
Example:
void setup() {
Serial.begin(9600); // opens serial port,
sets data rate to 9600 bps
}
void loop() {}
Arduino Mega example:
// Arduino Mega using all four of its Serial
ports
// (Serial, Serial1, Serial2, Serial3), // with different baud rates:
void setup(){ Serial.begin(9600); Serial1.begin(38400); Serial2.begin(19200); Serial3.begin(4800); Serial.println("Hello Computer"); Serial1.println("Hello Serial 1"); Serial2.println("Hello Serial 2"); Serial3.println("Hello Serial 3"); } void loop() {}
• Loop()
Setelah mengaplikasikan fungsi Setup yang dapat menganalisa dan mengatur Values/nilai, fungsi Loop dapat merubah dan merespon program yang kita buat. Kita dapat menggunakan untuk mengaktifkan kontrol pada papan Arduino.
Example
int buttonPin = 3;
// setup initializes serial and
the button pin
void setup()
{
beginSerial(9600);
pinMode(buttonPin, INPUT);
}
// loop checks the button pin each time, // and will send serial if it is pressed
void loop() { if (digitalRead(buttonPin) == HIGH) serialWrite('H'); else serialWrite('L'); delay(1000); } • AnalogRead()
Papan Arduino memiliki 6 chanel, 10 – bit analog ke digital, artinya kita dapat memasukan tegangan antara 0 dan 5 volts pada nilai integer antara 0 dan 1023. Kisaran input/masukan dan resolusi dapat dirubah menggunakan analog reference. Untuk membaca analog input, dibutuhkan sekitar 100 microsecond (0.0001 s). Jadi rata – rata membaca maksimumnya sekitar 10.000 kali dalam satu detik. Catatan : Jika pin analog input tidak dapat berkoneksi pada apapun, nilainya
akan kembali dengan analogRead.
Syntax
analogRead(pin) Example
int analogPin = 3;// potentiometer wiper middle terminal) connected to analog pin 3 //outside leads to ground and +5Vint val= 0;
//variable to store the value read void setup()
{
Serial.begin(9600); // setup serial
}
void loop()
{
val = analogRead(analogPin); // read the input pin
Serial.println(val);// debug value
}
• print()
Angka – angka akan dicetak menggunakan karakter ASCII pada setiap digit. Floats juga tercetak dengan digit ASCII kedua angka decimal. Bytes akan terkirim sebagai karakter tunggal.
• Serial.print(78) gives "78"
• Serial.print(1.23456) gives "1.23"
• Serial.print(byte(78)) gives "N" (whose ASCII value is 78)
• Serial.print('N') gives "N"
• Serial.print("Hello world.") gives "Hello world."
OCT, DEC, HEX.
• Serial.print(78, BYTE) gives "N"
• Serial.print(78, BIN) gives "1001110"
• Serial.print(78, OCT) gives "116"
• Serial.print(78, DEC) gives "78"
• Serial.print(78, HEX) gives "4E"
• Serial.println(1.23456, 0) gives "1" • Serial.println(1.23456, 2) gives "1.23" • Serial.println(1.23456, 4) gives "1.2346" Syntax Serial.print(val) Serial.print(val, format) Example: /*
Uses a FOR loop for data and prints a number in
various formats.
*/
int x = 0; // variable void setup() {
Serial.begin(9600); // open the serial port at 9600 bps:
}
void loop() { // print labels
Serial.print("NO FORMAT"); // prints a label Serial.print("\t"); // prints a tab
Serial.print("DEC"); Serial.print("\t"); Serial.print("HEX"); Serial.print("\t"); Serial.print("OCT"); Serial.print("\t"); Serial.print("BIN"); Serial.print("\t"); Serial.println("BYTE");
for(x=0; x< 64; x++){ // only part of the ASCII chart, change
to suit
// print it out in many formats:
Serial.print(x); // print as an ASCII-encoded decimal - same
as
"DEC"
Serial.print("\t"); // prints a tab
Serial.print(x, DEC); // print as an ASCII-encoded decimal
Serial.print("\t"); // prints a tab
Serial.print(x, HEX); // print as an ASCII-encoded hexadecimal
Serial.print("\t"); // prints a tab
Serial.print(x, OCT); // print as an ASCII-encoded octal Serial.print("\t"); // prints a tab
Serial.print(x, BIN); // print as an ASCII-encoded binary Serial.print("\t"); // prints a tab
Serial.println(x, BYTE); // prints as a raw byte value, //then adds the carriage return with "println"
delay(200); // delay 200 milliseconds
}
Serial.println(""); // prints another carriage return }
• delay()
Hentikan program sementara untuk mengukur waktu (dalam milliseconds) yang terspesifikasi pada parameter (ada 1000 miliseconds dalam
setiap detik). Pada saat mudahnya membuat LED berkedip dengan fungsi Delay, beberapa Sketch/lembar kerja mengalami Delay. Membaca sensor, penghitungan matematika, atau memanipulasi pin dapat berkerja pada saat fungsi Delay berkerja. Beberapa program berbasis sepengetahuan biasanya menghindari menggunakan fungsi Delay untuk kegiatan yang membutuhkan waktu lebih dari 10 miliseconds.
Syntax delay(ms) Example
int ledPin = 13;// LED connected to digital
pin 13
void setup()
{
pinMode(ledPin, OUTPUT);// sets the
digital
pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH);// sets the LED
on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW);// sets the LED off
delay(1000);// waits for a second
}
Selanjutnya hubungkan Arduino Uno ke komputer dengan menggunakan kabel USB ( Universal Serial Bus ). Lalu kita dapat mengetikan program pada lembar kerja Sketch dan compile untuk mengecek atau memeriksa apakah kode sudah benar sebelum di kirim kepapan Arduino, program tersebut dapat di ketik seperti dibawah ini :
// deklarasi variabel float tempC;
void setup() {
// buka serial port, set baud rate 9600 bps
Serial.begin(9600); }
void loop() {
// baca data dari sensor tempC = analogRead(tempPin); // konversi analog ke suhu
tempC = (5.0 * tempC * 100.0)/1024.0; // kirim data via serial berupa nilai
biner Serial.print((int)tempC,BYTE); // waktu tunda delay(1000); } 3.1.2 IC BH1417 FM Modulator
IC untuk FM modulator yang digunakan adalah tipe BH1417. Ini adalah IC pemancar FM yang dirancang oleh ROHM Manufaktur. IC BH 1417 adalah pemancar FM stereo yang memiliki konfigurasi yang sederhana. IC ini terdiri dari modulator stereo untuk menghasilkan signal canpuran dan pemancar FM untuk memancarkan sinyal FM ke segala arah. Sinyal campuran tersebut merupakan sinyal yang terdiri dari Sinyal utama, Sinyal tambahan, dan sinyal Pilot dari oscillator 38 KHz.
A. Fitur – Fitur
Didalam IC ini memiliki banyak fitur dengan bentuk yang kecil. Fitur-fitur yang dimiliki oleh IC BH1417 adalah sebagai berikut :
1. Pre-Emphasis.
2. Limiter sehingga audio dapat dipancarkan sesuai dengan level aslinya. 3. Stereo Encoder untuk Transmisi audio stereo.
4. Low pass filter untuk menahan semua sinyal audio di atas 15 Khz. 5. Phase lock loop sehingga pemilihan frekuensi untuk transmisi yang stabil 6. FM Oscillator
7. RF Output Buffer
IC BH1417 dapat dicatu dengan tegangan dari 4 Volt – 6 Volt dan hanya menggunakan arus sekitar 30 mA. Pada keadaan aktif IC ini menyediakan daya untuk RF sebesar 20 mW. BH1417 juga menyediakan 40 dB untuk pemisahan antar kanal sehingga hal ini dirasakan cukup untuk melakukan transmisi audio secara stereo.
BH1417 hanya tersedia dalam kemasan SOP 22 Pin. Hal ini menjadi kendala bagi beberapa pengguna, namun keuntungan lainnya adalah dengan kemasan yang kecil maka seluruh rangkaian pemancar dapat muat kedalam sebuah PCB yang kecil.
B. Konfigurasi Pin dan Blok diagram
Blok yang utama pada IC ini adalah Blok Pre-Emphasis, Blok Audio Level Limiter, Blok Stereo Encoder ( MPX ), Blok rangkaian PLL, Blok Osilator, dan Blok RF Buffer.
Gambar 3.3 Konfigurasi Pin dan Blok Diagram IC BH1417
• Pin 1 R-ch Audio Source input terminal dan Pin 22 L-ch audio source input terminal, merupakan terminal untuk input Sinyal Audio.
• Pin 2 dan Pin 21 Pre-emphasis time constant terminal, merupakan input utuk pengaturan pewaktuan Pre-Emphasis.
• Pin 3 dan Pin 20 LPF time constant terminal, merupakan terminal untuk pengaturan Low Pass Filter.
• Pin 4 Filter terminal, merupakan terminal untuk menghilangkan Ripple pada tegangan audio masukan.
• Pin 5 Composite Signal Output Terminal, merupakan terminal keluaran untuk signal campuran seperti Main, Sub dan Pilot.
• Pin 6 Gound Terminal, Merupakan terminal yang akan terhubung dengan Ground.
• Pin 7 PLL Phase detector output terminal, merupakan terminal yang terhubung dengan PLL sehingga memiliki fungsi sebagai Phase detector.
• Pin 8 Power Supply Terminal, Merupakan terminal yang digunakan untuk Mencatu-daya IC.
• Pin 9 RF Oscillator Terminal, Merupakan terminal yang terhubung dengan Colpitts Oscilator .
• Pin 10 RF Ground, merupakan terminal untuk blok rangkaian RF yang terhubung dengan Ground.
• Pin 11 RF Transmission Output terminal, merupakan Output dari blok RF pada bagian ini sinyal output siap untuk dipancarkan.
• Pin 12 PLL Power supply terminal, merupakan terminal catu daya untuk Blok rangkaian PLL.
• Pin 13 dan Pin 14 X’Tal Oscillator terminal, merupakan terminal untuk osilator IC sebagai frekuensi kerja referensi dari IC itu sendiri. Dihubungkan dengan menggunakan Kristal 7.6 Mhz
• Pin 15, Pin 16, Pin 17, dan Pin 18 Parallel data set-up terminal, merupakan terminal untuk input data sebagai referensi pemilihan frekuensi carrier
• Pin 19 Pilot signal Adjust terminal, Merupakan terminal yang berfungsi untuk mengatur frekuensi sinyal pilot.
C. Pemilihan Frekuensi Pemancar
Ada 14 buah frekuensi untuk transmisi yang dapat dipilih dengan perbedaan setiap channel 200Khz. Kita dapat mengubah-ubah frekuensi dengan cara memilih 4 buah sakelar. Frekuensi yang ditawarkan berkisar dari 88.7 Mhz sampai 89.9 Mhz untuk band frekuensi bawah , dan untuk band frekuensi atas dapat mulai dari 107.7 Mhz sampai 108.9 Mhz.
S1 S2 S3 S4 Frequency ON ON ON ON 87.7 MHz OFF ON ON ON 87.9 MHz ON OFF ON ON 88.1 MHz OFF OFF ON ON 88.3 MHz ON ON OFF ON 88.5 MHz OFF ON OFF ON 88.7 MHz ON OFF OFF ON 88.9 MHz ON ON ON OFF 106.7MHz OFF ON ON OFF 106.9MHz ON OFF ON OFF 107.1MHz
OFF OFF ON OFF 107.3MHz
ON ON OFF OFF 107.5MHz
OFF ON OFF OFF 107.7MHz
ON OFF OFF OFF 107.9MHz
Pemilihan frekuensi pada IC ini sangatlah mudah. Secara gampangnya pilih frekuensi yang kita inginkan sebagai frekuensi gelombang carrier, kemudian mengatur 4 buah sakelar dan secara otomatis IC BH1417 akan melakukan tuning pada frekuensi tersebut.
D. Minimum System
Minimum sistem yang digunakan adalah rangkaian yang digunakan untuk melakukan test pada IC BH1417. Pada minimum sistem ini digunakanlah rangkaian aplikasi untuk Band frekuensi FM pada daerah Amerika serikat.
U1 BH1417 12 3 45 67 89 10 11 12 13 14 15 16 17 18 19 20 21 22 C1 1µF C2 1µF C3 2.2nF C4 150pF C510µF C6 10µF R1 10.0kΩ C7 10µF R2 10.0kΩ C8 330pF R3 22kΩ R4 5.1kΩ R5 100Ω R6 3.3kΩ R8 3.3kΩ C9 47nF C1033pF C11 22pF C12 10pF C13 100F Q1 MPSA13 C14 2.2nF R7 10kΩ D1 MV209 L1 10mH Key=A 50% C15 10pF Antenna C16 2.2nF C17 150pF R9 10.0kΩ R10 10.0kΩ R11 10.0kΩ R12 10.0kΩ C18 1nF C19 27F C20 27F X1 7.6 Mhz VCC 5V S1 S2S3S4
3.1.3 Display LCD HITACHI HD44780
Hitachi HD44780 LCD controller adalah salah satu matriks layar kristal cair yang paling umum dot (LCD) layar controller yang tersedia. Hitachi mengembangkan mikrokontroler khusus untuk drive layar LCD alfanumerik dengan antarmuka yang sederhana yang dapat terhubung ke mikrokontroler atau mikroprosesor tujuan umum.
Tegangan operasi nominal untuk lampu latar LED 5V pada kecerahan penuh, dengan peredupan pada tegangan yang lebih rendah tergantung pada detil seperti warna LED. Non-LED lampu latar sering membutuhkan tegangan yang lebih tinggi.
Gambar 3.5 LCD Hitachi HD44780
A.fitur- fitur
D44780U dot-matrix liquid crystal display controller dan driver yang menampilkan alphanumerics LSI, dan simbol. Hal ini dapat dikonfigurasi untuk drive dot-matrix tampilan kristal cair di bawah kontrol dari 4 - atau 8-bit mikroprosesor. Karena semua fungsi-fungsi seperti RAM tampilan, karakter
generator, dan sopir kristal cair, yang dibutuhkan untuk mengemudi layar kristal cair dot-matriks secara internal diberikan pada satu chip, sebuah sistem minimal dapat dihubungkan dengan controller / driver.
Sebuah HD44780U tunggal dapat menampilkan hingga 8-karakter satu baris atau dua 8-karakter baris. HD44780U ini memiliki kompatibilitas fungsi pin dengan HD44780S yang memungkinkan pengguna untuk dengan mudah mengganti LCD-II dengan HD44780U. Karakter HD44780U generator ROM diperpanjang untuk menghasilkan 208 5 '8 dot karakter font dan 32 5 '10 karakter font dot total 240 font karakter yang berbeda.
Catu daya yang rendah (2.7V ke 5.5V) dari HD44780U ini cocok untuk setiap produk baterai berbasis portabel membutuhkan disipasi daya rendah. Beberapa fitur lainnya adalah sebagai berikut:
• '8 dan 5' 10 dot matrix mungkin • Power Rendah operasi dukungan:
¾ 2,7 sampai 5.5V
• Wide berbagai kekuatan crystal display sopir cair ¾ 3,0 sampai 11V
• Kristal Cair hard gelombang
¾ A (Satu garis frekuensi gelombang AC)
• Berkorespondensi untuk antarmuka kecepatan tinggi bus MPU ¾ 2 MHz (ketika VCC = 5V)
• 4-bit atau 8-bit diaktifkan antarmuka MPU • 80 '8-bit display RAM (80 karakter maks.)
• 9920-bit karakter ROM untuk pembangkit total 240 font karakter ¾ font karakter 208 (5 '8 titik)
¾ karakter font 32 (5 '10 titik) • 64 '8-bit karakter Generator RAM
¾ font karakter 8 (5 '8 titik) ¾ font karakter 4 (5 '10 titik)
• ° 16-umum '40-segmen kristal cair layar sopir • Siklus tugas Diprogram
¾ 1 / 8 untuk satu baris dari 5 '8 titik dengan kursor ¾ 1 / 11 untuk satu baris dari 5 '10 titik dengan kursor ¾ 1 / 16 untuk dua baris dari 5 '8 titik dengan kursor • Wide berbagai fungsi instruksi:
Tampilan ¾ yang jelas, rumah kursor, tampilan on / off, kursor on / off, layar berkedip karakter, pergeseran kursor,
menampilkan pergeseran
• Pin fungsi kompatibilitas dengan HD44780S
• Rangkaian ulang otomatis yang menginisialisasi controller / driver setelah power on
• Osilator internal dengan resistor eksternal • Konsumsi daya rendah
Gambar 3.6 Blok Diagram HD44780
3.1.4 Keypad Type Matrix
Tombol tekan atau yang sering disebut dengan nama keypad adalah satu set tombol tekan yang diatur dalam blok atau "pad" yang biasanya menanggung digit, simbol, dan biasanya satu set lengkap huruf abjad. Jika sebagian besar berisi nomor maka juga dapat disebut keypad numerik. Keypads yang ditemukan pada keyboard alfanumerik banyak dan pada perangkat lain seperti kalkulator, tombol push telepon, kunci kombinasi, dan kunci pintu digital, yang memerlukan input terutama numerik.
disusun seperti 123 yang ada di baris bawah. Sedangkan, di keypad telepon, baik di telepon rumah atau ponsel, memiliki 123 tombol di bagian atas. Sebuah pada keypad yang dipergunakan pada ponsel memiliki tombol khusus berlabel * (bintang ) dan # ( octothorpe, nomor tanda, "pound" atau "hash") di kedua sisi tombol nol. Sebagian besar tombol pada telepon juga memiliki huruf yang memiliki beberapa tambahan-tambahan kode, seperti kode area dan lain-lainnya.
Keypad juga merupakan fitur dari beberapa kunci kombinasi. Ini jenis kunci sering digunakan pada pintu, seperti yang ditemukan di pintu masuk utama ke beberapa kantor. Matrix keypad 4x4 adalah susunan 16 tombol membentuk keypad sebagai sarana masukan ke microkontroler, meskipun jumlahnya tombol ada 16 tapi hanya memerlukan 8 jalur port pararel.pada perancangan ini penulis menggunakan keypad dengan mode 3x4.
3.2 Perancangan Software
Berikut adalah program pada arduino untuk menerima input dari keypad rubber dan menghasilkan output pada LCD display dan IC Modulator FM
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, A4, 12, 11, 10, 9); const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns // Define the Keymap
char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} };
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 5, 4, 3, 2 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins. byte colPins[COLS] = { 8, 7, 6 };
// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
#define ledpin 13 void setup()
{
pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT);
// set up the LCD's number of columns and rows: lcd.begin(16, 2);
// Print a message to the LCD. lcd.setCursor(0, 0);
lcd.print("Aris Faizin"); }
void set_radio(char key) { switch (key) { case '87,7': digitalWrite(A0, HIGH); digitalWrite(A1, LOW); digitalWrite(A2, LOW); digitalWrite(A3, LOW); break; case '87,9': digitalWrite(A0, LOW); digitalWrite(A1, HIGH); digitalWrite(A2, LOW); digitalWrite(A3, LOW); break; case '88,1':
digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite(A2, LOW); digitalWrite(A3, LOW); break; case '88,3': digitalWrite(A0, HIGH); digitalWrite(A1, LOW); digitalWrite(A2, HIGH); digitalWrite(A3, LOW); break; case '88,7': digitalWrite(A0, HIGH); digitalWrite(A1, LOW); digitalWrite(A2, LOW); digitalWrite(A3, HIGH); break; case '88,9': digitalWrite(A0, LOW); digitalWrite(A1, LOW); digitalWrite(A2, HIGH); digitalWrite(A3, HIGH); break; case '106,7': digitalWrite(A0, HIGH); digitalWrite(A1, LOW); digitalWrite(A2, LOW); digitalWrite(A3, HIGH);
break; case '106,9': digitalWrite(A0, LOW); digitalWrite(A1, LOW); digitalWrite(A2, HIGH); digitalWrite(A3, LOW); break; case '107,1': digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite(A2, HIGH); digitalWrite(A3, LOW ); break; default: digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); digitalWrite(A2, HIGH); digitalWrite(A3, HIGH); } } void loop() {
char key = kpd.getKey();
if(key) // Check for a valid key. {
switch (key) { case '*': lcd.setCursor(0, 1); lcd.print('*'); break; case '#': lcd.setCursor(0, 1); lcd.print('#'); break; default:
//set the cursor to column 0, line 1 lcd.setCursor(0, 1); lcd.print(key); set_radio(key); } } }