Suatu speaker aktif 12V dapat diberi daya dari adaptor 12V maupun menggunakan baterai. Jika menggunakan baterai yang bisa diisi ulang seperti Li-Ion, sebaiknya menggunakan komponen BMS (Battery Management System) supaya penggunaan baterai lebih baik.
Berikut ini contoh penggunaan BMS dengan 6 baterai.
BMS memiliki beberapa fungsi berikut ini:
Pengaman untuk charging, supaya tidak terjadi overcharge, ataupun kesalahan arus/ tegangan untuk pengisian
Memastikan tegangan pada baterai yang diseri seimbang. Baterai yang telah diisi ulang berkali-kali dapat saja mengalami perubahan tegangan karena kecepatan pengisian pada setiap baterai berbeda.
Pengaman kalau baterai sudah habis. Baterai isi ulang biasanya bisa rusak kalau dipaksa dipakai walaupun sudah habis isinya.
Berikut ini perhitungan durasi pemakaian baterai tersebut. Asumsi:
speaker aktif mendapatkan energi dari baterai dengan BMS 40A
jumlah baterai yang dipakai 6 buah
susunan baterai seri paralel, paralel 2, diseri 3.
tegangan baterai 4,2 volt (tegangan 18650 bisa dari 3,7 volt sampai 4,2 volt)
kapasitas baterai 2600 mAh
Pertanyaan: (1) berapa lama mampu dipakai untuk menyalakan speaker aktif 30 watt (2) jika speaker aktif tersebut menggunakan adaptor, perlu berapa ampere
Jawaban (1): Jika dianggap efisiensi amplifier adalah 100%, maka perhitungan sebagai berikut: energi setiap baterai = tegangan baterai (volt) x kapasitas muatan baterai (Ah) jumlah energi di semua baterai = 6 x tegangan baterai x kapasitas baterai total energi tersimpan di baterai = 6 x 4,2 volt x 2600 mAh = 10,92 VAh = 65,52 Wh waktu = energi / daya = 65,52 Wh / 30 watt = 2,184 jam = 2 jam 11 menit Dalam prakteknya efisiensi amplifier bisa antara 50% ~ 90%, jadi durasi penggunaannya akan kurang dari 2 jam 11 menit. Jika misalkan efisiensi = 50%, maka durasi akan menjadi: 2,184 jam x 50% = 1,092 jam
Jawaban (2) Daya 30 watt tegangan 12 volt asumsi efisiensi 100% (semua daya dari adaptor menjadi energi suara) daya = tegangan x arus P = V x I daya dan tegangan diketahui, tinggal menghitung arus. I = P / V = 30 watt / 12 ampere = 2,5 ampere Jadi diperlukan adaptor 2,5 ampere Dalam prakteknya akan ada inefisiensi, jadi lebih baik pakai adaptor yang lebih dari 2,5 ampere
NTP (Network Time Protocol) adalah protokol komunikasi di jaringan komputer untuk sinkronisasi waktu melalui jaringan komputer. Sinkronisasi waktu ini penting pada aplikasi-aplikasi yang berbasis pewaktuan yang tepat, misalnya pencatatan ataupun untuk koordinasi aktivitas di suatu sistem berbasis IoT (Internet of Things).
ESP32 adalah mikrokontroler yang memiliki fitur Wi-Fi yang memungkinkan untuk tersambung ke jaringan komputer, termasuk ke suatu server NTP. ESP32 dapat menggunakan protokol NTP untuk sinkronisasi waktu dengan server NTP. Proses ini menyederhanakan kalibrasi waktu di ESP32. Alternatif lainnya adalah menggunakan RTC (real time clock) yaitu jam digital yang dibackup dengan baterai, ataupun dengan setting waktu secara manual. Teknik RTC perlu komponen tambahan, sedangkan setting manual memerlukan waktu dan tenaga. Selain itu sumber waktu di ESP32 juga tidak sepresisi sumber waktu di server NTP, sehingga setelah beberapa waktu maka jam di ESP32 akan bergeser dari setting awal.
Untuk mengakses NTP dari ESP32 dapat menggunakan library yang sudah ada, jadi tidak perlu lagi koding protokol secara dari nol. Library yang umum dipakai ada 2 macam yaitu:
Arduino Library NTPClient untuk Arduino. Library ini dapat dipakai di semua mikrokontroler Arduino.
Arduino ESP32 NTP untuk ESP32. Library ini hanya dapat dipakai untuk ESP32.
Persiapan
Sebelum menjalankan program NTP ini, ada beberapa hal yang perlu diperhatikan:
Arduino IDE sudah diinstal di desktop/laptop, dan libraray Arduino-ESP32 sudah diaktifkan
Konfigurasi ESP32 sudah diujicoba dengan program sederhana, misalnya lampu kedip (Blink)
Wi-Fi akses point dapat mengakses internet tersedia, dan juga sudah disiapkan nama akses point dan passwordnya.
Pahami zona waktu tempat anda. NTP memberikan waktu dengan standar GMT+0, jadi perlu disesuaikan jika anda memerlukan waktu lokal.
Arduino NTPClient
Cara pertama adalah menggunakan library NTPClient Arduino. Library ini dicantumkan di laman NTPClient di situs Arduino, namun tidak ada penjelasan sama sekali di situs tersebut. Untuk cara penggunaannya kita perlu melihat repository NTPClient di github. Contoh penggunaan ada di direktori /examples di repository tersebut.
Contoh kode juga dapat diakses dari Arduino IDE, dari menu File -> Examples -> NTPClient. Namun sedikit repot, karena daftar Examples cukup banyak dan urutannya tidak tepat abjad. Berikut ini tampilan menunya di Arduino IDE. (klik untuk gambar yang lebih besar).
Kode yang mudah dipakai adalah yang ‘Basic’ , namun kode ini perlu diubah sedikit seperti pada listing kode berikut ini.
#include <NTPClient.h>
// change next line to use with another board/shield
//#include <ESP8266WiFi.h>
#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>
const char *ssid = "AP_NAME";
const char *password = "AP_PASSWORD";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
timeClient.begin();
}
void loop() {
timeClient.update();
Serial.println(timeClient.getFormattedTime());
delay(1000);
}
Perubahan yang dilakukan adalah sebagai berikut:
Kode ini awalnya untuk ESP8266. Untuk dipakai di ESP32 maka header file mesti diganti, dari “ESP8266WiFi.h” menjadi “WiFi.h”
Sesuaikan nama SSID untuk akses point
Sesuaikan password untuk mengakses akses point. Perhatikan bahwa program NTP ini hanya dapat berfungsi jika ESP32 tersambung ke internet. Jadi pastikan Wi-Fi access point tersambung ke internet atau bisa juga menggunakan tethering ke smartphone
Berikut ini tampilan output ESP32 di serial monitor Arduino. Waktu adalah GMT+0, sedangkan di Indonesia adalah GMT+7, sehingga jam yang ditampilkan berbeda 7 jam.
Program di atas menampilkan waktu dalam UTC atau GMT+0. Untuk menampilkan dalam waktu lokal seperti WIB (Waktu Indonesia bagian Barat), gunakan fungsi setTimeOffset() untuk menambah/mengurangi waktu yang ditampilkan. Untuk WIB, waktu yang ditambah dalam detik adalah 7 x 60 x 60. Programnya menjadi sebagai berikut:
#include <NTPClient.h>
// change next line to use with another board/shield
//#include <ESP8266WiFi.h>
#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>
const char *ssid = "AP_NAME";
const char *password = "AP_PASSWORD";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
timeClient.begin();
timeClient.setTimeOffset(7*60*60);
}
void loop() {
timeClient.update();
Serial.println(timeClient.getFormattedTime());
delay(1000);
}
Beberapa hal yang dapat diambil/diubah dengan member function di di class NTPClient :
SetPoolServerName() : mengubah NTP server dari default pool.ntp.org
isTimeSet() : apakah berhasil mengambil waktu dari NTP server
getDay() : ambil hari dalam minggu (0 = minggu)
getHours() : ambil waktu jam
getMinutes() : ambil waktu menit
getSeconds() : ambil waktu detik
setTimeOffset() : menambah/mengurangi offset waktu yang ditampilkan dalam detik
getFormattedTime() : waktu terformat dalam bentuk string
getEpochTime() : jumlah detik sejak 1 Januari 1970
Arduino ESP32 NTP Library
Library ini adalah bagian dari Arduino ESP32, jadi hanya dapat dipakai di ESP32.
// sumber: libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino
// URL: https://github.com/espressif/arduino-esp32/blob/496b8411773243e1ad88a68652d6982ba2366d6b/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino
// dimodifikasi untuk WIB (GMT+7)
#include <WiFi.h>
#include "time.h"
#include "esp_sntp.h"
const char *ssid = "AP_NAME";
const char *password = "AP_PASSWORD";
const char *ntpServer1 = "pool.ntp.org";
const char *ntpServer2 = "time.nist.gov";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
//const char *time_zone = "CET-1CEST,M3.5.0,M10.5.0/3"; // TimeZone rule for Europe/Rome including daylight adjustment rules (optional)
const char *time_zone = "WIB-7"; // Indonesia WIB
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("No time available (yet)");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
// Callback function (gets called when time adjusts via NTP)
void timeavailable(struct timeval *t) {
Serial.println("Got time adjustment from NTP!");
printLocalTime();
}
void setup() {
Serial.begin(115200);
// First step is to configure WiFi STA and connect in order to get the current time and date.
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
/**
* NTP server address could be acquired via DHCP,
*
* NOTE: This call should be made BEFORE esp32 acquires IP address via DHCP,
* otherwise SNTP option 42 would be rejected by default.
* NOTE: configTime() function call if made AFTER DHCP-client run
* will OVERRIDE acquired NTP server address
*/
esp_sntp_servermode_dhcp(1); // (optional)
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
// set notification call-back function
sntp_set_time_sync_notification_cb(timeavailable);
/**
* This will set configured ntp servers and constant TimeZone/daylightOffset
* should be OK if your time zone does not need to adjust daylightOffset twice a year,
* in such a case time adjustment won't be handled automagically.
*/
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2);
/**
* A more convenient approach to handle TimeZones with daylightOffset
* would be to specify a environment variable with TimeZone definition including daylight adjustmnet rules.
* A list of rules for your zone could be obtained from https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h
*/
configTzTime(time_zone, ntpServer1, ntpServer2);
}
void loop() {
delay(5000);
printLocalTime(); // it will take some time to sync time :)
}
Penyesuaian yang dilakukan adalah sebagai berikut:
Timezone diganti menjadi Waktu Indonesia bagian Barat (WIB-7)
Berikut ini output program di serial terminal
Kedua library tersebut fungsinya mirip-mirip. Library ESP32 memiliki fitur lebih banyak dan lebih cocok untuk dijalankan di ESP32.
Saran & Penyempurnaan
Contoh program NTP yang disajikan adalah program yang sangat minimalis untuk menunjukkan konsep NTP. Pada kondisi sesungguhnya, sistem mikrokontroler IoT ini akan menghadapi berbagai masalah, sehingga perlu ditambahkan penanganan beberapa kasus berikut:
Koneksi ESP32 ke server NTP tidak stabil, baik di local network maupun di internetnya.
Pada program perlu ditambahkan error handling jika terjadi koneksi internet putus ataupun koneksi Wi-Fi putus. Jika koneksi Wi-Fi putus, maka perlu ada prosedur untuk melakukan rekoneksi ulang ke akses point Wi-Fi. Jadi tidak perlu reset manual.
Pengubahan konfigurasi nama akses point dan password akses point secara software dengan interface tertentu. Pada contoh ini nama dan password dikodekan langsung di source code sehingga tidak dapat diubah. Pada kondisi nyata seharusnya dapat diubah oleh pemakai tanpa perlu mengubah source code.
Falstadt, simulator rangkaian elektrik Online. Antar mukanya menggunakan graphical, jadi sangat mudah. Visualisasi arus di setiap kabel juga bagus.
Falstadt
Simulator ESP32
Wokwi, mengklaim sebagai “World’s most advanced ESP32 simulator”. Dapat melakukan simulasi Arduino (Uno, Mega, Nano), ESP32, STM32 dan Pi Pico. Ada versi onlinenya di website Wokwi, dan ada juga versi offline yang dapat diinstall di VS Code / JetBrains (berbayar). Ada juga versi Wokwi Pro (berbayar) yang dapat diintegrasikan ke CI (Continous Integration).
Saya sedang mencari-cari ide rangkaian untuk membuat filter analog yang frekuensi cut-off nya dapat diprogram secara digital. Tujuannya jangka pendek adalah untuk filter anti aliasing dan reconstruction filter untuk suatu pengolahan sinyal digital.
Beberapa artikel berisi ide yang sudah didapat:
Ide rangkaian dari “Application Note 269 Circuit Applications of Multiplying CMOS D to A Converters”
Ide rangkaian dari Application Note: “Application Ideas for Multiplying DAC’s Digital Controlled Gain is Useful in Filter Circuits”
Ide dari “”A Digitally Controllable Lowpass Filter Using a Digital Potentiometer”
Rangkaian ini berisi 2 buah potensiometer digital (MCP42100) , opamp MCP601 (single supply, rail to rail). Konfigurasi filter yang dipakai adalah Sallen-key orde 2, low-pass filter.
Panduan pemilihan nilai resissor dan kapasitor untuk rangkaian dengan op-amp:
Nilai resistor antara 1k ~ 100kΩ
Nilai kapasitor antara 1 nF ~ beberapa μF
Kutipan:
Resistor values should stay within the range of 1–100 kΩ. The lower limit avoids excessive current draw from the op amp output, which is particularly important for single-supply op amps in power-sensitive applications. Those amplifiers have typical output currents of between 1 mA and 5 mA. At a supply voltage of 5 V, this current translates to a minimum of 1 kΩ.
The upper limit of 100 kΩ is to avoid excessive resistor noise.
Capacitor values can range from 1 nF to several μF. The lower limit avoids coming too close to parasitic capacitances. If the common-mode input capacitance of the op amp, used in a Sallen–Key filter section, is close to 0.25% of C1, (C1/400), it must be considered for accurate filter response. The MFB topology, in comparison, does not require input-capacitance compensation.
Salah satu pesan kesalahan yang dapat muncul pada ESP32 adalah “Guru Meditation Error: Core 1 panic’ed (Interrupt wdt timeout on CPU1)”. Salah satu penyebabnya adalah memanggil Serial.print() dari interupsi
Berikut ini pesan kesalahan yang muncul pada ESP32
Berikut ini contoh program yang menyebabkan kesalahan tersebut.
// https://www.arduino.cc/reference/en/libraries/esp32timerinterrupt/
#define LED_BUILTIN 22
hw_timer_t *My_timer = NULL;
int kerja_counter = 0;
int print_job = 0;
long int timer_delay = 1000000L; // clock timer= 1 MHz
void IRAM_ATTR onTimer() {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
kerja_counter++;
Serial.print("Test ");
Serial.println(kerja_counter); // bad practice
}
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(115200);
Serial.print(__FILE__);
Serial.print(F("\nStarting TimerInterruptTest on "));
Serial.println(ARDUINO_BOARD);
Serial.print(F("CPU Frequency = "));
Serial.print(F_CPU / 1000000);
Serial.println(F(" MHz"));
pinMode(LED_BUILTIN, OUTPUT);
My_timer = timerBegin(0, 80, true); // prescaler
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, timer_delay, true);
timerAlarmEnable(My_timer); //Just Enable
}
// the loop function runs over and over again forever
void loop() {
}
Solusi: Serial.print() dipanggil dari fungsi loop(), sedangkan interupsi hanya mempersiapkan datanya saja, atau menaruh data ke dalam suatu FIFO buffer.
Berikut ini contoh hasil modifikasi program di atas.
// https://www.arduino.cc/reference/en/libraries/esp32timerinterrupt/
#define LED_BUILTIN 22
hw_timer_t *My_timer = NULL;
int kerja_counter = 0;
int print_job = 0;
long int timer_delay = 1000000L; // clock timer= 1 MHz
void IRAM_ATTR onTimer() {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
kerja_counter++;
print_job=1;
}
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(115200);
Serial.print(__FILE__);
Serial.print(F("\nStarting TimerInterruptTest on "));
Serial.println(ARDUINO_BOARD);
Serial.print(F("CPU Frequency = "));
Serial.print(F_CPU / 1000000);
Serial.println(F(" MHz"));
pinMode(LED_BUILTIN, OUTPUT);
My_timer = timerBegin(0, 80, true); // prescaler
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, timer_delay, true);
timerAlarmEnable(My_timer); //Just Enable
sei();
}
// the loop function runs over and over again forever
void loop() {
if (print_job == 1) {
print_job = 0;
Serial.print("Test ");
Serial.println(kerja_counter);
}
}
Problem: “Design the gain for the antenna azimuth position control system shown in Figure 13.30(b) to yield a closed-loop damping ratio of 0.5. Assume a sampling interval of T 0:1 second.”
Blok diagram sistem dengan simulink sebagai berikut:
Fungsi transfer sistem dimasukkan ke blok “Transfer Fcn”
Respon sistem terhadap input step adalah sebagai berikut
Apakah ada pin analog output di Arduino? Ada Arduino yang memiliki analog output sesungguhnya, ada yang tidak. Analog output yang sesungguhnya menggunakan DAC (Digital to Analog Converter). Pada Arduino yang tidak ada DAC, analog output dapat ditiru menggunakan output PWM (Pulse Width Modulation) / Modulasi Lebar Pulsa.
Apa bedanya sinyal output dari DAC dan dari PWM? Sinyal DAC berupa tegangan tertentu yang dapat diatur tegangannya sesuai dengan parameter yang diberikan. Sinyal PWM berupa tegangan HIGH (biasanya 5 volt) dan LOW (0 volt), dengan perbandingan antara HIGH dan LOW mengikuti suatu perbandingan tertentu.
Berikut ini contoh sinyal PWM
Arduino yang memiliki DAC adalah di antaranya sebagai berikut:
Arduino SIM adalah kartu SIM GSM dari Arduino yang menawarkan konektivitas global di seluruh dunia. Arduino SIM cocok dipakai untuk perangkat yang memerlukan akses ke Arduino IoT Cloud di tempat-tempat yang tidak memiliki akses IoT lain seperti Wifi
Arduino SIM
Arduino SIM kompatibel dengan produk MKR GSM 1400 dari Arduino. Pada papan Arduino ini terdapat konektor untuk memasukkan SIM card.
Arduino MKR GSM 1400
Arduino IoT Cloud
Arduino SIM memungkinkan akses ke Arduino IoT Cloud. Pada saat ini papan Arduino yang mendukung Arduino SIM adalah MKR GSM 1400
Google Spreadsheets via Arduino IoT Cloud: memungkinkan pengumpulan data dari sensor , mengirimnya ke Arduino IoT Cloud melalui jaringan selular (GSM), dan kemudian mengirimnya ke GSheet menggunakan webhooks. Contoh akses dapat dilihat di artikel “IoT Pressure Sensor: MKR GSM + Arduino Cloud + Google Sheets“
Berikut ini foto perangkat pengukur tekanan menggunakan Arduino MKR GSM 1400 yang terhubung ke Arduino Cloud dan Google Sheets
IoT Pressure Sensor
Dataplan
SIM Arduino hanya mengirimkan data ke Arduino IoT Cloud.Dengan cara ini, kami memberi Anda saluran komunikasi yang aman dari perangkat ke dasbor.Setelah data mencapai Arduino IoT Cloud, data dapat dijembatani ke platform dan layanan lain melalui webhook atau Arduino IoT API.Setelah aktivasi kartu SIM, Anda mendapatkan 10MB data gratis hingga 90 hari (5MB per bulan seharga $1,50 USD setelahnya).Fitur utama paket ini adalah:
Konektivitas seluler langsung ke Arduino IoT Cloud
HANYA kompatibel dengan Arduino IoT Cloud
Data dapat dijembatani dari Arduino IoT Cloud ke platform dan layanan lain menggunakan webhook atau Arduino IoT API
Profil roaming global – satu paket data sederhana beroperasi di lebih dari 100 negara.Periksa di sini cakupannya berdasarkan negara
Paket SIM Arduino bulanan dapat disewa di seluruh dunia kecuali Brasil
Data gratis awal akan kedaluwarsa setelah 90 hari atau ketika Anda telah menggunakan data gratis 10 MB, mana saja yang lebih dulu
Anda dapat menjeda dan memulai ulang SIM Anda di sini.Harap perhatikan bahwa SIM Anda dapat dijeda selama maksimal 6 bulan dan ada biaya jeda berkelanjutan sebesar $0,30 USD per bulan ditambah pajak yang berlaku.SIM tidak dapat dijeda selama masa uji coba gratis 90 hari Anda
Jumlah lalu lintas data yang sama dengan harga yang sama di mana pun Anda mengoperasikan perangkat di seluruh dunia
Layanan seluler terukur dari Konektivitas Arm® Pelion™ – cocok untuk sejumlah besar perangkat di masa depan
Pertanyaan yang Sering Diajukan
Dapatkah Arduino SIM Terhubung ke Internet?
Awalnya Arduino SIM akan terbatas pada konektivitas ke Arduino IoT Cloud saja – dengan kemampuan untuk menjembatani Internet yang lebih luas menggunakan webhook dan API yang akan hadir pada akhir tahun ini.
BAGAIMANA CARA MENJEDA SIM SAYA?
Anda dapat menjeda dan memulai ulang SIM Anda di sini. Harap perhatikan bahwa SIM Anda dapat dijeda selama maksimal 6 bulan dan ada biaya jeda berkelanjutan sebesar $0,30 USD per bulan ditambah pajak yang berlaku. (n.b. SIM tidak dapat dijeda selama masa uji coba gratis 90 hari Anda). DIMANA SIM SAYA AKAN BEROPERASI? Anda akan dapat terhubung ke cloud Arduino IoT dari lebih dari 100 negara, memungkinkan Anda menggunakan perangkat Anda di seluruh dunia –
PAPAN APA YANG SIM AKAN BEKERJA?
Awalnya Arduino SIM akan mendukung Arduino MKR GSM 1400 (3G dengan fallback 2G). Ada peta jalan untuk mendukung Arduino MKR NB 1500 (LTE Cat-M dan NB-IoT) yang akan datang. Akhirnya kami berencana untuk membukanya untuk dewan pihak ketiga juga.
Dapatkah Saya Menggunakan SIM Lain?
Ya! Anda bebas menggunakan layanan seluler apa pun yang Anda sukai, dan memasukkan SIM apa pun yang Anda suka ke papan seluler Arduino Anda.
Saya Mengalami Masalah Dengan SIM Arduino Saya
Jika Anda mengalami masalah teknis saat menghubungkan perangkat Anda, pastikan untuk memeriksa forum SIM.
Berikut ini beberapa rangkaian sederhana untuk mengendalikan motor servo dengan Arduino. Motor servo yang dimaksud di sini adalah motor servo radio control. Motor servo radio control memiliki 3 terminal: VCC, GND dan PWM.
Berikut ini contoh motor servo yang dipakai
Kendali Servo Dengan Potensiometer
Pada contoh ini posisi motor servo dikendalikan dengan sebuah potensiometer. Posisi potensiometer dibaca dengan membaca tegangan output dari potensiometer tersebut. Angka tersebut kemudian dipakai untuk mengendalikan posisi motor servo .
Rangkaian motor servo sebagai berikut:
Penjelasan Rangkaian:
Terminal VCC dari motor servo disambung ke catu daya motor
Terminal GND dari motor servo disambung ke GND catu daya motor dan GND Arduino
Terminal PWM dari motor servo disambung ke port 9 pada Arduino
Terminal pinggir Potensiometer disambung ke VCC dan GND pada Arduino
Terminal tengah potensiometer disambung ke pin A0 pada Arduino. Tegangan dari potensiometer akan dibaca sebagai tegangan analog, sehingga harus menggunakan pin input analog dari Arduino.
Sumber tegangan untuk Arduino UNO dapat menggunakan USB ataupun dari POWER PIN. Sumber tegangan untuk motor servo menggunakan baterai ataupun adaptor terpisah. Tegangan baterai untuk motor servo disesuaikan dengan spesifikasi motor servo. Catu daya untuk Arduino dipisah dengan catu daya untuk motor servo, karena biasanya arus yang ditarik oleh motor servo cukup besar sehingga dapat mengganggu tegangan catu daya yang terhubung ke motor servo.
Motor servo seperti HS-311 memerlukan tegangan catu daya antara 4,8 volt sampai 6 volt dengan arus maksimum 800 mA. Jadi pastikan tegangan catu daya dan arusnya sesuai untuk motor servo yang dipakai.
Perangkat lunak untuk Arduino adalah sebagai berikut:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Pada bagian setup, pin 9 diset sebagai output motor servo.
Pada fungsi loop() dilakukan proses sebagai berikut:
membaca tegangan dari pin A0 untuk mengetahui posisi dari potensiometer dengan fungsi analogRead()
angka ini skalanya adalah 0 sampai 1023, sedangkan input motor servo adalah 0 sampai 180, sehingga perlu dilakuan penskalaan dengan fungsi map()
tuliskan angka hasil penskalaan ke motor servo
tunggu 15 milidetik untuk memberi waktu motor bergerak
Fungsi loop() akan dilakukan berulang-ulang , sehingga posisi motor servo akan mengikuti posisi di potensiometer.
Kendali Servo Bolak-Balik
Pada contoh ini, posisi motor servo beralih dari 0 ke 180 derajat, kemudian kembali ke 0 derajat berulang-ulang.
Rangkaian sebagai berikut
Penjelasan Rangkaian:
Terminal VCC dari motor servo disambung ke catu daya motor
Terminal GND dari motor servo disambung ke GND catu daya motor dan GND Arduino
Terminal PWM dari motor servo disambung ke port 9 pada Arduino
Terminal pinggir Potensiometer disambung ke VCC dan GND pada Arduino
Kode sebagai berikut
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Cara kerja perangkat lunak
Pada fungsi loop(), dilakukan hal berikut:
buat suatu for() loop untuk menggerakkan motor dari 0 derajat ke 180 derajat dengan langkah sebesar 1 derajat. Tiap kali geser 1 derajat, lakukan penundaan selama 15 milidetik untuk menunggu motor bergerak.
buat suatu for() loop untuk menggerakkan motor dari 0 derajat ke 180 derajat dengan langkah sebesar 1 derajat. Tiap kali geser 1 derajat, lakukan penundaan selama 15 milidetik untuk menunggu motor bergerak.
Jawab: Pengertian mikrokontroler adalah suatu komputer kecil dalam satu keping rangkaian terintegrasi. Suatu mikrokontroler di dalamnya terdiri dari satu atau lebih CPU (Central Processing Unit / Unit pengolahan terpusat) dengan sejumlah memori dan periferal input/output.
Mengapa mikrokontroler disebut sebagai komputer?
Jawab: Mikrokontroler disebut sebagai komputer karena memang mikrokontroler adalah suatu komputer lengkap. Perbedaan khusus dibandingkan komputer biasa adalah semua komponen komputer pada mikrokontroler sudah terkandung dalam satu rangkaian terintegrasi, sedangkan pada komputer biasa komponen-komponen tersebut berada pada beberapa keping rangkaian terintegrasi.
Sebagai contoh, Arduino UNO / Nano di dalamnya ada komponen utama mikrokontroler tipe ATmega328 . Di dalam ATmega328 ini sudah ada CPU, memori flash untuk menampung program, memori RAM (Random Access Memory) untuk menampung variabel di perangkat lunak, dan EEPROM (Electrically Erasable Programmable Read Only Memory) untuk menampung data yang dapat diubah oleh program namun tidak hilang kalau listrik dimatikan.
Berikut ini foto ATmega328
Sebagai perbandingan , motherboard komputer desktop memiliki CPU, memori dan periferal masing-masing pada rangkaian terintegrasi yang terpisah. Berikut ini contoh papan rangkaian motherboard.
Berikut ini contoh CPU AMD Ryzen 9 5950X. Dalam rangkaian terintegrasi ini hanya ada CPU saja, belum dilengkapi dengan RAM maupun periferal lain.
Referensi
https://en.wikipedia.org/wiki/Motherboard
Kenapa mikrokontroler sering disebut juga sebagai komputer mini?
Mikrokontroler sering disebut juga sebagai komputer mini karena mikrokontroler sudah merupakan satu komputer lengkap yang dapat menjalankan perangkat lunak, dan ukurannya kecil (maka disebut sebagai mini).
Istilah ‘minicomputer’ sebenarnya pernah dipakai di tahun 1960-an untuk menyebut komputer serba guna yang ada di era itu. Ukurannya cukup besar dibandingkan komputer zaman sekarang. Lebih jauh dapat dibaca di https://en.wikipedia.org/wiki/Minicomputer
Apakah mikrokontroler termasuk ke dalam komputer?
Ya, mikrokontroler termasuk dalam salah satu jenis komputer.
Apa contoh mikrokontroler?
Contoh mikrokontroler di antaranya:
ESP32
ESP8266
ATmega328 yang dipakai di Arduino Nano dan Arduino UNO
RP2040 yang dipakai di Arduino Nano RP2040
Keluarga STM32 , seperti STM32F103C8T6 yang dipakai di modul Blue Pill
STM32 Blue Pill https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html
Apa kelebihan mikrokontroler
Keuntungan mikrokontroler dan keistimewaan dibandingkan mikroprosesor biasa adalah:
ukuran kecil karena semua komponen komputer sudah ada dalam satu keping chip.
penggunaan daya kecil
pembuatan perangkat keras / rangkaian lebih mudah karena rangkaian lebih sederhana
Apa kekurangan mikrokontroler?
Kekurangan mikrokontroler adalah terutama pada ukurannya yang kecil, harus muat di dalam satu keping rangkaian terintegrasi. Akibatnya kemampuan komputasinya terbatas, memori terbatas, periferal juga terbatas dibandingkan dengan mikroprosesor.
Kemampuan komputasi terbatas artinya kecepatan komputasi relatif lambat.
Periferal terbatas, artinya input output digital maupun analog terbatas. Media penyimpanan terbatas. Jika perlu penyimpanan tambahan, biasanya untuk mikrokontroler menggunakan memori tipe SD card. Mikroprosesor dapat menggunakan media besar seperti flashdisk, SSD dan hard disk.
Mikrokontroler pakai bahasa apa?
Mikrokontroler yang ada saat ini umumnya diprogram menggunakan bahasa pemrograman Assembly, C dan C++. Bahasa lain jarang dipakai, misalkan sebagai berikut:
Rust dipakai untuk ESP32 https://github.com/esp-rs/awesome-esp-rust
TinyGo (versi kecil dari Go) https://tinygo.org/
Apa singkatan dari mikrokontroler?
Mikrokontroler sering disingkat sebagai MCU (Microcontroller Unit)
Apa fungsi ALU dalam mikrokontroler?
ALU (Arithmetic & Logic Unit) adalah bagian dari CPU (Central Processing Unit), sedangkan CPU adalah bagian dari mikrokontroler. Fungsi ALU pada mikrokontroler sama seperti fungsi ALU pada CPU, yaitu untuk melakukan proses perhitungan aritmatik (tambah kurang kali bagi) dan logika (AND, OR, NOT, penggeseran bit)
Apa bagian dari mikrokontroler?
Bagian-bagian utama dari mikrokontroler adalah: CPU, memori dan periferal.
CPU (Central Processing Unit) berfungsi mengatur seluruh aktivitas di dalam mikrokontroler
Memori berfungsi untuk menyimpan program dan variabel-variabel.
Periferal berfungsi menghubungkan mikrokontroler ke dunia luar
Sebagai contoh, berikut ini blok diagram mikrokontroler ESP32
Blok diagram ESP32
Penjelasan:
CPU pada ESP32 tersebut adalah “Xtensa LX6 microprocessor” Memori adalah ROM dan SRAM
Periferal adalah bagian-bagian lainnya, seperti Radio, Cryptographic, Peripheral Interfaces (I2C, SDIO, CAN, IR, Temperature Sensor, DAC, SPI, I2S, UART, ETH, PWM, Touch Sensor, SAR ADC)
Apa fungsi chip pada mikrokontroler?
Apakah Chip termasuk mikrokontroler?
Chip tidak termasuk mikrokontroler. Justru mikrokontroler adalah salah satu jenis chip. Chip jenis lain selain mikrokontroler banyak , misal chip penguat op-amp, chip rangkaian logika dan sebagainya.
Apa yang dimaksud dengan sistem minimum mikrokontroler?
Mikrokontroler secara definisi sudah dapat langsung dijalankan tanpa tambahan komponen mikroprosesor lain, jadi istilah ‘sistem minimum mikrokontroler’ ini agak rancu. Beberapa mikrokontroler sudah dapat dijalankan hanya dengan menambahkan tegangan power supply, namun ada juga beberapa mikrokontroler yang masih memerlukan tambahan komponen seperti kristal untuk clock.
Istilah ‘sistem minimum mikroprosesor’ sebenarnya dikenal untuk mikroprosesor, yaitu rangkaian minimum suatu sistem mikroprosesor (CPU, RAM dan periferal) yang dapat menjalankan suatu program sederhana.
Apa karakteristik mikrokontroler?
Karakteristik utama mikrokontroler adalah sebagai berikut
mikrokontroler adalah komputer, di dalamnya ada CPU , memori dan periferal
sering dipakai untuk mengendalikan perangkat-perangkat kecil
dipakai di sistem tertanam (embedded systems), yaitu perangkat yang di dalamnya terdapat komputer namun komputer tersebut tidak kelihatan
kemampuan komputasi terbatas, jadi umumnya hanya dipakai untuk komputasi ringan
konsumsi daya mikrokontroler relatif kecil dibandingkan mikroprosesor biasa. terutama di perangkat yang mobile/mudah dipindahkan.
Sering dipakai untuk menangani pekerjaan waktu nyata (pekerjaan yang memiliki batas waktu ketat)
Sudah dilengkapi dengan periferal input & output jadi dapat langsung disambung ke sensor dan aktuator
program pada mikrokontroler umumnya disimpan di flash memory, bukan di hard drive ataupun SSD
harga relatif murah
ukuran kecil, mudah diintegrasikan dengan produk lain
Ukuran memori dan periferal pada mikrokontroler tidak dapat diubah, sehingga mikrokontroler diproduksi dengan berbagai kombinasi kemampuan memori dan periferal. Mikroprosesor dapat dikonfigurasi kemampuannya dengan menambah periferal, jadi jenis mikroprosesor tidak terlalu banyak.