Senin, 30 Januari 2023

Kode arduino logging sensor suhu LM 35 dengan IOT

 Berikut adalah contoh kode untuk logging data suhu dari sensor LM35 menggunakan Arduino dan IoT:

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "your-wifi-ssid";
const char* password = "your-wifi-password";
const char* mqttServer = "your-mqtt-server-address";
const int mqttPort = 1883;
const char* mqttUser = "your-mqtt-username";
const char* mqttPassword = "your-mqtt-password";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(9600);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  client.setServer(mqttServer, mqttPort);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  
  int temperature = analogRead(A0);
  float voltage = (temperature * 5000.0) / 1024.0;
  float celcius = voltage / 10.0;
  char temperatureStr[6];
  dtostrf(celcius, 4, 2, temperatureStr);
  String message = String("{\"temperature\":") + temperatureStr + "}";
  const char* payload = message.c_str();
  client.publish("sensors/temperature", payload);
  Serial.println("Published temperature: " + message);
  delay(3000);
}

void reconnect() {
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");
    if (client.connect("arduinoClient", mqttUser, mqttPassword)) {
      Serial.println("Connected to MQTT");
    } else {
      Serial.print("Failed, rc=");
      Serial.print(client.state());
      Serial.println("Try again in 5 seconds");
      delay(5000);
    }
  }
}

Catatan: Pastikan untuk mengganti nilai ssid, password, mqttServer, mqttPort, mqttUser, dan mqttPassword dengan informasi yang sesuai untuk jaringan Wi-Fi dan server MQTT Anda. Anda juga harus menginstal biblioteka WiFi dan PubSubClient sebelum menjalankan kode ini.

Berikut adalah contoh kode PHP untuk menampilkan data suhu yang diterima dari Arduino melalui MQTT pada sebuah web server:

<?php
  $server = "tcp://your-mqtt-server-address:1883";
  $username = "your-mqtt-username";
  $password = "your-mqtt-password";
  $topic = "sensors/temperature";
 
  $connection = new Mosquitto\Client();
  $connection->setCredentials($username, $password);
  $connection->connect($server);
 
  $connection->onConnect(function($code, $message) use ($connection, $topic) {
    $connection->subscribe($topic, 1);
  });
 
  $connection->onMessage(function($message) {
    $data = json_decode($message->payload, true);
    $temperature = $data["temperature"];
    echo "Current temperature is $temperature &#8451;<br>";
  });
 
  while (true) {
    $connection->loop();
  }
?>

Catatan: Pastikan untuk mengganti nilai server, username, dan password dengan informasi yang sesuai untuk server MQTT Anda. Anda juga harus menginstal biblioteka Mosquitto (MQTT client untuk PHP) sebelum menjalankan kode ini.

Untuk membuat protokol MQTT, ada beberapa hal yang perlu dilakukan:

  1. Pilih bahasa pemrograman yang akan digunakan untuk membuat MQTT broker atau client. MQTT dapat diimplementasikan di banyak bahasa pemrograman, seperti Python, Java, C++, dan lainnya.
  2. Install library MQTT. Ada beberapa library MQTT yang tersedia di internet, seperti paho-mqtt untuk Python, Eclipse Mosquitto untuk C/C++, dan lain-lain. Library ini akan mempermudah implementasi protokol MQTT pada program yang akan Anda buat.
  3. Buat broker MQTT. Broker MQTT bertugas untuk menerima pesan yang dikirim oleh publisher dan mengirimkannya ke subscriber yang berlangganan topik tertentu. Ada beberapa broker MQTT yang populer seperti Mosquitto, HiveMQ, dan lain-lain. Anda juga dapat membuat broker MQTT sendiri menggunakan library yang telah diinstal.
  4. Buat client MQTT. Client MQTT dapat berupa publisher atau subscriber. Publisher bertugas mengirimkan pesan ke broker, sedangkan subscriber bertugas menerima pesan dari broker. Anda dapat membuat client MQTT menggunakan library yang telah diinstal pada bahasa pemrograman yang dipilih.
  5. Tentukan topik pesan. Topik pesan adalah topik yang digunakan untuk mengirim dan menerima pesan pada protokol MQTT. Topik dapat digunakan untuk mengelompokkan pesan berdasarkan jenis, lokasi, atau jenis data.
  6. Tentukan kualitas layanan (QoS) yang digunakan. MQTT mendukung tiga level QoS, yaitu QoS 0, QoS 1, dan QoS 2. Setiap level memiliki kelebihan dan kelemahan masing-masing dan harus dipilih sesuai dengan kebutuhan aplikasi.
  7. Implementasikan fungsi-fungsi yang dibutuhkan pada program. Beberapa fungsi yang perlu diimplementasikan pada program MQTT adalah fungsi untuk menghubungkan client ke broker, mengirim pesan, dan menerima pesan.

Itulah beberapa langkah untuk membuat protokol MQTT. Penting untuk mengikuti spesifikasi protokol yang telah ditentukan agar protokol MQTT dapat berfungsi dengan baik.





Rabu, 18 Januari 2023

Kode Matlab mencari akar dengan metode Bisection

Berikut ini adalah contoh kode Matlab untuk mencari akar dari suatu persamaan menggunakan metode bisection:

% Define function
f = @(x) x^3 - x^2 + 2;

% Set initial bracket [a, b]
a = 0;
b = 1;

% Set tolerance
tol = 1e-6;

% Set maximum number of iterations
maxIter = 1000;

% Initialize variables
fa = f(a);
fb = f(b);

% Check if initial bracket is valid
if fa*fb > 0
    error('Initial bracket is not valid')
end

% Iterate
for i = 1:maxIter
    c = (a+b)/2;
    fc = f(c);
    if fc == 0 || (b-a)/2 < tol
        break
    end
    if fa*fc < 0
        b = c;
        fb = fc;
    else
        a = c;
        fa = fc;
    end
end

% Print result
fprintf('Root: %f\n', c)
fprintf('Number of iterations: %d\n', i)

Kode diatas mencari akar dari persamaan x^3 - x^2 + 2 . Anda dapat mengganti fungsi f dengan fungsi yang Anda inginkan dan juga melakukan modifikasi pada variabel-variabel yang diperlukan.

Sabtu, 14 Januari 2023

Program atau Code Arduino untuk Kalman Filter

Filter Kalman adalah algoritme matematis yang menggunakan serangkaian pengukuran yang diamati dari waktu ke waktu, mengandung noise (variasi acak) dan ketidakakuratan lainnya, serta menghasilkan perkiraan variabel yang tidak diketahui yang cenderung lebih tepat daripada yang didasarkan pada pengukuran tunggal saja. 

Berikut adalah contoh implementasi filter Kalman sederhana di Arduino:

// Declare variables for the sensor, the filter, and the state
float sensorValue;
float filteredValue;
float state;
float processNoise;
float measurementNoise;
float kalmanGain;

void setup() {
  // Initialize the serial communication
  Serial.begin(9600);
  // Initialize the state and filtered value
  state = 0;
  filteredValue = 0;
  // Set the process noise and measurement noise
  processNoise = 0.01;
  measurementNoise = 0.1;
}

void loop() {
  // Read the sensor value
  sensorValue = analogRead(A0);
  // Predict the next state
  state = state;
  // Calculate the Kalman gain
  kalmanGain = processNoise / (processNoise + measurementNoise);
  // Update the state
  state = state + kalmanGain * (sensorValue - state);
  // Update the filtered value
  filteredValue = state;
  // Print the filtered value to the serial monitor
  Serial.print("Filtered value: ");
  Serial.println(filteredValue);
  // Wait for a short period before taking the next reading
  delay(100);
}