Daftar Isi:

Perangkat Budak/Klien Generik Arduino 1-kawat (Sensor): 4 Langkah
Perangkat Budak/Klien Generik Arduino 1-kawat (Sensor): 4 Langkah

Video: Perangkat Budak/Klien Generik Arduino 1-kawat (Sensor): 4 Langkah

Video: Perangkat Budak/Klien Generik Arduino 1-kawat (Sensor): 4 Langkah
Video: Как настроить сервер Modbus OPC DA | Акромаг 2024, November
Anonim
Perangkat Budak/Klien Generik 1-kawat Arduino (Sensor)
Perangkat Budak/Klien Generik 1-kawat Arduino (Sensor)

Silakan baca Pendahuluan dan Langkah 2 dari instruksi saya tentang cara membangun Tampilan 1-kawat Arduino (144 Karakter) untuk mendapatkan informasi lebih lanjut tentang situasi dan perpustakaan yang tersedia. Seperti yang dijelaskan di sana kita akan menggunakan perpustakaan OneWire-Hub (Emulator perangkat budak OneWire) oleh orgua (perhatikan ada garpu lain di sekitar) untuk membangun perangkat 1-kawat generik (misalnya sensor) menggunakan Arduino.

Langkah 1: Perangkat Lunak

Yang paling penting adalah membuat perangkat yang pada dasarnya dapat mengembalikan segala jenis nilai dengan cara yang sederhana. Artinya perangkat lunak standar dapat digunakan untuk membaca semua nilai secara langsung (tidak diperlukan percakapan atau manipulasi biner). Untuk itu kita membutuhkan perangkat 1-kawat default yang sangat sederhana yang dapat mengembalikan float dan didukung secara luas. Satu-satunya pilihan yang saya tahu adalah Termometer DS18B20 (Monitor Baterai DS2438 juga menarik dan berguna tetapi cukup rumit dan dengan demikian lambat di antara kekurangan lainnya). Pustaka OneWire-Hub berisi contoh yang disebut DS18B20_asInterface yang melakukan persis seperti yang kita butuhkan. Ini menciptakan sekelompok DS18B20 yang masing-masing mewakili satu nilai float yang ingin kita kembalikan dari sensor kita. Pembatasan di sini adalah resolusi dan nilainya harus dalam kisaran -55, 0 … 125, 0. Itu dapat dengan mudah dicapai - dalam kasus terburuk adalah penskalaan ulang - dan sebenarnya lebih baik daripada nilai yang dapat diwakili oleh mis. nilai DS2438 (1,5 hingga 10V). Atau rentang nilai yang lebih besar dapat diatur dengan menggunakan:

setTemperatureRaw(static_cast(nilai * 16.0f));

tetapi membaca dan memproses nilai-nilai ini mungkin tidak didukung oleh semua perangkat lunak karena di luar spesifikasi.

Yang harus Anda perhatikan adalah bahwa awalnya jumlah maksimum budak dibatasi hingga 8 tetapi dapat diubah di "OneWireHub_config.h" dengan meningkatkan HUB_SLAVE_LIMIT hingga 32. Anda juga harus memastikan untuk mengadopsi ONEWIRE_TIME_MSG_HIGH_TIMEOUT jika diperlukan oleh Anda Jaringan 1-kawat (misalnya x10), seperti yang dijelaskan pada Langkah 2 Tampilan 1-kawat Arduino (144 Karakter). Dan untuk menggunakan Versi IDE >= 1.8.3 untuk mengkompilasi dan mengunggah kode ke Arduino Anda.

Berikut sebagai contoh kode perangkat yang saya buat baru-baru ini. Karena saya berasumsi Anda tidak menggunakan kombinasi sensor yang sama seperti yang saya lakukan, saya tidak akan membahas lebih jauh di sini, periksa kode dan ajukan pertanyaan jika Anda memerlukan bantuan.

Langkah 2: Perangkat Keras

Perangkat keras
Perangkat keras

Pada dasarnya apa pun yang dapat Anda sambungkan ke Arduino dapat digunakan sebagai sensor pilihan Anda. Satu-satunya batasan adalah bahwa membaca sensor harus secepat mungkin agar memiliki banyak waktu tersisa untuk komunikasi 1-kawat berlangsung (berikan Langkah 2 dari instruksi saya tentang Tampilan 1-kawat Arduino (144 Karakter) secara berurutan untuk mendapatkan contoh).

Contoh perangkat keras yang mungkin dapat berupa stasiun cuaca seperti misalnya:

https://shop.boxtec.ch/wetter-messer-p-41289.html

Sebagai tambahan atau alih-alih Anda mungkin ingin menggunakan Arduino itu sendiri sebagai sensor Anda. Anda dapat membaca lebih lanjut tentang itu di instruksi saya tentang Fitur Arduino yang Kurang Diketahui - nilai yang mungkin adalah tegangan sumber dan suhu internal.

Berikut sebagai contoh gambar perangkat yang saya buat baru-baru ini. Karena saya berasumsi Anda tidak menggunakan kombinasi sensor yang sama seperti yang saya lakukan, saya tidak akan membahas lebih jauh di sini, periksa kode dan ajukan pertanyaan jika Anda memerlukan bantuan.

Langkah 3: Uji Perangkat

Hubungkan ke jaringan Anda dan periksa perangkat lunak Anda untuk semua ID ROM yang ada dan nilai yang dikembalikan sebagai suhu.

Langkah 4: Lampiran: ATtiny85

Lampiran: ATtiny85
Lampiran: ATtiny85

Perangkat tunggal (pembatasan memori) juga dapat dilakukan pada ATtiny85. Ini memerlukan beberapa langkah karena kami memprogram ATtiny85 menggunakan Arduino Uno sebagai ISP dengan bantuan Arduino IDE:

  • Tautan

    • https://playground.boxtec.ch/doku.php/arduino/att…
    • https://sebastian.expert/could-not-find-usbtiny-d…
    • https://learn.sparkfun.com/tutorials/tiny-avr-pro…
    • https://forum.arduino.cc/index.php?topic=425532.0
    • https://forum.arduino.cc/index.php?topic=128963.0
  1. gunakan Arduino IDE >=1.8.3
  2. instal opsi ATtiny ke IDE

    1. File > Preferensi > URL Manajer Papan Tambahan:
    2. Alat > Papan: ??? > Pengurus Dewan…
    3. cari: "kecil" dan instal
  3. unggah sketsa ISP ke Uno

    File > Contoh > ArduinoISP > ArduinoISP

  4. masukkan ATtiny85 ke soket pemrograman (zero-force) dan sambungkan:

    1. Arduino Pin MOSI D11 ke ATtiny Pin 5
    2. Arduino Pin MISO D12 ke ATtiny Pin 6
    3. Pin Arduino SCK D13 ke Pin ATtiny 7
    4. Arduino Pin Reset D10 ke ATtiny Pin 1
    5. Arduino Pin GND ke ATtiny Pin 4
    6. Arduino Pin VCC ke ATtiny Pin 8
    7. (>=10uF cap pada pin RESET Arduino Uno mungkin diperlukan)
  5. pilih ATtiny85 (lihat gambar):

    • Papan: "ATtiny25/45/85"
    • Timer 1 Jam: "CPU"
    • B. O. D.: "B. O. D. Dinonaktifkan"
    • LTO (1.6.11 + saja): "Dinonaktifkan"
    • Chip: "ATtiny85"
    • Jam: "8 MHz (internal)" (kompatibel dengan ATtiny85 dan ATtiny84)
    • Jam: "16 MHz (PLL)" (pengaturan alternatif hanya untuk ATtiny85)
    • Pelabuhan: ???
  6. pilih Pemrogram:

    Alat > Programmer: "Arduino sebagai ISP" (BUKAN "ArduinoISP"!)

  7. mengatur pengaturan sekering (jam, dll.):

    Alat > Bakar Bootloader

  8. unggah kode ini (LED kesalahan programmer harus dimatikan, jika tidak, atur ulang)
  9. Tata Letak Pin ATtinyX5 (ATtiny85):

    1. Pin 1: PB5 (RST)
    2. Pin 2: PB3 (A3) - terhubung secara opsional melalui 220ohm ke 1<-TX
    3. Pin 3: PB4 (A2) - terhubung ke DATA 1-kawat
    4. Pin 4: GND - terhubung ke GND
    5. Pin 5: PB0 (PWM) - terhubung ke sensor I2C SDA
    6. Pin 6: PB1 (PWM) - terhubung ke LED dengan 4.7k ke GND
    7. Pin 7: PB2 (A1) - terhubung ke sensor I2C SCL
    8. Pin 8: VCC - terhubung ke 5V

Bekerja dengan ATTiny85 membutuhkan sedikit lebih banyak pekerjaan karena Anda perlu mendapatkan pustaka tambahan untuk komunikasi I2C (adafruit/TinyWireM) dan keluaran serial (TinyDebugSerial). Selain itu karena memorinya sangat terbatas, Anda mungkin ingin banyak bekerja dengan #define mis. untuk menghapus debug serial. Dalam contoh Anda dapat melihat semua ini disatukan.

Untuk pengujian langkah pertama adalah memeriksa apakah LED berkedip dengan frekuensi yang benar, 0,5Hz. Kemudian hubungkan ke bus 1wire dan periksa perangkat baru.

Direkomendasikan: