Inhoudsopgave:

Arduino Hall-effectsensor met onderbrekingen - Ajarnpa
Arduino Hall-effectsensor met onderbrekingen - Ajarnpa

Video: Arduino Hall-effectsensor met onderbrekingen - Ajarnpa

Video: Arduino Hall-effectsensor met onderbrekingen - Ajarnpa
Video: Monitoring the RPM of a 12Vdc Three Wire Cooler Fan with Arduino, with speed control potentiometer 2024, November
Anonim
Image
Image
Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?

Hallo iedereen, Vandaag laat ik je zien hoe je een hall-effectsensor op een Arduino kunt aansluiten en deze met een interrupt kunt gebruiken.

Tools en materialen gebruikt in de video (Affiliate links): Arduino Uno:

Hall-effectsensoren:

Diverse Weerstanden:

Stap 1: Wat is een Hall-effectsensor?

Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?
Wat is een Hall-effectsensor?

Een Hall-effectsensor is een apparaat dat wordt gebruikt om de grootte van een magnetisch veld te meten. De uitgangsspanning is recht evenredig met de magnetische veldsterkte erdoorheen.

Hall-effectsensoren worden gebruikt voor naderingsdetectie, positionering, snelheidsdetectie en stroomdetectietoepassingen.

Degene waar ik vandaag mee zal werken, is gelabeld als 3144, een hall-effectschakelaar die voornamelijk wordt gebruikt voor toepassingen bij hoge temperaturen en auto's. De output is standaard hoog en wordt eenmaal laag in aanwezigheid van een magnetisch veld.

De sensor heeft 3 pinnen, VCC, aarde en uitgang. U kunt ze in die volgorde identificeren als u de sensor met de labels naar u toe houdt. VCC bevindt zich aan de linkerkant en de uitvoer bevindt zich aan de rechterkant. Om spanningsdrift te voorkomen, wordt een weerstand van 10k gebruikt tussen VCC en de uitgang in een pull-up-configuratie.

Stap 2: Wat is een onderbreking?

Wat is een onderbreking?
Wat is een onderbreking?
Wat is een onderbreking?
Wat is een onderbreking?

Om de sensor op de Arduino aan te sluiten, gebruiken we een eenvoudige, maar zeer krachtige functie genaamd Interrupt. Een Interrupt-taak is ervoor te zorgen dat de processor snel reageert op belangrijke gebeurtenissen. Wanneer een bepaald signaal wordt gedetecteerd, onderbreekt een Interrupt (zoals de naam al doet vermoeden) wat de processor aan het doen is, en voert een code uit die is ontworpen om te reageren op elke externe stimulus die naar de Arduino wordt gevoerd. Zodra die code is ingepakt, gaat de processor terug naar wat hij oorspronkelijk aan het doen was, alsof er niets was gebeurd!

Het geweldige hieraan is dat het je systeem structureert om snel en efficiënt te reageren op belangrijke gebeurtenissen die niet gemakkelijk te anticiperen zijn in software. Het beste van alles is dat het je processor vrijmaakt om andere dingen te doen terwijl het wacht op een evenement om te verschijnen.

De Arduino Uno heeft twee pinnen die we kunnen gebruiken als Interrupts, pin 2 en 3. De functie die we gebruiken om de pin als een interrupt te registreren heet attachInterrupt waarbij we als eerste parameter de te gebruiken pin insturen, de tweede parameter is de naam van de functie die we willen aanroepen zodra een interrupt is gedetecteerd en als derde parameter sturen we de modus waarin we willen dat de interrupt werkt. Er is een link in de videobeschrijving naar de volledige referentie voor deze functie.

Stap 3: Verbindingen en code

Verbindingen en code
Verbindingen en code
Verbindingen en code
Verbindingen en code
Verbindingen en code
Verbindingen en code

In ons voorbeeld sluiten we de hall effects-sensor aan op pin 2 op de Arduino. Aan het begin van de schets definiëren we de variabelen voor het pinnummer van de ingebouwde LED, de interrupt-pin en een bytevariabele die we zullen gebruiken om te wijzigen via de interrupt. Het is van cruciaal belang dat we deze markeren als vluchtig, zodat de compiler kan weten dat deze buiten de hoofdprogrammastroom door de interrupt wordt gewijzigd.

In de setup-functie specificeren we eerst de modi op de gebruikte pinnen en vervolgens koppelen we de interrupt zoals eerder uitgelegd. Een andere functie die we hier gebruiken is digitalPinToInterrupt die, zoals de naam al aangeeft, het pinnummer vertaalt naar het interruptnummer.

In de hoofdmethode schrijven we gewoon de statusvariabele op de LED-pin en voegen we een zeer kleine vertraging toe, zodat de processor de tijd heeft om goed te werken.

Waar we de interrupt hebben toegevoegd, hebben we blink gespecificeerd als de tweede parameter en dit is de functienaam die moet worden aangeroepen. Binnenin keren we gewoon de staatswaarde om.

De derde parameter van de functie attachIntertupt is de modus waarin deze werkt. Als we het als WIJZIG hebben, wordt de knipperfunctie uitgevoerd telkens wanneer de onderbrekingsstatus verandert, dus het wordt een keer aangeroepen zodra we de magneet dicht bij de sensor krijgen en opnieuw geactiveerd zodra we het verwijderen. Op deze manier brandt de LED terwijl we de magneet dicht bij de sensor houden.

Als we nu de modus veranderen in RISING, wordt de knipperfunctie alleen geactiveerd als een stijgende flank van het signaal wordt gezien op de interrupt-pin. Elke keer dat we de magneet dicht bij de sensor brengen, gaat de LED uit of aan, dus we hebben in feite een magnetische schakelaar gemaakt.

De laatste modus die we gaan proberen is LAAG. Hiermee wordt, wanneer de magneet dichtbij is, de knipperfunctie constant geactiveerd en zal de LED flikkeren, waarbij de status de hele tijd omgekeerd is. Wanneer we de magneet verwijderen, is het echt onvoorspelbaar hoe de toestand zal eindigen, omdat dit afhankelijk is van de timing. Deze modus is echter erg handig als we moeten weten hoe lang een knop is ingedrukt, omdat we timingfuncties kunnen gebruiken om dat te bepalen.

Stap 4: Verdere acties

Verdere acties
Verdere acties

Onderbrekingen zijn een eenvoudige manier om uw systeem beter te laten reageren op tijdgevoelige taken. Ze hebben ook het extra voordeel dat ze je hoofd `loop()` vrijmaken om je te concentreren op een primaire taak in het systeem. (Ik merk dat dit mijn code een beetje meer georganiseerd maakt wanneer ik ze gebruik - het is gemakkelijker om te zien waarvoor het hoofdgedeelte van de code is ontworpen, terwijl de interrupts periodieke gebeurtenissen afhandelen.) Het hier getoonde voorbeeld is zo ongeveer het meest basiscase voor het gebruik van een interrupt - u kunt ze gebruiken voor het lezen van een I2C-apparaat, het verzenden of ontvangen van draadloze gegevens, of zelfs het starten of stoppen van een motor.

Als je een interessant gebruik van een interrupt of een hall-effectsensor hebt, laat het me dan weten in de reacties, like en deel deze Instructable, en vergeet je niet te abonneren op mijn YouTube-kanaal voor meer geweldige tutorials en projecten in de toekomst.

Groetjes en bedankt voor het kijken!

Aanbevolen: