Aplicatie cu senzor proximitate

Incerc sa pornesc o aplicatie cand cineva se aproprie de un monitor. Vreau sa detectez prezenta persoanei folosind un senzor de miscare sau proximitate.

Am incercat un senzor HC-SR04. Senzorul emite o unda si masoara timpul in care aceasta este reflectata. Astfel se poate calcula distanta pana la cel mai apropriat obstacol (2cm - 4m). Din cate observ are probleme cu hainele, daca trec imbracat prin fata lui unda este absorbita de materialul textil si distanta nu mai este calculata corect.

Am incercat si un HC-SR501,senzor infrarosu, functioneaza bine dar este mult prea sensibil. Distanta minima la care raspunde este 3m iar la cum functioneaza orice miscare din camera l-ar declansa (pe o raza de la 3 la 7 metrii).

HC-SR04 ar fi fost ideal, are un unghi mai mic de detectie, il puteam orienta in spatiul din fata monitorului si putea declansa cand eram destul de aproape sa interactionez cu aplicatia.

Poate careva de pe aici a mai avut experiente cu astfel de senzori si ma poate ajuta sa finalizez acest mini proiect oferindu-mi o recomandare.

2 Likes

Ce înseamnă asta? Să vrea să apese pe butoane? Să se pună în fața monitorului la 50-100cm?

Genul ăsta de senzori sunt folosiți și la alarmele auto și nu par a fi foarte afectați de haine.

Având în vedere cât costă senzorii, ai putea cumpăra câte unul din fiecare și vezi care merge. :smiley:

Cam asa. Pe monitor ruleaza un screensaver dar cand cineva este aproape si poate interactiona ( mouse+tastatura de langa monitor, sau poate monitor cu touchscreen) sa porneaza aplicatia.

http://www.ebay.com/itm/2PCS-RCWL-0516-Microwave-Radar-Sensor-Module-Human-Body-Induction-Switch-Module-/201927410565?hash=item2f03cfc385:g:KP0AAOSwq1JZHLZ8

Funcționează la perfecțiune.

Dacă vrei să îi restrângi raza de acțiune îi faci o parabolă ca să restrângi unghiul sau pui sticlă în fața lui. (din ceva motiv blochează puțin semnalul la frecvența radarului)

Dacă vrei ceva și mai ieftin pui două led-uri sau un laser cu infraroșu (pentru a detecta într-un singur punct) și un fototranzistor sensibil la aceeași frecvență. Lumina de la led pe frecvența filtrată va fi constantă dacă nu e nimic în fața lui, dacă apare ceva în față semnalul de la fototranzistor pe frecvența filtrată crește. Cel mai optim e să folosești un led și fototranzistor de telecomandă-televizor (dar fără codor-decodor, deci dacă îmi amintesc bine encoder-ul de scroll dintr-un mouse ar fi mai optim).

Ultrasunetele sunt bune doar la detectat distanța între pereți sau distanța în general. Senzorul pir este imprevizibil și trebuie să se încălzească.

EDIT: Am uitat cel mai important lucru, poți folosi pur și simplu o cameră web de 10-20 lei de la târgul de vechituri/de pe olx dacă ai un linux/windows, pui un led IR să ai lumină mereu și folosești opencv/ceva librărie js ca să detectezi mișcare sau fața. E cel mai simplu fiindcă e direct pe usb.

2 Likes

pentru distanta poti folosi cu succes senzorul asta https://create.arduino.cc/projecthub/vinicius-lopes/parking-sensor-with-arduino-53e598?ref=platform&ref_id=424_trending___&offset=3
extra, poate te intereseaza si senzorii interni din pc - https://create.arduino.cc/projecthub/zakrzu/arduino-pc-monitor-66c07a?ref=platform&ref_id=424_trending___&offset=4
mai sunt si alte proiecte cu alti senzori de miscare, da o cautare pe https://create.arduino.cc/projecthub

1 Like

Buna si ideea cu OpenCv, m-am jucat putin cu el, e distractiv. O sa merg pe deviza “less is more” si am sa incerc modulul cu radar, pare ce trebuie :slight_smile:

Ca fapt divers am făcut următorul program pentru RCWL-0516 cu Arduino Nano și un SSR Omron :

/*
 * Motion sensor with RCWL-0516 module
 */

#include <Arduino.h>

#define SSRpin 5
#define SENSORpin 2
#define ONseconds 120
#define WaitSeconds 30

long lastTime = 0;
long waitTime = 0;
bool isON = 0;
bool motionS = 0;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(SENSORpin, INPUT);
  pinMode(SSRpin, OUTPUT);

}

void loop()
{
 unsigned long currentMillis = millis();
  motionS = digitalRead(SENSORpin);
  if(!isON && motionS){
    lastTime = currentMillis;
    ON();
  }

  if (isON && ( currentMillis - lastTime > ONseconds*1000L) && !waitTime ) {
    waitTime = currentMillis;
  }

  if(waitTime > 0) {
    if (motionS) {
      lastTime = currentMillis;
      waitTime = 0;
  }
 }
 if((currentMillis - waitTime > WaitSeconds*1000L) && waitTime) {
   lastTime = 0;
   waitTime = 0;
   OFF();
 }
}

void ON(){
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(SSRpin, HIGH);
  isON = 1;
}
void OFF(){
  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(SSRpin, LOW);
  isON = 0;
}

#define ONseconds 120
#define WaitSeconds 30

ONSeconds sunt secundele în care lumina e aprinsă și nu ne mai uităm dacă e cineva în camera sau nu după ce e detectată mișcare, WaitSeconds e numărul de secunde după ce expiră ONseconds în care ne uităm dacă mai e mișcare în cameră și resetăm timerele dacă e în acel interval, dacă nu oprim lumina.

2 Likes