Inhoudsopgave:

Een elektrische waterpas maken: 15 stappen
Een elektrische waterpas maken: 15 stappen

Video: Een elektrische waterpas maken: 15 stappen

Video: Een elektrische waterpas maken: 15 stappen
Video: zelf een vloer waterpas maken met cement egalisatie mortel 2024, November
Anonim
Maak een elektrische waterpas
Maak een elektrische waterpas

Gebruik deze waterpas om snel en eenvoudig de helling van elk bevestigd object weer te geven!

Gemaakt door Kaitlyn van Raffles Institution.

Stap 1: Doelen

Leer kantelen lezen met de ingebouwde versnellingsmeter van micro:bit.

Leer werken met het 5x5 LED-display van micro:bit!

Stap 2: Materialen

1 x BBC micro:bit

1 x micro-USB-kabel

2 x AA-batterijen

1 x dubbele AA-batterij

Stap 3: Pre-codering: sluit uw Micro:Bit aan

  1. Sluit de BBC micro:bit aan op uw computer met behulp van een micro-USB-kabel.
  2. Open de javascript-editor voor de micro:bit op makecode.microbit.org.

Stap 4: Stap 0: Codestroom

Voordat we beginnen met het schrijven van de code, moeten we beslissen wat we met het programma willen bereiken en in welke volgorde elk onderdeel moet worden uitgevoerd.

Voor de elektrische waterpas zijn de stappen die we in de code voor elke lus zullen nemen:

  • Lees kantelmetingen van versnellingsmeter.
  • Zet kantelmetingen om in kantelniveaus die op de LED-matrix moeten worden weergegeven.
  • Controleer op verandering in tilt-niveau-uitlezingen van de vorige lus.
  • Creëer een reeks LED-coördinaten voor verschillende kantelgevallen en richtingen.
  • Plot LED-coördinaten op micro:bit LED-matrix.

Een paar extra functies die we moeten opnemen zijn:

  • Kalibratie voor initiële kantelpositie.
  • Terugkeren naar de standaard kantelkalibratie.

Stap 5: Stap 1: Variabelen definiëren

We beginnen met het definiëren van de benodigde variabelen, zoals weergegeven. Een uitsplitsing van een aantal variabelen is:

  • tiltList: array die de mate van kanteling opslaat van waarden 0-4 in de volgorde [Links, Rechts, Vooruit, Achteruit]
  • tiltBoundary: Grens van het eerste tilt-niveau tussen 0 (geen tilt) en 1 (lichte tilt)
  • prevState: array die de tilt-waarden van de micro:bit van een vorige lus opslaat in hetzelfde formaat als tiltList, gebruikt om te controleren op een verandering in tilt tussen iteraties
  • ledPlotList: Plot led-coördinatenarrays in de vorm (x, y). Om een array te definiëren gebruiken we het type number om een geneste array van variabelen van het type: number aan te geven.

Stap 6: Stap 2: Tilt-waarden converteren naar niveaus

Omdat de 5x5 LED-matrix maar zoveel informatie kan weergeven, zijn de werkelijke kantelwaarden niet bruikbaar voor weergave.

In plaats daarvan neemt een functie tiltExtent() de parameter num, die verwijst naar de tilt-waarde van de versnellingsmeter, en converteert deze tilt-waarden (num) naar tilt-niveaus van 0 tot 4.

0 geeft geen kanteling in de gegeven richting aan en 4 geeft een zeer grote kanteling aan, terwijl -1 wordt geretourneerd wanneer er een fout is.

Hier worden tiltBoundary en tiltSensitivity gebruikt als grenswaarden tussen kantelniveaus.

Stap 7: Stap 3: Compileer kantelniveaus

De twee functies checkRoll() en checkPitch() schrijven de kantelniveaus die zijn verkregen uit tiltExtent() naar tiltList voor respectievelijk de rol (links-rechts) en de pitch (vooruit-achteruit).

Voordat we de tilt-waarden gebruiken, kalibreren we ze met behulp van een nulwaarde voor zowel pitch (zeroPitch) als roll (zeroRoll), verkregen uit een later geschreven kalibratiefunctie.

Aangezien de accelerometermetingen negatief zijn voor zowel de linker- als de voorwaartse kanteling, moeten we de functie Math.abs() gebruiken om de modulus te verkrijgen van de negatieve waarde die aan de functie tiltExtent() moet worden gegeven als een parameter voor deze twee richtingen.

Stap 8: Stap 4: Schrijf LEDPlotList-functies

Nadat we de kantelniveaus in tiltList hebben verkregen, kunnen we nu de led-plotfuncties schrijven voor de verschillende gevallen die zich kunnen voordoen, namelijk:

  • plotSingle(): Kantel slechts in één richting, waarbij de mate van kanteling in de gegeven richting als parameter wordt genomen.
  • plotDiagonal(): Kantel in twee richtingen van dezelfde grootte, waarbij de mate van kanteling in beide richtingen als parameter wordt genomen.
  • plotUnequal(): Kantel in twee richtingen van verschillende grootte, waarbij de mate van kanteling in elke richting als parameter wordt genomen. Gebruikt eerst plotDiagonal() en voegt het daarna toe aan de ledPlotList-array.

Deze plotfuncties schrijven een array van led-coördinaten naar ledPlotList om later te plotten.

Stap 9: Stap 5: Plot LED-matrix voor elk geval

Met behulp van de plotfuncties uit de drie gevallen in stap 4, kunnen we nu de werkelijke LED-matrix plotten voor de verschillende mogelijke combinaties van kantelniveaus. Omdat de drie functies in stap 4 geen onderscheid maken met richting, moeten we de coördinaatwaarden aanpassen die aan de LED-matrix worden doorgegeven om de LED's in de juiste richting te plotten.

PlotResult() bevat meerdere if-voorwaarden die het soort kanteling controleren en de LED-matrix dienovereenkomstig plotten met led.plot(x, y). De mogelijke combinaties van kantelen zijn:

Enkele richting: alleen links of alleen rechts

Enkele richting: alleen vooruit of alleen achteruit

Twee richtingen: Vooruit-links of Achteruit-links

Twee richtingen: Vooruit-rechts of Achteruit-rechts

Opmerking: Voor kantelen in twee richtingen kan elke combinatie dezelfde of een verschillende grootte hebben (gecontroleerd door maxX en maxY te vergelijken), en dus worden uitgezet met respectievelijk plotDiagonal() of plotUnequal().

Stap 10: Stap 6: Kalibratiefuncties schrijven

Nadat we het grootste deel van de code hebben voltooid, voegen we nu de functies calibTilt() en resetTilt() toe.

calibTilt() stelt gebruikers in staat de kanteling naar nul te tarreren op de huidige positie van de micro:bit

resetTilt() zet de kalibratie van het bord terug naar de oorspronkelijke staat.

Stap 11: Stap 7: Schrijfstatusfunctie

We voegen een eenvoudige functie checkState() toe om te controleren of de kantelniveaus zijn gewijzigd ten opzichte van een eerdere iteratie.

Als er geen verandering is in kantelniveaus van een vorige iteratie, d.w.z. stateChange == 0, kunnen we direct doorgaan naar de volgende iteratie en het plotten van de LED-matrix overslaan, waardoor de benodigde berekening wordt verminderd.

Stap 12: Stap 8: Alles samenvoegen Deel 1

Nu kunnen we eindelijk alle benodigde functies in de oneindige lus van de micro:bit plaatsen om deze herhaaldelijk uit te voeren.

Eerst stellen we knop A en B op de micro:bit in op respectievelijk de functies calibTilt() en resetTilt() met behulp van input.onButtonPressed(), en zetten we een vinkje op de LED-matrix wanneer de kalibratie is voltooid.

Stap 13: Stap 9: Alles samenvoegen Deel 2

Voer vervolgens de benodigde functies uit volgens onze codestroom in stap 0 en controleer op een statuswijziging (wat betekent dat er een verandering is in de kanteling van micro:bit sinds de laatste iteratie).

Als er een verandering is in tilt-niveaus, d.w.z. stateChange == 1, zal de code prevState bijwerken naar de nieuwe tilt-niveaus en stateChange terugzetten naar 0 voor de volgende iteratie, en de bijgewerkte tilt-niveaus op de LED-matrix plotten met PlotResult().

Stap 14: Stap 10: Montage

Flash de voltooide code naar uw micro:bit.

Bevestig uw micro:bit en het batterijpakket stevig aan elk object en het is klaar voor gebruik!

Geweldig

Veel plezier met je elektrische waterpas! En terwijl u toch bezig bent, waarom probeert u niet de mogelijkheden van de kantelsensor uit te breiden of er zelfs een spel van te maken?

Dit artikel is van TINKERCADEMY.

Stap 15: Bron

Dit artikel is afkomstig van:

Als je vragen hebt, kun je contact opnemen met [email protected].

Aanbevolen: