Senin, 29 Januari 2024

MODUL 1

DIP SWITCH DAN DOT MATRIX



INFOBOARD UNTUK SMART LABORATORIUM


1. Pendahuluan   [Kembali]

        Dalam era revolusi industri 4.0, perkembangan teknologi informasi telah membawa perubahan signifikan di berbagai sektor, termasuk dalam dunia pendidikan. Smart laboratorium menjadi salah satu implementasi teknologi terbaru yang bertujuan meningkatkan efisiensi, keterlibatan siswa, dan pengelolaan informasi. Salah satu elemen kunci dalam smart laboratorium adalah penggunaan DIP switch dan dot matrix pada info board.

        DIP switch, atau yang dikenal sebagai Dual Inline Package switch, merupakan perangkat kecil namun sangat berguna yang digunakan untuk mengatur konfigurasi dan pengaturan pada berbagai perangkat elektronik. Sementara itu, dot matrix adalah rangkaian titik-titik kecil yang membentuk sebuah matriks untuk menampilkan teks atau grafik. Integrasi keduanya pada info board di smart laboratorium memberikan kemungkinan untuk menyampaikan informasi dengan lebih efektif dan interaktif.

        Penerapan DIP switch dan dot matrix pada info board smart laboratorium membuka peluang untuk meningkatkan efisiensi pengelolaan informasi, interaksi antara pengguna, dan memberikan pengalaman belajar yang lebih baik. Melalui kombinasi teknologi ini, smart laboratorium diharapkan dapat memberikan kontribusi signifikan dalam mendukung pembelajaran berbasis teknologi dan memberikan pengalaman belajar yang lebih dinamis bagi para pemangku kepentingan di lingkungan pendidikan.

        

2. Tujuan   [Kembali]
    1. Memahami prinsip dasar input dan output pada mikrokontroler
    2. Mengetahui komponen yang digunakan dalam membuat rangkaian pada modul 1
    3. Mampu menangkap dan memproses input dari dip switch
    4. Mampu mengonfigurasi dan mengendalikan dot matrix sebagai output pada mikrokontroler
3. Alat dan Bahan   [Kembali]

Alat :

1. Power Supply


2. Logic state




 

Bahan :

1. Dip Switch



2. Dot matrix


 

3. Arduino Uno

Spesifikasi :

4. Resistor


Spesifikasi :

5. Lampu

 

6. Touch Sensor 

 Spesifikasi :

    • Operating voltage 2.0V~5.5V
    • Operating current @VDD=3V, no load
    • At low power mode typical 1.5uA, maximum 3.0uA
    • The response time max 220mS at low power mode @VDD=3V
    • Sensitivity can adjust by the capacitance(0~50pF) outside
    • Stable touching detection of human body for replacing traditional direct switch key
    • Provides Low Power mode
    • Provides direct mode、toggle mode by pad option(TOG pin) Q pin is CMOS output
    • All output modes can be selected active high or active low by pad option(AHLB pin)
    • After power-on have about 0.5sec stable-time, during the time do not touch the key pad, and the function is disabled
    • Auto calibration for life at low power mode the re-calibration period is about 4.0sec normally, when key detected touch and released touch, the auto re-calibration will be redoing after about 16sec from releasing key
    • The sensitivity of TTP223N-BA6 is better than TTP223-BA6’s. but the stability of TTP223N-BA6 is worse than TTP223-BA6’s.

7. Sound Sensor



Spesifikasi :
  • Sensitivitas dapat diatur (pengaturan manual pada potensiometer)
  • Condeser yang digunakan memiliki sensitivitas yang tinggi
  • Tegangan kerja antara 3.3V – 5V
  • Terdapat 2 pin keluaran yaitu tegangan analog dan Digital output
  • Sudah terdapat lubang baut untuk instalasi
  • Sudah terdapat indikator led



8. Sensor PIR 

     Spesifikasi : 
            
1. Vin : DC 5V 9V.
          2. Radius : 180 derajat.
          3. Jarak deteksi : 5 7 meter.
          4. Output : Digital TTL.
          5. Memiliki setting sensitivitas.
          6. Memiliki setting time delay.
          7. Dimensi : 3,2 cm x 2,4 cm x 2,3 cm.
          8. Berat : 10 gr.


9. IC MAX7219





Spesifikasi:

  • Serial Input/Output: MAX7219 memiliki serial input/output yang common-cathode
  • Layar LED: IC ini dapat mengendalikan layar LED dengan hingga 8 digit, layar grafik, atau 64 LED terindividu
  • BCD-to-7 Segment Decoder: IC ini mencakup dekoder BCD-to-7 segment yang disebut BCD code-B decoder
  • Multiplex Scan: IC ini mencakup k circuit multiplex scan yang memungkinkan untuk memanipulasi layar LED dengan efisien
  • Segment dan Digit Drivers: IC ini mencakup driver segmen dan digit yang memungkinkan untuk menyediakan sinyal ke layar LED
  • Static RAM: IC ini mencakup static RAM 8x8 yang menyimpan setiap digit yang ditampilkan
  • Serial Interface: MAX7219 mendukung serial interface dengan maksimal 10 MHz
  • Kompatibilitas: IC ini kompatibel dengan SPI™, QSPI™, dan MICROWIRE™
  • Slew-Rate Limit: Segment driver MAX7221 memiliki slew-rate terbatas untuk mengurangi EMI

 

10.  Motor DC




 DC Motor Specifications
  • Standard 130 Type DC motor
  • Operating Voltage: 4.5V to 9V
  • Recommended/Rated Voltage: 6V
  • Current at No load: 70mA (max)
  • No-load Speed: 9000 rpm
  • Loaded current: 250mA (approx)
  • Rated Load: 10g*cm
  • Motor Size: 27.5mm x 20mm x 15mm
  • Weight: 17 grams

 
4. Dasar Teori  [Kembali]

 
1. Resistor 


   


 

Resistor adalah komponen elektronika yang berfungsi untuk menghambat atau membatasi aliran listrik yang mengalir dalam suatu rangkain elektronika.


2. Dip Switch

    DIP switch, atau Dual Inline Package switch, adalah jenis saklar yang terdiri dari beberapa saklar kecil yang terpasang dalam paket berbentuk baris ganda pada rangkaian elektronik terpadu atau modul. Setiap saklar memiliki dua posisi, ON dan OFF, yang digunakan untuk konfigurasi atau pengaturan pada perangkat elektronik, seperti menetapkan alamat atau parameter lainnya. DIP switch umumnya memberikan kemudahan penggunaan tanpa memerlukan keahlian khusus dalam pengaturan, meskipun beberapa pengembang kini beralih ke metode konfigurasi yang lebih canggih.

    DIP switch, atau Dual Inline Package switch, bekerja berdasarkan prinsip sederhana saklar elektronik yang dapat berada dalam dua posisi, ON (hidup) atau OFF (mati). Dalam konteks penggunaannya pada rangkaian terpadu atau modul, setiap saklar DIP switch merepresentasikan satu bit informasi. Ketika saklar dalam posisi ON, itu menghubungkan pin terkait, sementara posisi OFF memutuskan hubungan. Pengaturan atau konfigurasi tertentu dapat dicapai dengan mengatur posisi ON atau OFF dari masing-masing saklar DIP switch sesuai dengan kebutuhan aplikasi. DIP switch sering digunakan untuk pengaturan alamat atau parameter lainnya dalam rangkaian elektronik tanpa memerlukan pemrograman atau perangkat lunak tambahan.

 

3. IC MAX7219


IC MAX7219 adalah IC yang dirancang untuk mengontrol Dot Matrix LED 8×8, 7-segment LED hingga 8 digit atau individual LED 64 titik.

Konfigurasi Pin

 Deskripsi untuk setiap pin diberikan di bawah ini.

Pin NumberDescription
COMMON CATHODE OF DISPLAY SEGMENTS
2DIG0- Common ground for all eight segments of DIGIT0
11DIG1- Common ground for all eight segments of DIGIT1
6DIG2- Common ground for all eight segments of DIGIT2
7DIG3- Common ground for all eight segments of DIGIT3
3DIG4- Common ground for all eight segments of DIGIT4
10DIG5- Common ground for all eight segments of DIGIT5
5DIG6- Common ground for all eight segments of DIGIT6
8DIG7- Common ground for all eight segments of DIGIT7
SHARED TERMINALS
4GND
19V+- Power Supply
SHARED SEGMENT TERMINAL OF ALL EIGHT DIGITS
14SEG A – SEGEMTENT A  of all DIGITS
16SEG B – SEGEMTENT B  of all DIGITS
20SEG C – SEGEMTENT C  of all DIGITS
23SEG D – SEGEMTENT D  of all DIGITS
21SEG E – SEGEMTENT E  of all DIGITS
15SEG F – SEGEMTENT F  of all DIGITS
17SEG G – SEGEMTENT G  of all DIGITS
22SEG DP – SEGEMTENT DOT of all DIGITS
FUNCTION PINS
1DIN –  Serial Data Input Pin
12LOAD(CS) – Chip Select or Data shift pin
13CLK –  Clock Pin
24DOUT –  Pin used to Connect Second chip serially
18ISET –  current output adjust pin

Fitur dan Spesifikasi

  • Operating voltage range: +4.0 to +5.5V
  • Recommended operating voltage: +5V
  • Maximum supply voltage: 6V
  • Maximum current allowed to draw through each segment pin: 100mA
  • Maximum current allowed to  through each DIGIT ground pin: 500mA
  • Low power consumption
  • Data-to-Segment Delay Time: 2.2mSec
  • Operating temperature: 0°C  to +70°C
  • Storage Temperature: -65°C  to +150°C


4. Arduino Uno

Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang didalamnya terdapat utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan dalam praktikum ini adalah Arduino Uno yang menggungakan chip AVR ATmega 328P. Dalam memprogram Arduino, kita bisa menggunakan komunikasi serial agar Arduino dapat berhubungan dengan komputer ataupun perangkat lain.

Adapun spesifikasi dari Arduino Uno ini adalah sebagai berikut :

Bagian-bagian arduino uno:

-Power USB

Digunakan untuk menghubungkan Papan Arduino dengan komputer lewat koneksi USB.

-Power jack

Supply atau sumber listrik untuk Arduino dengan tipe Jack. Input DC 5 - 12 V.

-Crystal Oscillator

Kristal ini digunakan sebagai layaknya detak jantung pada Arduino. Jumlah cetak menunjukkan 16000 atau 16000 kHz, atau 16 MHz.

-Reset

Digunakan untuk mengulang program Arduino dari awal atau Reset.

-Digital Pins I / O

Papan Arduino UNO memiliki 14 Digital Pin. Berfungsi untuk memberikan nilai logika (0 atau 1). Pin berlabel " ~ " adalah pin-pin PWM ( Pulse Width Modulation ) yang dapat digunakan untuk menghasilkan PWM.

-Analog Pins

Papan Arduino UNO memiliki 6 pin analog A0. Digunakan untuk membaca sinyal atau sensor analog seperti sensor jarak, suhu, dsb, dan mengubahnya menjadi nilai digital.

-LED Power Indicator

Lampu ini akan menyala dan menandakan Papan Arduino mendapatkan supply listrik dengan baik.

Bagian - bagian pendukung:

-RAM

RAM (Random Access Memory) adalah tempat penyimpanan sementara pada komputer yang isinya dapat diakses dalam waktu yang tetap, tidak memperdulikan letak data tersebut dalam memori atau acak. Secara umum ada 2 jenis RAM yaitu SRAM (Static Random Acces Memory) dan DRAM (Dynamic Random Acces Memory).

-ROM

ROM (Read-only Memory) adalah perangkat keras pada computer yang dapat menyimpan data secara permanen tanpa harus memperhatikan adanya sumber listrik. ROM terdiri dari Mask ROM, PROM, EPROM, EEPROM.

Block Diagram Mikrokontroler ATMega 328P pada Arduino UNO

Adapun block diagram mikrokontroler ATMega 328P dapat dilihat pada gambar berikut:


Block diagram dapat digunakan untuk memudahkan / memahami bagaimana kinerja dari mikrokontroler ATMega 328P.

Pin-pin ATMega 328P:


5. Dot Matrix

Dot matrix adalah kumpulan LED yang tersusun secara baris matrix sehingga memiliki posisi x dan y. dengan adanya posisi fix ini maka LED dapat dikontrol nyalanya dengan melakukan pengontrolan posisi pin x dan y. dot matrix dapat menampilkan tampilan dengan variasi lebih banyak tergantung dari jumlah LED pada dot matrix tersebut. Dot matrix terdapat pada integrated output dan dapat digunakan dengan menghubungkan pin ke Arduino.

Skematik

6. Sensor PIR

Sensor PIR atau disebut juga dengan Passive Infra Red merupakan sensor yang digunakan untuk mendeteksi adanya pancaran sinar infra merah dari suatu object.

Konfigurasi PIN 
 

Sensor PIR terdiri dari beberapa bagian yaitu :

a. Lensa Fresnel

Lensa Fresnel pertama kali digunakan pada tahun 1980an. Digunakan sebagai lensa yang memfokuskan sinar pada lampu mercusuar. Penggunaan paling luas pada lensa Fresnel adalah pada lampu depan mobil, di mana mereka membiarkan berkas parallel secara kasar dari pemantul parabola dibentuk untuk memenuhi persyaratan pola sorotan utama. Namun kini, lensa Fresnel pada mobil telah ditiadakan diganti dengan lensa plain polikarbonat. Lensa Fresnel juga berguna dalam pembuatan film, tidak hanya karena kemampuannya untuk memfokuskan sinar terang, tetapi juga karena intensitas cahaya yang relative konstan diseluruh lebar berkas cahaya.

b. IR Filter

IR Filter dimodul sensor PIR ini mampu menyaring panjang gelombang sinar infrared pasif antara 8 sampai 14 mikrometer, sehingga panjang gelombang yang dihasilkan dari tubuh manusia yang berkisar antara 9 sampai 10 mikrometer ini saja yang dapat dideteksi oleh sensor. Sehingga Sensor PIR hanya bereaksi pada tubuh manusia saja.

c. Pyroelectric Sensor

Seperti tubuh manusia yang memiliki suhu tubuh kira-kira 32˚C, yang merupakan suhu panas yang khas yang terdapat pada lingkungan. Pancaran sinar inframerah inilah yang kemudian ditangkap oleh Pyroelectric sensor yang merupakan inti dari sensor PIR ini sehingga menyebabkan Pyroelectic sensor yang terdiri dari galium nitrida, caesium nitrat dan litium tantalate menghasilkan arus listrik. Mengapa bisa menghasilkan arus listrik? Karena pancaran sinar inframerah pasif ini membawa energi panas. Material pyroelectric bereaksi menghasilkan arus listrik karena adanya energi panas yang dibawa oleh infrared pasif tersebut. Prosesnya hampir sama seperti arus listrik yang terbentuk ketika sinar matahari mengenai solar cell.

d. Amplifier

Sebuah sirkuit amplifier yang ada menguatkan arus yang masuk pada material pyroelectric.

e. Komparator

Setelah dikuatkan oleh amplifier kemudian arus dibandingkan oleh komparator sehingga mengahasilkan output.


Pada grafik tersebut ; (a) Arah yang berbeda mengasilkan tegangan yang bermuatan berbeda ; (b) Semakin dekat jarak objek terhadap sensor PIR, maka semakin besar tegangan output yang dihasilkan ; (c) Semakin cepat objek bergerak, maka semakin cepat terdeteksi oleh sensor PIR karena infrared yang ditimbulkan dengan lebih cepat oleh objek semakin mudah dideteksi oleh PIR, namun semakin sedikit juga waktu yang dibutuhkan karena sudah diluar jangkauan sensor PIR.

Grafik Respon :

Dari grafik, didapatkan bahwa suhu juga mempengaruhi seberapa jauh PIR dapat mendeteksi adanya infrared dimana semakin tinggi suhu disekitar maka semakin pendek jarak yang bisa diukur oleh PIR.


7. Sound Sensor

Sensor Suara adalah sensor yang memiliki cara kerja merubah besaran suara menjadi besaran listrik. Pada dasarnya prinsip kerja pada alat ini hampir mirip dengan cara kerja sensor sentuh pada perangkat seperti telepon genggam, laptop, dan notebook. Sensor ini bekerja berdasarkan besar kecilnya kekuatan gelombang suara yang mengenai membran sensor yang menyebabkan bergeraknya membran sensor yang memiliki kumparan kecil dibalik membran tersebut naik dan turun. Kecepatan gerak kumparan tersebut menentukan kuat lemahnya gelombang listrik yang dihasilkannya.
Spesifikasi :
    • Sensitivitas dapat diatur (pengaturan manual pada potensiometer)
    • Condeser yang digunakan memiliki sensitivitas yang tinggi
    • Tegangan kerja antara 3.3V – 5V
    • Terdapat 2 pin keluaran yaitu tegangan analog dan Digital output
    • Sudah terdapat lubang baut untuk instalasi
    • Sudah terdapat indikator led
Konfigurasi pin:

Grafik:

8. Touch Sensor


Touch Sensor atau Sensor Sentuh adalah sensor elektronik yang dapat mendeteksi sentuhan. Sensor Sentuh ini pada dasarnya beroperasi sebagai sakelar apabila disentuh, seperti sakelar pada lampu, layar sentuh ponsel dan lain sebagainya. Sensor Sentuh ini dikenal juga sebagai Sensor Taktil (Tactile Sensor). Seiring dengan perkembangan teknologi, sensor sentuh ini semakin banyak digunakan dan telah menggeser peranan sakelar mekanik pada perangkat-perangkat elektronik.

Berdasarkan fungsinya, Sensor Sentuh dapat dibedakan menjadi dua jenis utama yaitu Sensor Kapasitif dan Sensor Resistif. Sensor Kapasitif atau Capacitive Sensor bekerja dengan mengukur kapasitansi sedangkan sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya.

Sensor Kapasitif

Sensor sentuh Kapasitif merupakan sensor sentuh yang sangat populer pada saat ini, hal ini dikarenakan Sensor Kapasitif lebih kuat, tahan lama dan mudah digunakan serta harga yang relatif lebih murah dari sensor resistif. Ponsel-ponsel pintar saat ini telah banyak yang menggunakan teknologi ini karena juga menghasilkan respon yang lebih akurat.

Berbeda dengan Sensor Resistif yang menggunakan tekanan tertentu untuk merasakan perubahan pada permukaan layar, Sensor Kapasitif memanfaatkan sifat konduktif alami pada tubuh manusia untuk mendeteksi perubahan layar sentuhnya. Layar sentuh sensor kapasitif ini terbuat dari bahan konduktif (biasanya Indium Tin Oxide atau disingkat dengan ITO) yang dilapisi oleh kaca tipis dan hanya bisa disentuh oleh jari manusia atau stylus khusus ataupun sarung khusus yang memiliki sifat konduktif.

Pada saat jari menyentuh layar, akan terjadi perubahaan medan listrik pada layar sentuh tersebut dan kemudian di respon oleh processor untuk membaca pergerakan jari tangan tersebut. Jadi perlu diperhatikan bahwa sentuhan kita tidak akan di respon oleh layar sensor kapasitif ini apabila kita menggunakan bahan-bahan non-konduktif sebagai perantara jari tangan dan layar sentuh tersebut.

Sensor Resistif

Tidak seperti sensor sentuh kapasitif, sensor sentuh resistif ini tidak tergantung pada sifat listrik yang terjadi pada konduktivitas pelat logam. Sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya. Karena tidak perlu mengukur perbedaan kapasitansi, sensor sentuh resistif ini dapat beroperasi pada bahan non-konduktif seperti pena, stylus atau jari di dalam sarung tangan.

Sensor sentuh resistif terdiri dari dua lapisan konduktif yang dipisahkan oleh jarak atau celah yang sangat kecil. Dua lapisan konduktif (lapisan atas dan lapisan bawah) ini pada dasarnya terbuat dari sebuah film. Film-film umumnya dilapisi oleh Indium Tin Oxide yang merupakan konduktor listrik yang baik dan juga transparan (bening).

Cara kerjanya hampir sama dengan sebuah sakelar, pada saat film lapisan atas mendapatkan tekanan tertentu baik dengan jari maupun stylus, maka film lapisan atas akan bersentuhan dengan film lapisan bawah sehingga menimbulkan aliran listrik pada titik koordinat tertentu layar tersebut dan memberikan signal ke prosesor untuk melakukan proses selanjutnya.


9. 
Motor DC



Motor Listrik DC atau DC Motor adalah suatu perangkat yang mengubah energi listrik menjadi energi kinetik atau gerakan (motion). Motor DC ini juga dapat disebut sebagai Motor Arus Searah. Seperti namanya, DC Motor memiliki dua terminal dan memerlukan tegangan arus searah atau DC (Direct Current) untuk dapat menggerakannya. Motor Listrik DC ini biasanya digunakan pada perangkat-perangkat Elektronik dan listrik yang menggunakan sumber listrik DC seperti Vibrator Ponsel, Kipas DC dan Bor Listrik DC.

Spesifikasi

Pinout

Grafik Respons:


5. Prosedur   [Kembali]

    a. Prosedur  [Kembali]

    • Prosedur percobaan:

  1. Siapakan komponen yang dibutuhkan 
  2. Susun rangkaian sebagaimana yang dibutuhkan 
  3. Inputkan codingan Arduino 
  4. Jalankan rangkaian 
  5. Lakukan koreksi jika terjadi error, jika tidak terjadi error maka rangkaian berhasil dan selesai.
  6. b. Hardware dan Diagram Blok  [Kembali]

    • Hardware
      1. Arduino Uno
      2. PIR sensor
      3. Touch sensor
      4. Sound sensor
      5. DIP Switch
      6. Dot Matrix 
      7. Motor DC
      8. Lampu
    • Diagram Blok

    c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

    • Rangkaian Simulasi


    • Prinsip Kerja
Rangkaian diatas menggunakan 3 buah buah sensor, yaitu PIR sensor, touch sensor, dan sound sensor. 

    Sensor PIR diletakkan pada plafon dekat pintu dalam ruangan laboratorium yang berfungsi untuk menghidupkan lampu jika sensor mendeteksi adanya orang yang masuk ke dalam ruangan laboratorium. Ketika sensor PIR mendeteksi adanya orang berada dalam ruangan maka, sensor akan berlogika 1 dan memberi intruksi pada arduino untuk menghidupkan lampu dalam ruangan secara otomatis. 

    Sensor touch diletakkan di depan pintu yang berfungsi untuk membuka pintu laboratorium. Ketika sensor mendeteksi sesorang yang menyentuh dan memasukan sandi pintu laboratorium menyebabkan output dari sensor ini berlogika 1 dan vcc yang berlogika 1 di umpankan arduino dan memberi instruksi untuk membuka pintu dengan menggerakan motor

  Sensor sound diletakkan pada dinding ruangan yang berfungsi untuk mengaktifkan infoboard dot matrix. Ketika sensor sound mendeteksi adanya suara di dalam ruangan, menyebabkan output dari sensor ini berlogika 1 dan vcc yang berlogika 1 di umpankan arduino dan memberi instruksi untuk mengidupkan lampu dot matrix sesuai dengan kondisi pada dip switch. Jika asisten ingin mengontrol infoboard dot matrix sesuai dengan kebutuhan maka asisten hanya perlu untuk mengubah switch yang aktif, dimana switch1 yang terhubung ke input_5 arduino memberikan info bahwa asisten "STAND BY" berada di laboratorium, swtch2 yang terhubung pada input_4 arduino memberikan info bahwa para asistem sedang mengadakan "RAPAT" diruangan laboratorium, dan switch3 yang terhubung ke input_3 arduino memberikan info bahwa di ruangan laboratorium sedang diadakan "PRAKTIKUM". 

    d. Flowchart dan Listing Program 
    [Kembali]
    • Flowchart

    • Listing Program

// Program to exercise the MD_MAX72XX library

//

// Uses most of the functions in the library

#include <MD_MAX72xx.h>

//#include <SPI.h>


// Turn on debug statements to the serial output

#define  DEBUG  1

#define input1 3

#define input2 4

#define input3 5

#define pir 7

#define touch 8

#define sound 9

#define motor 6

#define led 2


#if  DEBUG

#define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }

#define PRINTS(x) Serial.print(F(x))

#define PRINTD(x) Serial.println(x, DEC)


#else

#define PRINT(s, x)

#define PRINTS(x)

#define PRINTD(x)


#endif


// Define the number of devices we have in the chain and the hardware interface

// NOTE: These pin numbers will probably not work with your hardware and may

// need to be adapted

#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW

#define MAX_DEVICES  11


#define CLK_PIN   13  // or SCK

#define DATA_PIN  11  // or MOSI

#define CS_PIN    10  // or SS


// SPI hardware interface

MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// Arbitrary pins

// MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);


// We always wait a bit between updates of the display

#define  DELAYTIME  100  // in milliseconds


void scrollText(char *p)

{

  uint8_t charWidth;

  uint8_t cBuf[8];  // this should be ok for all built-in fonts


  mx.clear();


  while (*p != '\0')

  {

    charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf);


    for (uint8_t i=0; i<=charWidth; i++)  // allow space between characters

    {

      mx.transform(MD_MAX72XX::TSL);

      if (i < charWidth)

        mx.setColumn(0, cBuf[i]);

      delay(DELAYTIME);

    }

  }

}

void spiral()

// setPoint() used to draw a spiral across the whole display

{

  PRINTS("\nSpiral in");

  int  rmin = 0, rmax = ROW_SIZE-1;

  int  cmin = 0, cmax = (COL_SIZE*MAX_DEVICES)-1;


  mx.clear();

  while ((rmax > rmin) && (cmax > cmin))

  {

    // do row

    for (int i=cmin; i<=cmax; i++)

    {

      mx.setPoint(rmin, i, true);

      delay(DELAYTIME/MAX_DEVICES);

    }

    rmin++;


    // do column

    for (uint8_t i=rmin; i<=rmax; i++)

    {

      mx.setPoint(i, cmax, true);

      delay(DELAYTIME/MAX_DEVICES);

    }

    cmax--;


    // do row

    for (int i=cmax; i>=cmin; i--)

    {

      mx.setPoint(rmax, i, true);

      delay(DELAYTIME/MAX_DEVICES);

    }

    rmax--;


    // do column

    for (uint8_t i=rmax; i>=rmin; i--)

    {

      mx.setPoint(i, cmin, true);

      delay(DELAYTIME/MAX_DEVICES);

    }

    cmin++;

  }

}


void bounce()

// Animation of a bouncing ball

{

  const int minC = 0;

  const int maxC = mx.getColumnCount()-1;

  const int minR = 0;

  const int maxR = ROW_SIZE-1;


  int  nCounter = 0;


  int  r = 0, c = 2;

  int8_t dR = 1, dC = 1;  // delta row and column


  PRINTS("\nBouncing ball");

  mx.clear();


  while (nCounter++ < 200)

  {

    mx.setPoint(r, c, false);

    r += dR;

    c += dC;

    mx.setPoint(r, c, true);

    delay(DELAYTIME/2);


    if ((r == minR) || (r == maxR))

      dR = -dR;

    if ((c == minC) || (c == maxC))

      dC = -dC;

  }

}


void intensity()

// Demonstrates the control of display intensity (brightness) across

// the full range.

{

  uint8_t row;


  PRINTS("\nVary intensity ");


  mx.clear();


  // Grow and get brighter

  row = 0;

  for (int8_t i=0; i<=MAX_INTENSITY; i++)

  {

    mx.control(MD_MAX72XX::INTENSITY, i);

    if (i%2 == 0)

      mx.setRow(row++, 0xff);

    delay(DELAYTIME*3);

  }


  mx.control(MD_MAX72XX::INTENSITY, 8);

}


void blinking()

// Uses the test function of the MAX72xx to blink the display on and off.

{

  int  nDelay = 500;


  PRINTS("\nBlinking");

  mx.clear();


  while (nDelay > 0)

  {

    mx.control(MD_MAX72XX::TEST, MD_MAX72XX::ON);

    delay(nDelay);

    mx.control(MD_MAX72XX::TEST, MD_MAX72XX::OFF);

    delay(nDelay);


    nDelay -= DELAYTIME;

  }

}


void scanLimit(void)

// Uses scan limit function to restrict the number of rows displayed.

{

  PRINTS("\nScan Limit");

  mx.clear();


  mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);

  for (uint8_t row=0; row<ROW_SIZE; row++)

    mx.setRow(row, 0xff);

  mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);


  for (int8_t s=MAX_SCANLIMIT; s>=0; s--)

  {

    mx.control(MD_MAX72XX::SCANLIMIT, s);

    delay(DELAYTIME*5);

  }

  mx.control(MD_MAX72XX::SCANLIMIT, MAX_SCANLIMIT);

}


void transformation1()

// Demonstrates the use of transform() to move bitmaps on the display

// In this case a user defined bitmap is created and animated.

{

  uint8_t arrow[COL_SIZE] =

  {

    0b00001000,

    0b00011100,

    0b00111110,

    0b01111111,

    0b00011100,

    0b00011100,

    0b00111110,

    0b00000000

  };


  MD_MAX72XX::transformType_t  t[] =

  {

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TFLR,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TRC,

    MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,

    MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD, MD_MAX72XX::TSD,

    MD_MAX72XX::TFUD,

    MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,

    MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU, MD_MAX72XX::TSU,

    MD_MAX72XX::TINV,

    MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,

    MD_MAX72XX::TINV

  };


  PRINTS("\nTransformation1");

  mx.clear();


  // use the arrow bitmap

  mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);

  for (uint8_t j=0; j<mx.getDeviceCount(); j++)

    mx.setBuffer(((j+1)*COL_SIZE)-1, COL_SIZE, arrow);

  mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON);

  delay(DELAYTIME);


  // run through the transformations

  mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::ON);

  for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)

  {

    mx.transform(t[i]);

    delay(DELAYTIME*4);

  }

  mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);

}


void transformation2()

// Demonstrates the use of transform() to move bitmaps on the display

// In this case font characters are loaded into the display for animation.

{

  MD_MAX72XX::transformType_t  t[] =

  {

    MD_MAX72XX::TINV,

    MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC, MD_MAX72XX::TRC,

    MD_MAX72XX::TINV,

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL, MD_MAX72XX::TSL,

    MD_MAX72XX::TSR, MD_MAX72XX::TSR, MD_MAX72XX::TSR,

    MD_MAX72XX::TSD, MD_MAX72XX::TSU, MD_MAX72XX::TSD, MD_MAX72XX::TSU,

    MD_MAX72XX::TFLR, MD_MAX72XX::TFLR, MD_MAX72XX::TFUD, MD_MAX72XX::TFUD

  };


  PRINTS("\nTransformation2");

  mx.clear();

  mx.control(MD_MAX72XX::WRAPAROUND, MD_MAX72XX::OFF);


  // draw something that will show changes

  for (uint8_t j=0; j<mx.getDeviceCount(); j++)

  {

    mx.setChar(((j+1)*COL_SIZE)-1, '0'+j);

  }

  delay(DELAYTIME*5);


  // run thru transformations

  for (uint8_t i=0; i<(sizeof(t)/sizeof(t[0])); i++)

  {

    mx.transform(t[i]);

    delay(DELAYTIME*3);

  }

}


void wrapText()

// Display text and animate scrolling using auto wraparound of the buffer

{

  PRINTS("\nwrapText");

  mx.clear();

  mx.wraparound(MD_MAX72XX::ON);


  // draw something that will show changes

  for (uint16_t j=0; j<mx.getDeviceCount(); j++)

  {

    mx.setChar(((j+1)*COL_SIZE)-1, (j&1 ? 'M' : 'W'));

  }

  delay(DELAYTIME*5);


  // run thru transformations

  for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)

  {

    mx.transform(MD_MAX72XX::TSL);

    delay(DELAYTIME/2);

  }

  for (uint16_t i=0; i<3*COL_SIZE*MAX_DEVICES; i++)

  {

    mx.transform(MD_MAX72XX::TSR);

    delay(DELAYTIME/2);

  }

  for (uint8_t i=0; i<ROW_SIZE; i++)

  {

    mx.transform(MD_MAX72XX::TSU);

    delay(DELAYTIME*2);

  }

  for (uint8_t i=0; i<ROW_SIZE; i++)

  {

    mx.transform(MD_MAX72XX::TSD);

    delay(DELAYTIME*2);

  }


  mx.wraparound(MD_MAX72XX::OFF);

}


void showCharset(void)

// Run through display of the the entire font characters set

{

  mx.clear();

  mx.update(MD_MAX72XX::OFF);


  for (uint16_t i=0; i<256; i++)

  {

    mx.clear(0);

    mx.setChar(COL_SIZE-1, i);


    if (MAX_DEVICES >= 3)

    {

      char hex[3];


      sprintf(hex, "%02X", i);


      mx.clear(1);

      mx.setChar((2*COL_SIZE)-1,hex[1]);

      mx.clear(2);

      mx.setChar((3*COL_SIZE)-1,hex[0]);

    }


    mx.update();

    delay(DELAYTIME*2);

  }

  mx.update(MD_MAX72XX::ON);

}


void ssound(){

  int in1 = digitalRead(input1);

  int in2 = digitalRead(input2);

  int in3 = digitalRead(input3);

  int s_sound = digitalRead(sound);

  if(s_sound == HIGH){

    if(in1 == LOW){

      scrollText("STAND BY");

      }

      else if(in2 == LOW){

        scrollText("RAPAT");

      }

      else if(in3 == LOW){

        scrollText("PRATIKUM");

      }

  }

  else if(s_sound == LOW){

    scrollText(" ");

  }

}


void spir(){

  int s_pir = digitalRead(pir);

  if(s_pir == HIGH){

    digitalWrite(led, HIGH);

  }

  else if(s_pir == LOW){

    digitalWrite(led, LOW);

  }

}


void stouch(){

  int s_touch = digitalRead(touch);

  if(s_touch == HIGH){

    digitalWrite(motor, HIGH);

  }

  else if(s_touch == LOW){

    digitalWrite(motor, LOW);

  }

}


void setup()

{

  mx.begin();

#if  DEBUG

  Serial.begin(57600);

#endif

pinMode(input1, INPUT);

pinMode(input2, INPUT);

pinMode(input3, INPUT);

pinMode(pir, INPUT);

pinMode(touch, INPUT);

pinMode(sound, INPUT);

pinMode(motor, OUTPUT);

pinMode(led, OUTPUT);

}


void loop()

{

  spir();

  stouch();

  ssound();

  

}


        e. Video Simulasi  [Kembali]




        f. Download File  [Kembali]










Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Muhammad Zaky Kurnia - Skyblue - Powered by Blogger - Designed by Johanes Djogan -