New with sensors

Hi guys,

I really need your help.

Basically I have this Sharp sensor

http://docs-europe.electrocomponents.com/webdocs/0a71/0900766b80a71447.pdf

and what I need it to do is when it detects any movement, trigger a fan for 5 seconds

then sensor is on pin 0 and the fan is on pin 13

Please help.

Thanks

That sensor has an analogue output so you have to run it into one of the analogue pins, not pin 0.

Then read the value with analogRead(), decide if the value is different to the last reading and if so start the fan and also start a timer. After 5 seconds stop the fan.


Rob

Hi,

Thanks for getting back to me.

Okay so how would I go about programming that?

int sensorPin = A0; //sensonr
int fanPin = 13; // fan
int sensorValue = 0; // variable to store the value coming from the sensor

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(fanPin, OUTPUT);
}

void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(fanPin, HIGH);
// stop the program for milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(fanPin, LOW);
// stop the program for for milliseconds:
delay(sensorValue);
}

What you have there is a lot different to the problem stated in the OP.

If you want the LED to flash at different speeds according the the value read from the sensor that yes that looks good.


Rob

erm no hahha

I just want it to go on for 5 secs when the sensor picks something up,

so far nothing is happening :frowning: at all

So what's with the code? Just print the values you're getting from the sensor to the serial monitor to get an idea of what's happening.


Rob

how do I do that?

when I do it, it just keeps coming up with 0

Post the actual code you are using and a schematic or description of the circuit you have.


Rob

int sensorValue = 0;

The sensorvalue could be between 0 and 1023, so you should use

unsigned long sensorValue = 0;

and your test for starting the fan somthing like

if (sensorValue >500){

digitalWrite(fanPin, HIGH);
delay(5000);
digitalWrite(fanPin, LOW);

}

int sensorPin = A0; // select the input pin for the ir sensor
int fanPin = 13; // select the pin for the fan
int sensorValue = 0; // variable to store the value coming from the sensor

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(fanPin, OUTPUT);
}

void loop() {

if (sensorValue >500)

digitalWrite(fanPin, HIGH);
delay(5000);
digitalWrite(fanPin, LOW);
}

That code doesn't print anything, refer to reply #8.


Rob

hey, yea sorry,

I managed to get it printing now,

now im trying to get this to trigger the thing for light/fan for 5 seconds when it senses anything

Well when you get the urge to share some data we'll be here :slight_smile:


Rob

that was the code I used to get it to read the IR pin

int IRpin = 0; // analog pin for reading the IR sensor
void setup() {
Serial.begin(9600); // start the serial port
}
void loop() {
float volts = analogRead(IRpin)0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
float distance = 65
pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
Serial.println(distance); // print the distance
delay(100); // arbitary wait time.
}

So i think what I'm doing is sending a voltage to the sensor in order for it to read a distance? (which seems a bit jumpy)

And then how do I get it to trigger the lights?

int IRpin = 0;
// select the input pin for the potentiometer
int fanPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor

// analog pin for reading the IR sensor
void setup() {
Serial.begin(9600);
// start the serial port
}
void loop() {
float volts = analogRead(IRpin)0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
float distance = 65
pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
Serial.println(distance); // print the distance
delay(100);
sensorValue = analogRead(IRpin);

if (sensorValue >75)

digitalWrite(fanPin, HIGH);
delay(5000);
digitalWrite(fanPin, LOW);

}

The problem im having with this is it not triggering at the same spot (where im holding my hand) each time

Sorry but I can't keep up, that's about 4 totally different pieces of code, we still don't know what values the sensor is returning, and now we have complicated floating point maths just (I gather) to turn on a LED/fan when something gets close.

sending a voltage to the sensor

You are (I assume, still haven't seen a schematic) supplying the sensor with 5v but you aren't "sending" it anything, you are reading the sensor's output.

And then how do I get it to trigger the lights?

What lights, a minute ago it was a fan. Or do you mean the LED on pin 13?

State the project goals clearly, is it movement or proximity you need to measure? Does the fan/whatever start when X happens and stop 5 seconds later even if X is still happening, or should it start when X happens then stop 5 seconds after X stops. etc etc.

EDIT: Make that 5 pieces of code :slight_smile:


Rob

What's the floating point for?

What values are being received from the sensor?

is it not triggering at the same spot (where im holding my hand) each time

Check the data sheet

Detection Accuracy @ 80 cm: ±10 cm

It's not very accurate. Is you hand within 20cm of the same place each time?

It doesn't say what the repeatability is but this is obviously not an accurate sensor.


Rob

Hi,

Yea sorry I'm probably jumping around and I think Ive just totally confused myself too.

Okay this fan/led pin basically its going in pin 13 (I want it to be a fan but at the moment I am usage an LED as I have not got the fan yet)

What I want to achieve is when ANY motion is detected, I want to trigger the fan/led to go on for 5 seconds

I don't care about distance or anything.

Basically I'm completely clueless.

What do I have to do to make the sensor work and have it trigger the fan/led for 5 seconds.

Sorry