Go Down

Topic: Ultraschallsensor (Read 1 time) previous topic - next topic

11nemesis

Hi, ich möchte eine Led über Abstand mit einem HC-SR04 Ultraschallsensor dimmen.
z.B. Bei 50cm Abstand soll die Led 50% gedimmt sein
      Bei 0 cm  Abstand zu 100% leuchten
      Bei 100cm soll sie aus sein

Des ganze sollte aber fliesend funktionieren so das der Abstand im Verhältnis zur Dimmung seht.

Ich habe mit dem Code des "Arduino Zollstocks" http://www.hjberndt.de/soft/ardping.html und dem "Fading" Code unter den Beispielen ein bisschen rum gespielt.

Aber ich komm einfach zu keiner vernünftigen Lösung  :~

Könnt ihr mir bitte Helfen so einen Code zu schreiben oder einen Denkansatz geben wie ich das lösen kann?
Ich bin leider noch nicht so fit auf dem Gebiet programmieren  :smiley-red:



 

pylon

Zeig uns mal den Code, den Du am weitesten entwickelt hast.

Ein Problem dürfte sein, dass der HC-SR04 Objekte, die näher als etwa 10cm sind nicht mehr "sieht". Ansonsten liest Du den Abstand ein, ziehst ihn von 100 ab und verwendest das für die Ausgabe auf die LED.

11nemesis

Hallo pylon, danke für deine Antwort.

Ich habe einmal den Code von dem Sensor und den Dimm Code. Alles was ich bis jetzt zusammengebastelt habe ist für n A****.
Wie meinst du das " Ansonsten liest Du den Abstand ein, ziehst ihn von 100 ab und verwendest das für die Ausgabe auf die LED"

Code: [Select]

int pingPin = 13;
int inPin = 12;
int LED = 11; //LED die Gedimmt werden soll

void setup() {
Serial.begin(9600);
}

void loop()
{

long duration, inches, cm;

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);


pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);

inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

Serial.println(cm, DEC);

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}


Code: [Select]
/*
Fading

This example shows how to fade an LED using the analogWrite() function.

The circuit:
* LED attached from digital pin 9 to ground.

Created 1 Nov 2008
By David A. Mellis
modified 30 Aug 2011
By Tom Igoe

http://arduino.cc/en/Tutorial/Fading

This example code is in the public domain.

*/


int ledPin = 9;    // LED connected to digital pin 9

void setup()  {
  // nothing happens in setup
}

void loop()  {
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect   
    delay(30);                           
  }

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect   
    delay(30);                           
  }
}

pylon

Im einfachsten Fall wäre das in etwa:

Code: [Select]
int value = abs(100-cm) * 255 / 100;
if (value < 0) value = 0;
analogWrite(LED, value);

dertester

Wenn du den Abstand hast dann nutz einfach die map-funktion.
Deinen Maximalen Abstand musst du ja einstellen für den SR04, dass kannste als obere Grenze auch für den map befehl nehmen.

Dann noch ne if-abfrage davor, wenn es größer als der maximale und kleiner als 10 ist und dann hast du es :D

11nemesis


Go Up