Ultraschallsensor

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 :blush:

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.

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"

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;
}
/*
 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);                            
  } 
}

Im einfachsten Fall wäre das in etwa:

int value = abs(100-cm) * 255 / 100;
if (value < 0) value = 0;
analogWrite(LED, value);

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 :smiley:

Danke!