Sari la conținut
ELFORUM - Forumul electronistilor

Geamuri automate Logan


Vizitator boboc5

Postări Recomandate

Vizitator boboc5

Salut tuturor! Pentru inceput vreau sa spun ca sunt incepator in uC-e, deci va rog sa ma luati "babeste" :jytuiyu pentru a intelege ce trebuie sa fac(dar nu de la nivel de ce este ala un letcon sau un condensator pentru ca la partea hardware ma descurc, cea software ma cam incurca). Vreau sa construiesc o automatizare la un Logan, ca atunci cand se apasa scurt pe butonul geamului, acesta sa se deschida complet sau sa se inchida complet in functie de ce buton este apasat. Iar cand se tine apasat sa se deschida, atat timp cat butonul este apasat. Sper sa fi fost destul de clar in ceea ce mi-am propus sa fac... Am nevoie de un exemplu de cod sa imi dau seama cam ce ar trebui sa fac. As dori sa il construiesc cu un ATtiny13 ca orice incepator, din cate am citit din datasheet-ul lui am dedus ca as putea face un asemenea circuit. Si inca o problema, eu am facut C in facultate si sunt indecis in ce soft sa scriu codul pentru ca am obs. pe forum ca Bascom ar fi cel mai indicat pentru incepatori, dar observ ca in AVR inteleg cat de cat comenzile fiind in C :nas: . Astept sfaturi.

Link spre comentariu
  • Răspunsuri 22
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • yo9hnf

    2

  • fratello

    2

  • DarkAngel_Bv

    2

  • GeoMar

    1

Top autori în acest subiect

Imagini postate

Interesant acest mic "proiect" al tau, mai ales daca se poate realiza cu un Attiny 13.Daca reusesti, as fi si eu interesat pentru "automatizarea / tunarea" Logan-ului meu. :)Bafta.

Link spre comentariu

Sistemul de inchidere automata a geamului e mult mai complex decat iti imaginezi tu acum . Ai nevoie de senzori care sa iti detecteze pozitia geamului , si pe langa asta ar trebui si un sistem care sa iti detecteze daca in momentul in care ridici geamul sa nu ai nimic intregeam si rama(sa nu se intample cumva accidente)

Link spre comentariu
Vizitator boboc5

ramsesrr atat timpt cat geamul de la logan este deja electric, inseamna ca aceste aspecte nu ar cam trebui sa ma intereseze, desi m-am gandit si la senzori... Geamurile functioneaza din fabrica cu sistemul asta de coborare-ridicare cat timp cat se tine apasat butonul si nu au existat accidente asa ca am presupus ca exista ceva senzori care sa opreasca motorul cand intampina un obstacol sau cand ajunge la extremitati. Deci tot ce vreau eu sa modific este partea cu coborarea-ridicarea completa la o scurta apasare a butonului, functia initiala i-o las ca din fabrica. si ma gandeam sa ma conectez cu niste mici relee direct la butoanele din bord.

Link spre comentariu
Vizitator dragos90

De fapt tot sistemul este deja implementat... trebuie doar un uC programat astfel incat sa imite "apasare" butonului actual:- mai mult (pana la capat la o apasare scurta) eventual masurat timpul necesar ca geamul sa faca o cursa intreaga si atat sa tina contactul inchis (butonul apasat) ca oricum geamul la capat de cursa se opreste indiferent de cat de mult tii butonul apasat din fabrica. Astfel nu te mai incurci sa aflii pozitia geamului;- sau pana unde vrei la o apasare mai lunga....parerea mea.L.E.: am postat in acelasi timp cu boboc5, gand la gand :)

Link spre comentariu
Vizitator boboc5

Exact dragos (tizule :rade: )... la asta m-am gandit si eu. sa fac doar o mica temporizare, care sa tina butonul apasat pentru cursa completa a motorului de sus pana jos sau invers. M-am gandit si la o alta problema care ar fi intervenit, daca geamul era deschis la jumatate sa zicem, dar atat timp cat motorul se opreste singur cand a ajuns la unul din capete, uC daca mai tine cateva secunde releul aclansat nu ar fi nicio problema.

Link spre comentariu

Daca , sistemul de la actionare geamuri are inclus in el si limitatorii pentru capat de cursa , eventual si pentru suprasarcina("prindere mana") , intradevar se poate face o temporizare

Schema de principiu este cea din figura.

iar codul este:

#include <tiny13.h>unsigned char timp;unsigned char timp_button;;#define timp_scurt 10  // 1 secunda apasare scurta#define timp_max 100   // 10 secunde actionare continua#define buton1 ~PINB.1#define buton2 ~PINB.2#define releu1 PORTB.3#define releu2 PORTB.0#define true 1#define false 0// Timer 0 overflow interrupt service routineinterrupt [TIM0_OVF] void timer0_ovf_isr(void){TCNT0=156;    if(timp>timp_max)    {     releu1=false;     releu2=false;     timp=false;     timp_button=false;    }      if((buton1==false)||(buton2==false)) // nu este apasat niciun buton      {        if(timp_button>timp_scurt)        {         releu1=false;         releu2=false;         timp=false;         timp_button=false;         goto exitint;        }      }       if((buton1==true)&&(buton2==true)) // daca se apasa amandoua =reset      {       releu1=false;       releu2=false;       timp=false;       timp_button=false;       goto exitint;      }      timp++;      if(buton1==true)      {       if((releu1==false)||(releu2==true)){timp=0;timp_button=0;}       releu1=true;       releu2=false;       timp_button++;       if(timp_button>=timp_max){timp_button=timp_max-1;}      }      if(buton2==true)      {      if((releu2==false)||(releu1==true)){timp=0;timp_button=0;}       releu1=false;       releu2=true;       timp_button++;       if(timp_button>=timp_max){timp_button=timp_max-1;}      }      exitint:}void main(void){#pragma optsize-CLKPR=0x80;CLKPR=0x00;#ifdef _OPTIMIZE_SIZE_#pragma optsize+#endifPORTB=0x06;DDRB=0x09;TCCR0A=0x00;TCCR0B=0x03;TCNT0=0x06;OCR0A=0x00;OCR0B=0x00;GIMSK=0x00;MCUCR=0x00;TIMSK0=0x02;ACSR=0x80;ADCSRB=0x00;#asm("sei")     timp=0;     timp_button=false;     releu1=false;     releu2=false;while (1)      {      //nimic      };}
microcontrollerul trebuie sa fie programat cu ceas intern de 128khz

timp_scurt - este timpul ptr o apasare scurta - in cazul asta este 1 secunda, daca se doreste alta valoare trebuie modificat

timp_max - este temporizarea la actionare continua - in cazul asta 10 s.

 

Succes !

post-3845-13982928462_thumb.png

Link spre comentariu
Vizitator boboc5

Daca se poate sa imi dati codul pentru AVR studio v-as fi mai mult decat recunoscator si cu comentariile legate de liniile de cod sa imi fac o idee de cum e gandit codul. Asa cred eu ca invat mai bine decat sa scriu direct codul (dat de persoanele binevoitoare de pe forum mura in gura) in uC.

 

MULTUMIRI ANTICIPATE ! icon_jook

Link spre comentariu

Ia de aici un cod in asm (ca deh, n-am facultate sa stiu C++) care foloseste tot schema propusa de dl. Mitescu mai sus, si acelasi clock de 128 kHz, nu atat pentru consum redus (oricum doarme 100% din timp), ci pentru ca e mai usor sa faci delay-uri lungi cu clock mai lent.

Cipul e trezit de apasari pe butoane si reintra la somn dupa ce isi termina treaba.

 

Functionarea e in felul urmator: La o apasare scurta (sub 0.4s) pe buton, releul corespunzator e actionat pentru 10s (valorile se pot modifica). La o apasare mai lunga de 0.4s releul e actionat cat timp e tinut butonul apasat.

Mai e si o functie gen "cancel" care opreste geamul din mers la o noua apasare, daca in prealabil s-a apasat scurt pe buton. Asta e buna cand ai de deschis bucati mari de geam, dar nu tot geamul, nu mai tii apasat mult pe buton ci doar marchezi scurt inceputul si sfarsitul cursei.

 

Atasez proiectul pentru AVR Studio care contine si hex-ul.

 

; !!! Se vor seta fusebitii pentru clock de 128 kHz !!!.equ delay_scurt = 4     ; in zecimi de secunda.equ delay_lung  = 100   ; ex. 15 = 1.5s.include "tn13def.inc"    rjmp main.org 2;***************** PIN change ISR *************************    pop r0           ;golim stiva    pop r0opreste:    ldi r16,0b11110110     ;oprim ambele relee    out PORTB,r16    brtc test_butoane    clt    rjmp doarmetest_butoane:    sbis PINB,1     ;buton1 e apasat?    rjmp buton1     ;daca da sare la rutina buton1    sbis PINB,2    rjmp buton2    rjmp doarmebuton1:    sbi PORTB,3     ;pornim releu1    rjmp asteaptabuton2:    sbi PORTB,0     ;pornim releu2asteapta:    ldi r20,delay_scurt     rcall delay    sbic PINB,1      ;testam daca se mai tine apasat    sbis PINB,2      ;dupa delay-ul scurt    rjmp doarme      ;merge la somn daca inca tinem apasat        ldi r16,0b00100000  ;PCIF --> 1    out GIFR,r16        ;anulam orice intrerupere in asteptare    set                 ;setam flagul T ca "semn de carte"    sei    ldi r20,delay_lung  ;delay suficient de lung pentru    rcall delay         ;a asigura capat de cursa    rjmp opreste;******************* end of ISR ***************************main:    sbi PCMSK,PCINT1     ;configurare intrerupere "pin change"    sbi PCMSK,PCINT2     ;pentru doi pini (PB1 si PB2)    ldi r16,0b00100000   ;PCIE enable    out GIMSK,r16    ldi r16,0b00110000    ;activeaza instructiunea SLEEP     out MCUCR,r16         ;si modul "power-down"    ldi r16,0b00001001    ;PB0 si PB3 --> output    out DDRB,r16    ldi r16,0b11110110    ;PB0 si PB3 --> 0v    out PORTB,r16         ;restul internal pull-updoarme:    sei    sleep;**********************************delay:             ;intrare: r20 = delay in zecimi de sec.    ldi r21,14dl1:    clr r0dl2:    dec r0    brne dl2    dec r21    brne dl1    dec r20    brne delay    ret;**********************************

Logan.zip

Link spre comentariu
Vizitator Mythica

Daca intereseaza pe cineva schema si hexul pentru automatizarae geamurilor cu impuls le postez, insa este realizata cu pic 12f675 si nu cu atmel.Valorile componentelor sunt: R1-R6 0,1Ohmi/1W, R7-R9 3K6, R10-R13 8K2, R14 este sarma (apare in schema doar pt desenarea cablajului), D1,D2 - 1n4007 sau 1n4148, D3-zener de 3V6, T1,T2 - BC 337 sau alt NPN, IC1-7805.

post-17787-13982928721_thumb.jpg

Link spre comentariu
  • 1 an mai târziu...

O alta solutie pentru ca uC sa stie pozitia geamului ar fi un senzor de curent pe instalatia ce actioneaza motorul. Un curent mare ar fi debitat pentru un interval scurt in momentul in care geamul ajunge la capatul cursei iar motorul se blocheaza.Orice motor are un curent de mers in gol, unul de sarcina si unul cand este blocat. Foloseste-te de acest "trick" si vei automatiza cu succes GOLANUL aka Loganul. Toate cele bune!

Link spre comentariu
  • 2 săptămâni mai târziu...

Pentru siguranta intr-adevar este bine sa ai un traductor de curent.Am facut un astfel de montaj pentru un opel corsa (avea din fabrica un sistem, dar la un moment dat a iesit fum din el si nu mai merita reparat).Am folosit un Atmega8, 4 IRFZ44N, un 7805 si multe rezistente.Personal m-am folosit de INT0 si INT1 ca sa comand coborarea/ridicarea. La fel de bine puteam sa o fac cu o intrare ADC, cu tensiunea de la buton divizata (gen, butonul de ridicare printr-o rezistenta de 10K la ADC, si adc-ul pus la masa prin 10K iar pentru coborare o rezistenta de 1K. In felul asta pot sa vad 2 stari printr-un singur pin).Pe un ADC aveam o rezistenta de putere (10W) inseriata cu motorul. La 10A era setat sa se opreasca (motorul lua la cursa normala 5-8 amperi).Daca va intereseaza schema o sa o postez cand ajung acasa, ca acum sunt la birou.Practic ai nevoie de:2 interrupts1 adc2 iesiri pentru comanda puntii HOrice uC care are cel putin aceste functii disponibile poate fi folosit cu brio.

Link spre comentariu

Am folosit un Atmega8, 4 IRFZ44N, un 7805 si multe rezistente.

...

Daca va intereseaza schema o sa o postez cand ajung acasa, ca acum sunt la birou.

 

Practic ai nevoie de:

2 interrupts

1 adc

2 iesiri pentru comanda puntii H

Orice uC care are cel putin aceste functii disponibile poate fi folosit cu brio.

Chiar te rog !!! Multumesc anticipat ! Interrsanta idee comenzii prin MOSFET-uri !
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