ultrasoon sensor met rgb strip.

IDE gerelateerde berichten
Berichten: 6
Geregistreerd: 10 Jul 2013, 09:23

ultrasoon sensor met rgb strip.

Berichtdoor nawikre » 10 Jul 2013, 09:36

Hallo Mensen,

ik ben nog steeds erg nieuw met arduino en ben begonnen aan een klein project. Iemand heeft een max sensor gekoppeld aan een arduino en een rgb strip. De bedoeling hiervan is dat wanneer je dichterbij de sensor komt de ledstrip feller gaat branden. Dit is de code hiervoor.

Code: Alles selecteren
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
 
 
//-----MAXSONAR SENSOR----------
//http://arduino.cc/forum/index.php?topic=64102.0
const int pwPin = 7;

long pulse, cm;
long old_cm = 0;

//stores the distance of the previous cycle
long old_b;
long new_b;

//------------------------------
 
void setup() {
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
 
  Serial.begin(9600);
  pinMode(pwPin, INPUT);
 
}
 
 
void loop() {
 
  pulse = pulseIn(pwPin, HIGH);
  cm = pulse/58;   //pulse width is 58uS per cm

  Serial.print(cm);
  Serial.println(": cm");
  delay(5);

  if (cm < 16) {
    cm = 0;
    Serial.println(" 0");
  } else if (cm < 20) {
    Serial.println(" 1");
    cm = 20;
  } else if (cm < 30) {
    Serial.println(" 2");
    cm = 30;
  } else if (cm < 40) {
    Serial.println(" 3");
    cm = 40;
  } else if (cm < 50) {
    Serial.println(" 4");
    cm = 50;
  } else if (cm < 60) {
    Serial.println(" 5");
    cm = 60;
  } else if (cm < 70) {
    Serial.println(" 6");
    cm = 70;
  } else if (cm < 80) {
    Serial.println(" 7");
    cm = 80;
  } else if (cm < 90) {
    Serial.println(" 8");
    cm = 90;
  } else if (cm < 100) {
    Serial.println(" 9");
    cm = 100;
  } else if (cm < 110) {
    Serial.println(" 10");
    cm = 110;
  } else if (cm < 120) {
    Serial.println(" 11");
    cm = 120;
  } else if (cm < 130) {
    Serial.println(" 12");
    cm = 130;
  } else if (cm < 140) {
    Serial.println(" 13");
    cm = 140;
  } else if (cm < 150) {
    Serial.println(" 14");
    cm = 150;
  } else if (cm < 160) {
    Serial.println(" 15");
    cm = 160;
  } else if (cm < 170) {
    Serial.println(" 16");
    cm = 170;
  } else if (cm < 180) {
    Serial.println(" 17");
    cm = 180;
  } else if (cm < 190) {
    Serial.println(" 18");
    cm = 190;
  } else {
    Serial.println(" 19");
    cm = 200;
  }

// you can go on depending on how far you want the interactivity of the sign to reach
//  } else if (cm < 210) {
//    Serial.println(" 20");
//    cm = 210;
//  } else if (cm < 220) {
//    Serial.println(" 21");
//    cm = 220;
//  } else if (cm < 230) {
//    Serial.println(" 22");
//    cm = 230;
//  } else if (cm < 240) {
//    Serial.println(" 23");
//    cm = 240;
//  } else if (cm < 250) {
//    Serial.println(" 24");
//    cm = 250;
//  } else if (cm < 260) {
//    Serial.println(" 25");
//    cm = 260;
//  } else if (cm < 270) {
//    Serial.println(" 26");
//    cm = 270;
//  } else if (cm < 280) {
//    Serial.println(" 27");
//    cm = 280;
//  } else if (cm < 290) {
//    Serial.println(" 28");
//    cm = 290;
//  } else {
//    Serial.println(" 29");
//    cm = 300;
//  }
 
 
  new_b = map(cm, 20, 200, 255, 0);
  old_b = map(old_cm, 20, 200, 255, 0);
//  Serial.print(new_b);
//  Serial.println(": brightness");
//  Serial.print(cm);
//  Serial.println(": cm");

 
  if (old_b <= new_b){
    for (long z = old_b; z < new_b; z++) {
        analogWrite(REDPIN, z);
        analogWrite(BLUEPIN, z);
        analogWrite(GREENPIN, z);
        delay(2);
    }
  }
  else {
    for (long z = old_b; z > new_b; z--) {
       analogWrite(REDPIN, z);
       analogWrite(BLUEPIN, z);
       analogWrite(GREENPIN, z);
       delay(2);
    }
 
  }
 
  old_cm = cm;
 
}


Nu zit ik met het probleem dat ik geen max sensor gebruik, maar een hc-sr04 ultrasoon sensor. Deze werkt het beste met een library, namelijk "#include <NewPing.h>"
Nu wil ik de voorbeeldcode verwerken in de code hierboven om de bovenste code dus werkt met de hc-sr04. Maar ik krijg het niet voor elkaar. Ik krijg steeds de melding dat ' cm not declared in scope'

Dit is wat ik tot nu toe heb vermeld. (al veel mogelijkheden uitgeprobeerd) En heb de arduino tutorial over variabelen gelezen...helaas niet echt begrepen..

Code: Alles selecteren
#include <NewPing.h>
#define TRIGGER_PIN  9  // Arduino pin verbonden met trigger pin op de ultrasonic sensor.
#define ECHO_PIN     8  // Arduino pin verbonden met echo pin op de ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximale afstand die ik wil meten (in centimeters).
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup voor de pins en maximale afstand.
   
 
void setup() {
  Serial.begin(9600); // Open serial monitor op 9600 baud voor resultaat.
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {
  delay(150);                      // wacht 50ms tussen metingen (ong. 20 pings/sec).
  unsigned int uS = sonar.ping(); // Stuur meting, ontvangst meting in microseconde(uS).
  Serial.print("afstand: ");
  Serial.print(sonar.convert_cm(uS)); // Zet meettijd om in afstand en print resultaat (0 = maximale afstands bereik, geen meet resultaat)
  Serial.println("cm");
 
  if (cm < 16) {
    cm = 0;
    Serial.println(" 0");
  } else if (cm < 20) {
    Serial.println(" 1");
    cm = 20;
  } else if (cm < 30) {
    Serial.println(" 2");
    cm = 30;
  } else if (cm < 40) {
    Serial.println(" 3");
    cm = 40;
  } else if (cm < 50) {
    Serial.println(" 4");
    cm = 50;
  } else if (cm < 60) {
    Serial.println(" 5");
    cm = 60;
  } else if (cm < 70) {
    Serial.println(" 6");
    cm = 70;
  } else if (cm < 80) {
    Serial.println(" 7");
    cm = 80;
  } else if (cm < 90) {
    Serial.println(" 8");
    cm = 90;
  } else if (cm < 100) {
    Serial.println(" 9");
    cm = 100;
  } else if (cm < 110) {
    Serial.println(" 10");
    cm = 110;
  } else if (cm < 120) {
    Serial.println(" 11");
    cm = 120;
  } else if (cm < 130) {
    Serial.println(" 12");
    cm = 130;
  } else if (cm < 140) {
    Serial.println(" 13");
    cm = 140;
  } else if (cm < 150) {
    Serial.println(" 14");
    cm = 150;
  } else if (cm < 160) {
    Serial.println(" 15");
    cm = 160;
  } else if (cm < 170) {
    Serial.println(" 16");
    cm = 170;
  } else if (cm < 180) {
    Serial.println(" 17");
    cm = 180;
  } else if (cm < 190) {
    Serial.println(" 18");
    cm = 190;
  } else {
    Serial.println(" 19");
    cm = 200;
}
}



Wie kan mij helpen om cm te declaren zodat ik verder kan knutselen.

bedankt

Advertisement

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: ultrasoon sensor met rgb strip.

Berichtdoor Beamer » 10 Jul 2013, 09:45

Zover ik het kan bekijken heb je de variabele cm niet gedeclareerd in het begin, precies wat de compiler meldt.

In je eerste code staat de regel :

long pulse, cm;

De variabele puls heb je vanwege de library misschien niet meer nodig maar e variabele cm gebruike je nog wel in je tweede sketch.
Dus moet je hem declareren :
long cm;
Laatst gewijzigd door Beamer op 10 Jul 2013, 09:50, in totaal 1 keer gewijzigd.

Berichten: 6
Geregistreerd: 10 Jul 2013, 09:23

Re: ultrasoon sensor met rgb strip.

Berichtdoor nawikre » 10 Jul 2013, 09:48

ben nog even gaan zoeken en lezen...

ik heb nu onder de regel
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup voor de pins en maximale afstand.

dit ingevoerd

int cm;

Ik weet alleen niet of het goed is....hij geeft geen meldingen meer...

Berichten: 6
Geregistreerd: 10 Jul 2013, 09:23

Re: ultrasoon sensor met rgb strip.

Berichtdoor nawikre » 10 Jul 2013, 09:56

Het is tot zover gelukt....ik heb een aantal aanpassingen gedaan en kom op deze code uit...

bedankt zover.

Code: Alles selecteren
#include <NewPing.h>
#define TRIGGER_PIN  9  // Arduino pin verbonden met trigger pin op de ultrasonic sensor.
#define ECHO_PIN     8  // Arduino pin verbonden met echo pin op de ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximale afstand die ik wil meten (in centimeters).
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup voor de pins en maximale afstand.

long cm;
long old_cm = 0;

//bewaard oude afstanden in de cyclus
long old_b;
long new_b; 
 
 
void setup() {
  Serial.begin(9600); // Open serial monitor op 9600 baud voor resultaat.
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {
  delay(150);                      // wacht 50ms tussen metingen (ong. 20 pings/sec).
  unsigned int uS = sonar.ping(); // Stuur meting, ontvangst meting in microseconde(uS).
  Serial.print("afstand: ");
  Serial.print(sonar.convert_cm(uS)); // Zet meettijd om in afstand en print resultaat (0 = maximale afstands bereik, geen meet resultaat)
  Serial.println("cm");
 
 
  if (cm < 16) {
    cm = 0;
    Serial.println(" 0");
  } else if (cm < 20) {
    Serial.println(" 1");
    cm = 20;
  } else if (cm < 30) {
    Serial.println(" 2");
    cm = 30;
  } else if (cm < 40) {
    Serial.println(" 3");
    cm = 40;
  } else if (cm < 50) {
    Serial.println(" 4");
    cm = 50;
  } else if (cm < 60) {
    Serial.println(" 5");
    cm = 60;
  } else if (cm < 70) {
    Serial.println(" 6");
    cm = 70;
  } else if (cm < 80) {
    Serial.println(" 7");
    cm = 80;
  } else if (cm < 90) {
    Serial.println(" 8");
    cm = 90;
  } else if (cm < 100) {
    Serial.println(" 9");
    cm = 100;
  } else if (cm < 110) {
    Serial.println(" 10");
    cm = 110;
  } else if (cm < 120) {
    Serial.println(" 11");
    cm = 120;
  } else if (cm < 130) {
    Serial.println(" 12");
    cm = 130;
  } else if (cm < 140) {
    Serial.println(" 13");
    cm = 140;
  } else if (cm < 150) {
    Serial.println(" 14");
    cm = 150;
  } else if (cm < 160) {
    Serial.println(" 15");
    cm = 160;
  } else if (cm < 170) {
    Serial.println(" 16");
    cm = 170;
  } else if (cm < 180) {
    Serial.println(" 17");
    cm = 180;
  } else if (cm < 190) {
    Serial.println(" 18");
    cm = 190;
  } else {
    Serial.println(" 19");
    cm = 200;
}
new_b = map(cm, 20, 200, 255, 0);
  old_b = map(old_cm, 20, 200, 255, 0);
//  Serial.print(new_b);
//  Serial.println(": brightness");
//  Serial.print(cm);
//  Serial.println(": cm");

 
  if (old_b <= new_b){
    for (long z = old_b; z < new_b; z++) {
        analogWrite(REDPIN, z);
        analogWrite(BLUEPIN, z);
        analogWrite(GREENPIN, z);
        delay(2);
    }
  }
  else {
    for (long z = old_b; z > new_b; z--) {
       analogWrite(REDPIN, z);
       analogWrite(BLUEPIN, z);
       analogWrite(GREENPIN, z);
       delay(2);
    }
 
  }
 
  old_cm = cm;
 

}



Hij geeft in de seriele monitor de juiste afstanden weer. nu ff verder testen...

bedankt zover. Ik denk dat het kwartje is gevallen

Berichten: 6
Geregistreerd: 10 Jul 2013, 09:23

Re: ultrasoon sensor met rgb strip.

Berichtdoor nawikre » 14 Jul 2013, 13:01

Hoewel de code goed en en de afstanden worden gemeten, doet de rgb strip niets als ik 12V op de arduino zet.

Wat klopt er dan niet aan de code.?

Het resultaat moet zijn dat hoe dichter je bij de ultrasoon sensor komt des te feller de rgb strip (kleur rood) gaat branden.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: ultrasoon sensor met rgb strip.

Berichtdoor pjh » 14 Jul 2013, 13:36

HOe heb je de ledstrip aangesloten?
Vaak werken ze op 12 volt.

Berichten: 6
Geregistreerd: 10 Jul 2013, 09:23

Re: ultrasoon sensor met rgb strip.

Berichtdoor nawikre » 14 Jul 2013, 13:43

Ieder kanaal met een mosfet en de 12V aansluiting op de Vin van de arduino. Ledstrip werkt gewoon als ik een ander script neem....zoals 30cm is rood 50cm is groen. Dit werkt gewoon, maar dit samengestelde script werkt dus niet....

Hij meet de afstanden wel goed, maar doet verder niets met de 'IF' data. Om de gemeten afstanden een cijfer te geven die onderaan dan omgezet moet worden in pwm helderheid. Ik zie iets over het hoofd en hoop dat iemand mij erop kan wijzen.

Dit is de originele code die werkt op de maxsonar sensor XL MaxSonar EZ1 MB1210
Code: Alles selecteren
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
 
 
//-----MAXSONAR SENSOR----------
//http://www.maxbotix.com/Ultrasonic_Sensors/People_Sensors.htm
const int pwPin = 7;

long pulse, cm;
long old_cm = 0;

//stores the distance of the previous cycle
long old_b;
long new_b;

//------------------------------
 
void setup() {
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
 
  Serial.begin(9600);
  pinMode(pwPin, INPUT);
 
}
 
 
void loop() {
 
  pulse = pulseIn(pwPin, HIGH);
  cm = pulse/58;   //pulse width is 58uS per cm

  Serial.print(cm);
  Serial.println(": cm");
  delay(5);

  if (cm < 16) {
    cm = 0;
    Serial.println(" 0");
  } else if (cm < 20) {
    Serial.println(" 1");
    cm = 20;
  } else if (cm < 30) {
    Serial.println(" 2");
    cm = 30;
  } else if (cm < 40) {
    Serial.println(" 3");
    cm = 40;
  } else if (cm < 50) {
    Serial.println(" 4");
    cm = 50;
  } else if (cm < 60) {
    Serial.println(" 5");
    cm = 60;
  } else if (cm < 70) {
    Serial.println(" 6");
    cm = 70;
  } else if (cm < 80) {
    Serial.println(" 7");
    cm = 80;
  } else if (cm < 90) {
    Serial.println(" 8");
    cm = 90;
  } else if (cm < 100) {
    Serial.println(" 9");
    cm = 100;
  } else if (cm < 110) {
    Serial.println(" 10");
    cm = 110;
  } else if (cm < 120) {
    Serial.println(" 11");
    cm = 120;
  } else if (cm < 130) {
    Serial.println(" 12");
    cm = 130;
  } else if (cm < 140) {
    Serial.println(" 13");
    cm = 140;
  } else if (cm < 150) {
    Serial.println(" 14");
    cm = 150;
  } else if (cm < 160) {
    Serial.println(" 15");
    cm = 160;
  } else if (cm < 170) {
    Serial.println(" 16");
    cm = 170;
  } else if (cm < 180) {
    Serial.println(" 17");
    cm = 180;
  } else if (cm < 190) {
    Serial.println(" 18");
    cm = 190;
  } else {
    Serial.println(" 19");
    cm = 200;
  }

// you can go on depending on how far you want the interactivity of the sign to reach
//  } else if (cm < 210) {
//    Serial.println(" 20");
//    cm = 210;
//  } else if (cm < 220) {
//    Serial.println(" 21");
//    cm = 220;
//  } else if (cm < 230) {
//    Serial.println(" 22");
//    cm = 230;
//  } else if (cm < 240) {
//    Serial.println(" 23");
//    cm = 240;
//  } else if (cm < 250) {
//    Serial.println(" 24");
//    cm = 250;
//  } else if (cm < 260) {
//    Serial.println(" 25");
//    cm = 260;
//  } else if (cm < 270) {
//    Serial.println(" 26");
//    cm = 270;
//  } else if (cm < 280) {
//    Serial.println(" 27");
//    cm = 280;
//  } else if (cm < 290) {
//    Serial.println(" 28");
//    cm = 290;
//  } else {
//    Serial.println(" 29");
//    cm = 300;
//  }
 
 
  new_b = map(cm, 20, 200, 255, 0);
  old_b = map(old_cm, 20, 200, 255, 0);
//  Serial.print(new_b);
//  Serial.println(": brightness");
//  Serial.print(cm);
//  Serial.println(": cm");

 
  if (old_b <= new_b){
    for (long z = old_b; z < new_b; z++) {
        analogWrite(REDPIN, z);
        analogWrite(BLUEPIN, z);
        analogWrite(GREENPIN, z);
        delay(2);
    }
  }
  else {
    for (long z = old_b; z > new_b; z--) {
       analogWrite(REDPIN, z);
       analogWrite(BLUEPIN, z);
       analogWrite(GREENPIN, z);
       delay(2);
    }
 
  }
 
  old_cm = cm;
 
}

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast