Schrittmotor Steuerung für Antennen Rotor

Voor de ontvangst van satelliettelevisie in de camper kunt u een dure automatische satellietantenne kopen of een eenvoudige goedkope satellietantenne op een statief zetten en handmatig aanpassen.Dit is meestal zeer tijdrovend en aangezien de antenne buiten de televisieontvanger, maar binnen, het succes van de actie kan alleen maar slecht worden waargenomen.

Een veel gemakkelijke en toch betaalbare oplossing is de antenne rotor gepresenteerd hier met stap motor controle.De stepper motor wordt gecontroleerd door een NodeMCU LUA Amica VS module met ESV8266 12F, zodat het kan worden bediend via WLAN.Hiertoe wordt de ESV8266 als toegangspunt gebruikt.Met een smartphone kun je gemakkelijk de antenne motor controleren.

In deze modus ontvangt de ESV8266 altijd het IP-adres 192.168.4.1

Het gepresenteerde programma creëert een WLAN met de SSID "antenne" en het wachtwoord "womo12345".Dit kan natuurlijk worden gewijzigd door wijzigingen in het programma.

Als de antenne rotor wordt geleverd met elektriciteit, kunt u een WLAN genaamd "antenne" vinden in de smart phone in de WLAN lijst.We verbinden ons nu aan deze WLAN en starten een browser app.Als URL voeren we 192.168.4.1 in.

We moeten nu de volgende homepage in de browser zien:

Als we op een van de knoppen klikken, moet de antenne draaien in de gewenste richting.

Onderdelen:

 

 

 

 

/*
 *Copyright (c) 2015, Majenko Technologies
 Alle rechten voorbehouden.
 * 
 *Heroriëntatie en gebruik in broncode en binaire vormen, met of zonder modificatie;
 *zijn toegestaan mits aan de volgende voorwaarden is voldaan:
 * 
 * *Heristributions of source code moet de bovengenoemde copyright aankondiging, dit
 *lijst van voorwaarden en de volgende disclaimer.
 * 
 * *Redistributions in binaire vorm moeten de bovenstaande copyright aankondiging reproduceren, dit
 *lijst van voorwaarden en de volgende disclaimer in de documentatie en/of
 *andere materialen voorzien van de distributie.
 * 
 *Noch de naam van Majenko Technologies, noch de namen van de
 *contribuanten kunnen worden gebruikt om producten van
 *deze software zonder specifieke schriftelijke toestemming.
 * 
 *DEZE SOFTWARE IS VERSTREKT DOOR DE COPYRECHTS HOUDERS EN VERDRAAGERS "AS IS" EN
 *EEN EXPRESSIE OF BETERE WAARSCHUWINGEN, MET INCLUSIEF, maar NIET BEPERKT, DE GEVOLGEN
 *WAARSCHUWINGEN VAN MECHANTIABILITEIT EN RECHTVAARDIGHEID VOOR EEN GEGEVENS DOEL ZIJN
 Disclaimed.In geen geval zal de COPYRIGHT HOUDER OF VERDRAAGERS aansprakelijk zijn voor
 *DIRECTE, INDIRECT, INCIDENT, SPECIALE, VOORBEELDEN OF CONEQUENTELE GEGEVENS
 * (met inbegrip van, maar niet beperkt tot, het aantonen van SUBSTUTE GOEDEREN of DIENSTEN;
 *Verlies van GEBRUIK, GEGEVENS, OF PROFITS; OF ONDERNEMINGEN)
 *EEN THEORIE VAN DE VERPLICHTHEID, OF HET IN CONTRACT, STRICT AANSPRAKELIJKHEID OF OVERZICHT
 * (INCLUSIEF ONDERNEMING OF ANDERE) IN EEN KADER UIT HET GEBRUIK VAN DIT
 *Software, zelfs al is het geboden van de mogelijkheid of zo'n schade.
 */

/*Maak een WiFi-toegangspunt en geef er een web server op.*/

"35; omvat <ESP826WiFi.H>
"35; omvat <WiFiClient.H> 
"35; omvat <ESP826WebServer.H>

/*HTML-code voor de controlehomepage
 *Het is een eenvoudige vorm met een
 *Snelheidsveld en drie knoppen
 *Rechts, links en stop
 */
const char HTML INDEX[] =
Goed?DOCTYPE HTML>"
"<html>"
"<head>"
"<meta naam ="viewport"content "breedte = apparaat-breedte, initiële schaal = 1.0, maximum-schaal = 1.0, gebruiker-schaalbare=0">"
"<titel>Antennenrotor</titel>"
"<style>"
"body {achtergrondkleur: 35; d2f3eb; font-familie: Arial, Helvetica, Sans-Serif; Color: 35; 000000;}"
"input {font-size:16pt;}
"</style>"
"</head>"
"<body>"
"<h1>Antennenrotor</h1>"
"<FORM-actie=\\\\\\"
"<P>"
"<INPUT-type=\"submit"naam="LINKS"waarde="Links\\\>&nbsp;"
"<INPUT-type="submit"naam="STOP"waarde="Stop">&nbsp;"
"<INPUT-type=\\\\\\\\\\\\\\"subal\"naam;;br>"
"Speed (1-10):<br>"
"<INPUT-type=\"text"waarde="%i"naam="SPEED\\\;" 
"</P>"
"</FORM>"
"</body>"
"</html>";

/Globale variabelen
const char *pagina = Antenne.; Naam van de WLAN 
const char *wachtwoord = womo12345; Wachtwoord voor de WLAN

const int stp = 12; /Pin-nummer voor de stapsverbinding van de motorbestuurder
const int jij = 13; /Pin-nummer voor de richtingaansluiting van de bestuurder
int richting = 0; lopende richting
int dly = 100; stappen vertraging van de motor
int spd = 1; actuele snelheid

ESP826WebServer server(80); Website op Port 80

Deze functie wordt opgeroepen wanneer het verzoek aan de web server = /is
Leeg HandeleRoot() {   char html[1000];Request buffer   /Stuur de homepage naar de browser met de snelheid invoer   met welke de huidige snelheid is ingesteld   sprint(html, HTML INDEX,spd);    server.verzenden(200, "tekst/html", html );
}

Deze functie wordt opgeroepen wanneer het verzoek "/links" is
Leeg handeLeft() {   richting = 1;Antwoord naar links en met homepage   HandeleRoot();
}

Deze functie wordt opgeroepen wanneer het verzoek "/right" is
Leeg rechts() {   richting = 2; Antwoord naar rechts en met homepage   HandeleRoot();
}

Deze functie wordt opgeroepen wanneer het verzoek "/stop" is
Leeg handeStop() {   richting =0; regie om te stoppen en te beantwoorden met homepage   HandeleRoot();    }

Deze functie wordt opgeroepen wanneer het verzoek "/data?..."is
Leeg handeData() {   String sspdName;   /Afhankelijk van de argumenten van het verzoek, richting en   Snelheid set.Snelheid tussen 1 en 10   indien (server.hasargworld.kgm(VERBAND)) richting = 1;   indien (server.hasargworld.kgm("Juist")) richting = 2;   indien (server.hasargworld.kgm(Stop.)) richting = 0;   indien (server.hasargworld.kgm(SPELD)) {     sspdName = server.boos(SPELD);     spd = sspdName.TOIntName();     indien (spd < 1) spd = 1;     indien (spd > 10) spd = 10;     dly = (11-spd)*10; Step distance 100 bij snelheid 1                        en 10 bij snelheid 10   }   HandeleRoot(); Antwoord met homepage
}

Leeg setup() {   Voorbereiding van pinnen   PinMode(stp, UITVOER);   PinMode(jij, UITVOER);   digitalisWriteName(stp,HOGE);   digitalisWriteName(jij,HOGE);   vertraging(1000);   Serie.start(115200);   Serie.Afdrukken();   Serie.print("Access point instellen...");      WiFi..Zacht(pagina, wachtwoord);   IPAdres myIP = WiFi..softAPIP();   Serie.print("AP IP-adres:);   Serie.Afdrukken(myIP);   IP is altijd 192.168.4.1   /Definitie van responsfuncties   server.op("/", HandeleRoot);   server.op("links", handeLeft);   server.op("Juist", rechts);   server.op(Stop., handeStop);   server.op("Datum", handeData);   /Start Web Server   server.start();   Serie.Afdrukken("HTTP server gestart");
}

Hoofd lus
Leeg ren() {   Controle op verzoek   server.handeClient();   afhankelijk van de richting ingesteld de Pin   and spey a step on the Step Pin    /Step lengte in ms wordt bepaald door dly   indien (richting == 1) {     Serie.Afdrukken("links");     digitalisWriteName(jij,LOW);     digitalisWriteName(stp,LOW);     vertraging(dly);     digitalisWriteName(stp,HOGE);     vertraging(dly);   }   indien (richting == 2) {     Serie.Afdrukken("rechts");     digitalisWriteName(jij,HOGE);     digitalisWriteName(stp,LOW);     vertraging(dly);     digitalisWriteName(stp,HOGE);     vertraging(dly);   }
}

Esp-8266Projekte für fortgeschrittene

8 Kommentare

Heinz K.

Heinz K.

Danke, hat soweit funktioniert. Falls jemand wissen möchte wozu ich das benutze kann das unter youtu.be/x0KHGZSZVEE eingesehen werden.

Andreas Wolter

Andreas Wolter

@Heinz K.: Sie könnten einen Counter einsetzen. Dafür bräuchten Sie zwei globale Variablen. Am besten oberhalb direkt unter int spd = 1; //aktuelle Geschwindigkeit

int counter = 0;
int maxCounter = 20;

counter ist der Zähler und maxCounter Ihre Grenze. Welcher Wert den 4,5cm entspricht, müssten Sie testen.

in die if-Anweisung fügen Sie dann den Code ein, der dafür sorgt, dass nach den festgelegten Schritten der stop-Befehl aufgerufen wird:
if (richtung == 1) {
Serial.println(“links”);
digitalWrite(dir,LOW);
digitalWrite(stp,LOW);
delay(dly);
digitalWrite(stp,HIGH);
delay(dly);
counter++;
if (counter > maxCounter) {
counter = 0;
handleStop();
}
}

Das wäre eine Lösung. Wenn ich das richtig verstanden habe, brauchen Sie nur einen Start Button. Daher könnte man das gesamte Programm weiter verschlanken.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Heinz K.

Heinz K.

Hallo,
ich bin mit der Programmierung leider nicht so bewandert. Gibt es eine Möglichkeit das man mit den Tasten links und rechts immer eine bestimmte Anzahl der Drehungen anstösst und dann automatisch wieder stehen bleibt? Hintergrund: beim Luftgewehrschiessen gibt es 10er Schiessscheiben als Streifen auf dem die 10 Spiegel nebeneinander liegen. Diese müssen manuell weiter gezogen werden – immer ca. 4,5 cm. Ich würde aber gerne die Scheibe einspannen und nach jedem Schuss ein Knöpfchen drücken damit automatisch der nächste Spiegel erscheint. Das mit der Mechanik bekomme ich hin, nur an der Programmierung hakt es.

Andreas Wolter

Andreas Wolter

This Example shows the azimuth controll (left and right). For Elevation (up and down) any changes are needed. First you need a second stepper and second driver modul. Two more input fields in the HTML form. For example:
up
left stop right
down

Then you can duplicate the functions for direction handling and connect them to the left and right fields in this form.
The command
if (server.hasArg(“RECHTS”)) richtung = 2;
could expanded with 3 and 4 for up and down.
For the stepper controll you need one more variable: stp2
and you have to check if the variable dir is 3 or 4 then send the commands to the second stepper. Otherwise the first stepper will be moved.

Regards,
Andreas Wolter
AZ-Delivery Blog

Alberto

Alberto

Cool; It’s what I’ve been looking for for a long time.
If I want to control two motors (Azimuth and Elevation), what should I add to the code?
Thanks a lot

ani

ani

Und woher bekomme ich das Getriebe? Ohne Mechanik, sprich Getriebe, ist das alles Makulatur. Und wie ist es mit der Vertikalsteuerung Gibt es dafür auch Ideen? So werden z. Bsp. in anderen Bereichen der Funktechnik der Mond, Meteorschwärme, Flugzeuge oder Wolken angesteuert.

Jörg Mehring

Jörg Mehring

Hallo,
die Stromversorgung könnte man vielleicht der Phantomspeisung des LNBs entnehmen, da die Polarisation über eine Schaltspannung von 14 bis 18 Volt eingestellt wird. Je nach Strombedarf der o.g. Schaltung sollte das gehen.

Frank Jetzschmann

Frank Jetzschmann

Hallo,
bei Verwendung von (größeren) Schrittmotoren ist zwingend ein (mindestens) 100µF Elko direkt an der Schrittmotorsteuerplatine (+12V Anschluss) notwendig. Sonst wird die Schrittmotorsteuerplatine zerstört. Hinweise zu diesem Phänomen finden sich in diversen Applikationsschaltungen im Internet.

Sonst eine wirklich clevere Lösung mit Potential für eigene Verbesserungen :-)

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert