Vibration Motor vs Sensor Getaran Arduino: Mana Satu?

Cartoon of two vibration modules on white - a square black board carrying a round black coin motor with orange waves radiating from it, beside an elongated blue board with a black cylindrical spring-switch tube, a blue trimmer and a small chip, struck by an orange impact mark - with the corner of a blue Arduino Uno cropped at the lower left

Dua bahagian yang jauh berbeza berkongsi satu perkataan yang sama: getaran. Vibration motor ialah output β€” sebuah coin motor yang membuatkan projek anda bergegar. Vibration sensor pula input β€” sebatang suis spring yang perasan ada benda lain sedang bergegar. Buzz haptik, alert senyap dan rumble perlukan motornya. Alarm ketukan, pencetus anti-curi dan “dia tumbang ke tak” perlukan sensornya.

Anda nak buat getaran itu, atau nak perasan getaran itu?

Module PWM vibration motor ialah output β€” sebuah mini DC vibration motor yang sudah terpasang di atas papan drivernya sendiri. Satu pemberat kecil dibaut tersasar dari paksi pada shaft sebuah motor rata, jadi setiap pusingan melontar pemberat itu ke tepi dan seluruh pemasangan tadi tersentak mengelilingi tempat lekatnya sendiri. Itu sahaja yang ada di sebalik buzz telefon anda selama ini.

Module sensor tilt dan getaran SW-18010P pula input, dan inilah bahagian yang kebanyakan orang sebenarnya cari bila mereka menaip vibration alarm sensor. Ia melaporkan yang sesuatu telah mengetuk, melanggar, menyenget atau menjatuhkan apa sahaja yang ia diskru padanya. Ia tidak boleh menggegarkan apa-apa, dan ia langsung tidak tahu sekuat mana ketukan tadi β€” cuma tahu yang satu ketukan sudah berlaku.

Apa yang anda nak bina Bahagian yang mana Kenapa
Alert senyap, buzz pada barang pakai, maklum balas butang, rumble robot Module vibration motor Output yang anda pacu dari sebatang pin
Alarm ketukan, pencetus anti-curi, pengesan usikan pada kotak projek, laci, pintu atau motosikal yang diparkir Module vibration sensor Input yang tercetus bila kena hentak
Pengawas “dia tumbang / kena alih ke tak” Module vibration sensor Suis spring itu bertindak balas pada sengetan juga
Ketukan dikesan β†’ buzz pada pergelangan tangan Kedua-duanya Input dan output dalam satu sketch β€” binaan di bawah
Sekuat mana, paksi yang mana, sudut berapa, frekuensi apa Accelerometer GY-521 Kedua-dua bahagian getaran ini tidak mengukur apa-apa

Dua jiran sebelah yang mudah terkeliru: bunyi yang dibawa menerusi udara ialah kerja mikrofon (lihat panduan suis tepuk kami), manakala orang yang melintas bilik tanpa menyentuh apa-apa pula kerja sensor pergerakan PIR.

Tambahan pilihan

ItemPriceQty
Buzzer Active Passive Buzzer 5V Electronic Sound Alarm Module Tone Piezo - Active Buzzer ModuleBuzzer Active Passive Buzzer 5V Electronic Sound Alarm Module Tone Piezo - Active Buzzer ModuleACTIVBMRM2.50
Electronic Component Set Beginner Electrical Learning Kit For Arduino Beginner Learning - ELECTRICAL STARTER KITElectronic Component Set Beginner Electrical Learning Kit For Arduino Beginner Learning - ELECTRICAL STARTER KITELECTRKRM39.95

Dua tambahan, kedua-duanya tidak diperlukan untuk sketch di bawah. Module active buzzer menjadikan pengesan ketukan itu boleh didengar dari bilik sebelah; silkscreennya tertulis δ½Žη”΅εΉ³θ§¦ε‘ β€” pencetus aras rendah β€” jadi kod menarik pin I-O nya ke LOW untuk membunyikannya, dan panduan beza buzzer aktif dengan pasif kami menerangkan bahagian itu. Electronics learning kit pula jalan discrete: transistor, diode, resistor dan sekeping breadboard 830 lubang, untuk memacu motor pager terpakai yang bogel dengan transistor dan flyback diode yang anda wayarkan sendiri.

Perbandingan kartun dengan module coin motor hitam berbentuk segi empat sama di sebelah kiri menerima anak panah teal daripada Arduino biru yang terkerat sambil memancarkan gelombang oren, dan module sensor biru memanjang dengan tiub spring hitam di sebelah kanan sedang dihentam impak oren lalu menghantar anak panah teal balik ke board itu
Output di sebelah kiri: board mengarahkan module coin motor hitam itu dan getaran pun keluar. Input di sebelah kanan: sesuatu menghentam tiub spring module biru itu dan satu laporan pulang ke board.

Kenapa motor 3 V–6 V bukan beban untuk pin Arduino yang bogel?

Coin motor pada module VIBRAGN dirating 3–6 V dan menarik sehingga 90 mA. Satu pin I/O ATmega328P pula ada maksimum mutlak 40.0 mA, dan angka kerja yang disyorkan oleh Arduino sendiri ialah separuh daripada itu, iaitu 20 mA. Jadi arus larian sahaja pun sudah lebih dua kali ganda daripada apa yang mampu ditanggung silikon itu β€” sebelum dikira lagi dua perkara yang menjadikannya lebih teruk.

Yang pertama ialah permulaan. Motor yang sedang berpusing menjana back-EMF yang menentang bekalannya sendiri lalu menahan arus itu supaya rendah; motor yang terhenti tidak menjana apa-apa, jadi pada saat kuasa tiba satu-satunya penghad ialah rintangan DC pada belitannya. Sebab itu permulaan dan stall menarik beberapa kali ganda angka larian tadi β€” dan stall itu cuma pemberatnya tersekat pada seutas wayar.

Yang kedua ialah pemberhentian. Belitan itu sebuah inductor, dan arus di dalam inductor tidak boleh berubah serta-merta, jadi memutuskan bekalan menyebabkan medan yang sedang runtuh itu menolak voltan pada node tersebut naik sehingga ada sesuatu yang mula mengalirkan arus. Pin GPIO ialah sukarelawan yang teruk untuk lonjakan itu, dan itulah kesalahan di sebalik kebanyakan cerita “board saya asyik reset” yang melibatkan motor.

Module VIBRAGN menjauhkan ketiga-tiga perkara tadi daripada pin Arduino anda, dan itulah sebabnya ia membawa tiga pin bersudut tepat bertanda IN, VCC dan GND, bukan dua utas wayar motor. Rentetan bahagian kecil antara cakera coin itu dengan headernya ialah sebuah driver: satu transistor dalam pakej SOT-23 berkaki tiga bersama resistor yang menyuap dan menahan basenya. VCC dan GND membawa arus motor daripada rail 5 V; IN pula membekalkan sepersekian milliampere arus base β€” satu arahan, bukan kuasa. Susun aturnya yang melakukan kerja itu: arus larian, lonjakan permulaan dan spike induktif waktu suis dimatikan semuanya berlegar di sebelah sana transistor, antara rail 5 V dengan ground, dan tiada satu pun daripadanya ada jalan pulang ke pin yang anda wayarkan pada IN. Pin itu tidak menyentuh apa-apa selain base, menerusi sebuah resistor.

Bebannya berpindah dan bukan hilang, jadi belanjakan rail itu dengan berhemah. Satu port USB menawarkan 500 mA untuk keseluruhan board dan logik Uno sendiri sudah mengambil beberapa puluh milliampere daripadanya, jadi satu module 90 mA ialah lebih kurang satu perlima peruntukan tadi β€” masih selesa. Masalah bermula bila motor kedua, sebuah servo atau semeter LED strip berkongsi pin 5 V yang sama, kerana ketika itu rail dan regulatornya β€” bukan lagi pin I/O β€” yang menjadi penghad. Beri benda-benda itu bekalan 5 V mereka sendiri dan ikat kedua-dua ground bersama, kerana IN ialah satu voltan yang diukur terhadap ground, dan dua bekalan yang tidak pernah bertemu tidak berkongsi sifar untuk diukur.

Rajah kartun sebuah module coin motor hitam berbentuk segi empat sama disuap oleh tiga laluan daripada Arduino biru yang terkerat - satu laluan isyarat teal setipis rambut bertanda piktogram bulu dan dua laluan arus oren yang tebal bertanda piktogram dumbbell, dengan gelung oren itu melalui coin motor hitam dan transistor hitam kecil di atas board
Satu wayar isyarat setipis rambut dan dua wayar arus yang berat. Arus motor itu ditarik daripada rail 5 V menerusi transistor module itu sendiri; pin kawalan cuma membawa sedikit arus base.

Itulah yang menjadikan analogWrite() pada IN selamat, dan PWM memberi lebih daripada apa yang mampu diberi oleh pin on/off. Transistor itu bertukar hidup penuh dan mati penuh beratus kali sesaat; inersia dan induktans motor pula mempuratakan denyutan tadi, jadi duty 200 daripada 255 pada rail 5 V terasa lebih kurang 3.9 V pada motor itu, tolak sedikit susutan merentasi transistornya. Turunkan duty, buzz jadi lebih lembut, bahagian yang sama.

Hadnya di sebelah bawah bersifat mekanikal. Coin motor ialah bahagian 3 V secara nominal dengan voltan permulaan tipikal sekitar 2.3 V, kerana bila dipegang menegak ia terpaksa mengheret pemberat tersasar itu melepasi bahagian atas shaftnya pada pusingan pertama. Pada rail 5 V itu lebih kurang 120 daripada 255; di bawah angka itu, motor yang sudah terhenti mungkin duduk diam tidak buat apa-apa, walaupun setelah berpusing ia terus berpusing pada duty yang lebih rendah. Jadi sepak ia dulu β€” duty penuh selama lebih kurang 30 ms, kemudian turun ke aras senyap yang anda mahu. Sketch di bawah memulakan setiap buzz dengan cara itu, dan itulah yang membolehkan anda menurunkan BUZZ_DUTY ke aras yang lebih diskret tanpa motor itu terus enggan bermula.

Melihat coin motor benar-benar dipacu daripada sebuah board lebih membantu daripada satu lagi perenggan:

Motor dua wayar bogel yang dikorek daripada telefon lama langsung tiada perlindungan itu, jadi binalah tiga bahagian tadi sendiri: sebuah transistor untuk memikul arusnya, sebatang resistor base yang disaizkan supaya pin itu membekalkan satu dua milliampere dan bukan sembilan puluh milik motor, dan sebiji flyback diode yang dipasang terbalik merentasi terminal motor supaya medan yang runtuh itu mengalirkan arusnya berpusing menerusi diode dan bukan mengeluarkan arc merentasi transistor. Ketiga-tiganya ada di dalam electronics learning kit. Alternatifnya ialah driver siap seperti board DRV8833, yang menambah keupayaan berpusing songsang. Panduan module MOSFET kami menghuraikan idea low-side switching yang sama. Elakkan L298N di sini: ia menjatuhkan lebih kurang dua volt di dalamnya sendiri, iaitu sebahagian besar bekalan sebuah motor 3 V.

Kenapa sensor itu tercetus sekali sahaja dan bukan kekal HIGH?

SW-18010P di dalam module biru itu sebenarnya sebatang spring, bukan sensor dalam erti kata mengukur: satu gegelung halus mengelilingi sebatang pin di tengah, di dalam tiub hitam yang tertutup rapat. Ketika rehat, gegelung itu berdiri jauh daripada pin dan bahagian ini litar terbuka β€” pengilangnya menyebut melebihi 10 MΞ© ketika terbuka, di bawah 30 Ξ© ketika tertutup. Satu ketukan melontar gegelung itu ke tepi sampai terkena pin, dan datasheet memanggil pertemuan itu conductive time selama 2 ms. Kemudian spring itu melantun balik dan litarnya terbuka semula.

Jadi bahagian ini sebuah suis yang tertutup lebih kurang dua per seribu saat bagi setiap hentakan, dari mana-mana arah, tanpa apa-apa yang menahannya terus tertutup: satu ketukan memberi anda serentetan kelipan bersaiz milisaat, bukan satu aras yang boleh anda baca dengan selamba. Sengetan yang perlahan pun ditangkap dengan cara yang sama, bila gegelung tadi tersandar pada pin kerana graviti.

Comparator LM393 di atas board itu mengemaskan keadaan tadi, bukan mengukurnya. Suis itu duduk dalam satu pembahagi bersama sebuah resistor, trimmer biru itu menetapkan rujukan comparator, dan output comparator pula jenis open-collector. Transistor outputnya hanya mampu menarik DO turun ke ground atau melepaskannya lalu membiarkan resistor pull-up pada board itu mengangkatnya β€” ia tidak pernah memacu HIGH sendiri. Yang mana satu antara dua keadaan itu jadi keadaan rehatnya bergantung pada input comparator mana yang disuap oleh suis spring tadi; pada module ini DO duduk HIGH ketika rehat, dan setiap pertemuan contact menyentap DO turun kuat ke LOW selama mana sentuhan itu bertahan β€” sebab itulah lampu penunjuk DO berkelip bila kena hentak dan bukan menyala berterusan.

Trimmer dan pin keempat itu lebih sempit maknanya daripada yang disangka. Trimmer itu menggerakkan satu ambang terhadap isyarat yang cuma ada dua aras, jadi ia menetapkan margin comparator dan bukan menggredkan ketukan lembut berbanding ketukan kuat β€” dipulas terlalu jauh, ia menghentikan board daripada bertindak balas langsung, dan itulah punca biasa module yang nampak macam dah mati. Setkannya dengan cara pantas: dengan board itu terletak diam, pulas skrunya sampai lampu penunjuk DO gelap dan kekal gelap, kemudian ketuk meja β€” lampu itu sepatutnya berkelip sekali bagi setiap ketukan. Kalau ia menyala berterusan ketika diam, atau enggan berkelip walau sekuat mana anda ketuk, anda sudah melepasi julat bergunanya di sebelah sana atau di sebelah sini, jadi patah balik suku pusingan. AO pula tidak lebih baik. Tiub yang cuma ada dua keadaan, terbuka atau tertutup, tiada apa-apa di antaranya untuk dijadikan analog, jadi pin itu hanya memarkir dekat skala penuh ketika rehat dan jatuh ke lantai selama sentuhan itu berlaku β€” jawapan digital dalam pakaian yang lebih perlahan, dan itulah sebabnya penjual module jenis ini menandakan AO sebagai tidak berguna. Biarkan ia tidak bersambung.

DO berehat pada aras yang mana lebih baik dibina ke dalam kod berbanding dibina ke dalam andaian anda, kerana suis spring yang sama muncul pada board yang diwayarkan kedua-dua cara. Sketch di bawah menyelesaikannya sendiri: ia membaca aras rehat pin itu sekali sahaja masa start-up dan menganggap apa-apa perubahan daripada aras tersebut sebagai satu ketukan, jadi ia berkelakuan betul untuk kedua-dua cara tanpa perlu diedit. Module daripada kelas yang sama, diuji di atas meja kerja:

Macam mana nak buat satu ketukan dikira sebagai satu event?

Module vibration motor dan module sensor SW-18010P kedua-duanya menghulurkan pin male, manakala Arduino Uno pula ada header female, jadi jumper male-to-female 20 cm menyiapkan seluruh binaan ini tanpa breadboard dan tanpa soldering.

Pin module Pin Arduino Uno Nota
Motor VCC 5V Arus motor datang dari sini, bukan dari D9
Motor GND GND Ground yang dikongsi dengan semua yang lain
Motor IN D9 Wajib pin PWM (3, 5, 6, 9, 10, 11)
Sensor VCC 5V Module ini berfungsi pada 3.3–5 V
Sensor GND GND
Sensor DO D2 Output digital β€” pin yang diperhatikan oleh sketch, dan juga INT0 pada Uno kalau nanti anda mahu guna interrupt
Sensor AO β€” Biarkan tidak bersambung

Kemudian ikat kedua-dua module itu dulu sebelum anda menilai mana-mana satu. Coin motor yang dipegang begitu sahaja di udara memusingkan pemberatnya melawan sesuatu yang anda langsung tidak rasa; diskru menerusi dua lubang pemasangan bersalut pada module itu ke penutup sebuah kotak, ia menggegarkan seluruh kotak tadi. Sensor pula peraturan yang sama secara terbalik β€” ia hanya menerima apa yang diterima oleh boardnya sendiri, jadi module yang ditampal pada span atau tergantung pada jumpernya akan terlepas ketukan yang mampu ditangkap oleh module yang berskru kemas. Pasang kedua-duanya berjauhan kalau boleh, kerana motor itu menggegarkan sensor sama seperti buku jari anda, dan sketch di bawah memandang serius perkara ini.

Sekarang masalah perisiannya pula. Satu ketukan buku jari membuatkan spring itu bergegar berulang kali, jadi pin tadi nampak satu taburan denyut 2 ms merentasi berpuluh milisaat dan sebuah pembilang biasa akan melaporkan sedozen ketukan untuk satu. Anggap satu event sebagai satu peralihan yang diikuti satu tempoh pekak: catat masanya pada bacaan pertama yang berbeza daripada aras rehat, kemudian abaikan pin itu sehingga tempoh lockout tamat.

Kurungkan tempoh lockout itu antara dua had. Ia mesti bertahan lebih lama daripada gegaran hasil satu impak, dan mesti lebih pendek daripada jarak antara dua ketukan yang anda mahu dikira berasingan β€” 250 ms duduk selesa di antara kedua-duanya. Ia penaakulan yang sama di sebalik debouncing butang dalam panduan push button kami, cuma dengan tetingkap yang lebih panjang kerana spring berdering lebih lama daripada contact dome.

Satu lagi perangkap khas milik pasangan ini. Motor yang baru anda hidupkan sedang menggegarkan meja yang sama dengan sensor itu, jadi pengesan yang bersedia semula sementara buzz masih berjalan akan mendengar dirinya sendiri, tercetus balik, lalu berdengung selama-lamanya β€” panjangkan BUZZ_MS melebihi LOCKOUT_MS dalam sketch yang naif, dan itulah tepat-tepatnya yang akan berlaku. Dua baris menutup lubang itu: enggan melihat pin tersebut langsung selagi motor masih berjalan, dan mulakan semula jam lockout pada saat motor berhenti, bukan pada saat ketukan tadi tiba. Masa pemulihan kemudian terbaca dengan jujur sebagai buzz campur lockout β€” 150 ms dan 250 ms di sini, jadi lebih kurang dua ketukan sengaja sesaat.

Dua tabiat memikul selebihnya. Ukur aras rehat itu dan jangan andaikan ia HIGH, supaya sketch anda selamat pada board yang diwayarkan cara sebaliknya; dan ukur masa buzz itu dengan millis() dan bukan delay(), kerana delay itu pekak dan setiap ketukan yang jatuh di dalamnya hilang begitu sahaja. Itu juga sebabnya DO duduk pada D2: ia pin INT0 pada Uno, jadi bila loop anda nanti membesar sampai berat dan mula terlepas denyut 2 ms, anda boleh memindahkan pengesanan itu ke dalam interrupt tanpa mengubah satu wayar pun.

/*
  Ketukan masuk, buzz keluar - MakerHub
  Module sensor SW-18010P: VCC->5V, GND->GND, DO->D2  (AO dibiar tidak bersambung)
  Module PWM vibration motor: VCC->5V, GND->GND, IN->D9  (D9 wajib pin PWM)
*/

const uint8_t SENSOR_PIN = 2;   // DO pada module sensor
const uint8_t MOTOR_PIN  = 9;   // IN pada module motor

const uint8_t  KICK_DUTY  = 255;  // duty penuh untuk detik pertama, untuk melepaskan pemberat
const uint16_t KICK_MS    = 30;   // berapa lama sepakan itu bertahan
const uint8_t  BUZZ_DUTY  = 200;  // 0-255 selepas sepakan. 200 purata lebih kurang 3.9 V pada rail 5 V
const uint16_t BUZZ_MS    = 150;  // jumlah panjang satu buzz alert, termasuk sepakan
const uint16_t LOCKOUT_MS = 250;  // satu ketukan = satu event: abaikan denyut selama ini

int      idleLevel;               // apa sahaja bacaan DO bila tiada apa-apa berlaku
uint32_t lastKnockMs;
uint32_t buzzStartedMs = 0;
bool     buzzing       = false;
uint32_t knockCount    = 0;

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT);
  pinMode(MOTOR_PIN, OUTPUT);
  analogWrite(MOTOR_PIN, 0);

  // Ukur aras rehat itu, jangan andaikannya. Biar board diam di sini.
  delay(200);
  idleLevel = digitalRead(SENSOR_PIN);
  Serial.print(F("DO rests at: "));
  Serial.println(idleLevel == HIGH ? F("HIGH") : F("LOW"));

  // Sedia terus; penolakan unsigned wrap dengan betul.
  lastKnockMs = millis() - LOCKOUT_MS;
}

void loop() {
  uint32_t now = millis();

  // Input: tukar serentetan denyut contact bersaiz milisaat jadi satu event - dan
  // jangan sekali-kali semasa motor kita sendiri berjalan, nanti alarm dengar diri sendiri.
  if (!buzzing && digitalRead(SENSOR_PIN) != idleLevel && (now - lastKnockMs) >= LOCKOUT_MS) {
    lastKnockMs = now;
    knockCount++;
    Serial.print(F("Knock #"));
    Serial.println(knockCount);

    analogWrite(MOTOR_PIN, KICK_DUTY);
    buzzStartedMs = now;
    buzzing = true;
  }

  // Output: sepak, turun ke aras tetap, berhenti - semuanya ikut jam, jadi tiada apa di sini menyekat loop.
  if (buzzing) {
    if ((now - buzzStartedMs) >= BUZZ_MS) {
      analogWrite(MOTOR_PIN, 0);
      buzzing = false;
      // Motor kita sendiri tadi menggegarkan sensor. Mulakan semula tempoh pekak
      // di sini, dikira dari saat gegaran itu berhenti.
      lastKnockMs = now;
    } else if ((now - buzzStartedMs) >= KICK_MS) {
      analogWrite(MOTOR_PIN, BUZZ_DUTY);
    }
  }
}

Buka Serial Monitor pada 9600 baud dan ketuk meja berhampiran sensor itu: satu baris bernombor dan satu buzz pendek bagi setiap ketukan. Kalau satu ketukan masih dikira dua kali, naikkan LOCKOUT_MS; kalau dua ketukan bercantum jadi satu, turunkan ia. Untuk menjadikan alert itu boleh didengar dan bukan sekadar dirasa, letak module active buzzer pada pin lain dan pacu ia ke LOW, seperti yang diterangkan dalam panduan beza buzzer aktif dengan pasif kami.

Rajah pemasaan kartun dengan jejak navy di sebelah atas menunjukkan satu impak oren menghasilkan serentetan denyut sempit dan tinggi yang padat serta tidak sekata, dan jejak navy di sebelah bawah menunjukkan satu blok lebar yang bersih di bawahnya dengan jalur lockout berlorek teal pucat memanjang ke sebelah kanannya
Satu ketukan, seperti yang dilihat oleh pin di sebelah atas dan seperti yang sepatutnya dilaporkan oleh sketch anda di sebelah bawah. Jalur pucat itu tetingkap lockout, dan sepanjang tempoh itu setiap denyut contact yang seterusnya sengaja diabaikan.

Apa yang kedua-dua bahagian ini tidak mampu beritahu anda?

Baik module vibration motor mahupun sensor SW-18010P, kedua-duanya tidak mengukur apa-apa. Motor itu langsung tiada maklum balas β€” anda set satu duty dan berharap. SW-18010P pula menjawab ya atau tidak, dan itu pun tidak dijamin: pengilangnya menyebut kadar konduksi 98% merentasi seratus tindakan suis, jadi lebih kurang satu hentakan lembut daripada lima puluh akan terlepas. Cara pemasangan mengalahkan kod di sini, kerana board yang ditampal pada permukaan lembut memang tidak pernah menerima sentakan itu.

Kalau projek anda perlukan satu angka β€” sekuat mana, ikut paksi yang mana, pada sudut berapa atau pada frekuensi apa β€” jawapannya ialah accelerometer. Breakout GY-521 yang membawa MPU-6050 memulangkan tiga paksi pecutan dan tiga paksi putaran menerusi IΒ²C, dan panduan sudut tilt GY-521 kami membawa anda sampai ke bacaan langsung; bahagian kelas ADXL345 pula jawapan lazim yang satu lagi.

Kesilapan biasa yang kami lihat

Memesan ikut perkataan yang dikongsi bersama. “Vibration module” bukan satu bahagian; ia dua bahagian dengan kerja yang bertentangan, yang hasil carian keduanya pula nampak hampir serupa. Tentukan dulu sama ada sketch anda sedang memberitahu atau sedang bertanya, kemudian baru pesan.

Mewayarkan motor pager terpakai terus ke satu pin. Motor dua wayar yang dicabut daripada telefon lama itu nampak sama macam cakera pada module kami, tetapi datang tanpa satu pun elektronik yang menjadikan module tersebut selamat. Beri ia sebuah transistor, sebatang resistor base dan sebiji flyback diode, atau sekeping board driver.

Membuat polling untuk satu aras dan bukan menangkap satu denyut. Corak yang gagal ialah if (digitalRead(DO) == LOW) { alarm(); } delay(100); β€” sentuhan 2 ms melawan tempoh buta 100 ms, jadi kebanyakan ketukan mendarat sewaktu sketch itu sedang tidur. Padamkan delay tadi tanpa menambah lockout dan yang sebaliknya pula berlaku: satu rentetan gegaran dikira sedozen kali. Perhatikan peralihannya, kemudian lockout.

FAQ

Apa beza vibration motor dengan sensor getaran?

Vibration motor ialah output: sebuah coin motor dengan pemberat tersasar dari paksi yang membuatkan projek anda bergegar, untuk alert haptik. Sensor getaran pula input: sebatang suis spring yang melaporkan bila ada benda lain menggegarkannya, untuk alarm ketukan dan pengesanan usikan.

Boleh ke saya sambung vibration motor terus ke pin Arduino?

Bukan motor yang bogel: ia menarik sehingga 90 mA sedangkan maksimum mutlak satu pin ATmega328P ialah 40 mA, ditambah lonjakan permulaan yang lebih besar dan spike induktif waktu suis dimatikan. Module PWM vibration motor selamat kerana transistor di atas boardnya yang memikul arus tersebut daripada rail 5 V, meninggalkan IN membawa isyarat sahaja.

Kenapa sensor getaran Arduino saya tercetus banyak kali untuk satu ketukan?

Kerana SW-18010P itu sebatang spring yang tertutup lebih kurang 2 ms bagi setiap sentuhan dan bergegar beberapa kali bagi setiap impak. Kira peralihan dan bukan aras, dan abaikan pin itu selama tempoh lockout lebih kurang 250 ms selepas setiap ketukan yang diterima.

Pin DO pada sensor getaran HIGH atau LOW masa idle?

Pada module ini DO berehat pada HIGH dan ditarik ke LOW selama mana spring itu bersentuhan. Output open-collector LM393 hanya mampu menarik ke bawah melawan resistor pull-up pada board, jadi yang mana satu antara dua keadaan itu menjadi keadaan rehatnya bergantung pada cara input comparator diwayarkan, dan board dalam keluarga ini memang wujud dalam kedua-dua bentuk. Baca aras rehat pin itu masa start-up dan bandingkan dengannya, jangan hardcode HIGH.

Boleh ke sensor getaran mengukur sekuat mana getaran itu?

Tidak boleh. Ia pengesan hentakan dengan output ya/tidak, dan pin analognya bukan bacaan magnitud. Untuk daya, paksi, sudut atau frekuensi anda perlukan accelerometer seperti MPU-6050 di atas board GY-521.

Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.

Leave a Reply

Your email address will not be published. Required fields are marked *