Jump to content
ELFORUM - Forumul electronistilor

RELEU ACTIONAT DE BUTON TOUCH PRIN ARDUINO


florinangeru
 Share

Recommended Posts

Salutare tuturor,Am o problema cu senzorul de perimetru de la alarma auto in sensul ca nu pot dezactiva zona perimetrala exterioara pentru ca telecomanda din cheia masinii nu stie sa trimita un al doilea impuls pe un canal auxiliar (explicatie data de cei de la VIPER ROMANIA) si cand parchez masina intr-o zona mai circulata imi sar vecini in cap ca este stresanta alarma masinii :(. Solutia gasita de mine este una destul de simpla, la nevoie sa intrerup cablurile care trimit semnal de la senzorul de perimetru exterior catre alarma astfel ramanand activ doar perimetrul interior. Pentru asta am schitat un modul bazat pe arduino uno la care atasez un releu ce va comanda senzorul de perimetru al alarmei, un led de stare ce imi va indica cand releul este ON/OFF si un microtouch care imi va actiona releul in starea ON/OFF. Astfel releul in pozitia OFF va avea ledul de stare OFF si va mentine senzorul de perimetru exterior activ. In pozitia ON ledul de stare va fi ON si releul va dezactiva senzorul de perimetru exterior. Ledul aprins imi va servi ca avertizare ATENTIE PERIMETRU EXTERIOR DEZACTIVAT.Am atasat schita si codul la care intampin o problema si nu reusesc sa o rezolv de doua zile. Teoretic ar trebui sa functioneze brici dar dupa ce il incarc ledul de stare sta aprins in continuu iar releul trece in ON aleatoriu cand vrea el :(. Rog useri priceputi in microcontrolere si arduino sa imi dea o mana de ajutor :jytuiyu . int switchPin = 8; int relayPin = 13; boolean lastButton = LOW; boolean currentButton = LOW; boolean relayOn = false; void setup() { pinMode(switchPin, INPUT); pinMode(relayPin, OUTPUT); } boolean debounce(boolean last) { boolean current = digitalRead(switchPin); if (last != current) { delay(5); current = digitalRead(switchPin); } return current; } void loop() { currentButton = debounce(lastButton); if(lastButton == LOW && currentButton == HIGH); { relayOn = !relayOn; } lastButton = currentButton; digitalWrite(relayPin, relayOn); }

post-24493-139829502569_thumb.jpg

Link to comment
Share on other sites

Pai o sa apelez la un intrerupator basculant pentru moment dar avand in vedere ca va fi actionat destul de rar la nevoie e posibil sa oxideze plus ca nu e prea hi-tech in comparatie cu restul din masina si nici avertizare luminoasa nu am. Am un buton in bord dedicat si neutilizat, l-am achizitionat si montat ceva timp in urma pentru alt proiect dar nu imi mai e util asa ca il folosesc pentru alarma :).

Link to comment
Share on other sites

Mai elegant ar fi un buton prin apasare, cu auto-retinere si cu led inclus, ca cel din poza. Mi-e rusine pentru pret, dar e anti-vandal! Eventual si un releu de 12V daca mai sunt necesare contacte. Sigur, decizia e a ta.

post-29403-139829502828_thumb.jpg

Link to comment
Share on other sites

intradevar pretul este exorbitant dar ideea in sine este buna, momentan am facut un adaptor cu un basculant si o sa il montez zilele astea ca solutie provizorie pana gasec ceva mia elegant :). Cel mai elegant ar fi fost o cheie briceag cu trei butoane dar nu e tocmai ieftina, am fost la obor la specialisti si mi-au cerut 500lei..... o sa trag o fuga prin talcioc poate gasesc ceva chilipiruri ca atunci cand mi se ivise ocazia sa iau una cu 40lei nu am vrut acuma.......

Link to comment
Share on other sites

nu prea inteleg eu ce ai acut tu acolo da nu e mai simlpu asa (acm urmeaza sa iti dai tu seama cum faci pe arduino )nu stiu in ardunio da in bascom e cam asaportb.1 = input 'setam ca intrare butonportb.1 = 1 'enable pull up rezistorportb.2 = output ' aici vine releu si ledu in paralelportb.2 = 0 la pornire ledul e stinsdoif portb.1 = 0 thenwaitms 3 toggle portb.2 end ifloopcodu asta e pt bascom acm vezi si tu dac ail poti compila in bascom si scrie in arduino stiu ca merge da nu garantez nam incercat.

Link to comment
Share on other sites

Dupa parerea mea, intarzierea aia nu face nimic. Nici bine nici rau.Daca se voia soft debouncing nu e corect facut. Dupa cele 3 ms (cam putine, totusi), se mai testeaza o data port.1 si daca e tot 0 atunci se actioneaza releul.Dupa actionarea releului sunt iarasi necesare niste ms, pentru ca releul nu comuta instantaneu, are si el nevoie de cateva ms acolo.

Link to comment
Share on other sites

Fara intarziere:Testeaza portul 1, gaseste 0 (buton apasat), comuta iesirea, reia testarea, gaseste tot 0 (buton tot apasat), comuta iesirea din nou etc.Adica iesirea e un astabil, pe care releul il urmareste sau nu, in functie de frecventa.Cu intarziere si butonul permanent apasat, tot astabil este, dar cu frecventa mai mica. Singura speranta e ca intarzierea sa fie atat de mare incat operatorul sa fi apucat intre timp sa ridice degetul de pe buton... De aceea propuneam 1 secunda, ca sa nu fie apasarea contra-cronometru.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines