Hallo zusammen,
ich habe mir heute einen GPS gesteuerten Toröffner gebastelt.
Microcontroller Attiny 85 (5,00V läuft auf 8 Mhz)
GPS Modul Neo 6M
Sobald man in einen vordefinierten Bereich kommt soll der Öffner bestätigt werden, momentan hängt noch eine LED an dem Ausgang..
Für das Parken in der Tiefgarage wird ein Zuhause Bit gesetzt um beim erneuten losfahren das Tor automatisch öffnen zu lassen.
Zusätzlich soll der Öffner auch noch per Taster zum auslösen sein.
Das Script läuft grundsätzlich wie es soll nur leider mir einer gewissen Verzögerung ca 3 Sek bei Eintritt bzw Austritt aus der Zone.
Der Taster betätigt sofort den öffner.. Was könnte ich dagegen tun? oder ist der kleine Tiny an seiner Leistungsgrenze ?
Ich bin kein "Profiprogrammierer" sondern immer noch am Lernen daher bin ich für Vorschläge und Verbesserungen sehr Dankbar.
Ich bedanke mich schon mal im Vorraus und bin gespannt auf eure Beiträge
Gruß Regenwolf
/****************************************************************
* *
* GPS Toröffner *
* *
* Öffnet per GPS oder per Tastendruck ein Tor *
* *
* *
* Pin am ATtiny85 Funktion Pin im Sketch *
* *
* *
* *
* 1 8 Reset VCC *
* 2 7 3 2 *
* 3 6 4 1 *
* 4 5 GND 0 *
* *
* *
* *
* Pinverbindung *
* T85 3.3V > GPS VCC *
* T85 GND > GPS GND *
* T85 RX 3 > GPS TX *
* T85 TX 99 > GPS RX *
* *
* Torsteuerung 0 *
* Taster 2 *
* *
* *
* Autor: Regenwolf *
* Datum: 15.06.2022 *
* Microcontroller: Attiny85 *
* GPS: NEO-6M-0-001 *
* *
* V:3.2 *
* *
***************************************************************/
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
bool zuhause;
const double Latmin = 52.22230;
const double Latmax = 52.22290;
const double Lngmin = 33.33330;
const double Lngmax = 33.33390;
TinyGPSPlus gps;
#define oeffner PCINT0
#define taster PCINT2
#define rx PCINT3
#define tx PCINT4
SoftwareSerial SerialGPS (rx, tx);
void setup() {
zuhause = EEPROM.read(0);
SerialGPS.begin(9600);
pinMode(oeffner, OUTPUT);
pinMode(taster, INPUT_PULLUP);
}
void loop() {
// taster
if (digitalRead(taster) == LOW) {
digitalWrite(oeffner , HIGH);
delay(5000);
digitalWrite(oeffner, LOW);
}
while (SerialGPS.available() > 0) {
gps.encode(SerialGPS.read());
}
// GPS
if (gps.satellites.value () > 4)
{
if ( Latmin < gps.location.lat() && gps.location.lat() < Latmax
&& Lngmin < gps.location.lng() && gps.location.lng() < Lngmax
)
{
zuhause = true;
EEPROM.update(0, zuhause);
delay(5);
} else {
zuhause = false;
EEPROM.update(0, zuhause);
delay(5);
}
}
// oeffner
if (zuhause) {
digitalWrite(oeffner, HIGH);
delay(800);
digitalWrite(oeffner, LOW);
delay(800);
}
}