Inhoudsopgave:
- Stap 1: Inleiding
- Stap 2: De onderdelen en gereedschappen verzamelen
- Stap 3: De Arduino IDE installeren
- Stap 4: De code
- Stap 5: Schakelschema
- Stap 6: Alles samenbrengen
- Stap 7: Conclusie
Video: The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Maar wacht… Er is meer!
Stap 1: Inleiding
Wat is APEX?
APEX is een slim (en niet te vergeten schattig) plantbewakingsapparaat. Sluit hem gewoon aan op een plant en hij zal het "geluk"-niveau van de plant weergeven! Dit is een goede herinnering om je planten water te geven als je de slechte gewoonte hebt om ze te vergeten water te geven.
Hoe werkt het?
Magie. Grapje! APEX gebruikt een Arduino die is bevestigd aan een vochtsensor, die in de bodem van de plant wordt gestoken. Deze sensor leest het vochtgehalte van de grond en vervolgens berekent de Arduino welk gezicht moet worden weergegeven.
Maar waarom?
Waarom niet?
Stap 2: De onderdelen en gereedschappen verzamelen
Laten we erop ingaan! Voor deze Instructable heb je nogal wat onderdelen en gereedschappen nodig. Gelukkig voor jou staan ze hieronder allemaal vermeld:
In de geest van de Microcontrollers-wedstrijd werd dit project volledig gemaakt door onderdelen die op Amazon waren gekocht! (niet gesponsord)
Onderdelen lijst:
- Arduino Uno
- 8x8 LED-display
- Capacitieve aanraaksensor
- Vochtsensor
- 9V batterijconnector
- 9V batterij
Gereedschap Lijst:
- 22 gauge draad
- Elektrische tape
- Draadstrippers
- Soldeerbout
- Desoldeerpomp
Zodra je alle benodigde apparatuur hebt verzameld, is het tijd om de Arduino-software in te stellen!
Stap 3: De Arduino IDE installeren
Om dit project te laten werken, moeten we de Arduino kunnen programmeren. Hiervoor moet u de Arduino Integrated Development Environment (IDE) op uw computer downloaden en installeren. Het is een vrij eenvoudige uitleg, maar ik zal je door het proces leiden:
1. Bezoek de Arduino-website
2. Navigeer naar de downloadpagina (Software > Downloads)
3. Klik op de downloadlink voor uw besturingssysteem
Kanttekening: het programma werkt op Windows, Mac en Linux.
4. Installeren op Windows
- Dubbelklik op het gedownloade bestand om het uit te voeren
- Klik op "Akkoord" om akkoord te gaan met de licentie
- Volg de rest van de aanwijzingen
- Het programma zou nu geïnstalleerd moeten zijn!
(Let op de screenshots als je verdwaalt)
5. Installeren op Mac
- Klik op het gedownloade bestand
- Kies "Openen"
- Het programma wordt automatisch geïnstalleerd en uitgevoerd!
(Let op de screenshots als je in de war raakt)
6. Dat is het
En je bent klaar! Je hebt nu de Arduino IDE gedownload op je systeem!
Stap 4: De code
Bij deze stap draait alles om de code. Het is een vrij kort programma, dus ik zal het met je doornemen en uitleggen hoe het werkt. Eerst een kort overzicht, dan een uitgebreide uitleg en tot slot hoe je het naar de Arduino kunt pushen!
Het korte overzicht
Voor degenen onder u die niet geïnteresseerd zijn in de gedetailleerde uitleg van de code, geef ik een TL; DR-segment! Hier is de basisverklaring. De Arduino haalt om de paar seconden waarden uit de vochtsensor. Deze informatie wordt vervolgens gebruikt om een bepaald gezicht te berekenen en weer te geven! Er is ook een stukje code aan het einde waarmee de capacitieve aanraakknop het scherm kan in- en uitschakelen. Vrij simpel toch?
The Nitty Gritty
Dit gedeelte van de tutorial is voor degenen die erg geïnteresseerd zijn in hoe het hele programma regel voor regel werkt. Ik zal hierboven schermafbeeldingen geven om u te helpen begrijpen waar ik het over heb, evenals enkele regels code in deze beschrijving.
Dit programma is onderverdeeld in vijf secties:
- Bibliotheken opnemen en variabelen maken
- De Setup-functie
- Functies voor gezichtsuitdrukkingen
- De functie Arduino schrijven op matrix
- De lusfunctie
Bibliotheken opnemen en variabelen maken:
Het eerste deel van deze code gaat over de variabelen en bibliotheken die we zullen gebruiken.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc=LedControl (12, 11, 10, 1); int-sensorPin = A5; int sensorWaarde = 0; bool gestart = false; bool aan = waar; boolean ingedrukt = LAAG;
De eerste regel bevat een bibliotheek genaamd LedControlMS. Deze bibliotheek is nodig om waarden naar het LED-display te kunnen sturen. De volgende regel is een definitie-statement dat de pin voor de aanraaksensor instelt op 7. Daarna hebben we nog drie variabelen die de pinnen voor het LED-display, de vochtsensor en de waarde ervan definiëren. De laatste drie regels zijn allemaal booleans die de status van de aanraakknop en het display regelen. Hierna hebben we onze bytewaarden:
byte smile[4]={B00000100, B00110010, B01100100, B01100000};byte surprise[4]={B00001110, B00001010, B01101110, B10010000}; byte meh[4]={B00000100, B00100100, B00100100, B00100000}; byte sad[4]={B00000010, B01100100, B00110010, B00110000}; byte dood [6]={B00001010, B00100100, B0001010, B00100000, B01100000, B01101010}; bytefout[8]={B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; //Evil Faces byte esmile [4]={B00000010, B00010010, B01000100, B01000000}; byte elaugh[4]={B00000010, B00010010, B01100100, B01100000}; byte eplain[4]={B00000010, B00010010, B00100100, B00100000}; byte eyell[4]={B00000001, B01101001, B01100010, B01100000}; byte etalk[4]={B00000001, B00101001, B01100010, B01100000};
Deze waarden vertegenwoordigen alle gezichten van APEX. Elke byte is een array die meerdere bits bevat die de status van elke pixel in een bepaalde rij dicteren. "1" en "0" staan respectievelijk voor Aan/Uit.
De Setup-functie:
Als we naar het volgende gedeelte gaan, hebben we onze instellingsfunctie.
void setup () {// MS Serial Output Serial.begin (9600);
pinMode (aanraaksensor, INGANG);
//LED Matrix Setup lc.shutdown (0, false); lc.setIntensity(0, 4); lc.clearDisplay(0); }
De naam verklaart het heel goed. Dit is waar we onze aanraaksensor en display "instellen". De eerste twee regels beginnen met onze seriële uitvoer (gebruikt voor foutopsporing). De derde regel stelt de aanraaksensorpin in op een ingang en de laatste vier regels starten het display op.
Functies voor gezichtsuitdrukkingen:
Dit is waarschijnlijk het langste gedeelte van allemaal, maar het is allemaal heel eenvoudig en repetitief.
void broken() { lc.setRow(0, 0, error[0]); lc.setRow(0, 1, fout[1]); lc.setRow(0, 2, fout[2]); lc.setRow(0, 3, fout[3]); lc.setRow(0, 4, fout[4]); lc.setRow (0, 5, fout [5]); lc.setRow(0, 6, fout[6]); lc.setRow(0, 7, fout[7]); }
leegte blij() {
lc.setRow(0, 0, smile[0]); lc.setRow(0, 1, smile[1]); lc.setRow(0, 2, smile[2]); lc.setRow(0, 3, smile[3]); lc.setRow(0, 4, smile[3]); lc.setRow(0, 5, smile[2]); lc.setRow(0, 6, smile[1]); lc.setRow(0, 7, smile[0]); }
leegte vlakte() {
lc.setRow(0, 0, meh[0]); lc.setRow(0, 1, meh[1]); lc.setRow(0, 2, meh[2]); lc.setRow(0, 3, meh[3]); lc.setRow(0, 4, meh[3]); lc.setRow(0, 5, meh[2]); lc.setRow(0, 6, meh[1]); lc.setRow(0, 7, meh[0]); }
nietig verrast(){
lc.setRow(0, 0, verrassing[0]); lc.setRow(0, 1, verrassing[1]); lc.setRow(0, 2, verrassing[2]); lc.setRow(0, 3, verrassing[3]); lc.setRow(0, 4, verrassing[3]); lc.setRow(0, 5, verrassing[2]); lc.setRow(0, 6, verrassing [1]); lc.setRow(0, 7, verrassing[0]); }
nietig sterven() {
lc.setRow(0, 0, dood[0]); lc.setRow(0, 1, dood [1]); lc.setRow(0, 2, dood [2]); lc.setRow(0, 3, dood[3]); lc.setRow(0, 4, dood[4]); lc.setRow(0, 5, dood [5]); lc.setRow(0, 6, dood [1]); lc.setRow (0, 7, dood [0]); }
nietig huilen() {
lc.setRow(0, 0, verdrietig[0]); lc.setRow(0, 1, verdrietig[1]); lc.setRow(0, 2, verdrietig[2]); lc.setRow(0, 3, verdrietig[3]); lc.setRow(0, 4, verdrietig[3]); lc.setRow(0, 5, verdrietig[2]); lc.setRow(0, 6, verdrietig[1]); lc.setRow(0, 7, verdrietig[0]); }
ongeldige boze glimlach() {
lc.setRow(0, 0, esmile[0]); lc.setRow(0, 1, esmile[1]); lc.setRow(0, 2, esmile[2]); lc.setRow(0, 3, esmile[3]); lc.setRow(0, 4, esmile[3]); lc.setRow(0, 5, esmile[2]); lc.setRow(0, 6, esmile[1]); lc.setRow(0, 7, esmile[0]); }
nietig kwaadlach () {
lc.setRow(0, 0, lach[0]); lc.setRow(0, 1, lach[1]); lc.setRow(0, 2, lach[2]); lc.setRow(0, 3, lach[3]); lc.setRow(0, 4, lach[3]); lc.setRow(0, 5, lach[2]); lc.setRow(0, 6, lach[1]); lc.setRow(0, 7, lach[0]); }
void evilplain() {
lc.setRow(0, 0, eplain[0]); lc.setRow(0, 1, eplain[1]); lc.setRow(0, 2, eplain[2]); lc.setRow(0, 3, eplain[3]); lc.setRow(0, 4, eplain[3]); lc.setRow(0, 5, eplain[2]); lc.setRow(0, 6, eplain[1]); lc.setRow(0, 7, eplain[0]); }
void evilyell() {
lc.setRow(0, 0, eyell[0]); lc.setRow(0, 1, eyell[1]); lc.setRow(0, 2, eyell[2]); lc.setRow(0, 3, eyell[3]); lc.setRow(0, 4, eyell[3]); lc.setRow(0, 5, eyell[2]); lc.setRow(0, 6, eyell[1]); lc.setRow(0, 7, eyell[0]); }
ongeldige eviltalk() {
lc.setRow(0, 0, etalk[0]); lc.setRow(0, 1, etalk[1]); lc.setRow(0, 2, etalk[2]); lc.setRow(0, 3, etalk[3]); lc.setRow(0, 4, etalk[3]); lc.setRow(0, 5, etalk[2]); lc.setRow(0, 6, etalk[1]); lc.setRow(0, 7, etalk[0]); }
Deze functies worden gebruikt om elke gezichtsuitdrukking te definiëren met behulp van onze bytewaarden uit de eerste sectie. Elke regel definieert een x-positie en bytewaarden en past de waarden vervolgens toe op die kolom. Sommige functies vereisen meer lijnen omdat er meer rijen worden gebruikt om de waarden van dat vlak weer te geven. Elk gezicht is symmetrisch, daarom herhalen we de lijnen.
De WriteArduinoOnMatrix-functie:
De vierde sectie wordt gebruikt om de juiste gezichten op het LED-display te berekenen en te schrijven. Het bestaat uit een reeks else if-instructies die de waterwaarden controleren en vervolgens de weergave instellen door verschillende functies uit de vorige sectie aan te roepen.
void writeArduinoOnMatrix() {if(sensorValue > 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) { verrast(); } anders { kapot(); } }
Het is je misschien opgevallen dat we "gebroken" gezichten hebben toegevoegd voor het geval de sensor buiten het werkbereik komt. Dit voorkomt een aantal rare null-fouten die optreden en geeft ons een beter visueel begrip van wat er in de code gebeurt.
De lusfunctie:
Last but not least is de lusfunctie. Deze code doet precies wat de naam zegt, het loopt! Hoewel er nogal wat regels in deze functie zitten, is het eigenlijk vrij eenvoudig. De code leest eerst de knopstatus en kijkt of het display "Aan" is. Als het vindt dat dit waar is, roept het de functie WriteArduinoOnMatrix aan, die vervolgens een gezicht op APEX tekent. Omdat deze functie wordt herhaald, wordt het scherm zo vaak bijgewerkt als we willen. Deze vertraging wordt bepaald door de variabele vertragingstijd.
void loop() {if (gestart == true){ delaytime = 3000; } //Leesknop ingedrukt = digitalRead (TouchSensor);
indien (ingedrukt) {
if (aan == waar) { lc.clearDisplay(0); aan = onwaar; vertraging (vertragingstijd); } anders { op = waar; vertraging (vertragingstijd); } } sensorValue = analogRead (sensorPin); vertraging (vertragingstijd); if (on == true) {//Draw Faces writeArduinoOnMatrix(); }
begonnen = waar;
}
Dat is alles wat er is aan de code. Hopelijk heb je nu een beter begrip van hoe het allemaal werkt, en kun je deze kennis gebruiken om het aan je project aan te passen!
De code naar de Arduino duwen
Nu we alle code hebben behandeld, is het tijd om deze naar de Arduino te pushen! Gelukkig maakt de IDE dit heel eenvoudig. Het enige wat u hoeft te doen is uw Arduino met een USB-kabel op uw computer aan te sluiten en vervolgens op de pijl naar rechts in de linkerbovenhoek van de IDE te klikken. Laat de code pushen en je zou een succesbericht onderaan het programma moeten zien als je het goed hebt gedaan!
Stap 5: Schakelschema
Net als bij de code is het schakelschema niet al te ingewikkeld. Het bestaat slechts uit drie sensoren en de Arduino, dus ik zal je de pin-outs voor elk vertellen, en als je andere hulp nodig hebt, raadpleeg dan het bovenstaande diagram.
Het LED-display:
- VCC -> 5V
- GRD -> GRD
- DIN -> Pen 12
- CS -> Pin 10
- CLK -> Pin 11
De vochtsensor:
- Positief -> 5V
- Negatief -> GRD
- Signaal -> A5
De capacitieve aanraaksensor:
- VCC -> 5V
- GRD -> GRD
- SIG -> 7
Niet te moeilijk, toch? Als je problemen hebt met deze pin-out, raadpleeg dan de onderstaande video, waar ik je laat zien hoe je het moet aansluiten.
Stap 6: Alles samenbrengen
Het is moeilijk om via tekst uit te leggen hoe het allemaal in elkaar past, dus ik zou zeker aanraden om de video voor dit onderdeel te bekijken. Ik ga eigenlijk niet precies uitleggen hoe ik de mijne in elkaar heb gezet, het is veel te moeilijk. Maar om de dingen vaag uit te leggen, soldeerde ik de draadverbindingen en wikkelde ze rond de achterkant van het bord. Daarna plaatste ik de sensoren en gebruikte ik elektrische tape om alles bij elkaar te houden. Ten slotte heb ik het getest met de 9V-batterij, en toen ik eenmaal wist dat het werkte, plaatste ik de batterij op de achterkant en plakte die ook vast. Zoals ik al eerder zei, BEKIJK DE VIDEO VOOR DEZE STAP, het heeft een leuk klein soldeersegment dat versneld wordt en je zal helpen de draden correct te wikkelen. Voel je vrij om het te pauzeren of op halve snelheid te spelen als je verdwaalt.
Gefeliciteerd! Als alles goed is gegaan, zou je nu een volledig functionele APEX-eenheid moeten hebben!
Om uw apparaat te testen, zoekt u een bewaterde plant en sluit u deze aan! Je zou moeten ontdekken dat het of blij of verrast is en dit betekent dat het zou moeten werken!!! Mooie opdracht om het project af te ronden!
Stap 7: Conclusie
En dat is de hele Instructable! Bedankt voor het bekijken van het project! Laat hieronder al je vragen en opmerkingen achter en volg de Urban Farming Guys voor meer coole tutorials zoals deze! We horen graag hoe je APEX-build is verlopen, en foto's worden zeer op prijs gesteld! Nogmaals bedankt voor het langskomen, fijne dag!
(Deze Instructable is geïnspireerd op een ouder project, de Plant Emoji!)
PS Deze Instructable doet mee aan de Microcontrollers-wedstrijd, dus vergeet niet op ons te stemmen! Wij waarderen het enorm:)
P. S. Laten we APEX in Make Magazine zetten! Stem hier! Bedankt:)
Aanbevolen:
Pixie - Let Your Plant Smart: 4 stappen (met afbeeldingen)
Pixie - Let Your Plant Smart: Pixie was een project dat is ontwikkeld met de bedoeling om de planten die we thuis hebben interactiever te maken, aangezien voor de meeste mensen een van de uitdagingen van het hebben van een plant in huis is om te weten hoe ze ervoor moeten zorgen, hoe vaak we water geven, wanneer en hoeveel
Plant'm: 6 stappen (met afbeeldingen)
Plant'm: Zoals de meesten vind ik het heerlijk om planten in huis te hebben. Helaas sterven ze bijna altijd binnen een paar weken. Dus toen ik aan het einde van mijn eerste jaar als student aan MCT bij Howest de taak kreeg om een project te maken dat alles zou laten zien
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
IoT Plant Monitoring System (met IBM IoT Platform): 11 stappen (met afbeeldingen)
IoT Plant Monitoring System (met IBM IoT Platform): Overzicht Het Plant Monitoring System (PMS) is een applicatie die is gebouwd met mensen die in de arbeidersklasse zitten met groene vingers in het achterhoofd. Tegenwoordig hebben werkende mensen het drukker dan ooit tevoren; het bevorderen van hun loopbaan en het beheren van hun financiën
Je plant water geven met een Arduino: 5 stappen (met afbeeldingen)
Je plant water geven met een Arduino: heb je een kamerplant die je leuk vindt, maar vergeet je hem te vaak water te geven? Deze Instructable legt uit hoe je een plantwatersysteem maakt dat wordt aangedreven door Arduino, en hoe je je plant een beetje meer persoonlijkheid kunt geven. Nadat je deze instructable hebt gevolgd t