Voorkomen dat inputport onterecht wordt getriggerd

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor FonzieBonzo » 10 Nov 2015, 10:31

Een servo geeft een slinger aan een klepel van een bel op het moment dat er op de deurbelknop wordt gedrukt.
De deurbelknop zit aan een INPUT_PULLUP port maar deze gaat ook wel eens af als er niet op de deurbelknop wordt gedrukt.
Ik heb het gevoel dat dit met name voorkomt bij wind en regen. De deurbelknop heb ik al vervangen door een nieuwe maar ik denk
dat het door de slechte vochige bedrading komt. Deze is helaas niet eenvoudig te vervangen.

Is er een andere manier waarmee ik de false-positive kan uitsluiten.
Een extra pull-up weerstand toevoegen of maakt het nog uit of ik juist over ga naar een pull-down weerstand en tot hoe ver mag ik gaan met de weerstand?
Of zou het eenvoudig zijn om het signaal te coderen / de-coderen ?




cpp code
#include <Servo.h>

Servo myservo;

int PauzePositie = 150;
int Loep = 2;

int BeginPos = 25;
int EndPos = 100;

int ServoPin = 9;
int DrukknopPin =2;


void setup() {
pinMode(2, INPUT_PULLUP);
}

void loop() {

if (digitalRead(DrukknopPin) == LOW) {
myservo.attach(ServoPin);
for (int i = 1; i <= Loep; i++) {
myservo.write(BeginPos);
delay(PauzePositie);
myservo.write(EndPos);
delay(PauzePositie);
myservo.write(BeginPos);
delay(PauzePositie);
}
myservo.detach();
delay(2000);
}
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor nicoverduin » 10 Nov 2015, 10:41

Als je twijfelt over de bedrading wordt het wel heel moeilijk :).
Wat je nog zou kunnen doen is dat als hij ingedrukt is, ff een seconde oid wachten en dan testen of hij nog steeds ingedrukt is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor FonzieBonzo » 10 Nov 2015, 11:30

Ok heb ik aangepast en ga het vanavond uitproberen.
Maar je vawacht niet dat ik de drempel kan verhogen door de pull-up/down weerstand te verkleinen?
Het zal namelijk geen breuk zijn in de draad maar een lekspanning wat de arduino al triggerd .



cpp code
#include <Servo.h>

Servo myservo;

int PauzePositie = 150;
int Loep = 2;

int BeginPos = 25;
int EndPos = 100;

int ServoPin = 9;
int DrukknopPin = 2;

int Ingedrukt = 0;


void setup() {
pinMode(2, INPUT_PULLUP);
}

void loop() {

delay(1);
if (digitalRead(DrukknopPin) == LOW){
Ingedrukt=Ingedrukt+1;
} else
{
Ingedrukt=0;
}

if (Ingedrukt>200) {
myservo.attach(ServoPin);
for (int i = 1; i <= Loep; i++) {
myservo.write(BeginPos);
delay(PauzePositie);
myservo.write(EndPos);
delay(PauzePositie);
myservo.write(BeginPos);
delay(PauzePositie);
}
myservo.detach();
delay(2000);
Ingedrukt=0;
}
}

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor FPCUser » 10 Nov 2015, 15:06

Als eens overwogen om de beldrukker aan te sluiten op een analoge ingang?

Achtergrond: bepaalde plc module's hebben op draadbreuk beveiligde ingangen.
Je kan dit 'nabouwen' door over het kontakt een weerstand te plaatsen en aan het eind v/d kabel een afsluitweerstand.
Samen met een trekweerstand van ingang naar aarde heb je een circuit.
Je meet dan als het ware de ruststroon door je kabel.
Afhankelijk van je kontakt (maker of breker) wordt de lusweerstand resp. lager of hoger wat weer effect heeft op de lusstroom.
En dat kun je dus meten (U=IxR) op de analoge ingang.

Hier een klein testbestandje om het idee wat voeten te geven.
Geheel naar eigen behoefte aan te passen.

N.B.
De case constructie heeft een eigenschap die naar mijn idee nog te weinig wordt toegepast.
Namelijk dat je een range kunt opgeven i.p.v groter dan en kleiner dan.
Maar dit terzijde.


cpp code
byte pins[] = {A0, A1, A2, A3, A4, A5};   // draadbreukingangen
byte ingang[6]; // resultaatarray
unsigned int rlo;

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

void loop() {
boolean fout = breukdetectie();
Serial.println(ingang[0]);
delay(5000);
}

boolean breukdetectie() {
/*
Geeft true terug als een of meerdere ingangen
aderonderbreking hebben of kortgesloten zijn.
*/
for (int n = 0; n < 6; n++) {
ingang[n] = leesAnaloogIn(pins[n]);
if (ingang[n] == 1 or ingang[n] == 2) {
return (true);
} else {
return (false);
}
}
}

byte leesAnaloogIn(byte pinNr) {
/*
Bepaal kontakt open/dicht met draadbreukdetectie
invoer: analoge pin A0..A5 (Uno) A0..A15 (Mega)
uitvoer 1 = aarders kortgesloten
2 = draadbreuk
3 = kontakt is open
4 = kontakt is gesloten

afsluitweerstand: 1K8
weerstand over kontakt: 4K7
trekweerstand ingang naar aarde: 6K8
*/
int waarde = analogRead(pinNr);
switch (waarde) {
case 0 ... 400:
return (2); // onderbreking
break;
case 500 ... 550:
return (3); // open
break;
case 750 ... 850:
return (4); // gesloten
break;
case 900 ... 1023:
return (1); // kortgesloten
break;
} // end switch
}

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor FonzieBonzo » 10 Nov 2015, 17:03

Dat is idd ook wel een hele mooie oplossing, ik ga er mee aan de slag en laat het nog even weten...

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor shooter » 10 Nov 2015, 23:17

die analoge methode is prima natuurlijk.
je kunt zo zelfs een paar belknoppen op 1 ingang zetten, hoef jij niet meer te gaan als het voor de kids is.



de interne pull up is erg hoog, dus een druppel water is al genoeg.
pak een led en een weerstand van bijv 330 ohm naar de plus dan heb je gelijk visueel een middel.
de weerstand mag zo laag zijn dat de voeding het nog houd oja en de weerstand natuurlijk.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Voorkomen dat inputport onterecht wordt getriggerd

Berichtdoor FonzieBonzo » 11 Nov 2015, 21:32

De deurbel heb ik net voor sintmaarten een update kunnen geven.
De knop dient nu minimaal 30ms ingedrukt te worden en de pullupweerstand heb ik uitgebreid met een weerstand van 680ohm.
Tot nu toe is de bel nog niet ten onrechte afgegaan dus laat de regen maar komen. Mocht het alsnog niet goed gaan dan ga ik de knop op een analoge poort zetten zoals FPCUser voorstelde.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 40 gasten