Кодты іздеу

7-сабақ/31-2 : магнит өрісін геркон қосқышы арқылы анықтау | SunFounder жинағы

Бұл сабақтың бөлігі: Arduino Course based on SunFounder's 3-in-1 Learning Kit

7-сабақ/31-2 : магнит өрісін геркон қосқышы арқылы анықтау | SunFounder жинағы

Магниттік өрісті анықтау — Arduino-да цифрлық кірістерді бастаудың ең қарапайым және ең қанағаттандырарлық жолдарының бірі. Бұл жобада сіз герконды қосқышты — магнит жақындаған сайын контактілерін жабатын кішкентай шыны капсулаға салынған қосқышты пайдаланып, магниттік өріс детекторын жасайсыз. Герконды қосқыш басу түймесі сияқты әрекет ететіндіктен (ол не ашық, не жабық), ол digitalRead() функциясымен танысу үшін тамаша мүмкіндік болып табылады, сонымен қатар төмен тарту резисторының неге маңызды екенін және 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
push button with INPUT_PULLUP

Сондықтан резистор қолданылады. Екі орналасу да бірдей жақсы жұмыс істейді:

  • Төмен тарту: пиннен жерге дейін 10 кΩ резистор. Қосқыш ашық кезде пин LOW оқиды, ал қосқыш пинді 5 V-қа қосқанда HIGH оқиды.
  • Жоғары тарту: пиннен 5 V-қа дейін 10 кΩ резистор. Қосқыш ашық кезде пин HIGH оқиды, ал қосқыш пинді жерге қосқанда LOW оқиды.

Arduino-да сондай-ақ INPUT_PULLUP арқылы бағдарламалық жасақтамада қосылуы мүмкін ішкі жоғары тарту резисторы бар (бейнеде 19:52). Бұл сыртқы резисторға деген қажеттілікті толығымен жояды — пин HIGH күйінде бос тұрады, ал қосқышты жерге жабу оны LOW-ға тартады. Кемшілігі — логика инверттелген: басылған (немесе магнит бар) кезде енді 1 орнына 0 оқылады.

Аппараттық қамтамасыз ету және компоненттер

  • Arduino Uno (немесе кез келген үйлесімді плата)
  • Рид қосқышы модулі немесе жалаң рид қосқышы
  • 10 кΩ резистор (тек төмен тарту нұсқасы үшін қажет)
  • Протоборд және қосқыш сымдар
  • Сынақ үшін кішкентай магнит
  • Бағдарламалау және қуат беру үшін USB кабелі

Сымдарды жалғау нұсқаулығы

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

Рид қосқышы дәл басу түймесі сияқты жалғанады. Рид қосқышының бір аяғы 5 V-қа, екінші аяғы Arduino 2-пиніне және 10 кΩ резистордың бір ұшына барады. Резистордың екінші ұшы жерге барады (бейнеде 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) — сериялық монитор жылдамдығын орнатады. Егер бұл мәнді өзгертсеңіз, Serial Monitor терезесіндегі бод жылдамдығының ашылмалы мәзірін де өзгертуіңіз керек, әйтпесе қоқыс таңбаларды көресіз (бейнеде 11:25).

pinMode(reedPin, INPUT) — пинді жоғары кедергілі кіріс ретінде конфигурациялайды, осылайша ол рид қосқышы мен резистор орнатқан кернеуді сезе алады. Егер оның орнына ішкі жоғары тартуды қолдансаңыз, бұл жолды pinMode(reedPin, INPUT_PULLUP); етіп өзгертіңіз және көрсеткіштер инверттелетінін есте сақтаңыз.

Цикл жай ғана пинді оқып, нәтижені басып шығарады:

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

digitalRead(reedPin) пин HIGH болғанда 1, LOW болғанда 0 қайтарады. Мән тікелей Serial.println() ішіне берілетіндіктен, аралық айнымалы қажет емес — көрсеткіш тікелей басып шығарылады. Төмен тарту сымдарымен 0 "магнит өрісі жоқ" және 1 "магнит анықталды" дегенді білдіреді (бейнеде 18:31).

delay(10) көрсеткіштің қаншалықты жиі басып шығарылатынын басқарады. Он миллисекунд магнит жақындаған сәтте мәннің өзгергенін көретіндей жеткілікті жылдам. Егер тыныш дисплейді қаласаңыз, оны 200 мс-қа дейін көтеруге болады, бірақ бұл анықтауды да баяулататынын ескеріңіз (бейнеде 12:01).

Жобаның тікелей көрсетілімі

Скетчті жүктегеннен кейін Serial Monitor-ды ашып, бод жылдамдығын 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] Тарту және түсіру резисторының теориясы
  • [05:18] Батырманы breadboard-та қосу
  • [08:21] Батырма скетчін ашу және түсіндіру
  • [10:55] Батырма мысалын жүктеу және тексеру
  • [12:38] Рид қосқышымен танысу және оны мультиметрмен тексеру
  • [14:40] Рид қосқышын 2-ші пинге қосу
  • [16:46] Рид қосқышын магнитпен тексеру
  • [17:19] Рид қосқышы скетчін түсіндіру
  • [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)

Пайдаланушының нұсқаулығы