Pages: [1]   Go Down
Author Topic: sensor schakelt niet goed  (Read 1054 times)
0 Members and 3 Guests are viewing this topic.
Beneden Leeuwen
Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

Ik heb het volgende probleem. Om mijn trapverlichting via een arduino mega te schakelen gebruik ik een aktieve sensor.
De sensor werkt dmv een zend en ontvangst led in één behuizing. Hij heeft een plus, een min en een geschakelde draad. deze draad schakelt naar de min. Deze geschakelde min zit op een digitale ingang geprogrammeerd als input_pullup. Tijdens het testen van de sensor ging de trapverlichting spontaan aan. Na meten kwam ik erachter dat de sensor in rust een negatieve spanning van ongeveer 3Volt uitgeeft en in aktieve toestand een negatieve spanning van 5 volt.
De spanning van 3volt in rust laat de arduino denken dat de sensor aktief is en daardor de trapverlichting in en uitschakelt.
Eigenlijk zou de spanning in rust 0v moeten zijn. Is er een manier om dit aan te passen?

Alvast bedankt voor het meedenken.
Groeten,
Johnny
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1899
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oplossing 1)
een spanningsdeler
onder 2V is voor arduino 0.
als je dus met 2 1K weerstanden (mogen andere waarden zijn maar best in de K grote wegens stroomverbruik) een spanningdeler maakt je van de 5 en 3 volt respectievelijk 2.5V en 1.5V

Oplossing 2
een analoge pin gebruiken en in je code schakelen op basis van de gemeten waarde

1 is volgens mij het beste.

Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

The Netherlands
Offline Offline
Edison Member
*
Karma: 47
Posts: 1535
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi comteccie.

Hoe is die sensor aangesloten en hoe meet je ?
Je hebt genoemd dat de sensor een plus, min en een geschakelde uitgang hebt.
Je hebt ook genoemd dat je de uitgang op een ingang met pull up hebt aangesloten.
Die laatste is een signaal van 0 volt of 5 volt.
Hoe word het geheel gevoed ?
Is dat uit dezelfde 5 volt als de Arduino ?
Als het niet hetzelfde is, zijn de GND's (de nul volts) met elkaar verbonden ?
Is het überhaupt wel een 5 volt voeding voor de sensor ?

Ik vraag dat omdat je het hebt over een negatief nivo maar niets hebt genoemd dat duidt op een negatieve spanning.
(wat je er niet instopt, kan er hier ook niet uitkomen).
Het kan natuurlijk zijn dat je de meter anders aan zou moeten sluiten, vandaar dat ik daar ook naar vroeg.
Dus waar zet je de meetpennen op ?
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Beneden Leeuwen
Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Het is een sensor geschikt voor 5v en zit aangesloten op de 5V van de arduino. Als de sensor aktief is wordt de uitgang negatief. Dus ten opzichte van de plus 5v wordt de uitgang een min. Ik heb hem als output_pullup gezet omdat hij dus aktief laag is.
Ik heb trouwens vanavond nog even eea nagemeten. Schijnbaar pikt de kabel waar de sensor op zit aangesloten storingen op waardoor de spanning op de uitgang niet meer stabiel is ( heb de voeding voor de ledlampjes door de dezelfde kabel lopen). Heb de sensor gedemonteerd en weer nagemeten en toen was de uitgang bij niet aktief 0,7V en bij aktief 5,01 V ( gemeten ten opzichte van de plus van de sensor dus). Dit zijn dus de waardes die ik moet hebben
Ik denk dus dat de oplossing is om voor de sensor een aparte kabel te trekken.
Heb trouwens ook nog een 12V spanning lopen om de ledlampjes te voeden. De minnen van de arduino en deze 12V voeding liggen aan elkaar. De ledlampjes zijn kant en klaar en geschikt voor 12V.
Alles word dmv van transistoren via de arduino aangestuurd.
Dit werkt allemaal perfect op de sensoren na dan.

Groeten johnny
« Last Edit: July 28, 2014, 05:28:19 pm by comteccie » Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1899
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je wilt wel input en dus niet output_pullup (als dat al bestaat)
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

The Netherlands
Offline Offline
Edison Member
*
Karma: 47
Posts: 1535
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Johnny.

Ik begrijp dat het niet altijd meevalt, zeker niet als je even snel een antwoord geeft.
Maar om een goed idee te geven van jouw installatie zodat je een passend antwoord kunt krijgen, is het wel belangrijk dat je de juiste informatie geeft.
Zie het berichtje van Jantje hierboven.
In jouw laatste bericht spreek je jezelf tegen.
Ik begrijp wel wat je bedoelt, maar ik moest het wel 2 keer lezen.

De GND is het referentie nivo bij systemen zoals de Arduino.
Daarom moet je een meting altijd doen ten opzichte van dat nivo.
Dan zie je namelijk het zelfde als wat de Arduino ziet en ook naar zit te kijken.
Van een multimeter gaat dan dus de zwarte draad (meestal met het bijschrift "com") naar GND, en dan kun je zien wat er gebeurt op je schakel uitgang van je sensor met de rode draad.
Ik had al het vermoeden dat je zo meet zoals je hierboven vertelde, omdat je aangaf een negatieve spanning te meten, terwijl die er niet kan zijn.
Je zou nu kunnen denken dat de "plus" ook een vast gegeven is en je dat daarom ook prima kunt gebruiken, maar er zijn een heleboel redenen waardoor die plus zou kunnen afwijken (stroomverbruik is daar een heel bekende van).
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Beneden Leeuwen
Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ jantje,

Je hebt gelijk, het is inderdaad input_pullup. Iets te snel getikt. smiley-mr-green

@mas3
Heb even de specs van de sensor opgezocht; http://arduino-info.wikispaces.com/InfraredDistanceSensor
en de uitgang is een npn open colecctor uitgang. Ik ging er altijd vanuit dat dit type uitgangen naar negatief schakelt.
Met jouw gegeven dat bij de arduino de GND de referentie is, meet ik toch weer iets anders namelijk ( en dan gemeten ten opzichte van de GND van de arduino) dat als de sensor in rust is de uitgang +5V uitstuurd en bij sensor aktief 0V.
Andersom gemeten (maar dat heeft dan eigenlijk geen nut), dus ten opzichte van de +5V van de arduino, is de uitgang bij rust 0V en bij aktief -5V.
Dus als ik jouw verhaal goed begrijp, met GND als referentie en uitgang +5V of 0V, zou ik de ingang op de arduino zo moeten prorammeren dat hij of 5V of 0V ziet.
Je hebt gelijk over het feit om gegevens goed te vernoemen maar gisteravond was ik aan het testen en het werkte nét niet naar behoren en dan wil je even snel een antwoord ( zoal jij al zei).
Toch bedankt voor het meedenken. Ga nu de programmering van de mega aanpassen en kijken of het beter werkt. Ik hou jullie op de hoogte.

Groeten
Johnny
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 47
Posts: 1535
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi.

De meeste (maar zeker niet allemaal) sensoren werken op die manier.
Daarmee houd je ook rekening als je een pull up ingang gebruikt.
Die dwingt een ingang namelijk naar 5 volt (ten opzichte van GND smiley-razz ) als er niets geen aansturing is.
Als er wel aansturing is, dan wint die het van de pull up weerstand, en word het te bewaken signaal "naar nul getrokken".

Bij een ingang met pull up kijk je dus met name of ie LOW is, je kunt haast aannemen dat ie HIGH is als ie niet LOW is.

Succes met je sketch, ben benieuwd naar je vorderingen.
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Beneden Leeuwen
Offline Offline
Newbie
*
Karma: 1
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nou mensen,
Ik heb mijn sketch aangepast zodat de input_pullup nou een "gewone input" is geworden. Verder heb ik de HIGH's naar LOW gezet omdat als de sensor in rust is, deze 5V uit stuurt en als hij aktief is 0V. Dit werkt nu prima. I zal mijn code even toevoegen.
Code:
/*
Trapverlichting met 13 keer inbouw led-spot en ldr om alleen in te schakelen als het donker genoeg is
*/

//LED aansluiting toewijzen
int led1 = 2;       // leds 1 t/m 13, toewijzen aan variabele van het type integer met de naam led1 t/m led13
int led2 = 3;       // en waardes 2 t/m 10, 13, 44 t/m 46
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;
int led10 = 13;
int led11 = 44;
int led12 = 45;
int led13 = 46;

// sensor aansluiting toewijzen
int b_up = 50;                     //sensor onderaan de trap, toewijzen aan variabele van het type integer met de naam b_up en waarde 50
int b_down = 51;                   //sensor bovenaan de trap, toewijzen aan variabele van het type integer met de naam b_down en waarde 51

//helderheid led toewijzen
int brightness = 0;                // helderheid led, toewijzen aan variabele van het type integer met de naam brightness en waarde 0
int brightness2 = 255;             // helderheid2 led, toewijzen aan variabele van het type integer met de naam brightness2 en waarde 255
                 
                   
//variables
static unsigned active = 0;        //wanneer het systeem aktief wordt (standaard ingesteld op 0)


//setup
void setup() {

//Ledpins instellen als output
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);

//Sensoren instellen als input
  pinMode(b_up, INPUT);       //
  pinMode(b_down, INPUT);     //

 }

//loop
void loop() {

  //Variabelen instellen gebasseerd op de staat van de sensoren
  int up = digitalRead(b_up);                                      // uitlezen staat van sensor onderaan trap
  int down = digitalRead(b_down);                                  // uitlezen staat van sensor bovenaan trap
  int sensorValue = analogRead(A0);                                // uitlezen waarde van lichtsensor op A0 en bewaren in variabele sensorValue
  float voltage = sensorValue *(5.0/1023.0);                       // waarde van sensorValue(0 tot 1023) omzetten in 0 tot 5 en bewaren in variabele voltage
 
 
  if(voltage <=2){                                                 // wanneer waarde van lichtsensor(voltage) is lager dan of gelijk aan 2, dan..
    if (up == LOW) {                                              // kijken of de onderste sensor is geaktiveerd, dan..
        if (active == 1 ) {LedOff();}                              // kijken of active 1 is. Zoja, de functie LedOff uitvoeren. Zoniet...
               else { LedOn(); }                                   // de functie LedOn uitvoeren.             
                                                             
   }                                             

if(voltage <=2){                                                   // wanneer waarde van lichtsensor(voltage) is lager dan of gelijk aan 2 dan...
    if (down == LOW) {                                            // kijken of de bovenste sensor is geaktiveerd, dan...
        if (active == 1 ) {LedOff();}                              // kijken of active 1 is. Zoja, de functie LedOff uitvoeren. Zoniet...
              else  { LedOn(); }                                   // de functie LedOn uitvoeren.             
 
      }
   }
}

void LedOn() {                                                     // Schakelt led's aan bij het naar boven gaan. Deze functie wordt aangeroepen vanuit de code op regel ...

    for (int brightness=0; brightness<=255; brightness+=5){        // led's aanschakelen met helderheid vanaf 0 naar 255(volledig aan) in stappen van 5 (dit wordt een FOR-loop genoemd)
        analogWrite(led1,brightness);                              // schakelt led 1 aan met de waarde brightness bepaalt in regel 87. Enzovoort voor alle dertien led's
        analogWrite(led2,brightness);
        analogWrite(led3,brightness);
        analogWrite(led4,brightness);
        analogWrite(led5,brightness);
        analogWrite(led6,brightness);
        analogWrite(led7,brightness);
        analogWrite(led8,brightness);
        analogWrite(led9,brightness);
        analogWrite(led10,brightness);
        analogWrite(led11,brightness);
        analogWrite(led12,brightness);
        analogWrite(led13,brightness);
        delay(100);                                                // bepaalt de vertraging tussen de dim-stappen (in milliseconden)
        }
        active = 1;                                                // zet active op 1 na het inschakelen van de led's. Deze waarde wordt weer gebruikt in de code op regel ..
       
}


void LedOff(){                                                      // Schakelt led's uit bij het naar boven gaan. Deze functie wordt aangeroepen vanuit de code op regel ...
 
    for (int brightness = 255; brightness >=0; brightness -=5) {   // led's uitschakelen met helderheid vanaf 255 naar 0(uit) in stappen van 5
        analogWrite(led1,brightness);                              // schakeld led 1 uit met de waarde brightness bepaalt in regel 104. Enzovoort voor alle dertien led's
        analogWrite(led2,brightness);
        analogWrite(led3,brightness);
        analogWrite(led4,brightness);
        analogWrite(led5,brightness);
        analogWrite(led6,brightness);
        analogWrite(led7,brightness);
        analogWrite(led8,brightness);
        analogWrite(led9,brightness);
        analogWrite(led10,brightness);
        analogWrite(led11,brightness);
        analogWrite(led12,brightness);
        analogWrite(led13,brightness);
        delay(100);                                                // bepaalt de vertraging tussen de dim-stappen (in milliseconden)
        }
        active = 0;                                                // zet active op 0 na het uitschakelen van de led's. Deze waarde wordt weer gebruikt in de code op regel...
                                                                 
}

Nu heb ik het volgende probleem. Als ik na het resetten van de arduino voor de eerste keer door een sensor loop, gaan de led´s netjes aan. Maar na het gedimd opkomen( dmv pwm) gaan ze ook weer uit... en weer aan.. en weer uit.. enz.
Ze mogen pas weer uit gaan als ik nogmaals door een sensor heen loop.
Ik heb wel ontdekt dat de sensor continu geaktiveert wordt als de led´s eenmaal branden. Nu heb ik het vermoeden dat dit wordt veroorzaakt door de pwm uitgangen want als de led´s nog uit zijn is de sensor netjes in rust. De led´s worden aangestuurd dmv van bc547 torren en hebben een aparte 12V voeding waarvan ik de GND heb verbonden met de GND van de arudino.
Iemand suggesties, oplossingen of vragen over dit probleem?

Groeten,
Johnny
Logged

Pages: [1]   Go Up
Jump to: