{"id":588,"date":"2017-09-01T23:22:01","date_gmt":"2017-09-01T21:22:01","guid":{"rendered":"https:\/\/arduinoforlammers.wordpress.com\/?p=588"},"modified":"2017-09-24T22:05:07","modified_gmt":"2017-09-24T22:05:07","slug":"tani-czujnik-zblizeniowy-rpr220","status":"publish","type":"post","link":"https:\/\/arduino.net.pl\/index.php\/tani-czujnik-zblizeniowy-rpr220\/","title":{"rendered":"Tani czujnik zbli\u017ceniowy RPR220, bistabilny wy\u0142\u0105cznik \u015bwiat\u0142a."},"content":{"rendered":"<p>RPR220 jest czujnikiem zbli\u017ceniowym opartym o fotodiod\u0119 i tranzystor. Czujniki tego typu sk\u0142adaj\u0105 si\u0119 z 2 element\u00f3w: emitera oraz detektora. Emiter wysy\u0142a sygna\u0142 o okre\u015blonej cz\u0119stotliwo\u015bci, kt\u00f3ry odbijaj\u0105c si\u0119 od przeszkody wraca do detektora.<\/p>\n<p><a href=\"http:\/\/www.robotstorehk.com\/sensors\/doc\/RPR220.pdf\" target=\"_blank\" rel=\"noopener\">Karta techniczna RPR220.<\/a><\/p>\n<p>Przy tym projekcie korzysta\u0142em z tekstu na <strong><em>instructables.com<\/em><\/strong>: \u00a0<a href=\"http:\/\/www.instructables.com\/id\/Cheap-Infared-Sensors-RPR220\/\">Cheap Sensors: RPR220<\/a> by sdfgeoff<\/p>\n<p>Pod\u0142\u0105czenie do Arduino jest proste i wymaga u\u017cycia jedynie dw\u00f3ch rezystor\u00f3w:<\/p>\n<p><a href=\"https:\/\/flic.kr\/p\/X696nF\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/live.staticflickr.com\/4372\/36157783693_7229fcf74d_z.jpg\" alt=\"RPR220\" width=\"618\" height=\"502\" \/><\/a><\/p>\n<h3>Tak to dzia\u0142a:<\/h3>\n<p><iframe loading=\"lazy\" title=\"RPR220\" width=\"774\" height=\"581\" src=\"https:\/\/www.youtube.com\/embed\/vJRvEqfY-Og?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><!--more--><\/p>\n<p>Musz\u0119 powiedzie\u0107, \u017ce jestem mile zaskoczony precyzj\u0105 dzia\u0142ania czujnika. Reaguje ju\u017c na przeszkod\u0119 znajduj\u0105c\u0105 si\u0119 w odleg\u0142o\u015bci ok. 40 cm, wi\u0119c mo\u017cemy go \u015bmia\u0142o wykorzysta\u0107 na przyk\u0142ad jako w\u0142\u0105cznik \u015bwiat\u0142a w szafie po otwarciu drzwi.<\/p>\n<h3>Kod programu:<\/h3>\n<pre class=\"brush: csharp; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\r\n#define IR_INPUT_PIN A0\r\n#define IR_LED_PIN 2\r\n#define LED_PIN 13\r\nint STAN_LED=0;\r\n \r\nvoid setup(){\r\n Serial.begin(9600);\r\n pinMode(IR_INPUT_PIN, INPUT);\r\n pinMode(IR_LED_PIN, OUTPUT);\r\n pinMode(LED_PIN, OUTPUT);\r\n}\r\n \r\nvoid loop(){\r\n  int ambient = 0;\r\n  int lit = 0;\r\n  int value = 0;\r\n \r\n  digitalWrite(IR_LED_PIN, LOW);\r\n  delay(5);                            \/\/To give ADC and LED transition time\r\n  ambient = analogRead(IR_INPUT_PIN);\r\n \r\n  digitalWrite(IR_LED_PIN, HIGH);\r\n  delay(5);\r\n  lit = analogRead(IR_INPUT_PIN);\r\n \r\n  value = lit - ambient;\r\n \r\n  if(value&gt;60 &amp; !STAN_LED){\r\n    digitalWrite(LED_PIN, HIGH);\r\n    STAN_LED=1;\r\n  }\r\n  else\r\n  {\r\n    digitalWrite(LED_PIN, LOW);\r\n    STAN_LED=0;\r\n  }\r\n \r\n   Serial.println(value);\r\n \r\n}\r\n<\/pre>\n<h3>Wariant drugi:<\/h3>\n<p>Postanowi\u0142em wykorzysta\u0107 czujnik jako zbli\u017ceniowy, bistabilny w\u0142\u0105cznik \u015bwiat\u0142a. Przes\u0142oni\u0119cie r\u0119k\u0105 w\u0142\u0105cza, albo wy\u0142\u0105cza lamp\u0119. Tak to wygl\u0105da:<\/p>\n<div style=\"top: 0; left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\">\t\t\t\t<iframe loading=\"lazy\" title=\"VID_123370223_151518_798\" style=\"width: 100%; height: 100%; position: absolute;\"  src=\"https:\/\/embedr.flickr.com\/photos\/36846112671\" width=\"720\" height=\"720\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen><\/iframe><\/div>\n<h4>I odpowiedni kod:<\/h4>\n<pre class=\"brush: csharp; light: false; title: Kod:; toolbar: true; notranslate\" title=\"Kod:\">\r\n\r\n#define IR_INPUT_PIN A0\r\n#define IR_LED_PIN 2\r\n#define LED_PIN 13\r\n \r\nboolean ledState = 0;\r\nboolean prevLedState = 0;\r\nint counter = 0;\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n pinMode(IR_INPUT_PIN, INPUT);\r\n pinMode(IR_LED_PIN, OUTPUT);\r\n pinMode(LED_PIN, OUTPUT); \r\n \r\n} \r\n \r\nvoid loop() {\r\n   int ambient = 0;\r\n   int lit = 0;\r\n   int value = 0;\r\n \r\ndigitalWrite(IR_LED_PIN, LOW);\r\n  delay(5);\r\n  ambient = analogRead(IR_INPUT_PIN);   \/\/ czytanie sygnalu otoczenia bez wyslania IR\r\ndigitalWrite(IR_LED_PIN, HIGH);\r\n  delay(5);\r\n  lit = analogRead(IR_INPUT_PIN);\r\n  value = lit - ambient;\r\n  Serial.print(&quot;value = &quot;);\r\n  Serial.println( value);\r\n \r\n\/\/ ustalenie przy jakim zbli\u017ceniu r\u0119ki w\u0142\u0105czamy LED\r\n  if(value&gt;40){\r\n    ledState=1;\r\n  }else{\r\n    ledState=0;\r\n    }\r\n  delay(5);\r\n \r\n  if (ledState != prevLedState &amp;&amp; ledState) {  \/\/ je\u015bli LED zmieni\u0142 stan i by\u0142o zas\u0142oni\u0119cie\r\n \r\n      counter++;               \/\/ liczymy ilo\u015b\u0107 zas\u0142on\r\n \r\n        if (!isEven(counter)) \/\/ sprawdzamy czy liczba zas\u0142on jest nieparzysta\r\n            {digitalWrite(LED_PIN, LOW);\r\n            counter=0;} \/\/ zerujemy licznik zas\u0142on, \u017ceby nie mno\u017cy\u0107 byt\u00f3w &amp;#x1f609;\r\n        else\r\n            {digitalWrite(LED_PIN, HIGH);}\r\n \r\n  }\r\n \r\n  prevLedState = ledState;   \/\/ zapami\u0119tujemy nowy stan LED\r\n \r\n}\r\n \r\nint isEven(int x) \/\/ funkcja ustalania parzysto\u015bci\r\n{\r\nif ((x%2)==0) return 0;\r\nelse return 1;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>RPR220 jest czujnikiem zbli\u017ceniowym opartym o fotodiod\u0119 i tranzystor. Czujniki tego typu sk\u0142adaj\u0105 si\u0119 z 2 element\u00f3w: emitera oraz detektora. Emiter wysy\u0142a sygna\u0142 o okre\u015blonej cz\u0119stotliwo\u015bci, kt\u00f3ry odbijaj\u0105c si\u0119 od&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2],"tags":[27],"class_list":["post-588","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-rpr220"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/comments?post=588"}],"version-history":[{"count":9,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/588\/revisions"}],"predecessor-version":[{"id":667,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/posts\/588\/revisions\/667"}],"wp:attachment":[{"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/media?parent=588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/categories?post=588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduino.net.pl\/index.php\/wp-json\/wp\/v2\/tags?post=588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}