Sari la conținut
ELFORUM - Forumul electronistilor

RELEU ACTIONAT DE BUTON TOUCH PRIN ARDUINO


florinangeru

Postări Recomandate

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 spre comentariu
  • Răspunsuri 18
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • florinangeru

    9

  • Ticu

    4

  • Liviu M

    3

  • script22

    2

Top autori în acest subiect

Imagini postate

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 spre comentariu

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 spre comentariu

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 spre comentariu

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 spre comentariu

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 spre comentariu

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 spre comentariu

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 spre comentariu

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 spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări