---
# System prepended metadata

title: Auto Water Level Monitor

---

# **Auto Water Level Monitor**
## Nama Kelompok
* Mija Ulina Tanjung 		(1103220100)
* Muhammad Rafly Prasetiadi 	(1103213041) 
* Cholasih Ryan Maulana 	(1103213043)
* Zahrani Cahya Priesa 	(1103223074)
* Yaddast Nur Qomariyah	(1103223012)
* Graceshella Tri Anasya 	(1103223208)

## Daftar Isi
* Fleksibilitas pengisian air pada toren dengan sensor otomatis
    * Nama Kelompok
    * Daftar Isi
    * Pendahuluan
        * Tujuan
    * Rancangan Sistem Kendali Loop Tertutup PID
    * Mekanik Motor DC/Aktuator
    * Analisis Transient Respon
    * Analisis Mekanika
        * Pengukuran Mekanik Gear/Motor/Servo/Stepper
        * Analisis Kecepatan Motor terhadap Beban
    * Hasil dan Saran
    * PPT
    * Video dan Lampiran Kode
    * Referensi
    * Rubrik Penilaian
        * Kriteria Nilai

**[CLO 4]** Memiliki kemampuan untuk menganalisis sistem kendali loop tertutup pada kondisi transien dan steady state untuk melihat performansinya.
**[CLO 5]** Memiliki kemampuan merancang sistem kendali motor DC.


## Pendahuluan
Toren air merupakan tempat penampungan air yang banyak digunakan oleh masyarakat sebagai cadangan air bersih jika terjadi gangguan seperti pompa air mengalami kerusakan yang menyebabkan susahnya mendapatkan air bersih, mencegah pemborosan air, serta mengurangi kebutuhan untuk pemantauan serta pengisian ulang secara manual. Mayoritas toren air berada di atas rumah yang menyebabkan pemilik toren air tidak dapat selalu mengontrol atau memantau ketinggian air yang berada di dalam toren air tersebut. Metode teknik pengukuran ketinggian air bisa digunakan  untuk tangki penyimpanan air yang bisa dimonitoring volume dan level ketinggian permukaan airnya. Fungsi sensor sebagai alat  yang dapat mengubah suatu kejadian yang memiliki nilai kuantitas bersifat analog menjadi suatu nilai yang dapat diproses oleh komputer digital.

Dengan digunakannya sensor air otomatis pada toren dapat memberikan beberapa kemudahan yaitu pengguna tidak perlu lagi untuk melakukan pemeriksaan level ketinggian air secara manual ataupun berkala. Sensor akan otomatis mengirimkan informasi saat air mencapai batas level yang telah ditentukan sebelumnya. Sensor air mengoptimalkan penggunaan air dengan memastikan bahwa toren air diisi ketika air yang ada di dalam tower tidak mencapai batas yang telah ditetapkan sebelumnya.


## Tujuan
1. Otomatisasi Proses Pengisian dan Pengeluaran Air
Sensor air pada toren umumnya digunakan untuk memantau dan mengontrol level ketinggian air di dalam toren. Beberapa tujuan lainnya sebagai berikut:
Sensor air otomatis ini akan memastikan pengisian toren dilakukan secara otomatis ketika level air turun di bawah batas yang ditentukan dan menghentikan pengisian saat mencapai level ketinggian air yang diinginkan (set point). Hal ini mencegah meluapnya air dan memastikan ketersediaan air cukup.
2. Mengurangi Intervasi Manual
Dengan adanya sensor air otomatis, pengguna tidak perlu lagi memeriksa ketinggian air secara manual atau mengontrol pengisian air secara berkala. Sistem otomatis ini mengurangi kebutuhan akan intervensi manual sehingga menghemat waktu dan tenaga.
3. Mencegah Pemborosan Air
Sensor air otomatis ini membantu dalam mengelola penggunaan air dengan lebih efisien. Dengan mengatur pengisian air hanya saat diperlukan, sistem ini mencegah pemborosan air yang bisa terjadi akibat pengisian yang berlebihan atau kebocoran.
4. Memudahkan Pemantauan dan Pengelolaan
Dengan teknologi sensor yang memadai dengan sistem kontrol digital, pengguna dapat memantau dan mengelola level air dalam toren secara real-time melalui LCD, memberikan kontrol yang lebih baik dan respons yang cepat terhadap kondisi yang berubah.




## Rancangan Sistem Kendali Loop Tertutup PID

PID adalah singkatan dari Proporsional, Integral, dan Derivatif yang merupakan jenis kontrol umpan balik atau feedback yang banyak digunakan dalam otomatisasi dan sistem kontrol. PID digunakan untuk mengendalikan sistem dinamis dengan cara mengukur perbedaan antara nilai yang diinginkan dan nilai yang sebenarnya. 

Nilai P, I dan D memiliki pengaruh masing-masing pada sebuah respon sistem. Pada alat sensor air otomatis kami, PID dapat digunakan untuk mengendalikan ketinggian air dengan lebih presisi dibandingkan kontrol ON/OFF sederhana. Nilai P mengatur besarnya aksi kontrol berdasarkan selisih antara set point dan nilai aktual(error). Jika ketinggian air jauh di bawah set point, bagian P akan membuat pompa air bekerja dengan kecepatan maksimum untuk mengisi air dengan cepat. Jika ketinggian air mendekati set point, maka kecepatan pompa akan berkurang untuk menghindari pengisian berlebihan. 

Nilai I dalam PID mengakumulasi error dari waktu ke waktu dan menyesuaikan aksi kontrol untuk menghilangkan offset yang mungkin ada setelah aksi P. Jika air konsisten berada sedikit di bawah set point, maka komponen integral akan meningkatkan aksi kontrol secara bertahap untuk menghilangkan perbedaan ini, serta memastikan ketinggian air mencapai set point.  

Sedangkan, nilai D dalam PID bereaksi terhadap laju perubahan error. Hal ini dapat membantu dalam menstabilkan sistem dengan mengurangi overshoot dan osilasi. Jika ketinggian air naik terlalu cepat mendekati set point, komponen D akan mengurangi aksi kontrol untuk mencegah air meluap, memberikan waktu bagi sistem untuk menstabilkan ketinggian air. 

Proses kerja PID controller dengan sensor air otomatis dimulai dengan pengukuran oleh sensor yang akan mengirimkan data level air ke PID. PID kemudian menghitung error yaitu selisih antara set point dan level air yang terukur. Berdasarkan error ini, PID menggunakan algoritma untuk menghitung nilai koreksi yang merupakan kombinasi dari komponen PID. Output PID digunakan untuk mengendalikan aktuator seperti pompa air atau katup. Jika level air terlalu rendah, maka pompa diaktifkan untuk menambah air ke dalam toren. Jika level air sudah mencapai set point pompa akan secara otomatis mati atau katup dibuka untuk mengeluarkan air.


### Penjelasan Blok Diagram
![hehe (1)](https://hackmd.io/_uploads/SJnM-sqBC.jpg)


Dari gambar Diagram Closed Loop di atas, berikut penjelasan dari setiap bagian-bagiannya:
* Set Point : Tinggi air yang diinginkan  dalam toren. 
* Mikrokontroler: Arduino Uno R3 yang digunakan untuk membaca data dari sensor untuk memproses data dan mengontrol aktuator berdasarkan hasil pemrosesan.
* Aktuator: Motor l298 untuk mengaktifkan dan menonaktifkan pompa air. Waterpump/pompa air digunakan untuk memompa air ke dalam toren sesuai perintah mikrokontroler melalui motor l298. 
* Proses : Saat air di dalam toren turun dibawah set point, maka pompa air akan diaktifkan untuk mengisi toren hingga mencapai set point.
* Controlled Variable: Ketinggian air dalam toren. Sistem ini berusaha untuk menjaga ketinggian air sesuai dengan set point yang telah di tetapkan.
* Sensor: Sensor Ultrasonik HC-SR04 yang digunakan untuk mengukur ketinggian air dalam toren. Sensor ini mengukur jarak antar sensor dan permukaan air yang kemudian digunakan untuk menentukan level ketinggian air dalam toren. 
* Process Variable: Data ketinggian air yang diukur oleh sensor ultrasonik. Data tersebut akan digunakan untuk menentukan apakah waterpump perlu diaktifkan atau tidak untuk mencapai set point.
* Feedback: Informasi yang dikirimkan oleh sensor ultrasonik HC-SR04 ke mikrokontroler mengenai ketinggian air dalam toren.

## Deskripsi Hardware
![gambar](https://hackmd.io/_uploads/ByRtMn5BA.jpg)


Beberapa alat utama yang kami digunakan pada Proyek Sensor Air otomatis pada Toren, sebagai berikut:
1. Arduino UNO R3 
![arduino](https://hackmd.io/_uploads/BkX3yS5SC.png)

Arduino UNO R3 adalah papam mikrokontroler berbasis ATmega328P. Terdapat 14 pin input atau output digital 6 (di antaranya dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16MHz, koneksi USB, terminal listrik, header ICSP, dan tombol reset. Perangkat ini dilengkapi semua I/O yang diperlukan untuk mendukung mikrokontroler, cukup sambungkan ke komputer dengan kabel USB atau nyalakan dengan adaptor AC-DC atau baterai.

2. Sensor Ultrasonik HC-SR04
	![sensor ultrasonik](https://hackmd.io/_uploads/Hyga1H9SA.png)

Sensor Ultrasonik HC-SR04 merupakan sensor siap pakai yang berfungsi sebagai pengirim, penerima dan pengontrol gelombang ultrasonik. Sensor ini bisa digunakan untuk mengukur jarak benda dari 2 cm - 4 cm dengan akurasi 3 mm. Sensor Ultrasonik ini memiliki 4 pin (VCC, GND, Trigger, dan Echo). Pin VCC digunakan sebagai listrik positif dan GND sebagai ground. Pin Trigger digunakan untuk trigger keluarnya sinyal dari sensor dan pin Echo untuk menangkap sinyal pantul dari benda.

3. Water Pump / Pompa Air 12v
![pump](https://hackmd.io/_uploads/HkpZk6qBR.jpg)


Water Pump atau pompa air adalah alat yang digunakan untuk mengalirkan air dari satu tempat ke tempat lain. Prinsip kerja pompa yaitu dengan penekanan dan penghisapan fluida.




4. LCD I2C 16x2 5V
![LCD](https://hackmd.io/_uploads/rkYyeHcHC.png)

LCD atau Liquid Crystal Display adalah layar yang menggunakan susunan kristal cair dengan diterangi oleh lampu latar untuk menghasilkan gambar maupun tulisan. LCD merupakan terobosan baru di bidang teknologi. Sebab, keberadaan layar ini sudah menggeser penggunaan layar bertipe cathode ray tube (CRT), light-emitting diode (LED), dan gas-plasma displays.

5. Flow Sensor YF-S201
![flow sensor](https://hackmd.io/_uploads/S19xeHcHR.png)

Water Flow sensor YF-S201 merupakan alat deteksi yang digunakan untuk mendeteksi dan mengukur laju aliran suatu fluida yang bergerak mengalir pada saluran tertutup maupun saluran terbuka. Sensor flow water terdiri dari bagian katup, rotor air yang bekerja berdasarkan prinsip hall effect.


6. Motor Driver L298N
![motor driver](https://hackmd.io/_uploads/BJOWxrcHC.png)

Driver motor L298N merupakan module driver motor DC yang paling banyak digunakan atau dipakai di dunia elektronika yang difungsikan untuk mengontrol kecepatan serta arah perputaran motor DC. IC L298 merupakan sebuah IC tipe H-bridge yang mampu mengendalikan beban induktif seperti relay, solenoid, motor DC dan motor stepper.




## Mekanik Motor DC/Aktuator

Mekanik motor DC pada sistem sensor air otomatis pada toren merupakan bagian yang bertanggung jawab untuk menggerakkan pompa air sesuai perintah dari mikrokontroler yaitu Arduino UNO R3. Pompa air yang merupakan aktuator utama dalam sistem ini dihubungkan dengan motor driver l298 yang di kontrol oleh Arduino. Saat sensor Ultrasonic HC-SC04 mendeteksi bahwa ketinggian air dalam toren telah mencapai batas rendah atau di bawah set point yang telah ditentukan, sehingga Arduino akan mengirimkan sinyal ke motor l298 modul untuk mengaktifkan motor dc pompa air (water pump).

Motor driver L298N berperan sebagai pengendali motor dc dalam sistem ini. Alat ini berfungsi untuk mengatur arah dan kecepatan motor berdasarkan sinyal dari Arduino.Motor L298N memungkinkan kontrol yang lebih presisi terhadap motor DC. Ketika Arduino mengirimkan sinyal ke motor driver L298N, driver ini akan mengatur tegangan dan arus yang diterapkan ke motor DC pompa air, sehingga motor dapat beroperasi dengan kecepatan dan arah yang sesuai dengan kebutuhan sistem. Motor driver L298N juga memberikan perlindungan terhadap arus berlebih dan panas berlebih serta memastikan operasi yang aman dan efisien dari motor DC pompa air.




## Analisis Transient Respon
### Kodingan Arduino
```
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
#include <PID_v1.h>

#define TRIGGER_PIN 10
#define ECHO_PIN 11
#define MAX_DISTANCE 200

#define MOTOR_ENA_PIN 9  
#define MOTOR_IN1_PIN 8  
#define MOTOR_IN2_PIN 7  

#define FLOW_SENSOR_PIN 6

volatile int flow_frequency; 
unsigned int l_min;   

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

LiquidCrystal_I2C lcd(0x27, 16, 2);

bool motorOn = false;

float setPoint = 20.0;  

double Setpoint, Input, Output;
double Kp = 1, Ki = 2, Kd = 1; // Parameter PID (sesuaikan sesuai kebutuhan)

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup() {
  lcd.begin(16, 2);
  lcd.backlight(); // Menyalakan backlight
  lcd.setCursor(0, 0);
  lcd.print("Kapasitas: 100%");
  
  pinMode(MOTOR_ENA_PIN, OUTPUT);
  pinMode(MOTOR_IN1_PIN, OUTPUT);
  pinMode(MOTOR_IN2_PIN, OUTPUT);

  pinMode(FLOW_SENSOR_PIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN), pulseCounter, FALLING);

  digitalWrite(MOTOR_ENA_PIN, LOW);
  digitalWrite(MOTOR_IN1_PIN, LOW);
  digitalWrite(MOTOR_IN2_PIN, LOW);

  Setpoint = setPoint; 
  myPID.SetMode(AUTOMATIC);
  myPID.SetOutputLimits(0, 255); 

  Serial.begin(9600);
}

void loop() {
  unsigned int distance = sonar.ping_cm();

  static int capacity = 100; 
  if (distance > 0 && distance <= 20) {
    capacity = map(distance, 2, 20, 100, 0);
  }
  if (capacity > 100) capacity = 100;
  if (capacity < 0) capacity = 0;

  lcd.setCursor(0, 0);
  lcd.print("Kapasitas: ");
  lcd.print(capacity);
  lcd.print("%   "); 

  Serial.print("Capacity: ");
  Serial.print(capacity);
  Serial.println("%");

  Input = distance;

  myPID.Compute();

  if (capacity <= 20) {
    motorOn = true; 
  } else if (capacity >= 100) {
    motorOn = false;
  }

  if (motorOn) {
    digitalWrite(MOTOR_IN1_PIN, HIGH);
    digitalWrite(MOTOR_IN2_PIN, LOW);
    
    int motorSpeed = map((int)Output, 0, 255, 50, 255); 
    analogWrite(MOTOR_ENA_PIN, motorSpeed);
    lcd.setCursor(0, 1);
    lcd.print("Pompa Air: NYALA ");
  } else {
    digitalWrite(MOTOR_IN1_PIN, LOW);
    digitalWrite(MOTOR_IN2_PIN, LOW);
    analogWrite(MOTOR_ENA_PIN, 0); 
    lcd.setCursor(0, 1);
    lcd.print("Pompa Air: MATI ");
  }

  Serial.print("Flow Frequency: ");
  Serial.println(flow_frequency);

  float flowRate = calculateFlowRate();
  Serial.print("Flow Rate: ");
  Serial.print(flowRate);
  Serial.println(" L/min");

  Serial.print("Setpoint:");
  Serial.print(Setpoint);
  Serial.print(",Input:");
  Serial.print(Input);
  Serial.print(",Output:");
  Serial.print(Output);
  Serial.print(",Capacity:");
  Serial.print(capacity);
  Serial.print(",FlowRate:");
  Serial.println(flowRate);

  delay(500);
}


float calculateFlowRate() {
  detachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN)); 
  float flowRate = (flow_frequency / 7.5);  // Menghitung laju aliran dalam L/min
  flow_frequency = 0;  
  attachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN), pulseCounter, FALLING);  // Mengaktifkan kembali interrupt
  return flowRate;
}

void pulseCounter() {
  flow_frequency++;
}
```

### Percobaan Nilai PID
Serial Monitor 1
![serial monitornya](https://hackmd.io/_uploads/ryOPGvWIA.jpg)

kp=0.1 ki=1 kd=0.01
![kp=0.1 ki=1 kd=0.01](https://hackmd.io/_uploads/S16UMvZ8R.jpg)

Serial Monitor 2
![serial monitor 2](https://hackmd.io/_uploads/HJgqzD-LC.jpg)

kp=1 ki=2 kd=1
![kp=1 ki=2 kd=1](https://hackmd.io/_uploads/SyD5fvZIR.jpg)

Serial Monitor 3
![serial monitor 3](https://hackmd.io/_uploads/rJC9MwZIA.jpg)

## Analisis Mekanika
### Pengukuran Mekanik Gear/Motor/Servo

Dalam sistem sensor air otomatis pada toren ini, kami menggunakan pompa air/water pump 12V sebagai motor DC untuk melakukan percobaan ini. Penggunaan mekanik gear dapat meningkatkan efisiensi dan kontrol terhadap motor DC pompa air. Mekanik gear digunakan untuk menyesuaikan kecepatan dan torsi motor DC sesuai dengan kebutuhan sistem. Pada pompa air, gear dapat membantu meningkatkan torsi untuk menggerakkan pompa dengan lebih efisien, terutama saat mengatasi hambatan air atau ketika memompa air ke tempat yang lebih tinggi. Jenis gear yang digunakan pada water pump 12V yaitu spur gear, helical gear dan worm gear.


Jika gear motor memiliki 10 gigi dan gear pompa memiliki 30 gigi, maka gear ratio nya adalah 1:3. Ini berarti motor harus berputar 3 kali untuk setiap 1 putaran gear pompa yang menghasilkan peningkatan torsi tetapi akan mengurangi kecepatan. Gear dipasang pada poros motor DC dan pompa air untuk menyesuaikan operasi motor, sehingga memastikan pengisian air ke toren berlangsung optimal. Dengan begitu mekanik gear dan motor driver L298N dapat membantu meningkatkan torsi serta memastikan kontrol yang lebih baik terhadap operasi motor DC pompa air. 



## Analisis Kecepatan Motor terhadap Beban
Beban yang diterima pompa air meningkat seiring dengan peningkatan tekanan air yang harus dipompa. Semakin tinggi posisi toren atau semakin besar hambatan dalam pipa, semakin besar beban yang harus ditanggung oleh motor. Motor dengan kapasitas daya yang lebih tinggi juga dapat mengatasi beban yang lebih besar tanpa mengalami penurunan kecepatan yang signifikan.

## Hasil dan Saran
* Hasil
Auto Water Level Monitor Berbasis Sensor dirancang untuk memudahkan dalam mengisi toren air tanpa perlu membuka dan menutup kran secara manual. Selain itu, alat ini juga membantu mengatasi pemborosan air yang disebabkan oleh kelalaian pengguna dalam mematikan pompa air yang dapat mengakibatkan air meluap. Dengan alat ini, pengisian toren air menjadi lebih efisien dan praktis, serta mengurangi kemungkinan air terbuang sia-sia karena lupa mematikan pompa air. Pada alat ini dilengkapi dengan  auto level monitor, dimana pada LCD akan menampilkan kapasitas air dalam bentuk persentase secara otomatis.

* Saran
Saran dari pembuat alat untuk proyek berikutnya adalah untuk merapikan lagi komponen yang ada agar lebih rapi dan mudah diakses, serta meningkatkan akurasi sensor ultrasonik untuk mendapatkan hasil pengukuran yang lebih tepat dan konsisten. Selain itu, mempertimbangkan untuk menggunakan casing pelindung untuk melindungi komponen dari debu dan air akan sangat bermanfaat. Lalu juga bisa integrasi fitur tambahan seperti membuat aplikasi mobile dapat menjadi langkah selanjutnya untuk meningkatkan kenyamanan pengguna.
Saran dari pembuat laporan untuk proyek berikutnya adalah agar lebih banyak mencari referensi dari sumber-sumber yang kredibel dan terpercaya. Selain itu, hasil analisis sebaiknya dicantumkan secara detail dengan data yang sebenarnya dari hasil percobaan. 


## PPT
Berikut merupakan PPT laporan alat:
[PPT](https://www.canva.com/design/DAGIAx4Dgso/IKvT_MqY4HBHPZwvpbJHPQ/edit?utm_content=DAGIAx4Dgso&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton)

## Video 
Berikut merupakan video percobaan alat:
[Youtube](https://youtu.be/uSrz-aWa3U0?si=NB5up2t857EFfIyx)
 
## Referensi
Untuk referensi Buku & Jurnal dapat diakses pada link berikut:
[Github](https://github.com/Cholasih/SKM.git)

## Rubrik Penilaian


| Penilaian Indikator Ketercapaian CLO                                                                                  | Bobot |
| --------------------------------------------------------------------------------------------------------------------- | ----- |
| Mahasiswa mampu mengevaluasi dan optimasi sistem kendali PID (soal CLO 4).                                            | 50 %  |
| Mahasiswa mampu mendemonstrasikan sistem mekanisme transfer daya sederhana menggunakan gear dan motor DC (soal CLO 5) | 50 %  |


## Kriteria Nilai


| 4                                                                                                                                | 3                                                                                            | 2                                                                              | 1                                                                                                                           | 0                                                               |
| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| CLO 4                                                                                                                            |                                                                                              |                                                                                |                                                                                                                             |                                                                 |
| Mampu menjelaskan konsep kendali umpan balik, merancang sistem kendali PID, hingga mengevaluasi dan optimasi sistem kendali PID. | Mampu menjelaskan konsep kendali umpan balik, merancang, dan mengevaluasi sistem kendali PID | Mampu menjelaskan konsep kendali umpan balik dan merancang sistem kendali PID. | Mampu menjelaskan konsep kendali umpan balik dan PID, tetapi kesulitan dalam merancang dan mengevaluasi sistem kendali PID. | Kesulitan dalam menjelaskan konsep kendali umpan balik dan PID. |
|       CLO 5                                                                                                                           |                                                                                              |                                                                                |                                                                                                                             |                                                                 |
| Mampu mendapatkan fungsi transfer sistem dari mekanisme transfer daya, menganalisis hubungan antara torsi dan kecepatan motor, menjelaskan cara kerja dan karakteristik motor listrik, serta mendemonstrasikan sistem mekanisme transfer daya sederhana menggunakan gear dan motor DC.                                                                                                                             | Mampu mendapatkan fungsi transfer sistem dari mekanisme transfer daya, menganalisis hubungan antara torsi dan kecepatan motor, menjelaskan cara kerja dan karakteristik motor listrik, tetapi kesulitan dalam mendemonstrasikan sistem mekanisme transfer daya sederhana menggunakan gear dan motor DC.                                                                                         |               Mampu mendapatkan fungsi transfer sistem dari mekanisme transfer daya, menganalisis hubungan antara torsi dan kecepatan motor, tetapi kesulitan dalam menjelaskan cara kerja dan karakteristik motor listrik.                                                                 |                     Mampu mendapatkan fungsi transfer sistem dari mekanisme transfer daya dan menganalisis hubungan antara torsi dan kecepatan motor.                                                                                                        | Tidak dapat menentukan satu langkah pun untuk menjelaskan mengenai mekanisme transfer daya.                                                            |
