Isi kandungan:

Arduino Magnetometer: 5 Langkah (dengan Gambar)
Arduino Magnetometer: 5 Langkah (dengan Gambar)

Video: Arduino Magnetometer: 5 Langkah (dengan Gambar)

Video: Arduino Magnetometer: 5 Langkah (dengan Gambar)
Video: How to easily use HMC5883L Compass Sensor 2024, September
Anonim
Magnetometer Arduino
Magnetometer Arduino

Apa yang kita bina?

Manusia tidak dapat mengesan medan magnet, tetapi kita menggunakan peranti yang bergantung pada magnet sepanjang masa. Motor, kompas, sensor putaran, dan turbin angin, misalnya, semuanya memerlukan magnet untuk beroperasi. Tutorial ini menerangkan bagaimana membina magnetometer berasaskan Arduino yang mengesan medan magnet menggunakan tiga sensor kesan Hall. Vektor medan magnet di lokasi dipaparkan pada skrin kecil menggunakan unjuran isometrik.

Apa itu Arduino?

Arduino adalah mikrokontroler sumber terbuka kecil yang mesra pengguna. Ia mempunyai pin input dan output digital. Ia juga mempunyai pin input analog, yang berguna untuk membaca input dari sensor. Terdapat model Arduino yang berbeza. Tutorial ini menerangkan cara menggunakan Arduino Uno atau Arduino MKR1010. Bagaimanapun model lain juga boleh digunakan.

Sebelum anda memulakan tutorial ini, muat turun persekitaran pengembangan Arduino serta mana-mana perpustakaan yang diperlukan untuk model tertentu anda. Persekitaran pembangunan boleh didapati di https://www.arduino.cc/en/main/software, dan arahan pemasangan tersedia di

Apakah medan magnet?

Magnet kekal memberikan daya pada magnet kekal yang lain. Wayar semasa membawa daya pada wayar pembawa arus yang lain. Magnet kekal dan wayar pengangkut arus mengerahkan daya satu sama lain juga. Kekuatan per unit ujian arus ini adalah medan magnet.

Sekiranya kita mengukur isipadu objek, kita mendapat nombor skalar tunggal. Walau bagaimanapun, kemagnetan digambarkan oleh medan vektor, kuantiti yang lebih rumit. Pertama, ia berbeza dengan kedudukan di semua ruang. Sebagai contoh, medan magnet satu sentimeter dari magnet kekal kemungkinan besar lebih besar daripada medan magnet sejauh sepuluh sentimeter.

Seterusnya, medan magnet pada setiap titik di ruang diwakili oleh vektor. Besarnya vektor mewakili kekuatan medan magnet. Arahnya tegak lurus dengan kedua arah daya dan arah arus ujian.

Kita dapat menggambarkan medan magnet di satu lokasi sebagai anak panah. Kita dapat menggambarkan medan magnet di seluruh ruang dengan pelbagai anak panah di lokasi yang berlainan, mungkin dengan ukuran yang berbeza dan menunjuk ke arah yang berbeza. Visualisasi yang bagus boleh didapati di https://www.falstad.com/vector3dm/. Magnetometer yang kita bina memaparkan medan magnet di lokasi sensor sebagai anak panah pada paparan.

Apakah sensor kesan Hall, dan bagaimana ia berfungsi?

Sensor kesan Hall adalah peranti kecil dan murah yang mengukur kekuatan medan magnet sepanjang arah tertentu. Ia dibuat dari sepotong semikonduktor yang dilaburkan dengan caj berlebihan. Keluaran beberapa sensor kesan Hall adalah voltan analog. Sensor kesan Hall yang lain mempunyai pembanding bersepadu dan menghasilkan output digital. Sensor kesan Hall yang lain disatukan ke dalam instrumen yang lebih besar yang mengukur kadar aliran, kelajuan putaran, atau jumlah lain.

Fizik di sebalik kesan Hall diringkaskan oleh persamaan daya Lorentz. Persamaan ini menerangkan daya pada cas bergerak kerana medan elektrik dan magnet luaran.

Imej
Imej

Gambar di bawah menggambarkan kesan Hall. Andaikan kita mahu mengukur kekuatan medan magnet ke arah anak panah biru. Seperti yang ditunjukkan di bahagian kiri gambar, kita menerapkan arus melalui sepotong semikonduktor tegak lurus dengan arah medan yang akan diukur. Arus adalah aliran cas, jadi cas dalam semikonduktor bergerak dengan beberapa halaju. Cas ini akan merasakan daya kerana medan luaran, seperti yang ditunjukkan di bahagian tengah gambar. Cas akan bergerak kerana daya dan terkumpul di pinggir semikonduktor. Caj bertambah sehingga daya akibat caj terkumpul mengimbangi daya kerana medan magnet luaran. Kita dapat mengukur voltan merentasi semikonduktor, seperti yang ditunjukkan di bahagian kanan rajah. Voltan yang diukur berkadar dengan kekuatan medan magnet, dan ia berada dalam arah tegak lurus dengan arus dan arah medan magnet.

Imej
Imej

Apakah unjuran isometrik?

Pada setiap titik ruang, medan magnet digambarkan oleh vektor tiga dimensi. Walau bagaimanapun, skrin paparan kami adalah dua dimensi. Kita boleh memproyeksikan vektor tiga dimensi menjadi satah dua dimensi sehingga kita dapat melukisnya di skrin. Terdapat pelbagai cara untuk mencapai ini seperti unjuran isometrik, unjuran ortografik, atau unjuran serong.

Dalam unjuran isometrik, paksi x, y, dan z berjauhan 120 darjah, dan keduanya kelihatan sama pendek. Maklumat tambahan mengenai unjuran isometrik, serta formula yang diperlukan, boleh didapati di halaman Wikipedia mengenai topik tersebut.

Langkah 1: Kumpulkan Bekalan

Arduino dan Kabel

Arduino adalah otak magnetometer. Arahan ini menerangkan cara menggunakan Arduino Uno atau Arduino MKR1010. Dalam kedua-dua kes, kabel diperlukan untuk menyambungkannya ke komputer.

Pilihan 1: Arduino Uno dan USB AB Cable

www.digikey.com/product-detail/en/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/en/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Pilihan 2: Arduino MKR1010 dan kabel microUSB

www.digikey.com/product-detail/en/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/en/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

Paparan TFT

TFT bermaksud Thin Film Transistor. Paparan 1.44 ini berukuran 128 x 128 piksel. Ini kecil, terang, dan berwarna-warni. Dilampirkan pada papan pelindung. Walau bagaimanapun, pin header terpisah, jadi anda harus menyoldernya. (Solder dan besi solder diperlukan.)

www.digikey.com/product-detail/en/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Imej
    Imej
  • Sensor Kesan Dewan Analog

Tiga sensor kesan Hall diperlukan. Pautan di bawah adalah untuk nombor bahagian Allegro A1324LUA-T. Untuk sensor ini, pin 1 adalah voltan bekalan, pin 2 adalah ground, dan pin 3 adalah output. Sensor Hall yang lain harus berfungsi juga, tetapi pastikan ia analog, bukan digital. Sekiranya anda menggunakan sensor yang berbeza, periksa pinout dan sesuaikan pendawaian jika diperlukan. (Saya sebenarnya menggunakan sensor yang berbeza dari syarikat yang sama untuk tujuan pengujian. Namun, sensor yang saya gunakan adalah usang, dan sensor ini adalah penggantinya.)

www.digikey.com/product-detail/en/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Papan Roti dan Kawat Kecil

www.digikey.com/product-detail/en/adafruit-industries-llc/239/1528-2143-ND/7244929

Magnet Kekal untuk Ujian

Magnet peti sejuk akan berfungsi dengan baik.

Langkah 2: Pendawaian

Pendawaian
Pendawaian

Selesaikan tajuk pada paparan.

Imej
Imej

Letakkan sensor di satu hujung papan roti, dan letakkan paparan dan Arduino di hujung yang bertentangan. Arusino pada arus di Arduino dan paparan menghasilkan medan magnet, yang mana kita tidak mahu sensor membaca. Selain itu, kami mungkin mahu meletakkan sensor di dekat magnet kekal, yang boleh memberi kesan buruk pada arus pada wayar paparan dan sensor. Atas sebab-sebab ini, kami mahukan sensor jauh dari paparan dan Arduino. Atas sebab-sebab ini, magnetometer ini harus dijauhkan dari medan magnet yang sangat kuat.

Letakkan sensor tegak lurus antara satu sama lain tetapi sedekat mungkin antara satu sama lain. Bengkokkan sensor dengan perlahan agar tegak lurus. Setiap pin setiap sensor mesti berada dalam barisan papan roti yang terpisah sehingga dapat disambungkan secara berasingan.

Imej
Imej

Pendawaian sedikit berbeza antara MKR1010 dan Uno kerana dua sebab. Pertama, Arduino dan paparan berkomunikasi oleh SPI. Model Arduino yang berbeza mempunyai pin khusus yang berbeza untuk garis SPI tertentu. Kedua, input analog Uno dapat menerima hingga 5 V sementara input analog MKR1010 hanya dapat menerima hingga 3.3 V. Voltan bekalan yang disyorkan untuk sensor kesan Hall adalah 5 V. Output sensor disambungkan ke input analog Arduino, dan ini boleh sebesar voltan bekalan. Untuk Uno, gunakan bekalan 5 V yang disyorkan untuk sensor. Untuk MKR1010, gunakan 3.3 V supaya input analog Arduino tidak pernah melihat voltan lebih besar daripada yang dapat dikendalikannya.

Ikuti rajah dan arahan di bawah untuk Arduino yang anda gunakan.

Pendawaian dengan Arduino Uno

Imej
Imej

Paparan mempunyai 11 pin. Sambungkannya ke Arduino Uno seperti berikut. (NC bermaksud tidak bersambung.)

  • Vin → 5V
  • 3.3 → NC
  • Gnd → GND
  • SCK → 13
  • JADI → NC
  • SI → 11
  • TCS → 10
  • RST → 9
  • D / C → 8
  • CCS → NC
  • Lite → NC

Sambungkan Vin sensor ke 5V Arduino. Sambungkan ground sensor ke ground Arduino. Sambungkan output sensor ke input analog A1, A2, dan A3 dari Arduino.

Imej
Imej

Pendawaian dengan Arduino MKR1010

Imej
Imej

Paparan mempunyai 11 pin. Sambungkannya ke Arduino seperti berikut. (NC bermaksud tidak bersambung.)

  • Vin → 5V
  • 3.3 → NC
  • Gnd → GND
  • SCK → SCK 9
  • JADI → NC
  • SI → MOSI 8
  • TCS → 5
  • RST → 4
  • D / C → 3
  • CCS → NC
  • Lite → NC

Sambungkan Vin sensor ke Vcc of the Arduino. Pin ini berada pada 3.3V, bukan 5V. Sambungkan tanah sensor ke arduino. Sambungkan output sensor ke input analog A1, A2, dan A3 dari Arduino.

Imej
Imej

Langkah 3: Uji Paparan

Mari paparkan TFT berfungsi. Nasib baik, Adafruit mempunyai beberapa perpustakaan yang mesra pengguna dan tutorial yang sangat baik untuk menggunakannya. Arahan ini mengikuti tutorial dengan teliti, Buka persekitaran pembangunan Arduino. Pergi ke Alat → Urus Perpustakaan. Pasang perpustakaan Adafruit_GFX, Adafruit_ZeroDMA, dan Adafruit_ST7735. Mulakan semula persekitaran pembangunan Android.

Contoh ujian grafik disertakan dengan perpustakaan. Membukanya. Fail → Contoh → Perpustakaan Adafruit ST7735 dan ST7789 → graphicstest. Untuk memilih paparan komen 1.44 keluar baris 95 dan garis komplemen 98.

Versi asal:

94 // Gunakan inisialisasi ini jika menggunakan layar TFT 1,8 :

95 tft.initR (INITR_BLACKTAB); // Cip Init ST7735S, tab hitam 96 97 // ATAU gunakan inisialisasi ini (unmentment) jika menggunakan TFT 1.44 : 98 //tft.initR(INITR_144GREENTAB); // Cip Init ST7735R, tab hijau

Versi yang betul untuk paparan 1.44 :

94 // Gunakan inisialisasi ini jika menggunakan layar TFT 1,8 :

95 //tft.initR(INIT_BLACKTAB); // Cip Init ST7735S, tab hitam 96 97 // ATAU gunakan inisialisasi ini (unmentment) jika menggunakan TFT 1.44 : 98 tft.initR (INITR_144GREENTAB); // Cip Init SST35R, tab hijau

Paparan berkomunikasi menggunakan SPI, dan model Arduino yang berbeza menggunakan pin khusus yang berbeza untuk beberapa saluran komunikasi. Contoh ujian grafik disediakan untuk berfungsi dengan pin Uno. Sekiranya anda menggunakan MKR1010, tambahkan baris berikut antara baris 80 dan 81.

Pembetulan untuk MKR1010:

80

#tentukan TFT_CS 5 #tentukan TFT_RST 4 #tentukan TFT_DC 3 #tentukan TFT_MOSI 8 #tentukan TFT_SCLK 9 Adafruit_ST7735 tft = Adafruit_ST7735 (TFT_CS, TFT_DC, TFT_MOSI, TFT_SSTK, TFT_SCLK, TFT_SCLK, TFT_SCLK; 81 apungan p = 3.1415926;

Simpan contoh grafik yang diubah suai. Pasang Arduino ke komputer jika anda belum melakukannya. Pergi ke Tools → Board and Tools → Port untuk mengesahkan bahawa komputer dapat menemui Arduino. Pergi ke Sketsa → Muat naik. Sekiranya contoh berfungsi, paparan akan menunjukkan garis, segi empat tepat, teks, dan demo lengkap. Tutorial Adafruit memberikan lebih terperinci jika penyelesaian masalah diperlukan.

Langkah 4: Kod Magnetometer

Muat turun kod yang dilampirkan, dan buka di persekitaran pembangunan Arduino.

Program ini menggunakan enam fungsi:

Persediaan () memulakan paparan

Loop () mengandungi gelung utama program. Ia menghitamkan skrin, menarik sumbu, membaca input, dan menarik anak panah yang mewakili vektor medan magnet. Ini mempunyai kadar penyegaran satu saat yang dapat diubah dengan mengubah garis 127

DrawAxes3d () melukis dan melabel paksi x, y, dan z

DrawArrow3d () mengambil input x, y, dan z antara 0 hingga 1023. Dari nilai-nilai ini, ia mengira titik akhir anak panah di ruang. Seterusnya, ia menggunakan fungsi isometricxx () dan isometricyy () untuk mengira titik akhir di skrin. Akhirnya, ia menarik anak panah dan mencetak voltan di bahagian bawah skrin

Isometricxx () mencari koordinat x unjuran isometrik. Ia memerlukan koordinat x, y, dan z titik dan mengembalikan lokasi x piksel yang sesuai di skrin

Isometricyy () mencari koordinat y unjuran isometrik. Ia memerlukan koordinat x, y, dan z titik dan mengembalikan lokasi piksel y yang sesuai di skrin

Sebelum menjalankan kod, kita perlu menentukan pin mana yang akan digunakan untuk komunikasi SPI dengan paparan, dan kita perlu menentukan voltan sumber untuk sensor. Sekiranya anda menggunakan MKR1010, komen baris 92-96 dan juga baris 110. Kemudian, gariskan petikan 85-89 dan juga baris 108. Sekiranya anda menggunakan Uno, komen baris 85-89 dan juga baris 108 Kemudian, garis komplemen 92-96 dan juga garis 110.

Muat naik kod, Sketsa → Muat naik.

Anda mesti melihat paksi x, y, dan z berwarna merah. Anak panah hijau dengan bulatan biru untuk hujungnya mewakili vektor medan magnet pada sensor. Bacaan voltan dipaparkan di kiri bawah. Semasa anda mendekatkan magnet ke sensor, bacaan voltan akan berubah, dan ukuran anak panah akan bertambah.

Imej
Imej

Langkah 5: Kerja Masa Depan

Kerja Masa Depan
Kerja Masa Depan

Langkah seterusnya adalah mengkalibrasi peranti. Lembaran data sensor memberikan maklumat mengenai cara menukar nilai voltan sensor mentah menjadi kekuatan medan magnet. Kalibrasi dapat disahkan dengan membandingkan dengan magnetometer yang lebih tepat.

Magnet kekal berinteraksi dengan wayar semasa. Kabel berhampiran paparan dan di Arduino menghasilkan medan magnet yang boleh mempengaruhi bacaan sensor. Selain itu, jika peranti ini digunakan untuk mengukur dekat magnet kekal yang kuat, medan magnet dari peranti yang sedang diuji akan berinteraksi, memasukkan bunyi ke dalam, dan mungkin merosakkan Arduino dan paparan. Perisai dapat menjadikan magnetometer ini lebih kuat. Arduino dapat menahan medan magnet yang lebih besar jika terlindung di dalam kotak logam, dan bunyi yang lebih sedikit akan diperkenalkan jika kabel terlindung menghubungkan sensor dan bukannya wayar kosong.

Medan magnet adalah fungsi kedudukan, jadi berbeza pada setiap titik di ruang. Peranti ini menggunakan tiga sensor, satu untuk mengukur komponen x, y, dan z dari medan magnet pada satu titik. Sensor berdekatan satu sama lain tetapi tidak pada satu titik, dan ini membatasi resolusi magnetometer. Akan lebih baik untuk menyimpan bacaan medan magnet pada titik yang berlainan dan kemudian memaparkannya sebagai pelbagai anak panah di lokasi yang sesuai. Namun, itu adalah projek untuk hari yang lain.

Rujukan

Maklumat mengenai perpustakaan Adafruit Arduino Graphics

https://learn.adafruit.com/adafruit-1-44-warna-tft-dengan-micro-sd-socket/overview

Visualisasi medan magnet

https://www.falstad.com/vector3dm/

Maklumat mengenai kesan Hall dan sensor kesan Hall

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Maklumat mengenai unjuran isometrik

  • https://en.wikipedia.org/wiki/3D_projeksi
  • https://en.wikipedia.org/wiki/Isometric_projeksi

Disyorkan: