Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pengurutan Resistor Efisien untuk Proyek Arduino Nano: Metode Sederhana Hemat Waktu

Tentang Proyek Ini

Apakah Anda kelelahan setelah menyelesaikan setiap proyek elektronik dan harus menghadapi tumpukan resistor yang tidak terurut? Jika Anda terlalu malas untuk memeriksa kode warna setiap resistor atau bahkan menggunakan multimeter terlalu merepotkan, maka solusi terbaik untuk Anda adalah ohmmeter "pemalas" yang canggih ini.

Ohmmeter sederhana ini akan memeriksa nilai resistor yang belum diurutkan. Untuk membangunnya, Anda hanya perlu beberapa resistor (dengan nilai yang diketahui kali ini), sebuah Arduino, dan layar display (penulis menggunakan display OLED I2C untuk proyek ini).

Cara Kerja Ohmmeter

Kami mengandalkan persamaan pembagi tegangan (voltage divider) untuk mendapatkan nilai resistor yang tidak diketahui yang beruntun dengan resistor yang nilainya diketahui. Teknik sederhana ini memiliki satu kekurangan: semakin berbeda nilai kedua resistor, semakin kurang akurat pengukurannya. Untuk mengatasi fenomena ini, kita perlu menggunakan beberapa resistor dan menulis kode yang memungkinkan Arduino memilih resistor yang paling sesuai untuk perhitungan nilai yang tidak diketahui.

Berikutnya, kita dapat membangun Ohmmeter sesuai skematik di gambar berikut. Jika Anda menggunakan display I2C, Anda juga dapat mengikuti skematik untuk itu. Arduino Nano menggunakan pin A4 untuk SDA dan A5 untuk SCL.

Bagian Kode

Kode yang digunakan dapat dilihat di bagian bawah artikel. Untuk layar OLED, penulis hanya menggunakan perpustakaan Adafruit. Anda cukup mengunduhnya melalui Library Manager di Arduino IDE dan menyalin kode yang dibutuhkan. Penulis menggunakan dua bitmap untuk membuat pembacaan lebih menarik, Anda dapat dengan mudah menambahkan bitmap Anda sendiri atau mengganti yang telah ditambahkan.

Untuk bagian ohmmeter, Anda perlu memahami cara kerja karena Anda dapat mengubahnya tergantung pada berapa banyak resistor yang Anda gunakan sebagai nilai referensi.

Saat kode memasuki void loop, Arduino akan memeriksa tegangan pada pin A0. Karena dari persamaan pembagi tegangan:

V0 = Vi × R2 / (R1 + R2)

Jika R1 dan R2 sama, kita seharusnya memiliki V0 mendekati 2,5V (jadi 512 pada pembacaan 10 bit kita). Jika nilai jauh dari hasil ini, maka kode akan pindah ke nilai berikutnya dan seterusnya sampai kita mendapatkan resistor yang paling dekat. Ketika kondisi "resistansi dekat" terpenuhi, nilai akan dicetak pada layar.

CATATAN #1: Pada setiap pernyataan IF, kita perlu menentukan ulang pinMode setiap pin digital, karena jika Anda tetap mengaturinya sebagai output, itu akan berperilaku sebagai pin impedansi rendah dan mengacaukan pengukuran pada pin A0.

Setelah resistor yang tepat dipilih, nilai resistor yang tidak diketahui (variabel Ru dalam kode) dihitung menggunakan persamaan pembagi tegangan.

CATATAN #2: Untuk perangkat ini, penulis hanya menggunakan 5 resistor, tetapi jika Anda suka, Anda dapat memiliki banyak nilai lebih untuk setiap pin papan.

Rangkaian dan Kotak 3D

Foto di bawah ini menunjukkan sistem yang dibangun pada papan roti (breadboard). Untuk aplikasi nyata, kita perlu membuat kotak tempat kita dapat memasukkan resistor yang tidak diketahui dan hasilnya akan ditampilkan pada layar. Kotak yang dibuat penulis dapat dengan mudah dicetak dengan printer 3D dan semua bagian dapat diperekat bersama dengan pistol lem. Beberapa pengelasan resistor yang diketahui diperlukan agar semuanya muat dalam volume kecil.

Hanya satu hal yang tersisa: colokkan resistor yang belum diurutkan ke dalam lubang-lubang kecil tersebut dan bersihkan meja kerja Anda!

UPDATE: Penulis telah memodifikasi bagian pembulatan kode karena sebelumnya dapat menyebabkan kesalahan saat pembulatan sekitar resistor 5k. Dengan perubahan ini, masalah seharusnya teratasi. Namun, menambahkan resistor 5k di antara referensi seharusnya mencegah masalah sepenuhnya.

Kode Arduino

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int R1 = 100;
int R2 = 1000;
int R3 = 10000;
long R4 = 100000;
long R5 = 1000000;
long Rn;
int D2 = 2;
int D3 = 3;
int D4 = 4;
int D5 = 5;
int D6 = 6;
float raw = 0;
float Vout = 0;
float Ru = 0;
int Analogohm = A0;

void setup() {
  Serial.begin(9600);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  display.clearDisplay();
  display.display();
  delay(2000);
}

void loop() {
  pinMode(D2, OUTPUT);
  pinMode(D3, INPUT);
  pinMode(D4, INPUT);
  pinMode(D5, INPUT);
  pinMode(D6, INPUT);
  digitalWrite(D2, HIGH);
  raw = analogRead(Analogohm);
  Rn = R5;

  if (raw < 350 || raw > 800) {
    digitalWrite(D2, LOW);
    pinMode(D2, INPUT);
    pinMode(D3, OUTPUT);
    digitalWrite(D3, HIGH);
    raw = analogRead(Analogohm);
    Rn = R4;
    if (raw < 350 || raw > 800) {
      digitalWrite(D3, LOW);
      pinMode(D3, INPUT);
      pinMode(D4, OUTPUT);
      digitalWrite(D4, HIGH);
      raw = analogRead(Analogohm);
      Rn = R3;
      if (raw < 350 || raw > 800) {
        digitalWrite(D4, LOW);
        pinMode(D4, INPUT);
        pinMode(D5, OUTPUT);
        digitalWrite(D5, HIGH);
        raw = analogRead(Analogohm);
        Rn = R2;
        if (raw < 350 || raw > 800) {
          digitalWrite(D5, LOW);
          pinMode(D5, INPUT);
          pinMode(D6, OUTPUT);
          digitalWrite(D6, HIGH);
          raw = analogRead(Analogohm);
          Rn = R1;
        }
      }
    }
  }

  Vout = 5 * (raw / 1024);
  Ru = (Rn * Vout) / (5 - Vout);

  if (Ru < 10 || Ru < 70) {
    Ru = 10 * round(Ru / 10);
  } else if (Ru < 100 || Ru < 700) {
    Ru = 100 * round(Ru / 100);
  } else if (Ru < 1000 || Ru < 7000) {
    Ru = 1000 * round(Ru / 1000);
  } else if (Ru < 10000 || Ru < 70000) {
    Ru = 10000 * round(Ru / 10000);
  } else if (Ru < 100000 || Ru < 700000) {
    Ru = 100000 * round(Ru / 100000);
  } else if (Ru < 1000000 || Ru < 7000000) {
    Ru = 1000000 * round(Ru / 1000000);
  }

  Resistance(Ru);
  delay(1000);
}

void Resistance(long Ru) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println(F("Hey there, "));
  display.println(F("the Resistor value is"));
  display.setCursor(20, 25);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.print(Ru);
  display.print(F(" Ohm"));
  display.display();
  delay(2000);
}

Proses manufaktur

  1. Alarm Tanaman Cerdas Thirst Alert – Sensor DIY untuk Hidrasi Tanaman Optimal
  2. Bangun Jam Kata Italia dengan Arduino Nano, NeoPixel, LCD, dan RTC
  3. Membuat Meter kWh Sigfox Terpercaya dengan Arduino MKR Fox 1200
  4. Pemantau Suhu dengan Bluetooth menggunakan Arduino Nano
  5. Kunci Gestur Sentuh Bebas: Akses Aman dengan APDS-9960 dan Arduino
  6. Kit Pendamping Arduino Nano – Komponen & Alat Esensial untuk Elektronika DIY
  7. Kit Adapter USB MIDI untuk Arduino Micro / Leonardo – Daftar Lengkap Komponen
  8. Bangun Rangkaian Input Analog Terisolasi untuk Arduino
  9. Tes Waktu Reaksi Presisi Menggunakan Arduino UNO
  10. Resistor Nol-Ohm: Keuntungan Utama dan Penggunaan dalam Dunia Nyata