Sari la conținut
ELFORUM - Forumul electronistilor

Secret key


Vizitator

Postări Recomandate

  • Răspunsuri 30
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Un update la acest video , conform discutiei, am pus aici.

Nel65, codul de bare, cel la care te referi tu,  nu poate fi scanat de la 1 metru. Nici daca-l deseneti pe motan tot un cod de bara. Dar totusi, o idee e o idee. Poate ar merge, parerea mea e doar ca nu.

miticamy, pisicul, sau alt animal, nu sta cuminte sa-i scanezi retina. si oricum e prea multa procesare pentru asta. chiar daca suna super, nu e atat de fiabil, nici pentru scopurile lui. inca.

 

 

o sa pun si codurile pentru:

 

IRKey:

/*PROGRAM: PET IRKey by www.upx.ro Recommended DeviceId: Attiny85 SMD Vcc: 3V CR2032 Version: 27072016v19.37*/ #include <avr/sleep.h>#include <avr/wdt.h>#ifndef cbi#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))#endif#ifndef sbi#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))#endifint pinIRLed = 3; // hardware: IR diode ~980nmvolatile boolean f_wdt = 1;void setup(){  pinMode(pinIRLed,OUTPUT);  setup_watchdog(8); // vezi nota la functie}void loop(){  if (f_wdt==1) {    f_wdt=0;    delayMicroseconds(1);    SendIRCode();    SendIRCode();    pinMode(pinIRLed,INPUT);    system_sleep();    pinMode(pinIRLed,OUTPUT);  }}void system_sleep() {  cbi(ADCSRA,ADEN);  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  sleep_enable();  sleep_mode();  sleep_disable();  sbi(ADCSRA,ADEN);}// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms// 6=1 sec,7=2 sec, 8=4 sec, 9= 8secvoid setup_watchdog(int ii) {  byte bb;  int ww;  if (ii > 9 ) ii=9;  bb=ii & 7;  if (ii > 7) bb|= (1<<5);  bb|= (1<<WDCE);  ww=bb;  MCUSR &= ~(1<<WDRF);  WDTCR |= (1<<WDCE) | (1<<WDE);  WDTCR = bb;  WDTCR |= _BV(WDIE);}ISR(WDT_vect) {  f_wdt=1;}void pulseIR(long microsecs) {  cli();  while (microsecs > 0) {    PORTB |= _BV(PB3);    delayMicroseconds(13);    PORTB &= ~_BV(PB3);    delayMicroseconds(13);    microsecs -= 26;  }  sei();}void pauza(){  delayMicroseconds(600);}void SendIRCode() { // HEX: 49B0F624  pulseIR(2400); pauza();  pulseIR(1200); pauza();  pulseIR(600); pauza();  delay(10);     }

Usa si receiver:

/*PROGRAM: Automatic PET DOOR with IRKey by www.upx.ro Recommended DeviceId: Arduino Pro or Pro-Mini Version: 27072016v19.37  LED:   o Fast pulse = Key in range  o Slow pulse = Key not in range, last seen < 12h (<delay_CheckIn>)  o Light On   = Key not in range, last seen > 12h (<delay_CheckIn>) */#include <avr/wdt.h>#include <IRremote.h>     // https://github.com/z3t0/Arduino-IRremote#define RECV_PIN  11	 // hardware: e.g TSOP38238, TSOP34838, TSOP4838, TSOP31238 or any 38HKz receiver diode#define Servopin 7		 // hardware: 9G servo with 0-180ยบ rotation#define irBarieraPin 4   // hardware: [+5v] --[10k]--[irBarieraPin]---[IRbar][GND]#define GreenLedPin 13	 // hardware: regular LED//setupint door_close = 105;	// ajusteaza pozitia servo pentru inchisint door_open = 28;     // ajusteaza pozitia servo pentru inchisunsigned long delay_close = 20000UL;unsigned long protection_stationary = 60000UL;unsigned long delay_CheckIn = 43200000UL; // 12 ore/*Do not edit from this line*/int curentPosition = door_close;int angle;boolean skipsw = false;int pasiServo = 1;boolean stateDoor = 0;boolean protection_stationary_flag = 0;int zgardaFlag = 0;unsigned long currentMillis;unsigned long lastServo = 0;unsigned long lastmove = 0;unsigned long lastReadSwIrbar = 0;unsigned long lastReadIrZgarda = 0;unsigned long lastDelay = 0;unsigned long lastTimeBlinkRedLed = 0;unsigned long lastTimeFreeInFrontDoor = 0;int stateIRZgarda, _stateIRZgarda, stateIRbar, _stateIRbar = 0; int delay_closeBkp = delay_close;IRrecv irrecv(RECV_PIN);decode_results results;void setup() {       Serial.begin(9600);  pinMode(Servopin,OUTPUT);  pinMode(GreenLedPin,OUTPUT);    pinMode(irBarieraPin,INPUT);  Serial.println(F("Automatic PET DOOR with IRKey - www.upx.ro"));  delay(1000);  RedLed(1);  servoPulse(Servopin, 150);	// just for test, can be remove this line  delay(1000);  RedLed(0);  irrecv.enableIRIn();  wdt_enable (WDTO_4S);}/* PROCEDURI  */void servoMove(int servoPin, int angle){  stateDoor = 2; // door in progress  if (curentPosition == door_close) stateDoor = 0;  if (curentPosition == door_open) stateDoor = 1;  if (angle != curentPosition) {    lastServo = currentMillis;	    if ((currentMillis - lastmove) >= 15) {      int diff =  abs(curentPosition - angle);       int max_min = abs(door_open-door_close);      if (diff > (max_min*0.85)) pasiServo = 1;        if (diff <= (max_min*0.85)) pasiServo = 2;      if (diff <= (max_min*0.75)) pasiServo = 3;      if (diff <= (max_min*0.30)) pasiServo = 2;      if (diff <= 10) pasiServo = 1;        if ( curentPosition > angle ) {        curentPosition -= pasiServo;          skipsw = true;      }      if ( curentPosition < angle ) {        curentPosition += pasiServo;      }      if (curentPosition == angle)  {        curentPosition = angle;         skipsw = false;      }    }  }  servoPulse(servoPin, curentPosition);	}void servoPulse (int servoPin, int angle){  if ((currentMillis - lastServo) <= 500) { // protection servo    int pulseHigh,pulseLow;      pulseHigh = map(angle,0,180,500,2200);    pulseLow = 2200-angle;    for (int i=1; i<=5; i++) {          digitalWrite(servoPin, HIGH);      delayMicroseconds(pulseHigh);      digitalWrite(servoPin, LOW);          delayMicroseconds(pulseLow);      }     delayMicroseconds(2200);     lastmove = currentMillis;  }  }int readIRZgarda(){  if (skipsw == true) return 1;  if ((currentMillis - lastReadIrZgarda) >= 5000UL) {    lastTimeFreeInFrontDoor	= currentMillis;    protection_stationary_flag = 0;    stateIRZgarda = 0;  }     if (irrecv.decode(&results)) {    //Serial.println(results.value, HEX);    if ((results.value == 0x49B0F624)) {      stateIRZgarda = 1;      if (protection_stationary_flag == 0) lastDelay = currentMillis;      lastReadIrZgarda = currentMillis;      // protection stationary      if ((currentMillis  - lastTimeFreeInFrontDoor) >= protection_stationary){        protection_stationary_flag = 1;      } 	      }    irrecv.resume();  }     return stateIRZgarda;}int readIRbar(){  if (skipsw == true) return 1;  if ((currentMillis - lastReadSwIrbar) >= 250) {    lastReadSwIrbar = currentMillis;    stateIRbar = !digitalRead(irBarieraPin);    if (_stateIRbar == stateIRbar) {      return stateIRbar;    }     else {      _stateIRbar = stateIRbar;    }  }  return _stateIRbar;}void RedLed(int xState) { // 0=off; 1 = on; 2=blink slow; 3=blink fast  switch (xState) {  case 0:    //led off    digitalWrite(GreenLedPin,LOW);    break;   case 1:    //led on    digitalWrite(GreenLedPin,HIGH);     break;   case 2:    // blink slow    if((currentMillis - lastTimeBlinkRedLed) > 1000) {      lastTimeBlinkRedLed = currentMillis;      digitalWrite(GreenLedPin,!digitalRead(GreenLedPin));    }    break;  case 3:    // blink fast     if((currentMillis - lastTimeBlinkRedLed) > 75) {      lastTimeBlinkRedLed = currentMillis;            digitalWrite(GreenLedPin,!digitalRead(GreenLedPin));    }    break;     }}//////////////---> END PROCEDURIvoid loop() {  wdt_reset (); //wathdog !  currentMillis = millis();  int IRbar = readIRbar();  int Zgarda  = readIRZgarda();  //LED  if (stateIRZgarda == 1) {    RedLed(3);  }   else {    /*CheckIn Timer. Last Seen*/	if ((currentMillis - lastReadIrZgarda) >= delay_CheckIn) {	RedLed(1);	} else {    RedLed(2);	}  }  //open from inside    if ((IRbar == 1) && ((stateDoor == 0) || (stateDoor == 2))) {    servoMove(Servopin,door_open); // open door    lastDelay = currentMillis;    return;  }  //open outside   if ((Zgarda == 1) && ((stateDoor == 0) || (stateDoor == 2)) && (protection_stationary_flag == 0)) {    servoMove(Servopin,door_open); // open door    zgardaFlag = 1;    lastDelay = currentMillis;    return;  }  //close after entry  if ((IRbar == 1) && (stateDoor == 1) && ( zgardaFlag == 1)) {    zgardaFlag = 0;    lastDelay = currentMillis;    delay_close = 2000UL; // timp pentru coada pisicii  }  // AutoClose  if (((currentMillis - lastDelay)  >= delay_close) && (IRbar == 0) && ((Zgarda == 0) || (protection_stationary_flag == 1))) {    servoMove(Servopin,door_close);    if (stateDoor == 0) {      delay_close = delay_closeBkp;      /*prevent play with door*/      //wdt_disable();      //delay(20000);       //wdt_enable (WDTO_4S);    }  } }
Editat de Vizitator
Link spre comentariu

am modificat TX-ul inca o data...vreau sa-l fac si mai mic...asa ca o sa despart bateria de montaj, in felul in care sa fie cusut in zgarda intre material..si doar la baterie sa fie acces.

 

cablajul nou are undeva la 1cm latime si vreo 2cm lungime.

post-235374-0-68494400-1469921295_thumb.jpg

Link spre comentariu

Update-uri

  • [*]adaugare Telecomanda IR [*]adaugare inca un receiver IR pentru interior, pentru a sti daca pet-ul se afla in interior [*]adaugare senzor lumina in exterior [*]adaugare 1 servo (Locker) [*]soft android pentru telefoanele echipate cu LED IR

post-235374-0-49253100-1470483243_thumb.jpg

Editat de Vizitator
Link spre comentariu
  • 2 luni mai târziu...

...e adevarat ca pentru mine electronica e doar distractie si hobby, dar totusi chiar vroiam sa se deschida usa. si merge de atunci fara probleme, sunt deja vreo >3 luni, bateria are 3.17V chiar zilele trecute i-am facut o verificare. :)

 

totusi eu nu stiu despre ce post spui... :) si nici ce te-a determinat sa afirmi asa...azi.

Editat de Vizitator
Link spre comentariu

pai daca eu de meserie sunt anteprenor, si am facut bani din electronica , dar nu mai mult decat sa acopar aparate de masura, osciloscoape etc...cred ca doar pentru distractie electronica ptr mine... :)

 

sunt sigur ca nu din rautate a postat, dar nu inteleg ce vroia sa spuna...oricum nu trebuie sa inteleg eu...daca intelegeti voi e bine.

Link spre comentariu

Soluția lui ,,one,, era  pe baza interacțiunii dintre două bobine, una mai mare aflată într-un oscilator, cealaltă ( mult mai mică) fiind purtată de pisică și interacționa cu cea de pe ușă absorbind o parte din energia circuitului oscilant și astfel putându-se detecta prezența pisicii. Bobinele fiind acordate în frecvență cu condensatoare, se exclude interferența cu altceva..... față de această soluție, varianta RFID e mai ,,hi-tech,, dar și mai complicată și costisitoare.

Link spre comentariu

este mai hi-tech dar nu ofera posibilitatea unei distante de peste 15-20cm, iar in cazul aplicatiei se cere peste 100cm.

bine, ca se poate si cu rfid la distanta mai mare, dar deja nu mai e cazul unui hobbyst.

Link spre comentariu

pai daca eu de meserie sunt anteprenor, si am facut bani din electronica , dar nu mai mult decat sa acopar aparate de masura, osciloscoape etc...

Daca castigati din acest hobby atat de frumos si de interesant care este electronica suficienti bani pentru a acoperi cheltuielile de pe aparatele de masura inclusiv osciloscoape(care nu sunt ieftine deloc) inseamna ca ceea ce faceti chiar are succes.Acuma cateva luni am fost intr-un magazin de electronice pentru a ma interesa de o statie de lipit toate de pe raft fiind pt. amatori pretul maxim al lor ajungand pana la 400 RON cu exceptia uneia singure pt. profesionisti marca Weller care costa peste 1700 RON iar angajatul de acolo mi-a spus ca asa ceva merita sa-ti cumperi doar daca folosind-o acoperi cheltuiala facuta intr-un timp nu prea indelungat si sunt perfect de acord cu asta.Mai in gluma mai in serios l-am intrebat daca nu mai are pe acolo vreun JBC,Metcal sau Hakko ca sa-mi clatesc ochii.

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