Пребарување код

Лекција 7/31-2 : откривање на магнетно поле со помош на рид-прекинувач | Комплет SunFounder

Лекција 7/31-2 : откривање на магнетно поле со помош на рид-прекинувач | Комплет SunFounder

Откривањето на магнетно поле е еден од наједноставните и најзадоволувачки начини да започнете со дигитални влезови на Arduino. Во овој проект ќе изградите детектор за магнетно поле користејќи јазиче-прекинувач (reed switch) — мал прекинувач затворен во стакло што ги затвора своите контакти секогаш кога магнет ќе се приближи до него. Бидејќи јазиче-прекинувачот се однесува токму како копче (или е отворен или затворен), тој е совршен вовед во функцијата digitalRead(), а исто така ве учи зошто отпорникот за спуштање (pull-down) е важен и како вградениот влезен pull-up на Arduino може целосно да го замени.

reed_switch

Откако ова ќе проработи, истото коло станува срце на многу реални изработки. Еве неколку практични идеи што можете да ги пробате:

  • Аларм за врата и прозорец — монтирајте го јазиче-прекинувачот на рамка и мал магнет на вратата; Arduino пријавува „отворено“ во моментот кога магнетот ќе се оддалечи.
  • Бесконтактен тахометар — залепете магнет на ротирачко тркало и броете ги пулсовите за да го измерите бројот на вртежи во минута.
  • Читач на водомер или гасомер — многу комунални мерачи имаат магнетен пулсен излез што јазиче-прекинувачот може да го регистрира и логира.
  • Сензор за капак на лаптоп / куќиште — детектирајте кога капакот е затворен за да активирате спиење или статусна LED.
  • Бициклистички брзиномер — магнет на спицата и јазиче-прекинувач на вилушката ви даваат еден пулс по секоја ротација на тркалото.
  • Детекција на неовластен пристап — скријте пар магнет и јазиче-прекинувач внатре во куќиште за да знаете дали е отворено.

Како функционира јазиче-прекинувачот

lesson-7-reading-reed-with-magnet-multimeter

Јазиче-прекинувачот е мала стаклена капсула што содржи две тенки феромагнетни ленти (во видеото на 12:38). Во присуство на магнетно поле лентите се привлекуваат една кон друга и се допираат, затворајќи го колото. Отстранете го магнетот и лентите се разделуваат, повторно отворајќи го колото. Тоа е целиот принцип — тоа е прекинувач без подвижно копче, без абење од притискање со прст и без потреба од физички контакт со предметот што го детектирате.

Ова однесување можете да го проверите со мултиметар во режим на континуитет (во видеото на 13:59): без магнет во близина, мерачот покажува отворено коло, а штом магнетот се приближи, зумерот звучи и мерачот покажува затворено коло. Бидејќи прекинувачот е електрично идентичен со копче, Arduino кодот и поврзувањето се исти како кај секој друг дигитален влез.

Дигитални влезови и отпорници за спуштање, објаснети

Arduino го чита дигиталниот пин или како HIGH или како LOW. На плоча од 5 V, сè над приближно 2,2 V се третира како HIGH, а сè под околу 1,5 V како LOW (во видеото на 01:49). Проблемот е што прекинувач поврзан директно помеѓу пин и 5 V го остава пинот лебдечки кога прекинувачот е отворен — тој не е поврзан со ништо, па собира шум и пријавува случајни вредности.

why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-8
копче со INPUT_PULLUP

Затоа се користи отпорник. Две поставки функционираат подеднакво добро:

  • Извлекување надолу: отпорник од 10 kΩ од пинот до маса. Пинот чита LOW кога прекинувачот е отворен и HIGH кога прекинувачот го поврзува пинот со 5 V.
  • Извлекување нагоре: отпорник од 10 kΩ од пинот до 5 V. Пинот чита HIGH кога прекинувачот е отворен и LOW кога прекинувачот го поврзува пинот со маса.

Arduino исто така има внатрешен отпорник за извлекување нагоре кој може да се овозможи во софтверот со INPUT_PULLUP (во видеото на 19:52). Ова целосно ја отстранува потребата од надворешен отпорник — пинот мирува HIGH, а затворањето на прекинувачот кон маса го повлекува на LOW. Компромисот е тоа што логиката е инвертирана: притиснато (или присутен магнет) сега чита 0 наместо 1.

Хардвер и компоненти

  • Arduino Uno (или која било компатибилна плоча)
  • Модул со јазиче-прекинувач или голо јазиче-прекинувач
  • Отпорник од 10 kΩ (потребен само за верзијата со извлекување надолу)
  • Плоча за поврзување и поврзувачки жици
  • Мал магнет за тестирање
  • USB кабел за програмирање и напојување

Водич за поврзување

lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring

Јазиче-прекинувачот е поврзан исто како копче. Едната нога на јазиче-прекинувачот оди на 5 V, другата нога оди на Arduino пин 2 и на едниот крај на отпорникот од 10 kΩ. Другиот крај на отпорникот оди на маса (во видеото на 14:40). Ова е конфигурација со извлекување надолу, така што пинот чита LOW кога нема магнет и HIGH кога магнетот го затвора прекинувачот.

На плочата за поврзување, поставете го јазиче-прекинувачот така што неговите две ноги ќе седат во различни редови, поврзете го отпорникот од истиот ред како едната нога надолу до шината за маса, повлечете црвена жица од другата нога до шината за 5 V, и зелена жица од спојот на јазиче-прекинувачот и отпорникот до пин 2 (во видеото на 15:53). Црната оди на маса, црвената оди на 5 V, зелената оди на пин 2 — истата конвенција за бои што се користи низ целиот SunFounder комплет.

Ако претпочитате да го прескокнете отпорникот, поврзете едната нога на јазиче-прекинувачот на пин 2 и другата нога директно на маса, потоа овозможете INPUT_PULLUP во кодот како што е опишано подолу.

Објаснување на кодот

Скицата е намерно мала. Сè што ќе сакате да промените се наоѓа на две места на врвот на датотеката.

int reedPin = 2;//the pin reed switch is connected to 

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT);
}

reedPin — променете го овој број ако сте го поврзале јазиче-прекинувачот на различен дигитален пин. Секој дигитален пин на Uno функционира; пинот 2 се користи овде едноставно затоа што е погоден на плочата за поврзување.

Serial.begin(9600) — ја поставува брзината на серискиот монитор. Ако ја промените оваа вредност, мора исто така да го промените паѓачкото мени за брзината во прозорецот на Серискиот монитор, инаку ќе видите неразбирливи знаци (во видеото на 11:25).

pinMode(reedPin, INPUT) — го конфигурира пинот како влез со висока импеданса за да може да го осети напонот поставен од јазиче-прекинувачот и отпорникот. Ако го користите внатрешното извлекување нагоре наместо тоа, променете ја оваа линија во pinMode(reedPin, INPUT_PULLUP); и запомнете дека читањата ќе бидат инвертирани.

Јамката едноставно го чита пинот и го печати резултатот:

void loop() {
  Serial.println(digitalRead(reedPin));
  delay(10);       
}

digitalRead(reedPin) враќа 1 кога пинот е HIGH и 0 кога е LOW. Бидејќи вредноста се пренесува директно во Serial.println(), нема потреба од посредна променлива — читањето се печати директно. Со поврзувањето со извлекување надолу, 0 значи "нема магнетно поле" и 1 значи "откриен магнет" (во видеото на 18:31).

delay(10) контролира колку често се печати читање. Десет милисекунди е доволно брзо што ќе ја видите промената на вредноста во моментот кога магнетот се приближува. Ако претпочитате помирен приказ, можете да го зголемите на 200 ms, но имајте на ум дека тоа го забавува и откривањето (во видеото на 12:01).

Демонстрација на проектот во живо

Откако ќе ја поставите скицата, отворете го Серискиот монитор и поставете ја брзината на 9600. Кога нема магнет во близина, прозорецот се полни со нули. Приближете мал магнет до стаклената капсула и излезот веднаш се префрла на единици; оддалечете го магнетот и се враќа на нула (во видеото на 17:04). Одговорот е моментален и функционира дури и кога магнетот се држи еден или два сантиметри подалеку од прекинувачот.

lesson-7-reading-reed-wiring-on-breadboard

Ако ја изградивте верзијата со извлекување нагоре наместо тоа, логиката е обратна: мониторот покажува 1 во мирување и 0 кога е присутен магнетот (во видеото на 22:13). Во секој случај, сега имате сигурен, безконтактен детектор за магнетно поле кој чини речиси ништо и може да се вклопи во која било од идеите за проекти наведени на врвот на овој напис.

Верзијата со копче за притискање на истиот час за дигитално читање е опфатена одделно во Лекција 7/31: Дигитално читање копче за притискање, откривање на магнетно поле SunFounder Kit | Robojax.

Поврзани проекти од ова видео

Поглавја

  • [00:00] Вовед: два примери за дигитално читање
  • [01:33] Што значат дигитално читање и HIGH/LOW
  • [02:46] Како функционира прекинувачот со копче за притискање
  • [03:25] Теорија на pull-up и pull-down отпорник
  • [05:18] Поврзување на копчето за притискање на breadboard
  • [08:21] Отворање и објаснување на скицата за копчето
  • [10:55] Прикачување и тестирање на примерот со копче
  • [12:38] Претставување на reed прекинувачот и негово тестирање со мултиметар
  • [14:40] Поврзување на reed прекинувачот на пин 2
  • [16:46] Тестирање на reed прекинувачот со магнет
  • [17:19] Објаснување на скицата за reed прекинувачот
  • [19:45] Користење на INPUT_PULLUP без надворешен отпорник

Слики

reed_switch
reed_switch
push button with INPUT_PULLUP
push button with INPUT_PULLUP
why_use_resistor_switch-1
why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-7
why_use_resistor_switch-8
why_use_resistor_switch-8
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-wiring
lesson-7-reading-push-button-wiring
lesson-7-reading-reed-schematic
lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring-on-breadboard
lesson-7-reading-reed-wiring-on-breadboard
932-Lesson 7/31-2: Digital read, working with reed switch
Јазик: C++
/*
 * Lesson 7/31-2: Digital read, working with reed switch
Download and resource page https://robojax.com/RJT590
watch video tutorial https://www.youtube.com/watch?v=yyJrqFKn-X4
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/

int reedPin = 2;//the pin reed switch is connected to 

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT);
}

void loop() {
  Serial.println(digitalRead(reedPin));
  delay(10);       
}

Ресурси и референци

Датотеки📁

Arduino библиотеки (zip)

Упатство за корисникот