Jump to content
ELFORUM - Forumul electronistilor

RELEU ACTIONAT DE BUTON TOUCH PRIN ARDUINO


florinangeru

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
  • Replies 18
  • Created
  • Last Reply

Top Posters In This Topic

  • florinangeru

    9

  • Ticu

    4

  • Liviu M

    3

  • script22

    2

Top Posters In This Topic

Posted Images

Oarecum offtopic: daca tot montezi un buton, n-ar fi mai simplu ca el sa fie un comutator basculant care sa faca direct ce fac contactele releului? Elimini montajul, releul si consumurile lor.

Link to comment

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

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

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

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

pai dupa actionarea butonului asteapta 3ms si apoi ia urmatoarea stare altfel la o singura apasare a butonului releul se va cupla si decupla ramanand in-una din stari dupa cum ii tuna.

Link to comment

Inca nu am apucat sa testez nimic poate reusesc deseara iar in ceea ce priveste milisecundele o sa tatonez valoarea lor :). Va tin la curent

Link to comment

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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • 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