Skip to main content

interfacing alcohol sensor with the led

Programmed the Arduino to have the alcohol sensor play with the LED display.

I had the display show either "open" or "lock" depending on the alcohol sensor level.

Here is the result:



Notice that this has a very notable flaw with respect to its potential use as a "breathalyzer lock": it stays "open" as long as there is alcohol present, which only then "lock"s. This means that currently, if you leave it alone (no breathing into it), it will keep the device unlocked.

This is something I will have to resolve.


code used for this:

int del = 5000;
int gasPin = 0;
int value = 0;
int lastValue = 0;

void setup(){
//  Serial.begin(9600);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(1, OUTPUT);

}

void loop(){
  lastValue = value;
  value = analogRead(gasPin)/2;
//  Serial.print("Sensor:");
//  Serial.println(value);

  if(value - lastValue > 10 || value > 400) {
    lockPrint();
  } else {
    openPrint();
  }

}

void lockPrint() {
  pickDigit(1);
  digitalWrite(8, HIGH);
  digitalWrite(1, HIGH); // A
  digitalWrite(2, HIGH); // B
  digitalWrite(3, HIGH); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, HIGH); // G
  delayMicroseconds(del);
  pickDigit(2);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, LOW); // B
  digitalWrite(3, LOW); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, HIGH); // G
  delayMicroseconds(del);
  pickDigit(3);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, HIGH); // B
  digitalWrite(3, HIGH); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, HIGH); // G
  delayMicroseconds(del);
  pickDigit(4);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, HIGH); // B
  digitalWrite(3, LOW); // C
  digitalWrite(4, HIGH); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, LOW); // G
  delayMicroseconds(del);
}

void openPrint() {
  pickDigit(1);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, LOW); // B
  digitalWrite(3, LOW); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, HIGH); // G
  delayMicroseconds(del);
  pickDigit(2);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, LOW); // B
  digitalWrite(3, HIGH); // C
  digitalWrite(4, HIGH); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, LOW); // G
  delayMicroseconds(del);
  pickDigit(3);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, HIGH); // B
  digitalWrite(3, HIGH); // C
  digitalWrite(4, LOW); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, LOW); // G
  delayMicroseconds(del);
  pickDigit(4);
  digitalWrite(8, HIGH);
  digitalWrite(1, LOW); // A
  digitalWrite(2, LOW); // B
  digitalWrite(3, LOW); // C
  digitalWrite(4, HIGH); // D
  digitalWrite(5, LOW); // E
  digitalWrite(6, LOW); // F
  digitalWrite(7, HIGH); // G
  delayMicroseconds(del);
}

void pickDigit(int x){
  digitalWrite(12, LOW); // dig 1
  digitalWrite( 11, LOW); // dig 2
  digitalWrite(10, LOW); // dig 3
  digitalWrite( 9, LOW); // dig 4

  switch(x){
    case 1: digitalWrite(9, HIGH); break;
    case 2: digitalWrite(10, HIGH); break;
    case 3: digitalWrite(11, HIGH); break;
    case 4: digitalWrite(12, HIGH); break;  
  }
}

Comments

Popular posts from this blog

dabbling with cylon

I'm playing around with Cylon JS whenever I have the time. in order to use the leap motion for control, the hand control will need to communicate with the pc that is connected to the leap motion device (leap motion does not provide an arm/linux driver). it seems that Cylon devices can communicate with each other through socket.io or http, and I am currently playing around with that.

quick recollection on setting things up

If I can swear that the password is correct, then it's possible that I'm getting the ID wrong. Hadn't logged into the web server in a couple of months and was unable to SSH into it. After an hour or so, I ended up deleting the instance and recreating a clean instance (read: erasing everything). I then realized I'd been putting the wrong ID.   apt-get install sudo apt-get install Anyways, some links I visited when setting things up (pretty much a dump of whatever I copy-pasted to notes) : Raspberry Pi http://www.makeuseof.com/tag/optimize-the-power-of-your-raspberry-pi-with-raspbian/ Logging http://docs.python.org/2/howto/logging-cookbook.html Tornado - Python webserver that supports Websocket http://stackoverflow.com/questions/2924991/what-popular-webservers-have-support-for-html5-websocket http://lowpowerlab.com/blog/2013/01/17/raspberrypi-websockets-with-python-tornado/ http://stackoverflow.com/questions/11695375/tornado-identify-tra...

alcohol sensor (and some patience)

Soldered the alcohol sensor into something that is connectable: I tried to connect this to the Arduino, as I had the appropriate circuitry, but I did not get any legitimate output from it. 5V going in, 5V coming out with no variations. Nothing seems to be awry in wiring, as the circuit seems to be grounded properly (and the 5V current is flowing).  There are a couple of potential factors as to why I'm not seeing any results: - I'm using a 10k ohm resistor, while some guides (and the datasheet for the sensor) asks for 100-200k. However, there seems to be a good amount of people using 10k and getting at least some kind of result. A batch of 100k ohm resistors I ordered is on its way, so I guess I can try with them when they come. - This site  claims that these sensors take 24-48 hours for its signals to be stable. It also tells me that I should not be powering the sensor directly from the Arduino, which I have been doing, out of concern that the power draw of ...