Нам понадобится:
Sharp 2Y0A21: http://ali.ski/VZW_wp
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Скетч для подсчета посетителей:
</pre> const int IRpin = A0; // аналоговый пин для подключения выхода Vo сенсора int value1; // для хранения аналогового значения unsigned long timevisitors; // время прохождения int count_visitors=0; // переменная подсчета посетителей void setup() { Serial.begin(9600); // Запуск последовательного порта } void loop() { // получаем сглаженное значение и переводим в напряжение value1=irRead(); //Serial.println(value1, DEC); if(value1>50) // фиксация прохождения { timevisitors=millis(); while(irRead()>50) ; if(millis()-timevisitors>300) // > минимального времени прохождения { count_visitors=count_visitors+1; // увеличение счетчика Serial.print("count_visitors="); Serial.println(count_visitors); } } delay(200); } // Усреднение нескольких значений для сглаживания int irRead() { int averaging = 0; // переменная для суммирования данных // Получение 5 значений for (int i=0; i<5; i++) { value1 = analogRead(IRpin); averaging = averaging + value1; delay(55); // Ожидание 55 ms перед каждым чтением } value1 = averaging / 5; // усреднить значения return(value1); }
Скетч с отправкой данных в twitter:
</pre> #include #include byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; byte ip[] = { 192, 168, 1, 97 }; byte sdns[] = { 8, 8, 8, 8 }; byte gateway[] = { 192, 168, 1, 111 }; byte subnet[] = { 255, 255, 255, 0 }; const int IRpin = A0; // аналоговый пин для подключения выхода Vo сенсора int value1; // для хранения аналогового значения unsigned long timevisitors; int count_visitors=0; unsigned long time10minute=500000; // ThingSpeak Settings char thingSpeakAddress[] = "api.thingspeak.com"; String thingtweetAPIKey = "MR42T9YEUSOXV0T4"; // Variable Setup long lastConnectionTime = 0; boolean lastConnected = false; int failedCounter = 0; // Initialize Arduino Ethernet Client EthernetClient client; void setup() { Serial.begin(9600); // Запуск последовательного порта startEthernet(); delay(1000); } void loop() { value1=irRead(); //Serial.println(value1, DEC); // получаем сглаженное значение и переводим в напряжение //float volts = analogRead(IRpin)*0.0048828125; // и в расстояние в см //float distance=32*pow(volts,-1.10); //Serial.print(distance); // выдаем в порт значение if(value1>50) { timevisitors=millis(); while(irRead()>50) ; if(millis()-timevisitors>300) { Serial.println("passage!!!"); count_visitors=count_visitors+1; Serial.print("count_visitors="); Serial.println(count_visitors); } } delay(200); if(millis()-time10minute>600000) { String message="last 10 minute "+String(count_visitors)+" visitors"; updateTwitterStatus(message); time10minute=millis(); } // Print Update Response to Serial Monitor while (client.available()) { char c = client.read(); Serial.print(c); } // Disconnect from ThingSpeak if (!client.connected() && lastConnected) { Serial.println("...disconnected"); Serial.println(); client.stop(); } // Check if Arduino Ethernet needs to be restarted if (failedCounter > 3 ) {startEthernet();} lastConnected = client.connected(); } // Усреднение нескольких значений для сглаживания int irRead() { int averaging = 0; // переменная для суммирования данных // Получение 5 значений for (int i=0; i<5; i++) { value1 = analogRead(IRpin); averaging = averaging + value1; delay(55); // Ожидание 55 ms перед каждым чтением } value1 = averaging / 5; // усреднить значения return(value1); } void startEthernet() { client.stop(); Serial.println("Connecting Arduino to network..."); Serial.println(); delay(1000); Ethernet.begin(mac, ip, sdns, gateway, subnet); Serial.println(Ethernet.localIP()); // Connect to network amd obtain an IP address using DHCP Ethernet.begin(mac, ip, sdns, gateway, subnet); Serial.println(Ethernet.localIP()); delay(1000); } void updateTwitterStatus(String tsData) { if (client.connect(thingSpeakAddress, 80)) { // Create HTTP POST Data tsData = "api_key="+thingtweetAPIKey+"&status="+tsData; client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(tsData.length()); client.print("\n\n"); client.print(tsData); lastConnectionTime = millis(); if (client.connected()) { Serial.println("Connecting to ThingSpeak..."); Serial.println(); count_visitors=0; failedCounter = 0; } else { failedCounter++; Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")"); Serial.println(); } } else { failedCounter++; Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")"); Serial.println(); lastConnectionTime = millis(); } }
Ссылка на скетч :https://yadi.sk/d/s3G_W3hp3GBTnB
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.