Relais aansturen met 3x TTP223 Touch schakelaars

Arduino specifieke Software
Berichten: 3
Geregistreerd: 04 Dec 2020, 22:57

Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Gert Vossers » 11 Dec 2020, 00:16

Goedendag
Ik ben een beginnende arduino gebruiker, heb al enkele projectjes geanalyseerd en delen daarvan aangepast. Daar leer je van. Nu ben ik bezig met een projectje die ik in de praktijk wil gaan gebruiken. In mijn werkkamer heb ik een moeilijk bereikbaar lampje. Deze wil ik door middel van een aantal aanraakschakelaars (TTP223) en met behulp van een relais aan en uit kunnen zetten. Op internet kan ik geen echt werkende sketch vinden. Bijgaand een sketch die wel (bijna) werkt maar niet feilloos schakelt. Kan iemand mij tips geven deze sketch te verbeteren of een link naar een goed werkende sketch. Dus 3x een TTP223 touch schakelaar en 1 relais aangesloten op een nano. Een touch op één van een willekeurige schakelaar laat het relais omslaan.
Alvast bedankt voor jullie reacties,
Gert

Code: Alles selecteren

const int pincount = sizeof(knoppins) / sizeof(knoppins[0]);

int oldKnoppinStates[pincount] = {LOW}; //De array die onthoudt in welke staat de knoppins zaten in de vorige loop

//pincountO is weggehaald omdat er als het goed is evenveel input-pins zijn als output-pins;

void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

for(int pin = 0; pin < pincount; pin++)
  {
    pinMode(knoppins[pin], INPUT_PULLUP); // origineel
    pinMode(relaispins[pin], OUTPUT);
    oldKnoppinStates[pin] = digitalRead(knoppins[pin]); //Opslaan in welke staat de knop nu staat
  }
}
 
void loop()
{
  for (int pin = 0; pin < pincount; pin++)
  {
    int knoppinState = digitalRead(knoppins[pin]);                     //Opslaan in welke staat deze knop nu staat
    if (knoppinState != oldKnoppinStates[pin] && knoppinState == HIGH) //Is de staat van deze knop veranderd én is hij HIGH? Dan wordt de staat van de relaispin veranderd
   {
     int relaisPinsState = digitalRead(relaispins[pin]); //Daarvoor moeten we eerst weten in welke staat de bijbehorende relaispin nu staat
     digitalWrite(relaispins[pin], !relaisPinsState);    //Vervolgens veranderen we de staat van de relais-pin in het tegenovergestelde van wat er in de voorgaande regel is gemeten.
   }
  }
}

Advertisement

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

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor shooter » 11 Dec 2020, 17:24

ik snap pincount niet, zet er eerst maar gewoon een getal neer, en houd 0 en 1 vrij want die gebruik je voor je serial comms.
begin eens op 4 of zo dus 4,5,6 zijn digitalread(4) die sla je dan op als input[1]=digitalread(4) bijvoorbeeld
simpelste die ik weet is if ( digitalread(4)=HIGH){digitalWrite(9) =! digitalRead(9);delay(100)}

wat ook belangrijk is dat je de voeding van je relais niet uit de arduino haalt maar direct van de stekkervoeding. De contacten van het relais kun je wel met 230 volt gebruiken als je ze afschermt en dergelijke.een relaisspoel kun je niet direct aansluiten op een arduino, dus daar zit een optocoupler tussen. dat is weliswaar dubbel maar wel de goedkoopste oplossing hiervoor.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 04 Dec 2020, 22:57

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Gert Vossers » 14 Dec 2020, 00:18

Hallo Paul,
Dankjewel voor je reactie! Allereerst excuses. Ik heb de code maar gedeeltelijk tussen de [codes] gekopieerd heb. Het beginstuk miste. Ik begrijp nu je vragen en heb respect voor het feit om mij te vertellen dat e.e.a. niet goed aangepakt is. Je (jullie) putten je uit om elke vraag van beginners te beantwoorden. Hulde daarvoor!
Ik zal nu de code nog een keer goed weergeven. Daarin zie je dat er wel degelijk de pins benoemd zijn. 3x IN voor de touch sensors TTP223 en 1 OUT voor een relais module 5V. De code werkt nu redelijk echter ik weet niet zeker of de sensors goed ingelezen worden. Als ik de zaak een poosje laat rusten moeten de sensors "weer op gang geholpen worden oftewel wakker worden" En dat moet eigenlijk met 1 tik met je vinger en niet 5x of zo zoals nu. Mist er ergens een delay of debounce of zo? Het zou fijn zijn als de code betrouwbaar werkt. Het relais moet niet zomaar spontaan de lamp schakelen. Zou je de code even willen beoordelen en misschien nog wat advies kunnen geven voor verbetering?
Graag hoor ik van je en al vast weer hartelijk dank voor een reactie!
Hartelijke groeten
Gert


Code: Alles selecteren

//********************************************************************************************************************************
//**************************************                                         *************************************************
//**************************************   3 x TTP233 TOUCH SENSOR EN 1 RELAIS   *************************************************
//*************************************                                          *************************************************
//********************************************************************************************************************************

//***************************************   Pin toewijzing TTP223 en relais   ****************************************************
const int knoppins[] = {10,11,12};
const int relaispin = 2;

//*******************   Het aantal pins wordt op de volgende regel berekend. In dit geval is pincount = 2   **********************
const int pincount = sizeof(knoppins) / sizeof(knoppins[0]);

//**********************   De array die onthoudt in welke staat de knoppins zaten in de vorige loop   ****************************
int oldKnoppinStates[pincount] = {LOW}; 

//***********************************************   Void setup()   ***************************************************************
void setup()
{
for(int pin = 0; pin < pincount; pin++)
  {
    pinMode(knoppins[pin], INPUT_PULLUP);
    oldKnoppinStates[pin] = digitalRead(knoppins[pin]);                 //Opslaan in welke staat de knop nu staat
  }
    pinMode(relaispin, OUTPUT);
}

//************************************************   Void loop()   ***************************************************************
void loop()
{
  for (int pin = 0; pin < pincount; pin++)
  {
    int knoppinState = digitalRead(knoppins[pin]);                      //Opslaan in welke staat deze knop nu staat
//     delay(10);
    if (knoppinState != oldKnoppinStates[pin] && knoppinState == HIGH)  //Is de staat van deze knop veranderd én is hij HIGH? Dan wordt de staat van de relaispin veranderd
    {
      int relaisPinState = digitalRead(relaispin);                      //Daarvoor moeten we eerst weten in welke staat de bijbehorende relaispin nu staat
 //     delay(100);
      digitalWrite(relaispin, !relaisPinState);                         //Vervolgens veranderen we de staat van de relais-pin in het tegenovergestelde
    }                                                                   //van wat er in de voorgaande regel is gemeten.
delay(500);
  }
}


Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Gij Kieken » 14 Dec 2020, 10:51

De delay moet weg uit je loop.
Hoe staan de jumpers op jouw printjes?

Berichten: 3
Geregistreerd: 04 Dec 2020, 22:57

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Gert Vossers » 14 Dec 2020, 18:08

Als ik de delay uit de loop haal begint het relais te 'tokkelen'. (waarom?) Heb de delay teruggezet naar 'delay(100);) Nu werkt de sketch goed. De touch sensoren zijn van het type TTP223B. Deze hebben geen instelbare jumpers.
Dank voor het meedenken!
Groet, Gert

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Gij Kieken » 14 Dec 2020, 19:07

Dan is de kans groot dat de module een puls-output geeft ipv On-Off.
Vandaar het vreemd gedrag (code aanpassen).

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

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor shooter » 14 Dec 2020, 19:55

die touch dingen hebben een hele tijd nodig voor ze afvallen, dus een tijd is wel nodig correct, echter hopeft dat niet met delay maar beter met millis() dan stopt je programma niet, dus even herschrijven en dan timers gebruiken is slimmer, dan leer je ook netter programmeren.
om bij te houden zou ik serial print gebruiken voor een aantal toestanden.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 22 Apr 2021, 13:40

Re: Relais aansturen met 3x TTP223 Touch schakelaars

Berichtdoor Paulschl » 20 Dec 2021, 22:19

Hej Gert Vossers,

heb jij nog iets aan je sketch aangepast met millis() ipv delay?
ik probeer hetzelfde te bereiken, maar kom er niet uit.
ik zou zeer geholpen zijn met een voorbeeld.
b.v.d.
Paul.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: opowuba en 24 gasten