Showing posts with label Tutorial. Show all posts
Showing posts with label Tutorial. Show all posts

Sunday, May 20, 2012

Flame Detector Sensor, Arduino Tutorial


This is a sample code to show how this cheap component from DealExtreme works with Ardunio (2.5$ with free shipping). These are very useful sensors for building [b]firefighting robots[/b]  :D  Look at the sample code for more info.
Sensor detecting match flame


purchase link:
http://www.dealextreme.com/p/arduino-flame-sensor-for-temperature-detection-blue-dc-3-3-5v-118075

OBS1: I assume this component uses Infrared and should be in direct sight to detect flame. This would work easily on big flames but for a match flame (very small), it could miss it.
OBS2: I read the values with analogRead but I guess they are readable with Digital Read as well as differences are quite high.
-------------------------
/*
  FLAME detector connected to Arduino
  http://www.dealextreme.com/p/arduino-flame-sensor-for-temperature-detection-blue-dc-3-3-5v-118075

 Developer:
 Akbar (Shahab) F. Moghaddam
 20.05.12

 Comment : I assume this component uses Infrared and should be in direct sight to detect flame. This would work easily on big flames but for a match flame (very small), it could miss it.

 */

//CONSTANTS
const int pinD0 = 0;
const int pinA0 = 1;

//VARIABLE
int A = -999;
int D = -999;
int readVal = 0;
boolean logging = false;
boolean fire = false;
boolean changed = true;


void setup() {              
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  Serial.begin(19200);
}

void loop() {
  initialAll();
  readValues();
  loggingProcess();
  if (changed)
    printState();
  delay(1000);// wait for a second
}

void initialAll(){
  readVal = 0;
}

void readValues(){
  A = analogRead(pinA0);
  D = analogRead(pinD0);
  fireCheck();
  if (Serial.available()>0){
    readVal = Serial.read();
  }
}

void loggingProcess(){
  if (readVal == 'l'){
    if (logging)
      logging = false;
    else
      logging = true;
  }
 
  if (logging){
    Serial.println("------------");
    Serial.println("SYUMMARY");
    Serial.print("A0:");
    Serial.println(A);
    Serial.print("D0:");
    Serial.println(D);
    Serial.println("------------");
  }
}

void printState(){
  if (fire){
    Serial.println("------------");
    Serial.println("FLAME Detected");
    Serial.println("------------");  
  }
  else{
    Serial.println("------------");
    Serial.println("NO FLAME");
    Serial.println("------------");  
  }
  changed = !changed;
}

void fireCheck(){
  if (A < 350 && D < 350){
    fire = true;
    changed = !changed;
  }
  else{
    fire = false;
    changed = !changed;  
  }
}

Quality Joystick from DealExtreme (very cheap)


Here I am about to write a tutorial about a cheap joystick I came across lately which can be bought for only 3.5$ with free shipping to Norway. It is a PS2 repair kit which can easily be used with Arduino concept as well (the input voltage is 5+). It can detect all 8 directions in 2D dimension and also Clicked feature.

Joystick tutorial

Purchase link:
http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340

Here the outputs from the joystick are only VRx, VRy, SW, GND and +5V.
VRx = x value (see program)
VRy = y value (see program)
SW = if Clicked or Not -> Clicked = 0, NOT clicked = 1

-----------------------

/*
  JOYSTICK Program connected to Arduino
 http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340

 Developer:
 Akbar (Shahab) F. Moghaddam
 20.05.12

 Comment : Front, Back, left, right
 */

//CONSTANTS
const int pinX = 2;
const int pinY = 1;
const int pinSW = 0;

//VARIABLE
int VRx = -999;
int VRy = -999;
int SW = -999;
int readVal = 0;
boolean logging = false;


void setup() {              
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  Serial.begin(19200);
}

void loop() {
  initialAll();
  readValues();
  loggingProcess();
  printState();
  delay(1000);// wait for a second
}

void initialAll(){
  readVal = 0;
}

void readValues(){
  VRx = analogRead(pinX);
  VRy = analogRead(pinY);
  SW = analogRead(pinSW);
  if (Serial.available()>0){
    readVal = Serial.read();
  }
}

void loggingProcess(){
  if (readVal == 'l'){
    if (logging)
      logging = false;
    else
      logging = true;
  }

  if (logging){
    Serial.println("------------");
    Serial.println("SYUMMARY");
    Serial.print("X:");
    Serial.println(VRx);
    Serial.print("Y:");
    Serial.println(VRy);
    Serial.print("SW is:");
    Serial.println(SW);    
    Serial.println("------------");
  }
}

void printState(){
  if (SW == 0){
    Serial.println("------------");
    Serial.println("CLICKED");
    Serial.println("------------");  
  }
  else if (VRx > 330 && VRx < 350 && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("NORMAL");
    Serial.println("------------");  
  }//NORMAL
  else if (VRx > 660 && VRx < 700 && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("FRONT");
    Serial.println("------------");
  }//FRONT
  else if (VRx < 5/*==0*/ && VRy > 325 && VRy < 350){
    Serial.println("------------");
    Serial.println("BACK");
    Serial.println("------------");
  }//BACK
  else if (VRx > 330 && VRx < 350 && VRy < 5 /*==0*/){
    Serial.println("------------");
    Serial.println("LEFT");
    Serial.println("------------");  
  }//LEFT
  else if (VRx > 330 && VRx < 350 && VRy > 665 && VRy < 700){
    Serial.println("------------");
    Serial.println("RIGHT");
    Serial.println("------------");  
  }//RIGHT
  else if (VRx > 350 && VRx < 680 && VRy > 350 && VRy < 670){
    Serial.println("------------");
    Serial.println("FRONT-RIGHT");
    Serial.println("------------");  
  }//FRONT-RIGHT
  else if (VRx >= 0 && VRx < 350 && VRy > 350 && VRy < 680){
    Serial.println("------------");
    Serial.println("BACK-RIGHT");
    Serial.println("------------");  
  }//BACK-RIGHT
  else if (VRx >= 0 && VRx < 330 && VRy >= 0 && VRy < 325){
    Serial.println("------------");
    Serial.println("BACK-LEFT");
    Serial.println("------------");  
  }//BACK-LEFT
  else if (VRx > 350 && VRx < 680 && VRy >= 0 && VRy < 325){
    Serial.println("------------");
    Serial.println("FRONT-LEFT");
    Serial.println("------------");  
  }//FRONT-LEFT
  else{
    Serial.println("------------");
    Serial.println("UNKNOWN");
    Serial.println("------------");  
  }//UNKNOWN
}