Мазмұны:

Жол қозғалысы туралы есепті тексеру (NL) есік қақпағымен: 6 қадам
Жол қозғалысы туралы есепті тексеру (NL) есік қақпағымен: 6 қадам
Anonim
Қозғалыс туралы есепті тексеру (NL) есік қақпағымен
Қозғалыс туралы есепті тексеру (NL) есік қақпағымен

Бұл нұсқаулықта мен Голландия магистральдарының қозғалысы туралы есептерді тексеретін есікті қалай жасау керектігін сипаттаймын. Сіз есіктің төсенішіне шықсаңыз және маршрутта кептеліс пайда болса, төсеніш қызыл түске айналады. Кептеліс болмаған кезде төсеніш жасылға айналады.

Мен NodeMCU 1.0 (ESP0-12E модулі) бойынша жұмыс жасаймын. Бұл жобаның коды басқа құрылғыларда да жұмыс істей алады (мысалы, Arduino тақталары). Бұл жоба ANWB трафик туралы есеп беретін голландиялық дереккөзге негізделген.

Бұл жоба үшін бізге қажет:

- NodeMCU - Өткізгіш сымдар - Жарықдиодты шам немесе жолақ - Аналогты сенсор (алюминий фольга, губка) - Wi -Fi байланысы - Есік тақтасы

Біз қабылдауға тиіс қадамдар:

1. NodeMCu-ды Wi-Fi желісіне қосыңыз 2. ANWB.nl-ден HTTPS арқылы деректерді сұраңыз 3. Деректерді қолдануға болатын ақпаратқа айналдырыңыз 4. Триггерді орнатыңыз 5. Кері байланыс жасаңыз

1-қадам: NodeMCU-ды Wi-Fi желісіне қосыңыз

Бұл қадамда құрылғы интернетке қосылғанын білу үшін табысты HTTPSR сұрауын қалай жасау керектігін көрсетеді.

Алдымен Arduino IDE ішіндегі ESP8266 кітапханасын орнатыңыз. ESP8266> HTTPSRequest мысалдарынан ашыңыз.

Төменде көрсетілгендей, кодтың жоғарғы жағында Wi-Fi тіркелгі деректерін толтырыңыз:

const char* ssid = «YOUR_SSID»;

const char* password = «YOUR_PASS»;

Құрылғыға кодты жүктеп, NodeMCU интернетке қосылғанын тексеріңіз. HTTPSRequest мысалы ақпаратты алу үшін Github әдепкі ретінде пайдаланады. HTTPSRequest сәтті болғанда, сіз Github деректерін сериялық мониторда аласыз.

2 -қадам: HTTPS -тен ANWB.nl -ден деректерді сұрау

Бұл екінші қадамда сіз деректер көзін әдепкіден осы жобаға қажетті көзге өзгертесіз: ANWB.nl.

Кодыңыздың жоғарғы жағында char* хостты www.anwb.nl деп өзгертіңіз (немесе деректеріңізді алғыңыз келетін басқа дереккөз):

const char* host = «www.anwb.nl»;!! Егер сіз басқа көзді қолдансаңыз, 3 -қадам менің кодтан өзгеше болады. 3 -қадамда пайдалы ақпаратты алу үшін арнайы кодтау қажет!

Әрі қарай, функцияны орнатуда жолдың URL мекенжайын ақпаратты алатын жолды «/feeds/gethf» етіп өзгертіңіз:

Жол url = «/feeds/gethf»;!! Егер сіз басқа дереккөзді қолдансаңыз, көзге апаратын жолды қолданыңыз!

Сіз кодты жүктеген кезде www.anwb.nl/feeds/gethf сайтынан барлық деректермен жауап алуыңыз керек. Бұл код жол деп аталатын жолға сақталады.

3 -қадам: Деректерді қолдануға болатын ақпаратқа айналдырыңыз

Осы уақытқа дейін код NodeMCU іске қосылғанда немесе қалпына келтірілгенде ғана жұмыс істеді, себебі барлық код орнату функциясында. Кодты үздіксіз іске қосу үшін триггерді орнату үшін HTTPS сұранысын іске қосатын кодтың орнын өзгерту керек. Цикл функциясының астында сіз басқа функцияны қосасыз. Мен оны бос емес extractData деп атадым:

extractData () {

}

Орнату функциясының кодының бір бөлігін extractData () ішіне көшіріңіз. Орнату функциясы аяқталғанша келесі жолдан бастаңыз:

if (! client.connect (хост, Код енді сіздің жаңа функцияңызда, сондықтан көшірілген кодты орнату функциясынан алып тастаңыз.

Содан кейін, цикл функциясында extractData функциясын шақырыңыз және nodeMCU -ге демалыс уақытын беру үшін біраз кідіртіңіз:

void loop () {

extractData (); кешіктіру (30000); // бұл кейінірек бізде аналогтық сенсор болғанда жойылады}

Сіз алатын деректер жолда сақталатындықтан және осы жолдың бөліктері ғана қажет болғандықтан, цикл үшін бірнеше жұп жазу керек.

Алдымен «жол» сөзінің барлық позицияларын тексеріңіз. «Жол» сөзінен кейін жолдың атауы болады (A1, A2 және т.б.).

For циклдарын жазуды бастамас бұрын, сіз қолданатын кейбір айнымалыларды жариялауыңыз керек:

int noOfPos = 0;

логикалық hasRunOnce = жалған; int = 0 -ден; int roadArray [20];

Енді бірнеше ілмек жазатын кез келді. Мен extractData функциясының төменгі жағында for циклдарын жаздым. Мен оны бөлек функцияларға бөлуге тырыстым, бірақ мен оны жұмыс істей алмадым.

No1 цикл үшін: жол сөзіндегі жол сөзінің орындарын табыңыз:

for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf («road \»: «, from); roadArray [noOfPos] = pos; noOfPos+= 1; from = pos + 1; егер (hasRunOnce == true && pos == line.indexOf («жол \»: «)) {i = line.length (); } hasRunOnce = ақиқат; }

Содан кейін, жоғарыдан for циклінің позицияларын пайдаланып, қандай жолдарда кептеліс бар екенін тексеріңіз. Жолдар атауының орны әрқашан бірдей және жолдан кейін 7 таңбадан басталып, 10 таңбамен аяқталады.

Енді біз келесі үшін циклда толтырылатын nameOfRoadArray массивін анықтаймыз:

String nameOfRoadArray [20];

No2 цикл үшін: no циклынан кіретін жолдардың барлық атауларын табыңыз. 1

for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

OFRoudArray массивінің атауы барлық кептелістермен толтырылуы керек.

Әрі қарай, сіздің жолыңыз кептеліс бар жолдар қатарында екенін тексересіз. Деректердегі жолдарды алу үшінOFRoadArray атын басып шығарыңыз. Мұны Serial.println (nameOfRoadArray [k]) қосу арқылы орындаңыз; цикл үшін 2 -шіге:

for (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

Егер бұл дұрыс болса, сериялық мониторда кептелісі бар барлық жолдарды көресіз.

Соңғы For циклін жазбас бұрын логикалық мәнді жаһандық айнымалы ретінде жариялау керек. TrafficJam деп аталатын логикалық мән әдепкі бойынша жалған болып табылады және егер extractData функциясы кептеліс үшін ақиқат мәніне оралса өзгереді. Келесі код.ino файлының жоғарғы жағында орналасқан:

логикалық трафикJam = жалған;

No3 цикл үшін: А1 жолының кептелістер тізімінде тұрғанын тексеріңіз.

for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == «A1 \» «) {// A1 -ді өзіңізге ұнайтын трафикке өзгертіңіз TraffJam = true;}

Егер сіз сериялық мониторда trafficJam басып шығарсаңыз, A1 -де кептеліс бар -жоғын білесіз.

Бұл кодты extractData функциясының төменгі жағына қойыңыз:

Serial.println (trafficJam); // кептелістің бар -жоғын қараңыз

Бұл ақпаратпен біз 5 -қадамдағы жүйенің кері байланысы бойынша әрі қарай жұмыс жасаймыз.

4 -қадам: триггерді орнатыңыз

Триггерді орнатыңыз
Триггерді орнатыңыз
Триггерді орнатыңыз
Триггерді орнатыңыз
Триггерді орнатыңыз
Триггерді орнатыңыз

Біз енді дереккөзден деректерді сәтті шығара алатындықтан, nodeMCU extractData функциясын іске қосатын сенсорды құрудың уақыты келді. Мен есік төсенішінен аналогты сенсор жасауды шештім. Басқа сенсор көмегімен триггерді өзгертуге болады.

Аналогты сенсордың құрылысы

Мен 2 дана алюминий фольга, екі секіргіш сым мен губканы қолдандым.

Губкаға тесік бұрғылаңыз, бұл жерде алюминий фольгалары байланысқа түседі. Губканың екі жағына алюминий фольга жабыстырыңыз. Өткізгіш сымдарды алюминий фольгаға қосыңыз. Өткізгіш сымдарды nodeMCU -ге қосыңыз. Бір жағы A0 түйреуішіне, екінші жағы V3 істігіне. Губканы есіктің төсенішінің астына қойыңыз, сонда сіз есігіңізді сенсорға ауыстырдыңыз. Тамаша!

Есіктің матасында біреудің тұрғанын білу үшін сенсордан мәнді оқу коды:

int sensorValue = analogRead (A0);

if (sensorValue == 1024) {extractData (); }

Алюминий фольга түйіскен кезде (біреу төсеніште тұрған кезде), sensorValue - 1024. Нәтижесінде extractData () функциясы қосылады. Біз дәл осылай жүйені қалаймыз.

5 -қадам: Дизайн бойынша кері байланыс

Мен пайдаланушыға кері байланыс беру үшін LED жолағын қолдандым. Кептеліс болған кезде жарық қызыл түске боялады. Жол жақсы болған кезде ол жасылға айналады. Мен LED жолағын басқару үшін adafruit неопиксел кітапханасын қолдандым.

LED жолағы анықталғанына көз жеткізу үшін осы кодты файлдың жоғарғы жағына жазыңыз:

#қосу

#PIXEL_PIN D5 анықтау #PIXEL_COUNT 10 анықтау #PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel пиксельдер = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYP;

Келесі кодты орнату функциясына жазыңыз:

// неопиксель

piksel.begin (); пиксель.шоу ();

Және цикл функциясындағы келесі код:

if (trafficJam == true) {

for (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 255, 0, 0); // қызыл пиксельдер.show (); кешіктіру (200); }} else {for (int i; i <PIXEL_COUNT; i ++) {piksel.setPixelColor (i, 0, 255, 0); // жасыл пиксельдер.show (); кешіктіру (200); }

Жоғарыдағы кодта if/else функциясы бар. ExtractData функциясы кептелістің болуын қайтарғанда, LED жолағы қызыл түске боялады. Олай болмаған жағдайда, LED жолағы жасылға айналады.

6 -қадам: Кодты іске қосыңыз

Егер біз толық кодты қазір іске қоссақ, сенсор мен жарық жұмыс істеуі керек. Есіктің төсенішінде тұрған кезде сенсор қосылады және extractData функциясы іске қосылады. Жол атауларының жиынтығында біз іздеген жол бар болса, LED жолағы қызылға айналады, бұл кептелісті білдіреді. Егер ол массивте болмаса, LED жолағы жасылға айналады және сіз баруға дайын екеніңізді білесіз!

Саяхатыңыз қауіпсіз болсын және оқығаныңыз үшін рахмет. Сіз біраз шабыт немесе ақпарат таптыңыз деп үміттенемін. Егер сізде кері байланыс болса, жауап беріңіз!

Ұсынылған: