Tampilkan postingan dengan label Arduino. Tampilkan semua postingan
Tampilkan postingan dengan label Arduino. Tampilkan semua postingan

Senin, 18 Maret 2024

PENYESUAIAN PINOUT ARDUINO NANO DENGAN OUTSEAL

Outseal?? ya outseal, dalam postingan kali ini akan membahas menganai penyesuaian pin Arduino Nano dengan Outseal PLC (software) dalam kata lain menggunakan software Outseal untuk memprogram Arduino Nano. Khususnya untuk saya sebagai catatan bagi saya dan buat teman-teman yang membutuhkan informasi penyesuaian pin Input Arduino Nano dengan Input/Output yang ada pada software Outseal, yang mana pada outseal terdapat 8 input (digital), 8 output (digital) dan 2 input analog. 

Pada percobaaan ini saya menggunakan software Outseal V2.6 Rev 3 dan papan Arduino Nano sebagai Hardware, didalam software outseal terdapat Relay sebagai Output dan Switch sebagai input yaitu R1 s/d R8 dan S1 s/d S8 yang tentunya urutan I/O tersebut tidak sama dengan urutan pin yang ada pada papan Arduino Nano. Pada software Outseal setingan Hardware menggunakan "PLC Shield V.1 NANO"

PLC Shield V.1 NANO


Bagaimana cara menentukannya? yaa pada prakteknya saya mencoba satu persatu pin I/O yang ada pada Arduino Nano dan didapatkanlah rangkaian berikut sebagai rangkaian uji pin Arduino Nano dengan Software Outseal


Gambar : Pin Arduino Nano dengan Software Outseal
Klik untuk memperbesar gambar

Pada rangkaian uji Input (Switch) digunakan push button dirangkai seri dengan resistor (R330), pada rangkaian output (Relay) digunakan resistor (R330) dirangkai seri dengan LED. Pada kesempatan ini saya belum melakukan percobaan dengan input Analog dikarenakan keterbatasan komponen karena pada saat melakukan uji coba dan saat tulisan ini dibuat saya sedang berada diluar kota, mungkin selanjutnya dapat dilanjutkan dengan percobaan input Analog. Sekian pembahasan kali ini, mohon maaf atas segala kekurangan dan kesalahan, tentunya saya sangat menerima masukan dari teman-teman.

Thank you!!


Minggu, 27 Juni 2021

Arduino - Jam Digital dengan OLED Display

Jam Digital Arduino
Bismillah... Dari beberapa postingan sebelumnya, dapat kita kembangkan pemrograman arduino yaitu membuat jam digital dengan OLED display. Tentunya dalam membuat jam digital arduino ini kita menggunakan module RTC sebagai refensi waktu, dalam hal ini adalah RTC DS3231 yang mempunyai tingkat presisi yang tinggi. 

Bagaimana cara setting RTC DS3231? silahkan lihat (DISINI). 

Selain menampilkan waktu & tanggal, kita juga dapat menampilkan nilai temperatur dari modul RTC tersebut. 
Secara sederhana, cara kerja dari jam digital Arduino ini dapat kita pahami bahwa "Arduino membaca data (Waktu & Temperatur) dari modul RTC dan menampilkannya pada OLED display".

Apa saja modul yang digunakan? berikut modul-modul yang kita gunakan : 
  • Arduino Board (UNO/NANO) 
  • RTC DS3231 
  • OLED 0.96" 
  • Breadboard 
  • Kabel Jumper 
Jam digital Arduino yang kita buat ini sangatlah sederhana, tanpa menggunakan push button untuk setting waktu hanya mengandalkan keakuratan modul RTC saja. Jadi, selama modul RTC bekerja normal (Baterai RTC tidak Low / disconnect) maka tampilan waktu akan tetap akurat. 

Jika ditemukan waktu yang tidak sesuai, salah satu kemungkinan yang terjadi adalah baterai RTC sudah low, tentunya kita harus melakukan penggantian baterai RTC dan melakukan seting kembali RTC serta upload kembali program Jam Digital Arduino. 

Berikut skema rangkaian untuk Jam Digital Arduino. 

Jam Digital Arduino

Dalam pemrograman Jam Digital Arduino ini ada beberapa library yang digunakan, yaitu: 

                Wire.h                
                adafruit_gfx.h        (DOWNLOAD)
                adafruit_ssd1306.h    (DOWNLOAD)


Jika telah melakukan proses instalasi library tersebut kita dapat menggunakan sketch program dibawah ini:


#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 

#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);


void setup(void) {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

display.clearDisplay();
display.display();

display.setTextColor(WHITE, BLACK);
display.drawRect(117, 25, 3, 3, WHITE); 
draw_text(0, 25, "TEMPERATURE =", 1);
draw_text(122, 25, "C", 1);
}

char Time[] = " : : ";
char Calendar[] = " / /20 ";
char temperature[] = " 00.00";
char temperature_msb;
byte i, second, minute, hour, day, date, month, year, temperature_lsb;

void display_day(){
switch(day){
case 1: draw_text(13, 0, " SUN ", 1); break;
case 2: draw_text(13, 0, " MON ", 1); break;
case 3: draw_text(13, 0, " TUE ", 1); break;
case 4: draw_text(13, 0, " WED ", 1); break;
case 5: draw_text(13, 0, " THU ", 1); break;
case 6: draw_text(13, 0, " FRI ", 1); break;
default: draw_text(13, 0, " SAT ", 1);
}
}

void DS3231_display(){
// Convert BCD to decimal
second = (second >> 4) * 10 + (second & 0x0F);
minute = (minute >> 4) * 10 + (minute & 0x0F);
hour = (hour >> 4) * 10 + (hour & 0x0F);
date = (date >> 4) * 10 + (date & 0x0F);
month = (month >> 4) * 10 + (month & 0x0F);
year = (year >> 4) * 10 + (year & 0x0F);
// End conversion

Time[7] = second % 10 + 48;
Time[6] = second / 10 + 48;
Time[4] = minute % 10 + 48;
Time[3] = minute / 10 + 48;
Time[1] = hour % 10 + 48;
Time[0] = hour / 10 + 48;
Calendar[9] = year % 10 + 48;
Calendar[8] = year / 10 + 48;
Calendar[4] = month % 10 + 48;
Calendar[3] = month / 10 + 48;
Calendar[1] = date % 10 + 48;
Calendar[0] = date / 10 + 48;
if(temperature_msb < 0){
temperature_msb = abs(temperature_msb);
temperature[0] = '-';
}
else
temperature[0] = ' ';
temperature_lsb >>= 6;
temperature[2] = temperature_msb % 10 + 48;
temperature[1] = temperature_msb / 10 + 48;
if(temperature_lsb == 0 || temperature_lsb == 2){
temperature[5] = '0';
if(temperature_lsb == 0) temperature[4] = '0';
else temperature[4] = '5';
}
if(temperature_lsb == 1 || temperature_lsb == 3){
temperature[5] = '5';
if(temperature_lsb == 1) temperature[4] = '2';
else temperature[4] = '7';
}

draw_text(50, 0, Calendar, 1); // MENAMPILKAN KALENDER (format: dd/mm/yyyy)
draw_text(18, 8, Time, 2); // MENAMPILKAN WAKTU
draw_text(80, 25, temperature, 1); // MENAMPILKAN TEMPERATUR
}

void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
display.setCursor(x_pos, y_pos);
display.setTextSize(text_size);
display.print(text);
display.display();
}


void loop() {

Wire.beginTransmission(0x68); // Start I2C protocol with DS3231 address
Wire.write(0);                // Send register address
Wire.endTransmission(false);  // I2C restart
Wire.requestFrom(0x68, 7);    // Request 7 bytes from DS3231 and release I2C bus at end of reading
second = Wire.read();         // Read seconds from register 0
minute = Wire.read();         // Read minuts from register 1
hour = Wire.read(); // Read hour from register 2
day = Wire.read(); // Read day from register 3
date = Wire.read(); // Read date from register 4
month = Wire.read(); // Read month from register 5
year = Wire.read(); // Read year from register 6
Wire.beginTransmission(0x68); // Start I2C protocol with DS3231 address
Wire.write(0x11); // Send register address
Wire.endTransmission(false); // I2C restart
Wire.requestFrom(0x68, 2); // Request 2 bytes from DS3231 and release I2C bus at end of reading
temperature_msb = Wire.read(); // Read temperature MSB
temperature_lsb = Wire.read(); // Read temperature LSB

display_day();
DS3231_display(); // Diaplay time & calendar

delay(50); // Tunggu 50ms
}


Sekian....Semoga bermanfaat... 

Keep sharing...!!!

Senin, 21 Juni 2021

Arduino - Menampilkan Nilai Temperatur Pada OLED Display (Arduino thermometer)

Bismillah...Posting kali ini merupakan pengembangan dari posting Menampilkan Nilai Sensor DS18B20, yaitu dengan penambahan OLED display. 

Dengan menampilkan nilai pembacaan sensor temperatur (DS18B20) pada OLED display ini dapat kita katakan kita telah membuat sebuah alat yaitu Thermometer Digital berbasis Arduino, yang mana dapat kita terapkan untuk pengukuran suhu tubuh dll. 

Apa saja part yang digunakan untuk membuat Thermometer digital Arduino?
                               - Arduino Board (Uno/Nano) 
                               - OLED 0,96" 
                               - DS18B20 (Sensor Temperatur) 
                               - Resistor 4.7K 
                               - Bread board 
                               - Kabel jumper 

Bagaimana cara merangkainya? silahkan perhatikan gambar berikut : 

Arduino Thermometer - OLED Display


Setelah selesai membuat rangkaian Thermometer digital Arduino, dapat kita lanjutkan dengan proses pemrograman dengan sketch program berikut:


#include <wire.h>
#include <adafruit_gfx.h>
#include <adafruit_ssd1306.h>
#include <onewire.h>
#include <dallastemperature.h>

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

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define ONE_WIRE_BUS 2 //Pin data temperatur pada arduino (UNO/NANO)

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempSensor1 = { 0x28, 0xEF, 0x18, 0x4D, 0x6, 0x0, 0x0, 0xFD }; //Alamat sensor


float temperature1; // Variabel untuk data temperatur



void setup()
{
Serial.begin(9600);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}

display.clearDisplay();
display.display();
display.setTextColor(WHITE, BLACK);

sensors.begin();
sensors.setResolution(tempSensor1, 12);

}


void loop()
{
sensors.requestTemperatures(); //Mengambil data sensor
temperature1 = sensors.getTempC(tempSensor1);
Serial.print("Temperatur1 = ");
Serial.print(temperature1); //Mengirim data temperatur pada serial monitor
Serial.println(" Celcius");
delay(1000);


display.setCursor(5, 10);
display.setTextSize(2);
display.print("TEMPERATUR"); //Menampilkan tulisan "TEMPERATUR" pada display OLED

display.setCursor(30, 27);
display.setTextSize(2);
display.print(temperature1); //Menampilkan nilai temperatur
display.drawRect(91, 27, 3, 3, WHITE); //Menampilkan simbol temperature
display.setCursor(96, 27);
display.print("C");
display.display();
}



Setch program diatas menggunakan beberapa library, yaitu:

Kita dapat menggunakan sensor DS18B20 type waterproof untuk membuat sebuah alat ukur temperatur portable
DS18B20 waterproof


Sekian...Semoga bermanfaat.

Keep sharing...



Minggu, 13 Juni 2021

ARDUINO - MEMBUAT JAM ALARM (RTC DS3231)


Dalam postingan kali ini akan dibahas bagaimana membuat jam alarm berbasis Arduino. Menyambung postingan sebelumnya bagaimana kita mekangses RTC dam menampilkan jam pada serial monitor.

Sebagai referensi waktu untuk jam alarm ini tentunya kita menggunakan RTC (RTC DS3231), dan sebagai penanda alarm kita menggunakan buzzer. 


Apa saja komponen / modul yang digunakan?
    
    - Arduino Board (UNO / NANO) 
    - RTC DS3231 
    - BUZZER 
    - Transistor BC547
    - Dioda 1N4007
    - Resistor 1K
    - Bread Board 
    - Kabel Jumper 


Sebelum melakukan proses pemrograman, silahkan membuat rangkaian seperti gambar berikut : 



Untuk membulai pemrograman, tentunya kita siapkan library Arduino yang berhubungan dengan program yang kita buat, berikut library yang digunakan : 
RTClib.h      (Download)
Easybuzzer.h  (Download)

Pastikan library tersebut sudah ter-Install pada software Arduino IDE, dan upload sketch program berikut:



#include "RTClib.h"
#include


RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

int Buzzer = 6;
int Tombol = 7;
int Alarm = 0;

//SET ALARAM(24 HOUR FORMAT):
const int Jam = 5;
const int Menit = 0;
const int Detik = 0;

unsigned long WaktuMillis = 0;

void setup() {
Serial.begin(9600);
rtc.begin();
EasyBuzzer.setPin(Buzzer);

pinMode (Tombol, INPUT);
digitalWrite (Tombol, LOW);

}

void loop() {

EasyBuzzer.update();
DateTime now = rtc.now();

if (millis() - WaktuMillis >= 1000){
WaktuMillis = millis();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}

switch (Alarm){
case 0:
//
break;

case 1:
tone1();
delay(50);
tone2();
delay(50);
break;
 }

if (now.hour() == Jam && now.minute() == Menit && now.second()== Detik){
Alarm = 1;
Serial.println("ALARM ON!!");
 }

if(digitalRead(Tombol) == HIGH){
Alarm = 0;
 }

}



void tone1(){
EasyBuzzer.singleBeep(3000, 50);
delay(50);
EasyBuzzer.stopBeep();
}

void tone2(){
EasyBuzzer.singleBeep(5000, 50);
delay(50);
EasyBuzzer.stopBeep();
}



Untuk melakukan seting waktu alaram yang kita inginkan, silahkan ubah nilai pada baris program berikut:

                //SET TIME (24 HOUR FORMAT):
    const int Jam = 5;      << Ganti 5 dengan jam yang diinginkan
    const int Menit = 0;    << begitu juga dengan menit, dan
    const int Detik = 0;    << detik


Setelah mekakukan seting waktu alarm dan upload sketch program, silahkan buka serial monitor untuk menampilkan waktu dan informasi alarm jika alarm on.


Sekian....Semoga bermabfaat.





Sabtu, 05 Juni 2021

ARDUINO - MENGAKSES RTC DS3231

RTC merupakan singkatan dari Real Time Clock, yang dapat menyimpan waktu & tanggal. Pada kesempatan kali ini kita akan membahas sebuah modul RTC DS3231 yang populer digunakan dan mempunya tingkat akurasi yang tinggi. Modul DS3231 juga terdapat sensor suhu dengan tingkat akurasi ±3ºC. 


 Fitur Modul RTC DS3231 
  • RTC counts seconds, minutes, hours and year 
  • Accuracy: +2ppm to -2ppm for 0ºC to +40ºC , +3.5ppm to -3.5ppm for -40ºC to +85ºC 
  • Digital temperature sensor with ±3ºC accuracy 
  • Two Time-of-day alarms 
  • Programmable square wave output 
  • Register for Aging trim 
  • 400Khz I2C interface 
  • Low power consumption 
  • Automatic power failure battery switch circuitry 
  • CR2032 battery backup with two to three year life 
  • Portable size 
Berikut komponen yang kita perlukan dalam pembahasan ini: 
    1. Arduino Board 
    2. RTC DS3231
    3. Kabel Jumper 

Modul RTC ini menggunakan 2 buah pin I/O pada arduino yaitu pin SDA & SCL (A4 & A5), berikut gambar rangkaiannya:

Tentunya membutuhkan library "RTClib.h" untuk menjalankan modul RTC DS3231 ini pada Arduino, dapat di download disini (https://github.com/adafruit/RTClib/archive/refs/heads/master.zip) dan melakukan instalasi library tersebut pada software Arduino IDE.

Dua step pemrograman untuk mengakses modul RTC DS3231 ini, yaitu:
    1. Upload program Seting Waktu & Tanggal RTC
    2. Upload program akses RTC

Berikut perogram SETING WAKTU & TANGGAL RTC DS3231:

#include "RTClib.h"

RTC_DS3231 rtc;

void setup()
{
Serial.begin(9600);
rtc.begin();

//*************AKTIFKAN BARIS INI UNTUK ADJUST RTC*********************************************
//rtc.adjust(DateTime(2021, 3, 26, 18, 6, 0)); //Tahun, Bulan, Tanggal, Jam, Menit, Detik * //********<<<
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //*********<<< //********************************************************************************************

}

void loop()
{
DateTime now = rtc.now();
delay(1000);
}


Ada 2 opsi untuk seting waktu & tanggal pada modul ini, yaitu Manual Adjust & Auto Adjust, untuk melakukan manual Adjust kita dapat memasukkan Waktu dan tanggal secara manual pada mengaktifkan  baris program berikut :

rtc.adjust(DateTime(2021, 3, 26, 18, 6, 0));


Untuk mudahnya kita dapat memilih Auto Adjust, yang mana dapat menyesuaikan langsung Waktu & Tanggal dengan PC/Laptop secara otomatis, dengan mengaktifkan baris program berikut:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));


Jika selesai proses seting waktu RTC DS3231, silahkan upload sketch program MENGAKSES MODUL RTC DS3231 berikut:

#include "RTClib.h"

RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup()
{
Serial.begin(9600);
rtc.begin();
}

void loop()
{
DateTime now = rtc.now();

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.println();
delay(1000);
}


Semoga bermanfaat.
Keep Sharing...


Senin, 31 Mei 2021

Arduino - Implementasi millis sebagai penghitung waktu

Ada berbagai macam implementasi millis diantaranya millis sebagai pengganti delay, millis sebagai timer, multitasking arduino dengan millis dll. 

Sebagai pembahasan yang cukup menarik dan sangat jarang dibahas, pada postingan kali ini akan dibahas bagaimana aplikasi millis sebagai timer, pada contoh kasus membuat sebuah system perhitungan biaya berdasarkan waktu. 

Pada contoh kasus ini implementasi millis sebagai penghitung 3 waktu(timer) yang berbeda yang dapat berjalan secara independen. 

Apa saja kegunaannya? 
tentu saja sangat banyak kegunaannya yang dapat kita terapkan, contohnya : 
  1. Sebagai timer penghitung biaya parkir 
  2. Sebagai timer penghitung biaya penyimpanan barang 
  3. Sebagai timer penghitung biaya sewa, dll
kita ambil contoh penerapan pada sistem penyimpanan barang pada 3 buah locker yang berbeda, yang mana biaya penyimpanan ini dihitung berdasarkan lama waktu penyimpanan dengan 4 tingkatan harga, yaitu : 
  • Rp 2.000,- biaya penyimpanan 1 jam pertama 
  • Rp 4.500,- biaya penyimpanan bila mencapai 3 jam 
  • Rp 7.500,- biaya penyimpanan bila mencapai 4 jam 
  • Rp 10.000,- biaya maksimum bila mencapai 6 jam 
Berikut contoh dasar program dengan simulasi pada serial monitor:


#define SecondPrice 3 //nilai dalam satuan menit
#define ThirdPrice 4 //nilai dalam satuan menit
#define MaxPrice 6 //nilai dalam satuan menit

unsigned long Timer1;
unsigned long CountTimer1;
unsigned long Timer1Millis = 0;
const long IntervalTimer1 = 1000;

unsigned long Timer2;
unsigned long CountTimer2;
unsigned long Timer2Millis = 0;
const long IntervalTimer2 = 1000;

unsigned long Timer3;
unsigned long CountTimer3;
unsigned long Timer3Millis = 0;
const long IntervalTimer3 = 1000;

unsigned long PrintMillis = 0;
const long IntervalPrint = 5000;

int Price1;
int Price2;
int Price3;

char data;

void setup() {
Serial.begin(9600);
}

void loop()
{

unsigned long Timer1CurrentMillis = millis();
if (Timer1CurrentMillis - Timer1Millis >= IntervalTimer1)
{
Timer1Millis = Timer1CurrentMillis;
Timer1 - millis();
Timer1++;
}

unsigned long Timer2CurrentMillis = millis();
if (Timer2CurrentMillis - Timer2Millis >= IntervalTimer2)
{
Timer2Millis = Timer2CurrentMillis;
Timer2 - millis();
Timer2++;
}

unsigned long Timer3CurrentMillis = millis();
if (Timer3CurrentMillis - Timer3Millis >= IntervalTimer3)
{
Timer3Millis = Timer3CurrentMillis;
Timer3 - millis();
Timer3++;
}

unsigned long PrintCurrentMillis = millis();
if (PrintCurrentMillis - PrintMillis >= IntervalPrint)
{
PrintMillis = PrintCurrentMillis;
Serial.print (" Biaya Locker 1 = Rp.");
Serial.print (Price1);
Serial.print (" / ");
Serial.print (" Biaya Locker 2 = Rp.");
Serial.print (Price2);
Serial.print (" / ");
Serial.print (" Biaya Locker 3 = Rp.");
Serial.println (Price3);
Serial.println ();
}

if(Serial.available()>0){
data = Serial.read();
Serial.print(data);
Serial.print("\n");
}
if(data == '1'){ //Reset Timer 1
Timer1 = 0;
CountTimer1 = 0;
Serial.println ("RESET TIMER 1");
}
if(data == '2') { //Reset Timer 2
Timer2 = 0;
CountTimer2 = 0;
Serial.println ("RESET TIMER 2");
}
if(data == '3') { //Reset Timer 3
Timer3 = 0;
CountTimer3 = 0;
Serial.println ("RESET TIMER 3");
}


if (Timer1==60){ //Auto Reset Timer1 setiap 60s & penjumlahan
Timer1 = 0;
CountTimer1 ++;
}
if (Timer2==60){ //Auto Reset Timer2 setiap 60s & penjumlahan
Timer2 = 0;
CountTimer2 ++;
}
if (Timer3==60){ //Auto Reset Timer3 setiap 60s & penjumlahan
Timer3 = 0;
CountTimer3 ++;
}


if (CountTimer1 <= SecondPrice) {
Price1 = 2000; //Harga terendah(Awal)
}
if (CountTimer1 == SecondPrice && CountTimer1 << ThirdPrice) {
Price1 = 4500;
}
if (CountTimer1 == ThirdPrice && CountTimer1 << MaxPrice) {
Price1 = 7500;
}
if (CountTimer1 >= MaxPrice) {
Price1 = 10000; //Harga maksimum
}


if (CountTimer2 <= SecondPrice) {
Price2 = 2000;
}
if (CountTimer2 == SecondPrice && CountTimer2 << ThirdPrice) {
Price2 = 4500;
}
if (CountTimer2 == ThirdPrice && CountTimer2 << MaxPrice) {
Price2 = 7500;
}
if (CountTimer2 >= MaxPrice) {
Price2 = 10000;
}


if (CountTimer3 <= SecondPrice) {
Price3 = 2000;
}
if (CountTimer3 == SecondPrice && CountTimer3 << ThirdPrice) {
Price3 = 4500;
}
if (CountTimer3 == ThirdPrice && CountTimer3 << MaxPrice) {
Price3 = 7500;
}
if (CountTimer3 >= MaxPrice) {
Price3 = 10000;
}

}



Pada simulasi ini menggunakan hitungan menit (1menit, 3menit, 4menit, 6menit) untuk perubahan tingkatan harga, dapat dilihat pada baris program 
 
            #define SecondPrice
            #define ThirdPrice 4  
            #define MaxPrice 6

jika ingin mengimplementasikan dalam satuan jam cukup mengganti angka pada baris program tersebut dari hasil perkalian 60, contoh angka 3 diganti dengan 180 untuk menghitung waktu 3 jam (3x 60 = 180).


Untuk me-reset timer 1 ketik 1 (pada serial monitor) kemudian enter
Untuk me-reset timer 2 ketik 2 (pada serial monitor) kemudian enter
Untuk me-reset timer 3 ketik 3 (pada serial monitor) kemudian enter



*Note: Sketch program diatas hanya sebagai contoh dasar saja tentunya dapat dikembangkan sehingga menjadi sebuah project yang luar biasa.

Semoga bermantaat...
keep sharing...


Arduino - Simulasi millis() (miliseconds)

millis

Apa itu millis?

Millis dapat juga dikatakan sebuah fungsi internal pada arduino yang dapat menjalankan waktu setiap milisecond secara independent. Pada postingan kali ini akan dibahas contoh simulasi millis() dalam menghitung waktu.

Berikut adalah contoh program menampilkan penghitungan waktu dengan millis yang ditampilkan pada serial monitor :

unsigned long Waktu;

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("Millis: ");
  Waktu - millis();
  Waktu++;
  Serial.println(Waktu);
}


Setelah upload program diatas pada Arduino UNO/NANO, dapat kita tampilkan perhitungan millis() pada serial monitor

Arduino Serial Monitor


*Note : Dapat ditambahkan delay (1000) untuk menampilkan nilai millis setiap 1 detik.

Selanjutnya akan kita bahas bagaimana implementasi millis .


Semoga bermanfaat....Keep sharing!!

Minggu, 23 Mei 2021

Multiple Sensor DS18B20 Pada Arduino

Melanjutkan postingan sebelumnya yaitu Menampilkan Nilai Sensor DS18B20 - Arduino, kali ini akan dibahas bagaimana menggunakan sensor DS18B20 lebih dari satu atau kita sebut juga multiple. Apa saja komponen-komponen yang digunakan? tentusaja kita hanya menambahkan sensor DS18B20. Untuk menggunakan sensor DS18B20 ini lebih dari satu, yang perlu diperhatikan adalah kita harus mengetahui alamat (kode) masing-masing sensor, bagaimana cara mengakses kode unik DS18B20? dapat dilihat DISINI.Setelah kita mendapatkan alamat masing-masing sensor, dan menyimpan alamat tersebut pada notepad dilanjutkan merubah alamat tersebut dengan menambahkan kode "0x", sebagai contoh berikut alamat sensor DS18B20 : 

28 C8 0 0 5F 13 0 BD   diubah dengan menambahkan kode "0x" sehingga menjadi 
0x28, 0xC8, 0x0, 0x0, 0x5F, 0x13, 0x0, 0xBD

Terlebih dahulu siapkan rengkaian DS18B20 dengan resistor 4.7K sebagai berikut:

Multiple DS18B20



Berikut adalah contoh program Multiple Sensor DS18B20 Pada Arduino :

#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS 4        // Data Sensor pada Arduino PIN 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Alamat Sensor 1
DeviceAddress AlamatSensor1 = { 0x28, 0xC8, 0x0, 0x0, 0x5F, 0x13, 0x0, 0xBD }; 

// Alamat Sensor 2
DeviceAddress AlamatSensor2 = { 0x28, 0xAF, 0x0, 0x0, 0x2C, 0xD0, 0x0, 0x11 }; 

// Alamat Sensor 3
DeviceAddress AlamatSensor3 = { 0x28, 0x1F, 0x0, 0x0, 0x2D, 0x12, 0x0, 0xAF }; 

int Sensor1;        
int Sensor2;  
int Sensor3;  


void setup()
{
  Serial.begin(9600);
  sensors.begin();
}


void loop()
{
 sensors.requestTemperatures();             // Membaca sensor
 Sensor1 = sensors.getTempC(AlamatSensor1);   
 Sensor2 = sensors.getTempC(AlamatSensor2);
 Sensor3 = sensors.getTempC(AlamatSensor3);
 Serial.print("Temperatur 1 = ");
 Serial.println(Sensor1); 
 Serial.print("Temperatur 2 = ");
 Serial.println(Sensor2); 
 Serial.print("Temperatur 3 = ");
 Serial.println(Sensor3);
 delay(1000);
}

Setelah berhasil upload program Multiple Sensor DS18B20, silahkan buka serial monitor untuk menampilkan pembacaan nilai sensor.

Selamat mencoba...Semoga sukses....


Rabu, 19 Mei 2021

Mengakses Kode Unik DS18B20

DS18B20
Seperti yang kita ketahui, sensor DS18B20 mempunyai kode unik sebagai address sensor tersebut, kegunaannya adalah apabila kita menggunakannya lebih dari 1 (multiple sensor). 
Contoh penerapannya kita membuat suatu project yang mana akan melakukan pengukuran di tiga titik pengukuran yang berbeda misalnya Titik A, Titik B, Titik C, tentunya kita membutuhkan alamat masing-masing sensor tersebut contohnya Titik A dengan kode 1, Titik B dengan kode 2, Titik C dengan kode 3. Dengan mengetahui kode tersebut dapat kita jadikan sebuah address pengambilan nilai sensor pada program yang akan kita buat.

Berikut sketch program untuk Mengakses Kode Unik DS18B20 :

#include <OneWire.h>

OneWire ds(2);  //Pin 2 Arduino Uno/Nano

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte addr[8];
  
  if (!ds.search(addr)) {
    Serial.println();
    ds.reset_search();
    delay(1000);
    return;
  }
  Serial.print(" ADDRESS =");
  for (i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
}

Upload sketch program diatas pada Arduino dan tentunya rangkaian sensor sudah dipersiapkan seperti gambar berikut:

Arduino Nano + DS18B20

Setelah program berhasil di-Upload / tidak ada error, silahkan buka Serial monitor yang akan menampilkan alamat sensor.

*NOTE: Setelah mendapatkan alamat sensor A copy dan simpan alamat tersebut pada notepad, kemudian ganti sensor A dengan sensor B dan catat alamat sensor B pada notepad, begitu juga untuk sensor selanjutnya.


Selamat mencoba...

Semoga sukses!!


Sabtu, 15 Mei 2021

Arduino - Menampilkan Nilai Sensor DS18B20

Untuk menampilkan nilai pembacaan dari sensor DS18B20 pada arduino tentunya kita harus mempersiapkan rangkaian sensor tersebut terlebih dahulu, jika menggunakan satu atau lebih sensor DS18B20 cukup kita menambahkan resistor dengan nilai resistansi 4.7Kohm. Cara merangkainya sangatlah mudah, berikut rincian part-part yang harus dipersiapkan :
  1. Arduino Board (Arduino Uno/Nano) 
  2. Breadboard 
  3. DS18B20 
  4. Resistor 4.7K 
  5. Kabel Jumper Secukupnya 
Terlebih dahulu pasang sensor DS18B20 pada breadboard kemudian hubungkan resistor 4.7K pada kaki VCC dan DATA, kemudian hubungkan kaki VCC sensor pada 5V/3.3V Arduino dan kaki GND sensor pada GND Arduino, untuk kaki DATA pada sensor dapat kita hubungkan pada pin D2 arduino, lebih jelasnya dapat dilihat pada gambar berikut ini.

RANGKAIAN DS18B20
Rangkaian DS18B20 - ARDUINO
Setelah melakukan pemasangan komponen sesuai dengan yang dijelaskan diatas, kita lanjut dengan program Arduino, tentunya menggunakan Software Arduino IDE dengan persiapan library DS18B20 dan 1-Wire bus, jika belum mempunyai Library DS18B20 silahkan download DISINI dan 1-Wire bus. Lakukan pemasangan library pada software Arduino IDE, kemudian Copy Paste sketch program berikut pada software Arduino IDE dan Upload.

/*********Library yang digunakan******************/
#include <OneWire.h> 
#include <DallasTemperature.h>
/********************************************************/
#define ONE_WIRE_BUS 2   //Pin data yang digunakan yaitu PIN 2
/********************************************************/

OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire);

void setup(void) 
 Serial.begin(9600); 
 Serial.println("Menampiklan Nilai Sensor DS18B20"); 

 sensors.begin(); 
void loop(void) 
 Serial.print(" Requesting temperatures..."); 
 sensors.requestTemperatures();
 Serial.println("DONE"); 

 Serial.print("Temperature is: "); 
 Serial.print(sensors.getTempCByIndex(0)); 
 delay(1000); //Setiap 1 detik akan menampilkan nilai sensor

Setelah berhasil upload program Arduino, silahkan buka Serial monitor untuk menampilkan nilai pembacaan dari sensor DS18B20. 

Bagaimana jika kita ini menggunakan sensor DS18B20 lebih dari satu? postingan selanjutnya akan membahas "Multiple Sensor DS18B20 Pada Arduino"