Inhaltsverzeichnis:
- Schritt 1: TEILE und WERKZEUGE
- Schritt 2: BODENFEUCHTIGKEITSSONDE V1
- Schritt 3: BODENFEUCHTIGKEITSSONDE V2
- Schritt 4: BODENFEUCHTIGKEITSSONDE V3 "Katana"
- Schritt 5: GRUNDFUNKTIONALITÄT
- Schritt 6: 7-SEGMENT-ANZEIGE
- Schritt 7: PUMPE und PUMPENSTEUERUNG
- Schritt 8: KONFIGURATION und TASTEN
- Schritt 9: RTC: ECHTZEITUHR
- Schritt 10: ALLES ZUSAMMENSETZEN
- Schritt 11: SKIZZEN und mehr
- Schritt 12: *** WIR GEWONNEN !!! ***
Video: APIS - Automatisches Pflanzenbewässerungssystem - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Die GESCHICHTE: (eine nächste Evolution dieses Systems ist hier verfügbar)
Es gibt einige Anleitungen zum Thema Pflanzenbewässerung, daher habe ich hier kaum etwas Originelles erfunden. Was dieses System unterscheidet, ist der Umfang an Programmierung und Anpassung, der eine bessere Kontrolle und Integration in das tägliche Leben ermöglicht.
Hier ist ein Video von einem Bewässerungslauf: Bewässerungslauf
So entstand APIS:
Wir haben zwei rote Chili-Pfeffer-Pflanzen, die einige unserer Ferien kaum "überlebt" haben und zu diesem Zeitpunkt fast als Familienmitglieder betrachtet werden. Sie haben extreme Dürre und Überwässerung durchgemacht, haben sich aber immer irgendwie erholt.
Die Idee, eine Arduino-basierte Pflanzenbewässerung zu bauen, war fast die erste Idee, wie Arduino als Heimautomatisierungsprojekt eingesetzt werden könnte. So wurde ein einfaches Pflanzenbewässerungssystem gebaut.
Version 1 hatte jedoch keinen Hinweis auf die Bodenfeuchtigkeit, und es gab keine Möglichkeit zu sagen, ob die Pflanzen gegossen werden sollten oder die Bewässerung noch ein paar Tage entfernt war.
Neugier hat bekanntlich die Katze getötet und Version 2 wurde mit einem 4-stelligen 7-Segment-Modul gebaut, um jederzeit die aktuelle Luftfeuchtigkeit anzuzeigen.
Das war nicht genug. Die nächste Frage lautete: "Wann wurden die Pflanzen das letzte Mal bewässert"? (Da wir selten zu Hause waren, um es mitzuerleben). Version 3 nutzte das 7-Segment-Modul, um auch anzuzeigen, wie lange der letzte Bewässerungslauf zurückliegt (als Lauftext).
Eines Nachts begann die Bewässerung um 4 Uhr morgens und weckte alle auf. Frustrierend… Da es zu aufwendig war, APIS für die Nacht aus- und für den Tag einzuschalten, um mitten in der Nacht nicht zu wässern, wurde eine Echtzeituhr als Teil von Version 4 hinzugefügt, um das Gerät nachts in den Ruhezustand zu versetzen.
Da die Echtzeituhr periodische Anpassungen erfordert (wie zum Beispiel die Sommerzeitumschaltung), enthält Version 5 drei Tasten, mit denen eine Vielzahl von Pflanzenbewässerungsparametern eingestellt werden können.
Dabei blieb es nicht. Mir ist aufgefallen, dass die Feuchtigkeitssonde ziemlich schnell erodiert, möglicherweise aufgrund der Tatsache, dass sie (von der Konstruktion her) unter konstanter Spannung stand und daher ein konstanter elektrischer Strom zwischen den Sonden (erodierende Anode) herrschte. Die billige Bodensonde aus China hat etwa eine Woche überlebt. Sogar ein verzinkter Nagel wurde in einem Monat "aufgefressen". Eine Edelstahlsonde hielt besser, aber ich merkte, dass selbst das aufgab. Version 6 schaltet die Sonde jede Stunde für nur 1 Minute ein (und die ganze Zeit während des Gießens), wodurch die Erosion drastisch reduziert wird (~16 Minuten pro Tag vs. 24 Stunden pro Tag).
Die Idee:
Entwickeln Sie ein Pflanzenbewässerungssystem mit den folgenden Fähigkeiten:
- Bodenfeuchtigkeit messen
- Bei Erreichen einer vordefinierten "niedrigen" Feuchtigkeitsmarke Wasserpumpe einschalten und die Pflanzen gießen, bis eine "hohe" Feuchtigkeitsmarke erreicht ist
- Die Bewässerung sollte in mehreren Durchgängen erfolgen, die durch Inaktivitätsphasen getrennt sind, um eine Wassersättigung durch den Boden zu ermöglichen
- Das System sollte sich nachts zwischen "Schlaf"- und "Aufwach"-Zeiten deaktivieren
- "Weckzeit" sollte für Wochenenden auf einen späteren Wert angepasst werden
- Das System sollte das Protokoll der Pumpläufe führen
- Das System sollte den aktuellen Messwert der Bodenfeuchtigkeit anzeigen
- Das System sollte Datum/Uhrzeit des letzten Pumpenlaufs anzeigen
- Bewässerungsparameter sollten ohne Neuprogrammierung einstellbar sein
- Stoppen Sie das Pumpen und geben Sie einen Fehlerzustand an, wenn der Pumpenlauf nicht zu einer Änderung der Luftfeuchtigkeit führt (Wassermangel oder Sensorprobleme), wodurch eine Überflutung der Anlage und ein Austreten von Wasser verhindert werden
- Das System sollte die Feuchtigkeitssonde ein- und ausschalten, um Metallerosion zu vermeiden
- Das System sollte Wasser aus den Rohren ablassen, um zu verhindern, dass sich darin Schimmel bildet
Folgende Parameter sollen über Schaltflächen konfigurierbar sein:
- Feuchte "niedrig"-Markierung in %, um den Pumpenlauf zu starten (Standard = 60%)
- Feuchtigkeitsmarke „hoch“in % zum Stoppen des Pumpenlaufs (Standard = 65 %)
- Dauer eines einzelnen Bewässerungslaufs in Sekunden (Standard = 60 Sekunden)
- Anzahl der Versuche, die Zielfeuchtigkeit zu erreichen (Standard = 4 Durchläufe)
- Militärzeit zum Deaktivieren für die Nacht, nur Stunden (Standard = 22 oder 22 Uhr)
- Militärzeit zum Aktivieren am Morgen, nur Stunden (Standard = 07 oder 7 Uhr)
- Wochenendanpassung für morgendliche Aktivierung, Delta-Stunden (Standard = +2 Stunden)
- Aktuelles Datum und Uhrzeit
APIS schreibt Datum/Uhrzeit der 10 letzten Bewässerungsläufe in den EEPROM-Speicher. Das Protokoll kann mit Datum und Uhrzeit der Läufe angezeigt werden.
Eines von vielen Dingen, die wir von APIS gelernt haben, ist, dass Sie Pflanzen nicht jeden Tag gießen müssen, was unsere Routine war, bis wir die Bodenfeuchtigkeitsmessungen auf einem 7-Segment-Display sahen…
Schritt 1: TEILE und WERKZEUGE
Sie benötigen die folgenden Teile, um APIS zu erstellen:
STEUERKASTEN UND SCHLAUCH:
- Arduino Uno-Board: auf Amazon.com
- 12-V-Peristaltik-Flüssigkeitspumpe mit Silikonschlauch: auf Adafruit.com
- 4X Numerisches LED-Display Digital Tube JY-MCU-Modul: auf Fasttech.com
- DS1307 Echtzeituhr-Breakout-Board-Kit: auf Adafruit.com (optional)
- Microtivity IM206 6x6x6mm Taktschalter: auf Amazon.de
- Vero-Board: auf Amazon.com
- L293D-Motortreiber-IC: auf Fasttech.com
- 3 x 10kOhm Widerstände
- Arduino-Projekte Kunststoffgehäuse: auf Amazon.com
- 12V AC/DC-Adapter mit 2,1 mm Stromanschluss: auf Amazon.com
- Bambus Spieße
- Lauffläche und etwas Superzementkleber
- Superweicher Latex-Gummischlauch 1/8" ID, 3/16" AD, 1/32" Wall, Semi-Clear Bernstein, 10 ft. Länge: auf McMaster.com
- Strapazierfähige Nylon-Rohrverschraubung mit fester Dichtung, T-Stück für 1/8"-Rohr-ID, Weiß, Packungen mit 10: auf McMaster.com
- Strapazierfähige Nylon-Rohrverschraubung mit fester Dichtung, Wye für 1/8"-Rohr-ID, Weiß, 10er-Pack: auf McMaster.com
- Wie üblich sind Drähte, Lötwerkzeuge usw.
FEUCHTIGKEITSSONDE:
- Kleines Stück Holz (1/4 "x 1/4" x 1")
- 2 x Akne-Extraktionsnadeln aus Edelstahl: auf Amazon.com
- Bodenfeuchte-Erkennungssensormodul: auf Fasttech.com
Schritt 2: BODENFEUCHTIGKEITSSONDE V1
Die Bodenfeuchtigkeit wird anhand des Widerstands zwischen zwei Metallsonden gemessen, die in den Boden (etwa 1 Zoll voneinander entfernt) eingeführt werden. Die Schaltpläne sind auf dem Bild dargestellt.
Die erste Sonde, die ich ausprobiert habe, war die, die Sie bei einer Reihe von Internetanbietern kaufen können (wie diese).
Das Problem dabei ist, dass die Folienebene relativ dünn ist und schnell erodiert (eine Sache von ein oder zwei Wochen), daher habe ich diesen vorgefertigten Sensor schnell aufgegeben, um den robusteren Sensor auf Basis eines verzinkten Nagels zu erhalten (siehe nächster Schritt).).
Schritt 3: BODENFEUCHTIGKEITSSONDE V2
Die Sonde der "nächsten Generation" wurde aus zwei verzinkten Nägeln, einem Holzbrett und ein paar Drähten selbst gebaut.
Da ich bereits eine abgenutzte gefertigte Sonde hatte, habe ich das Anschlussstück und das Elektronikmodul daraus wiederverwendet und im Grunde nur die Bodenkomponente ersetzt.
Verzinkte Nägel erodierten zu meiner Überraschung auch (wenn auch langsamer als dünne Folie), aber immer noch schneller als ich es gerne hätte.
Eine weitere Sonde wurde entwickelt, die auf einer Akne-Entfernungsnadel aus Edelstahl basiert. (siehe nächster Schritt).
Schritt 4: BODENFEUCHTIGKEITSSONDE V3 "Katana"
Die Sonde aus Edelstahl (ähnlich einem Samuraischwert, daher der Name) wird derzeit verwendet.
Ich glaube, dass die schnelle Erosion darauf zurückzuführen ist, dass die Sonde immer unter elektrischer Spannung stand (24x7), egal wie oft die eigentliche Messung stattfand.
Um dies zu mildern, habe ich die Messintervalle auf einmal in 1 Stunde geändert (schließlich ist dies KEIN Echtzeitsystem) und die Sonde an einen der digitalen Pins anstelle von permanenten 5 V angeschlossen. Derzeit wird die Sonde statt 24 Stunden nur ~16 Minuten pro Tag mit Strom versorgt, was ihre Lebensdauer drastisch erhöhen sollte.
Schritt 5: GRUNDFUNKTIONALITÄT
APIS basiert auf dem Arduino UNO-Board.
APIS misst die Bodenfeuchtigkeit einmal pro Stunde und schaltet die Pumpe bei Unterschreitung eines vordefinierten Schwellenwerts für einen vordefinierten Zeitraum ein, vordefinierte Anzahl von Malen getrennt durch "Sättigungsintervalle".
Sobald ein Zielfeuchtigkeitsschwellenwert erreicht ist, kehrt der Prozess in den stündlichen Messmodus zurück.
Wenn die Zielfeuchtigkeit nicht erreicht werden kann, aber die untere Grenze erreicht wurde, ist das auch in Ordnung (zumindest wurde etwas bewässert). Der Grund könnte eine unglückliche Platzierung der Sonde sein, wo sie zu weit vom feuchten Boden entfernt ist.
Wenn jedoch auch die untere Feuchtigkeitsgrenze nicht erreicht werden konnte, wird eine Fehlerbedingung erklärt. (Höchstwahrscheinlich ein Sondenproblem oder der Vorratsbehälter hat kein Wasser mehr usw.). Im Fehlerzustand schläft das Gerät 24 Stunden lang, ohne etwas zu tun, und versucht es dann erneut.
Schritt 6: 7-SEGMENT-ANZEIGE
TM1650-BASIERTE 7-SEGMENT-ANZEIGE:
Ursprünglich hatte APIS keine Anzeigefunktion. Ohne eine Verbindung über USB war es unmöglich, die aktuelle Bodenfeuchtigkeit zu bestimmen.
Um das zu beheben, habe ich dem System eine 4-stellige 7-Segment-Anzeige hinzugefügt: auf Fasttech.com
Ich konnte nirgendwo eine Bibliothek finden, um mit diesem Modul zu arbeiten (weder ein Datenblatt dafür), also beschließe ich nach ein paar Stunden I²C-Port-Sondierung und Experimentieren, selbst eine Treiberbibliothek zu schreiben.
Es unterstützt Displays mit bis zu 16 Ziffern (wobei 4 die Standardeinstellung ist), kann einfache ASCII-Zeichen anzeigen (bitte beachten Sie, dass nicht alle Zeichen mit 7 Segmenten aufgebaut werden können, daher werden Buchstaben wie W, M usw. nicht implementiert)., unterstützt Dezimal Punktanzeige auf dem Modul, laufende Zeichenfolge (um mehr als 4 Buchstaben anzuzeigen) und unterstützt 16 Helligkeitsstufen.
Die Bibliothek ist hier auf dem arduino.cc-Spielplatz verfügbar. TM1650 Treiberbibliothek
Beispielvideo gibt es hier
ANIMATION:
Während eines Wasserlaufs wird eine kleine 7-Segment-Animation implementiert.
- Während die Pumpe eingeschaltet ist, laufen die digitalen Punkte auf dem Display von links nach rechts und symbolisieren einen Wasserlauf: Bewässerungsanimationsvideo
- Während der "Sättigung" laufen die Punkte von der Mitte des Displays nach außen und symbolisieren die Sättigung: Sättigungsanimationsvideo
Unnötig, aber eine nette Geste.
Schritt 7: PUMPE und PUMPENSTEUERUNG
PUMPE
Ich habe eine 12-V-Peristaltik-Flüssigkeitspumpe (hier erhältlich) zum Gießen der Pflanzen verwendet. Die Pumpe liefert ungefähr 100 ml/min (das entspricht ungefähr einem halben Glas - gut zu erinnern, wenn Sie die Wasserlaufzeit konfigurieren, um ein Überlaufen zu vermeiden, und es ist passiert 8-))
PUMPENSTEUERUNG - L293D
Die Pumpe wird über den L293D-Motortreiberchip gesteuert. Da die Drehrichtung voreingestellt ist, brauchen Sie wirklich nur den Chip-Enable-Pin zur Steuerung zu verwenden. Die Richtungsstifte könnten direkt auf +5V und GND fest verdrahtet werden.
Wenn Sie (wie ich) nicht sicher waren, in welche Richtung die Pumpe gehen wird, können Sie immer noch alle drei Pins mit Arduino verbinden und die Richtung programmgesteuert steuern. Weniger Nachlöten.
Schritt 8: KONFIGURATION und TASTEN
TASTEN:
Ich habe drei Schaltflächen verwendet, um APIS zu konfigurieren und zu steuern.
Alle Tastendrücke werden basierend auf den Pin-Interrupts (PinChangeInt-Bibliothek) verarbeitet.
- Rot (ganz rechts) ist eine SELECT-Taste. Es versetzt APIS in den Konfigurationsmodus und bestätigt auch die Werte.
- Die schwarze linke und mittlere Taste (PLUS bzw. MINUS) werden verwendet, um konfigurierbare Werte zu erhöhen/verringern (im Konfigurationsmodus) oder um das aktuelle Datum/die aktuelle Uhrzeit und Informationen zum letzten Bewässerungslauf anzuzeigen (im normalen Modus).
Da das Display meistens ausgeschaltet ist, werden alle Tasten zuerst APIS "aufwecken" und erst dann beim zweiten Drücken ihre Funktion erfüllen.
Das Display schaltet sich nach 30 Sekunden Inaktivität aus (es sei denn, es wird gerade ein Bewässerungslauf durchgeführt).
APIS durchläuft die Konfigurationsparameter beim Start zur Überprüfung: Video
AUFBAU:
APIS hat vier Konfigurationsmodi:
- Bewässerungsparameter konfigurieren
- Echtzeituhr einrichten
- Bewässerungsstrecke "Force"
- Bewässerungsprotokoll überprüfen
BEWÄSSERUNGSPARAMETER:
- Niedrige Bodenfeuchtigkeitsschwelle (mit der Bewässerung beginnen)
- Hohe Bodenfeuchtigkeitsschwelle (Bewässerung stoppen)
- Dauer eines einzelnen Bewässerungslaufs (in Sekunden)
- Anzahl der Bewässerungsläufe in einer Charge
- Dauer der Bodensättigungszeit zwischen den Durchläufen innerhalb einer Charge (in Minuten)
- Aktivierungszeit des Nachtmodus (Militärzeit, nur Stunden)
- Endzeit des Nachtmodus (Militärzeit, nur Stunden)
- Wochenendanpassung für Nachtmodus-Endzeit (in Stunden)
EINSTELLUNG DER ECHTZEITUHR:
- Jahrhundert (d. h. 20 für 2015)
- Jahr (d. h. 15 für 2015)
- Monat
- Tag
- Stunde
- Minute
Die Uhr wird nach Bestätigung der Minuten mit Sekunden auf 00 eingestellt.
Die Einstellung hat eine Timeout-Zeit von 15 Sekunden, nach der alle Änderungen verworfen werden.
Beim Speichern werden die Parameter im EEPROM-Speicher gespeichert.
EINEN BEWÄSSERUNGSLAUF ERZWENDEN:
Ich bin mir immer noch nicht sicher, warum ich es implementiert habe, aber es ist da. Nach der Aktivierung wechselt APIS in den Bewässerungsmodus. Der Bewässerungsmodus unterliegt jedoch noch Grenzwerten. Das heißt, wenn Sie einen Bewässerungslauf erzwingen, aber die Bodenfeuchtigkeit über der HIGH-Marke liegt, wird der Bewässerungslauf sofort beendet. Dies funktioniert grundsätzlich nur, wenn die Bodenfeuchtigkeit zwischen den Schwellenwerten NIEDRIG und HOCH liegt.
ÜBERPRÜFUNG DES BEWÄSSERUNGSPROTOKOLLS:
APIS führt ein Protokoll der letzten 10 Bewässerungsläufe im EEPROM-Speicher, das vom Benutzer eingesehen werden kann. Nur Datum/Uhrzeit des Bewässerungslaufs werden gespeichert. Schwellenwerte (zu diesem Zeitpunkt) und Anzahl der Läufe, die zum Erreichen des HIGH-Schwellenwerts erforderlich waren, werden nicht gespeichert (obwohl dies in der nächsten Version möglicherweise der Fall ist).
Schritt 9: RTC: ECHTZEITUHR
NACHT-MODUS
Als mich APIS nachts weckte, kam mir die Idee, einen "Nachtmodus" zu implementieren.
Ein Nachtmodus ist, wenn keine Messungen stattfinden, das Display ausgeschaltet ist und keine Bewässerung läuft.
An einem normalen Arbeitstag "wacht" APIS um 7 Uhr morgens auf (konfigurierbar) und wechselt um 22 Uhr in den Nachtmodus (konfigurierbar)., wenn die Wochenendanpassung 2 Stunden beträgt).
RTC BREAKOUT BOARD vs. "SOFTWARE" RTC:
Ich habe Hardware-RTC (hier erhältlich) verwendet, um das Datum / die Uhrzeit zu verfolgen und den Nachtmodus zu aktivieren / zu verlassen.
Die Verwendung ist optional, da Skizzen kompiliert werden könnten, um die sogenannte "Software" RTC zu verwenden (unter Verwendung der Millis()-Funktionalität von Arduino).
Der Nachteil bei der Verwendung von Software-RTC besteht darin, dass Sie die Zeit jedes Mal einstellen müssen, wenn APIS hochfährt.
Ich habe die Standard-RTC-Bibliothek so modifiziert, dass sie der API genau entspricht und auch das Millis-Rollover-Problem umgeht. (Bitte beachten Sie den Skizzenschritt für Downloads).
Schritt 10: ALLES ZUSAMMENSETZEN
Das gesamte System (außer Sonde) inklusive Pumpe passt in eine kleine Box für Arduino Uno.
- Das TM1650-Display verwendet eine TWI-Schnittstelle, sodass die SDA- und SDC-Drähte zu den Arduino-Pins A4 bzw. A5 gehen. Die anderen beiden Drähte sind +5V und GND.
- Die RTC-Karte verwendet die TWI-Schnittstelle, also wie oben. (TM1650 und RTC verwenden unterschiedliche Ports, sodass sie friedlich nebeneinander existieren). RTC +5V-Pin ist mit Arduino-Pin 12 verbunden (versorgt über digitalen Pin anstelle von +5V). Erinnere dich nicht, warum ich es getan habe, du musst nicht.
- L293D-Pins sind wie folgt verbunden: Enable (Pin 1) mit D5 und Richtungssteuerpins 2 und 7 mit den Arduino-Pins D6 bzw. D7.
- BUTTONS sind mit den Pins D2, D8 und D9 für SELECT, PLUS bzw. MINUS verbunden. (Tasten sind mit Pull-Down-Widerständen von 10K implementiert - in der "active-high"-Konfiguration).
- Die +5-V-Spannung des PROBE-Moduls ist an Arduino-Pin 10 angeschlossen (um periodische Messungen zu ermöglichen), und die Sonde ist an den analogen Pin A1 angeschlossen.
HINWEIS: Die Fritzing-Schemas-Datei wurde dem Github-Repository hinzugefügt.
Schritt 11: SKIZZEN und mehr
Aktualisierung März 2015:
- Funktion hinzugefügt, um die Schläuche nach dem Bewässerungslauf zu entleeren, um die Bildung von Schimmel zu verhindern (Junge! Ich bin froh, dass ich die Drehrichtung der Pumpe beim L293D nicht fest verdrahtet habe!)
- Eine ausführlichere Protokollierung umfasst Datum/Uhrzeit des Bewässerungslaufs, Beginn und Ende der Luftfeuchtigkeit und wie oft die Pumpe während des Bewässerungslaufs eingeschaltet wurde
- Fehlerroutine aktualisiert: Gerät wird nach 24 Stunden nach Eintritt in den Fehlerzustand hart zurückgesetzt
- Neukompiliert mit TaskScheduler 2.1.0
- Diverse andere Fehlerbehebungen
Am 18. November 2015 wurde APIS mit den folgenden zusätzlichen Funktionen aktualisiert:
- Verwendung der DirectIO-Bibliothek für schnellere und einfachere Pin-Änderungen
- Verwendung der Timezone-Bibliothek zum korrekten Wechsel zwischen EST und EDT
- Schaltflächen-Entprellungslogik nur mit TaskScheduler hinzugefügt
- Tastenwiederholungsfunktion hinzugefügt (Wertezyklus, wenn die Taste gedrückt und gehalten wird, wobei die Zyklusgeschwindigkeit nach 5 Zyklen erhöht wird)
- Neukompiliert mit IDE 1.6.6 AVR 1.6.9 gegen TaskScheduler 1.8.4
- Auf Github verschoben
BIBLIOTHEKEN:
APIS basiert auf den folgenden Bibliotheken:
- EEPROM - Teil der Arduino IDE
- Draht - Teil der Arduino IDE
- EnableInterrupt - verfügbar auf Github
- Zeitzone - verfügbar auf Github
- DirectIO - verfügbar auf Github
Von mir geändert (gegabelt):
- Uhrzeit - verfügbar auf Github
- RTClib - verfügbar auf Github
Von mir entwickelt:
- TM1650 - verfügbar auf Github
- TaskScheduler - verfügbar auf Github
- AvgFilter - verfügbar auf Github
SKIZZIEREN:
Die neueste Version der APIS-Skizze, einschließlich der Fritzing-Schemas-Datei, ist auf Github verfügbar
DATENBLÄTTER:
- L293D: hier
- RTC-Breakout-Board: hier
Schritt 12: *** WIR GEWONNEN !!! ***
Dieses Projekt gewann den zweiten Preis im von Dexter Industries gesponserten Home Automation-Wettbewerb.
Hör zu! WOO-HOO!!!
Zweiter Preis in der Hausautomation