Arduino port"afbryder" (Læst 5795x)

Offline martinbjerre

  • Jordet Basic
  • **
  • Indlæg: 151
  • Antal brugbare Indlæg: 10
    • Vis profil
Arduino port"afbryder"
« Dato: Marts 30, 2015, 20:04:40 »

En af mine venner har et hobbyværksted, naturligvis med lift. Lofthøjden er dog begrænset, og det har skabt problemer med hans port. Konen kom hjem, mens en bil var på liften, og ude fra hendes bil trykkede hun på fjernbetjeningen til porten. Resultatet var en bule i taget på den bil der hang på liften.
Eftersom jeg benytter værkstedet, så jeg en mulighed for at lade en arduino måle afstanden med ultralyd fra loft til gulv, og dermed skabe mulighed for at afbryde porten. Ydermere gav det mulighed for at give alarm hvis bilen kommer for tæt på loftet.
Den gule LED angiver at der er under 20cm til loftet, og afbryder strømmen til porten.
Den røde angiver at der er under 8cm, og så er det tid til at stoppe liften :)
Jeg har brugt en ProMini og en HC-SR04 pga prisen i kina.
Den manglende hc-sr04 på billedet, skyldes min manglende evne til at importere den :)


Kode:
/*
Arduino ultrasonic distance alarm with 3 outputs
*/
//Include dir Ultrasonic.h
#include "Ultrasonic.h"

//init sonic ports Trigger - 6 - e Echo - 7
Ultrasonic ultrasonic(6,7);

//Pin config
const int ledgreen = 11;
const int ledyellow = 12;
const int ledred = 13;

long microsec = 0;
float distanceCM = 0;

void setup () {


pinMode(ledgreen,OUTPUT); //Def. output.
pinMode(ledyellow,OUTPUT); //Def. output.
pinMode(ledred,OUTPUT); //Def. output.
}

void loop () {
microsec = ultrasonic.timing(); //sensor
distanceCM = ultrasonic.convert(microsec, Ultrasonic::CM); //Convert distance to CM

ledDistance();

}

//Name LED func.
void ledDistance () {

//LED on func
digitalWrite(ledgreen,LOW);
digitalWrite(ledyellow,LOW);
digitalWrite(ledred,LOW);

//Distance control
if (distanceCM > 20) {
digitalWrite(ledgreen,HIGH);
}

if (distanceCM <=20) {
digitalWrite(ledyellow,HIGH);
}

if (distanceCM < 8) {
digitalWrite(ledred,HIGH);
}
}