24V AC detectoren van schuifpoort arduino/esp32

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
M'n schuifpoort heeft een SPIA connector waarop 24V AC komt te staan als volgt:
- gesloten poort: geen stroom
- open poort : continue 24V AC
- opengaande poort: knipperen
- dichtgaande poort: snel knipperen

ik kan dit detecteren via onderstaand schema, maar ik vroeg me af of dit veilig is voor de sturing van de poort.
De specs uit de handleiding: (sc230 gan gibidi): 24 Vac 3W maxAfbeeldingslocatie: https://tweakers.net/i/tEcVi8GuzVJ-eTYFd3nSFbbRFD8=/800x/filters:strip_icc():strip_exif()/f/image/8yfdbjfDUVRV9wGG8ROaAWrT.jpg?f=fotoalbum_large

Beste antwoord (via Promy op 11-05-2024 09:52)


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 21:32

SA007

Moderator Tweaking
24V AC heeft een piekspanning van 34V (24 * sqrt(2)).
4N25 heeft een spanningsval van ~1.3V, dus je hebt 32.5V die je moet opvangen met een weerstand.

Met ~1k is dat 32.5/1000 = 32.5mA, wat binnen de 60mA maximum is voor de 4n25, maar 10mA is meer dan genoeg voor de 4n25, dus 3k kan ook prima (~=10.8mA)

Scheelt wat vermogen wat je wegstookt, langere levensduur enzo, je heb nu ruim een halve watt, met 3k zou het nog maar 0.2W zijn.

Alle reacties


Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:59

memphis

48k was toen meer dan genoeg.

C1 en R1 zou ik weg laten, R2 moet eerder 2k2 of 2k7 worden.

Ik weet niet hoe je het knipperen wilt detecteren maar C2 kan roet in het eten gooien maar maak je die te laag zal de 50Hz puls doorkomen.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
Ik heb m'n schema eens getest en het leek te werken. Het knipperen is bedoeld voor een lamp, dus zo heel snel gaat het niet. In de code lees ik gewoon in de loop de toestand van de pin uit en bewaar de huidige tijd (millis() ).Snel knipperen is tussen de 516 en 564ms en traag knipperen is tussen de 775 en 826ms.

Het verhogen van R2 is dat om het circuit van de poort te beschermen of eerder om de 4n25 z'n led beter te beschermen (nu maar ca 1k weerstand ervoor)?

[ Voor 10% gewijzigd door Promy op 24-05-2024 14:51 . Reden: traag/snel gewisseld ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 21:32

SA007

Moderator Tweaking
24V AC heeft een piekspanning van 34V (24 * sqrt(2)).
4N25 heeft een spanningsval van ~1.3V, dus je hebt 32.5V die je moet opvangen met een weerstand.

Met ~1k is dat 32.5/1000 = 32.5mA, wat binnen de 60mA maximum is voor de 4n25, maar 10mA is meer dan genoeg voor de 4n25, dus 3k kan ook prima (~=10.8mA)

Scheelt wat vermogen wat je wegstookt, langere levensduur enzo, je heb nu ruim een halve watt, met 3k zou het nog maar 0.2W zijn.

Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
@memphis Enig idee hoe hoog die C2 best is? bij een esp32 komt de 50Hz er inderdaad door als C2 10uF is en ik het test met 9Vac. (op arduino met de effectieve poort met 24Vac komt hij er niet door :? )(kan nu even niet testen met de poort :) )

Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:59

memphis

48k was toen meer dan genoeg.

Ik vrees dat dat op zijn simpelst experimenteren wordt met verschillende waardes.... Met de formule t=RxC zou je iets in de richting kunnen berekenen waarbij je met "t" iets van de tijd van het snel knipperen moet aanhouden.
Als je een oscilloscoop hebt zou je ook het kantelpunt van hoog/laag kunnen meten.

Je kunt kijken of er een code te vinden is voor een zgn low pass filter waarmee je 50Hz digitaal kunt uitfilteren. (voor arduino weet ik dat er wat is)

Er zijn mensen die mij een GOD vinden


Acties:
  • +1 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 08:50

Septillion

Moderator Wonen & Mobiliteit
Zelf zou ik de C eerder aan de uitgang van de opto hangen. Andere optie, het gewoon in software oplossen. Wat ga je als software draaien?

En dan zou ik gewoon aan de ingang enkele weerstand en diode antiparallel over de opto. En dan iets van een 4k7 weerstand.

Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:59

memphis

48k was toen meer dan genoeg.

Even aan het rekenen gegaan, ik heb het idee wanneer je van 24v uit gaat met een +/- 3k serieweerstand die 10uF best wel eens in een juiste richting kan zitten.

Er zijn mensen die mij een GOD vinden


Acties:
  • +1 Henk 'm!

  • Rrob
  • Registratie: Augustus 2005
  • Laatst online: 30-04 18:53
Promy schreef op vrijdag 10 mei 2024 @ 22:53:
Ik heb m'n schema eens getest en het leek te werken. Het knipperen is bedoeld voor een lamp, dus zo heel snel gaat het niet. In de code lees ik gewoon in de loop de toestand van de pin uit en bewaar de huidige tijd (millis() ).Traag knipperen is tussen de 516 en 564ms en snel knipperen is tussen de 775 en 826ms.
[...]
vreemd dat traag knipperen sneller gaat dan snel knipperen ;)

[ Voor 21% gewijzigd door Rrob op 24-05-2024 12:46 ]


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
@memphis : net toch nog een 24Vac bron gevonden en daarmee lukt het inderdaad perfect! tnx (de 50Hz van de 9Vac kwam er wel door
@Rrob oops, type, omgekeerd dus
@Septillion : ik draai gewoon een scriptje (in de arduino ide) dat bijhoud dat de pin leest in de loop en als ze is gewijzigd de tijd (millis()) opslaat en dan rekent hoe lang het was sinds de vorige wijziging. Een interrupt leek me gelet op de "traagheid" niet nodig

[ Voor 45% gewijzigd door Promy op 24-05-2024 14:50 ]


Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 08:50

Septillion

Moderator Wonen & Mobiliteit
@Promy Interrupt is zeker niet nodig, rest netjes non-blocking laten. Maar je zou dus zowel minimale on-time als minimale off-time in kunnen bakken. Je zou voor beide iets van 15ms kunnen pakken. Werkt dus zowel tegen wat storing (of denderen) als tegen 50% van de tijd geen signaal krijgen. Immers is op 50Hz de opto maar 10ms uit elke cycle.

En dan kan de hardware dus zo simpel zijn als een opto, één weerstand en één diode :)

[ Voor 11% gewijzigd door Septillion op 24-05-2024 14:55 ]


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
Ik blijf wat sukkelen met de werking :(
Ik heb m'n printje wat aangepast en

- R2 vervangen door een 2k7 weerstand
- C1 en R1 weggelaten (en R1 vervangen door een verbinding natuurlijk)
- R3 is weggelaten (dus connectie 5V is weg). in de plaats hiervan zit er een levelconverter die de +5v en de 3.3v van de esp overzet (en dus reeds een weerstand heeft die naar de +5v trekt), dus de schakeling zit aan de rechterkant van onderstaand plaatje, de esp links.


Afbeeldingslocatie: https://tweakers.net/camo/3e7221145a5b9945780e3426b65bc983ae7460f8/?url=https%3A%2F%2Feurope1.discourse-cdn.com%2Farduino%2Foptimized%2F4X%2F3%2Fc%2F2%2F3c2f87f3478dcdabb98144c5b8ca321a4d48664c_2_527x500.png

Met deze wijziging leest de esp correct uit als :
- er geen Vac aanwezig is
- er wel Vac aanwezig is
- het geheel traag knippert

Als het snel knippert gaat hij evenwel vaak de mist in.
Hij gaat van status 3 (de correcte) naar status 1 (continue branden) of 0 (uit) etc...

De 50Hz komt er evenwel niet door (ik print de lengte van de puls via Serial)

Vandaar deze vragen:

- maakt het een verschil of C2 een radiale elco is (dus met een + en -) of een gewone keramische?
- kan het zijn dat het in het programma de Serial.print en het verzenden naar http de metingen mis doet gaan of zou de esp32 snel genoeg moeten zijn om dit te kunnen?
- doe ik iets anders compleet fout :?

Het stukje code die ik gebruik is:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
schuifCurrentState = digitalRead(schuifpoortIN);
  unsigned long currentTimeSchuif = millis();
  int mogelijkfout = 0; // om de fout eruit te halen dat het zegt traag knipperen, maar dat het snel knipperen is - onzeker waarom dit er hierin zit ;-)
  
  if (schuifCurrentState != schuifLastState){ // de status is aangepast
    Schuiftijdsindsvorige = currentTimeSchuif - SchuifTimeOfLastButtonEvent;
    SchuifTimeOfLastButtonEvent = currentTimeSchuif;
    Serial.print("ms sinds vorige is: "); ////////// ifv testen
    Serial.println(Schuiftijdsindsvorige); ////////// ifv testen
 
  }
  //0: staat volledig dicht, 1: staat in pauze of volledig open, 2: gaat open, 3: gaat dicht, 5: onzeker 
  if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 1000){// meer dan 1 seconden geen verandering, dus het zal niet knipperen, dus AAN of UIT - we mogen hier niet de Schuiftijdsindsvorige gebruiken omdat in deze stand de status niet wijzigt...
  // hiermee zit er nog een foutje in dat als er minder dan 1 seconden geleden naar volledig branden is overgegaan, het nog niet correct is weergegeven
    if (schuifCurrentState == LOW){ //het is omgekeerd, door de pull-up, dus ze is laag als er signaal is   
      schuif_status = 1; //de led brand, we staan dus in pauze (voetgangersstand) of volledig open
      foutmelding3="";      
    } else if (schuifCurrentState == HIGH) { //de poort is toe   
      schuif_status = 0;
      foutmelding3="";      
    } else { //er klopt iets niet...
      schuif_status = 5; //er is een probleem
      foutmelding3="fout=Schuifpoort_onzeker-probleem?";
      infoverzenden(foutmelding3); //verzenden naar de raspberry pi
    
      
    }
  } else if ((Schuiftijdsindsvorige > 650) && (Schuiftijdsindsvorige < 1000)){// meer dan 0.65 seconde geen verandering en minder dan 1 seconde (we mogen er niet vanuit gaan dat dit al minder dan 1seconde was door de if aangezien er geen update is wegens continu led aan of uit)
    //het zal dus traag knipperen, volgens de metingen is traag ongeveer 775 en 826 ms lang (uit en aantijden)
    schuif_status = 2; //de led knippert traag
  
  } else if ((Schuiftijdsindsvorige < 650 )&& (Schuiftijdsindsvorige > 400))  { // het was minder dan 0.65 seconde sinds een verandering dus het zal snel knipperen, de check tegenover 0 is om te vermijden dat we nog met de vorige waarde in gedachten zitten, hiervoor zetten we dit op 0 in de if
    schuif_status = 3; //de led knippert snel, volgens de metingen is snel ongeveer 516 en 564ms (uit en aantijden)
  }
  schuifLastState = schuifCurrentState;
  if (debug) {
    Serial.print("Status schuifpoort: (0: staat volledig dicht, 1: staat in pauze, 2: gaat open, 3: gaat dicht, 4: staat volledig open, 5: onzeker ");
    Serial.println(schuif_status);
  }
  if ((schuif_statusOLD != schuif_status) && (mogelijkfout == 0) ) { // het is aangepast, dus de status verzenden naar de esp - 2e check is voor de fout van traag en snel knipperen zie hoger
    teverzenden ="schuif_status=" + String(schuif_status);
    infoverzenden(teverzenden); //verzenden naar de raspberry pi
    schuif_statusOLD = schuif_status;
  }


en

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void infoverzenden(String url3) {

  WiFiClient client;
  if (!client.connect(host, httpPort)) {
     if (debug) {Serial.println("connection failed");}
    return;
  }
  
  if (debug) {
    Serial.print("Requesting URL: ");
    Serial.println(url3);
   }
   // This will send the request to the server
  client.print(String("GET ") + "/" + url2 + ".php?" + url3 + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  if (debug) {
    Serial.print("totale url is: ");
    Serial.println(host + String("/") + String(url2) + ".php?" + url3);
    delay(500);
    // Read all the lines of the reply from server and print them to Serial
    while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }
    Serial.println("closing connection");
 }
   
}

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 21:32

SA007

Moderator Tweaking
Ik denk dat met R2 op 4.7k C2 gewoon te langzaam leegloopt over de opto om 'uit' door te geven.

Zou C2 een vervangen door een flink kleinere (probeer de 1uf van C1 eens)

En nee, het maakt niet uit of het keramisch of elektrolytisch is, keramisch gaat langer mee, maar is fysiek fragieler, maar bij zoiets is het verschil niet boeiend.

Radiaal betekend overigens dat het een tonnetje is, maar zegt niks over wat erin zit :).

Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
@SA007 :aangezien het demonteren van het printje wat lastig is (de behuizing is compact gepint :X ): is er dan geen kan dat de 50Hz er terug door zal komen? De c2 is momenteel 2k7.

Voor de duidelijkheid heb ik het schema aangepast (maar de nummerkes kloppen nu niet meer 8)7 ). De levelconverter is cfr m'n vorige post.
Afbeeldingslocatie: https://tweakers.net/i/4ojLJZG1ERdH3AJO9AfetycYMd4=/800x/filters:strip_icc():strip_exif()/f/image/fph8vOs9hO1T9bsAqjEZP8E3.jpg?f=fotoalbum_large

PS: m'n electronica kennis is niet zo heel groot (zeker naar naamgeving), ik dacht dat een elco de juiste benaming was :P

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 21:32

SA007

Moderator Tweaking
Owja, elco had ik overheen gelezen, dat is een afkorting voor elektrolytische condensator, en vrij gebruikelijk inderdaad.

Als je C4 verlaagd zal je op een gegeven moment 50Hz zien op je microcontroller inderdaad, al is dit altijd in software te filteren.
Maar ik denk dat hij nu te groot is waardoor hij het 'snel knipperen (hoe snel is dat?)' ook wegfiltert.

Mijn gok zou zijn dat 'knipperen' 1hz is ofzo en 'snel knipperen' 2hz, als 1hz wel doorkomt en 2hz niet en je wil 50hz niet zien dan kan je 'm best 10x zo klein maken, dan filtert hij ergens tussen de 10 en 20hz.

Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 17-01 03:16
In principe ben je momenteel je 24VAC naar DC om te zetten en dan probeer je de ripple eruit te filteren met de condensator.

Echter met jouw design zit je dus na 50mS van de laatste piek nog steeds op ~5V, genoeg om het ledje te laten branden.

Ik weet niet of je optocoupler een interne weerstand heeft, de 4N25 is dacht ik maar voor 5V/50mA dus oppassen dat je er niet teveel doorjaagt. Ik zou een weerstand parallel met de condensator zetten om het sneller te ontladen en de grotere weerstand is bedoeld om minder stroom door de LED te jagen echter eenmaal de LED uitgaat ontlaadt de condensator niet meer. Je kunt uitrekenen hoe groot de weerstand moet zijn (ik denk tenminste de 2k7 is waarschijnlijk goed) voor de LED en dan kun je spelen of rekenen met je condensator en parallelle weerstand om de 25Hz op te vangen met een marge (je krijgt maar de helft van de 50Hz). Een simpele code kan dit ook aanwijzen als je geen oscilloscoop hebt.

Voor testen zonder scoop zou ik een code zoals deze gebruiken
If pin = high && last_state == low: serial(aan); last_state = high (en dan het omgekeerde voor low) en dan zien wanneer hij aan/uit gaat. De ESP is snel genoeg om zelfs debounces te zien, je kunt zelfs sub-milliseconde resoluties halen.

[ Voor 19% gewijzigd door Guru Evi op 06-06-2024 14:17 ]

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
@SA007 : Voor het traag knipperen is de tijd van het signaal uit ca 775ms en aan ca 826ms , voor het snel knipperen is de tijd van het signaal uit ca 516ms en aan ca 564ms (beide gemeten met een arduino via bovenstaande code.

@Guru Evi Klopt, ik wil dc kunnen meten. Kan je me misschien in de richting van hoe ik dat moet berekenen wijzen? thanks! Als er een beter schema is hiervoor, hoor ik het graag _/-\o_

Ik heb alleen het ellebooggevoel :? dat hij te lang bezig is met het verzenden van de waardes naar de server (http connectie) en de Serial output, dat hij misschien wel enkele pulsen van het snel knipperen "mist" en dat hij daardoor de mist ingaat.

Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 17-01 03:16
Zoals gezegd, je zit waarschijnlijk te lang met het signaal hoog omdat de condensator te groot is en niet snel genoeg ontlaadt. Gewoon een weerstandje parallel en/of een kleinere condensator, je moet snel genoeg ontladen om het einde van de puls binnen een paar mS (~20mS) te weten.

Je kunt ook naar andere lijn detectie circuits kijken, er zijn meerdere designs te vinden, een volledige diodebrug kan gebruikt worden maar is niet strict nodig. Een andere optie is om de condensator volledig weg te laten en in code de detectie te schrijven.

Begin daarna met een simpele seriële output en haal die delay(500) weg. Een Arduino/ESP kan binnen de milliseconde een berichtje op serieel uitspuwen, de HTTP gaat iets langer (100-200mS) duren als je push messages doet, zet eventueel een time-out, of werk async (met interrupts) als de server traag od offline is.

[ Voor 18% gewijzigd door Guru Evi op 07-06-2024 14:00 ]

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:59

memphis

48k was toen meer dan genoeg.

Meest simpele is een filter programmeren waar denk ik genoeg voorbeelden van te vinden zijn, als dat te lastig wordt kan je het extern ook oplossen met een hertriggerbare monoflop maar gezien je electronica kennis vrees ik dat dat te hoog gegrepen is. Met een 555 of een 74123. Met een RC combo kan je de uitgang op iets meer dan 50msec zetten

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 27-04 23:59
Ik heb nog wat zitten testen met de software en het uitlezen van de reply van de webserver uit gezet, samen met alle onnodige Serial prints (die ik toch niet lees aangezien hij op een voeding zit).
Het lijkt erop dat hij nu wel correct de zaken uitleest. :P
Ik zal het wat in de gaten houden. Bedankt voor de hulp!
Pagina: 1