Inhoudsopgave:

Interactief licht zonder aanraking: 7 stappen (met afbeeldingen)
Interactief licht zonder aanraking: 7 stappen (met afbeeldingen)

Video: Interactief licht zonder aanraking: 7 stappen (met afbeeldingen)

Video: Interactief licht zonder aanraking: 7 stappen (met afbeeldingen)
Video: BETER WORDEN #14 AFVALLEN 2024, December
Anonim
Interactief licht zonder aanraking
Interactief licht zonder aanraking

Hallo iedereen! Ik wil het project waar ik aan heb gewerkt hier delen. Ik raakte geïnspireerd om te experimenteren met capacitieve aanrakingsdetectie door een project op mijn universiteit. Ik ontdekte deze technologie via instructables en gebruikte de dingen die ik hier en van andere plaatsen op internet heb geleerd om mijn eigen touch-less controller te bouwen, die ik gebruik om verschillende RGB-waarden te combineren om interessante lichtkleuren te creëren.

Om te beginnen, toen ik aan dit project begon, wist ik bijna niets over elektronica of capacitieve aanraakdetectie.

Sommige problemen waar ik al vroeg tegenaan liep, werden veroorzaakt door een verkeerd begrip van wat er werkelijk gebeurt. Dus een korte introductie van hoe ik het begrijp:

Een capacitieve sensor gebruikt meerdere componenten, voornamelijk:

Een condensator (in dit project gebruiken we aluminiumfolie, maar het is ook mogelijk om geleidende vloeistoffen te gebruiken, enz.), draden (natuurlijk, de elektronica)

en een weerstand, alles onder de 10 MOhm is een te kleine weerstand voor meer dan directe aanraking.

de manier waarop het werkt is door een tijdsverschil te meten tussen punt A en punt B. Vanaf de startpin stuurt hij een signaal naar een eindpin, de tijd die het kost wordt gemeten met een timer. Door de weerstandswaarde te verlagen (door een condensator (in dit geval je hand) dichter bij de condensator van de sensor (de aluminiumfolie) te brengen wordt deze tijd korter, het verschil in tijd is wat de sensor als waarde teruggeeft.

Omdat de sensor wordt beïnvloed door capacitieve oppervlakken, kunnen de gegevens door interferentie enorm grillig zijn. Dit kan voor een groot deel worden opgelost door de condensator correct te isoleren en ook door een massa te gebruiken (hoe later zal ik laten zien).

Dus nu dat uit de weg is, kunnen we beginnen met het inventariseren van alle spullen die we nodig hebben:

Stap 1: Wat hebben we nodig?

Elektronica:

1. 2 x 22M Ohm + weerstanden (hoe groter de weerstandswaarde, hoe verder je sensor reageert, ik heb persoonlijk 22M Ohm gebruikt, het minimum om bruikbare gegevens te krijgen die ik ervoer was 10M Ohm)

2. 3x 330 Ohm weerstanden

3. Draden:

4. Broodplank

5. Printplaat (de mijne had continu koperen strips)

6. Meerdere gemeenschappelijke kathode RGB-leds (ik gebruikte 8, maar je kunt meer of minder hebben, hangt af van hoeveel licht je wilt)

7. Aluminiumfolie

8. Vasthoudfolie

9. Arduino Uno

10. Band

De zaak:

1. Hout Ik heb 50 x 50 x 1,8 CM MDF gebruikt (je kunt echt alles gebruiken. Het hangt af van het effect dat je wilt en het gereedschap dat je tot je beschikking hebt)

2. Acryl plexiglas Ik gebruikte 50 x 50 x 0,3 CM (of een ander transparant/doorschijnend materiaal zoals rijstpapier)

3. Sandpaper (fijn schuurpapier)

4. Houtlijm:

5.fineer (optioneel)

6. Acryl lijm:

Gereedschap:

Draadstripper

Soldeerbout + tin

Stanley mes

oefening

Zaag (ik gebruikte een tafelzaag)

Stap 2: Prototyping:

prototypen
prototypen
prototypen
prototypen

Nu hebben we alles en kunnen we beginnen met het maken van een prototype om te zien hoe het werkt:

Voorbereidend werk:

Knip 4 rechthoeken uit de aluminiumfolie (de mijne zijn ongeveer 10 cm bij 5 cm), wikkel deze in huishoudfolie om ze te isoleren tegen directe aanraking en plak een draad aan de aluminiumfolie. Ik heb zojuist een gestript uiteinde op de folie geplakt (zolang ze in contact blijven).

Om ervoor te zorgen dat het aluminium veilig is geïsoleerd, heb ik het in huishoudfolie gewikkeld en tussen papier gestreken (slechts een paar seconden, zodat het niet volledig smelt).

Stel vervolgens het circuit in zoals te zien is in de afbeelding.

Pin 4 wordt gebruikt als zendpin voor beide sensoren, terwijl de ontvangstpinnen pin 2 en 5 zijn. Je zou meerdere zendpinnen kunnen gebruiken, maar dit veroorzaakt problemen omdat ze niet perfect synchroon lopen.

gebruik deze opstelling voor het opsporen van fouten voordat u alles aan elkaar soldeert, om er zeker van te zijn dat alles echt werkt zoals bedoeld.

Stap 3: Coderen:

Nu hebben we alles en kunnen we beginnen met het debuggen van de sensoren.

Om mijn code te gebruiken, moet je de capacitive sensing-bibliotheek van Arduino downloaden en installeren volgens de aanwijzingen op de referentiepagina: Klik op mij

De code: (ik ben niet zo goed in coderen, dus als je weet hoe je het beter kunt doen, doe dat dan alsjeblieft)

#include //importeer de codebibliotheek

CapacitiveSensor cs_4_2 = CapacitiveSensor(4, 2); // Stuur pin = 4, ontvang zijn 2 en 5 CapacitiveSensor cs_4_5 = CapacitiveSensor (4, 5); const int redPin = 11; const int greenPin = 10; const int bluePin = 9; const int numIndexR = 10; // arraygrootte const int numIndexG = 10; int kleurR = 0; int kleurG = 0; zwevende kleur B = 0; int indexR [numIndexR]; int posIndexR = 0; lang totaalR = 0; // het moet lang zijn omdat het totaal van mijn array te groot was voor een geheel getal. int gemiddeldeR = 0; int indexG [numIndexG]; int posIndexG = 0; lang totaalG = 0; int gemiddeldeG = 0; void setup () { pinMode (redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode (bluePin, UITGANG); for (int thisIndexR = 0; thisIndexR <numIndexR; thisIndexR++) {// zet de array op 0 indexR [thisIndexR] = 0; } for (int thisIndexG = 0; thisIndexG = 4500) {// begrens de sensorwaarden tot een bruikbaar maximum, dit is niet hetzelfde voor elke weerstandswaarde en kan ook een beetje verschillen van omgeving tot omgeving. Mogelijk moet u dit aanpassen aan je eigen behoeften. totaal1 = 4500; } if (totaal2 >= 4500){ totaal2 = 4500; } totalR = totaalR - indexR[posIndexR]; //this hier creëert een array die continu een sensoroutput toevoegt en het gemiddelde produceert. indexR[posIndexR] = totaal1; totaalR = totaalR + indexR[posIndexR]; posIndexR = posIndexR + 1; if (posIndexR >= numIndexR){ posIndexR = 0; } gemiddeldeR = totaalR / numIndexR; // we gebruiken het gemiddelde in plaats van de onbewerkte gegevens om de uitvoer glad te strijken, het vertraagt het proces enigszins, maar het zorgt ook voor een heel mooie vloeiende stroom. totaalG = totaalG - indexG[posIndexG]; indexG[posIndexG] = totaal2; totaalG = totaalG + indexG[posIndexG]; posIndexG = posIndexG + 1; if (posIndexG >= numIndexG){ posIndexG = 0; } gemiddeldeG = totaalG / numIndexG; if (averageR >= 2000){ // we willen niet dat de leds constant van waarde veranderen tenzij er input van uw hand is, dus dit zorgt ervoor dat er geen rekening wordt gehouden met alle lagere omgevingswaarden. colorR = kaart (gemiddeldeR, 1000, 4500, 255, 0); analogWrite (redPin, colorR); } else if (averageR = 1000){ colorG = map(averageG, 1000, 4500, 255, 0); analogWrite (greenPin, colorG); } else if (gemiddeldeG <= 1000){ colorG = 255; analogWrite (greenPin, colorG); } if (colorR <= 125 && colorG <= 125){ //B werkt een beetje anders omdat ik maar 2 sensoren heb gebruikt, dus ik heb B op beide sensoren in kaart gebracht colorB = map(colorR, 255, 125, 0, 127.5) + map (kleurG, 255, 125, 0, 127,5); analogWrite (bluePin, kleurB); } else{ colorB = map(colorR, 255, 125, 127.5, 0) + map(colorG, 255, 125, 127.5, 0); if (kleurB>= 255){ kleurB = 255; } if (kleurB <= 0){ kleurB = 0; } analogWrite (bluePin, kleurB); } Serial.print(millis() - start); //dit is voor foutopsporingsdoeleinden Serial.print("\t"); Serial.print(colorR); Serieel.print("\t"); Seriële.afdruk (kleurG); Serieel.print("\t"); Serieel.println(kleurB); vertraging(1); }

Wat deze code doet, is de onbewerkte gegevens uit de sensor halen (deze gegevens zullen altijd enigszins grillig zijn vanwege alle verschillende factoren die de sensor beïnvloeden) en het plaatst de onbewerkte gegevens continu in een array, wanneer de array de maximale waarde bereikt (in mijn geval 10) verwijdert het de laatste waarde en voegt een nieuwe toe. Elke keer dat een waarde wordt toegevoegd, wordt de gemiddelde waarde berekend en in een nieuwe variabele geplaatst. Deze gemiddelde variabele wordt gebruikt om een waarde toe te wijzen aan een waarde van 0 tot 255, dit is de waarde die we naar de RGB-pinnen schrijven om de helderheid van elk kanaal te verhogen (de kanalen zijn R G en B).

Als u nu uw code naar de Arduino uploadt en de seriële monitor opent, zou u de RGB-waarden lager moeten zien wanneer u uw hand over elke sensor beweegt, ook zou de lichtkleur van de led moeten veranderen.

Stap 4: Nu voor de zaak:

Nu voor de zaak
Nu voor de zaak
Nu voor de zaak
Nu voor de zaak
Nu voor de zaak
Nu voor de zaak

De case: Ik heb de case gemaakt met behulp van tools die beschikbaar zijn via mijn universiteit, dus deze workflow is niet voor iedereen van toepassing. Er is echter niets bijzonders aan, het heeft aan één kant een gat nodig om de USB-poort door te laten, maar verder is het gewoon een doos met een open bovenkant.

De afmetingen zijn als volgt:

15 x 15 CM voor de transparante bovenkant

en

15 x 8 CM voor de houten basis (de dikte van het hout was 1,8 CM voor mij).

Ik heb met een tafelzaag een plaat MDF in de juiste afmetingen gesneden (dat is 4 panelen 15 x 8 CM en 1 15 x 15 CM grondpaneel), waarna ik de hoeken in een hoek van 45 graden zaagde. Alle onderdelen heb ik aan elkaar geplakt met houtlijm en klemmen (minstens 30 minuten laten drogen), ik gebruikte dezelfde procedure voor het plexiglas maar met een speciaal zaagblad.

1 van de houten zijkanten moet een gat in het midden hebben ter hoogte van de arduino USB-stekker zodat de arduino kan worden aangesloten.

De basis heb ik afgewerkt met fineer. Ik heb het in stukjes gesneden die iets groter zijn dan het oppervlak van elke kant.

Dit heb ik erop gelijmd en vervolgens 30 minuten per kant vastgeklemd (het is beter om het afzonderlijk te doen, zodat je ervoor zorgt dat het niet wegglijdt en nadat het droog was, knipte ik af wat eruit stak.

De dop heb ik aan elkaar gelijmd met een lijm specifiek voor Acryl genaamd Acryfix.

Houd er rekening mee dat als je acrylplexiglas gebruikt, de lijm het plexiglas een beetje oplost, dus wees zo precies en snel mogelijk (het droogt binnen een paar minuten, maar wordt binnen enkele seconden aan lucht blootgesteld).

Om de dop af te werken heb ik de kubus gematteerd met een zandstraler, maar je kunt ook fijn schuurpapier gebruiken, het kost gewoon veel meer tijd om het er egaal uit te laten zien. Houd er echter rekening mee dat als u schuurpapier gebruikt, het fijnkorrelig moet zijn en ook de onderdelen aan elkaar moet lijmen na de frosting-procedure (zodat u het niet per ongeluk breekt door te veel druk uit te oefenen)

Om ervoor te zorgen dat de dop niet te veel verschuift heb ik een paar kleine houten staafjes op de randen van de houten kubus gelijmd.

Stap 5: Het eindresultaat zou er ongeveer zo uit moeten zien:

Het eindresultaat zou er ongeveer zo uit moeten zien
Het eindresultaat zou er ongeveer zo uit moeten zien

Stap 6: Solderen

Solderen!
Solderen!
Solderen!
Solderen!

Als je een printplaat hebt, kun je beginnen met het aan elkaar solderen van alle onderdelen met dezelfde opstelling als je breadboard.

Mijn printplaat heeft doorlopende koperen strips voor gebruiksgemak.

Voor elke sensor heb ik een klein vierkantje afgesneden om de weerstanden en draden aan te solderen.

De zenddraden (de draden die van pin 4 naar elke sensor gaan) worden in volgorde gesoldeerd aan een apart vierkant, met 1 draad die in pin 4 gaat.

Ik hield een lange rechthoek om een geïmproviseerde ledstrip te maken (meet deze zodat hij in de dop past, maar aan de randen van de basis). Je kunt de leds gewoon in volgorde na elkaar solderen (houd er rekening mee dat ik in de afbeelding per ongeluk de leds en weerstanden aan de verkeerde kant van de printplaat heb gesoldeerd, de koperen strips moeten altijd aan de onderkant zitten).

Als u klaar bent met het aan elkaar solderen van de afzonderlijke onderdelen, plaatst u ze in de behuizing. Ik heb mijn individuele draden niet aan elkaar gesoldeerd, zodat ik ze indien nodig gemakkelijk kan vervangen.

Tijd om alles in de basis te passen: Dit is vrijwel de gemakkelijkste stap, de arduino moet eerst worden geplaatst met de USB-poort door het gat aan de achterkant van de behuizing. Voeg nu de sensoren toe, zorg ervoor dat de sensorfolie aan beide kanten tegen het hout past, met de grondfolie er recht tegenaan. Als het allemaal goed past, steekt u de RGB-leds in de juiste pinnen (9, 10, 11) en laat u deze op de randen van de basis leunen.

Stap 7: We zijn klaar

Als je dit allemaal hebt gedaan, zou je nu een werklamp moeten hebben met capacitieve aanraakkleurenmenging. Veel plezier!

Aanbevolen: