IoT Workshop: Lab 3 - kontrollerande utgång med Input (4 / 6 steg)

Steg 4: Skriva koden


För denna övning kommer du skapa en ny arkivera benämn lab003.js i samma katalog som du gjorde i föregående labb. Det finns inga ytterligare beroenden, så vi inte behöver göra några ändringar i filen package.json.

I filen lab003.js börja med att förklara de viktiga objekt, inklusive en variabel för LED stift och analoga PIN-koden du vill använda (digital stift 13 för LED och analoga pin A0 för fotomotstånd - om du fortfarande har din projektstyrelsen trådbunden upp från tidigare labben så ska du få alla set). Du bör också fimpa board.on() callback-funktionen för Johnny fem.

var fem = require("johnny-five");
var ombord = nya fem. Board();
var LEDPIN = 13.
var ANALOGPIN = 0;

Board.on ("ready", function() {
Nästa nummer kommer att gå här
});

Du kommer att lägga till ett par funktioner här senare i labbet

I funktionen board.on() kommer du först initiera digital PIN-koden som du vill använda för LED som en puls bredd modulering (PWM) stift.

Board.on ("ready", function() {
Ställ in stift 13 på PWM läge
this.pinMode (LEDPIN, fem. Pin.PWM);

});

Härnäst kommer du använda funktionen analogRead() för att fånga de data som kommer från fotomotstånd. I Lab 2 skrev du bara data ut till konsolen loggen. För denna lab använder du data för att bestämma hur ljus LED bör vara. Konceptet är detsamma, men callback-funktionen du skriver denna gång kommer att ha lite mer till det (men inte mycket).

Först definiera funktionen analogRead() och callback-funktionen som ska startas när inmatning av data tas emot. Formatet är this.analogRead (pinNumber, callbackFunction);

Läs input på analoga stift 0:
this.analogRead (ANALOGPIN, function(val) {
Nästa nummer kommer att gå här
});

Denna funktion berättar programmet att läsa data från det analoga stiftet (0 i denna lab) och när input samlas, callback funktionen i det andra argumentet och passera input dat i argumentet val .

Ditt mål är att skapa ett program som ökar LED ljusstyrka när omgivande rummet ljus minskar. Om det är ljust i rummet, du vill inte att lampan att lysa upp och ju mörkare det blir ju ljusare du vill LED att få. Du också viss tröskel av omgivande ljus där lysdioden släcks (dvs. du vill inte ha lampan svagt belysta i ett måttligt ljust rum - det bara slits LED). Sättet att göra detta är att kartlägga inkommande spänningen från fotomotstånd till utspänningen för LED. Det finns en obalans. Fotomotstånd indata är i ett 16-bitars antal 0-1023 PWM stöds av vår styrelse är en 8-bitars med 0-255. Du kan enkelt dela upp indatavärdet i hälften men du måste fortfarande står för den lägsta beloppsgräns.

Om du gjorde detta i C med hjälp av Arduino strukturer, värden och funktioner, utan att använda ramar som Johnny-fem, kan du använda funktionen map() mappa indatavärdet i en ny dataområde, till exempel kartläggning analoga indatavärdet (varierade till 0-1023) till ett nytt sortiment av 0-255. Du kan göra det här - du har bara att skriva funktionen map() själv. Lägg till följande kod längst ned i filen lab003.js (efter slutet av funktionen board.on() .

Denna funktion avbildar ett värde från en rad till ett annat område
Exempel: karta (25, 0, 25, 0, 50) returnerar 50
Exempel: karta (20, 0, 100, 0, 10) returnerar 2
funktionen karta (x, in_min, in_max, out_min, out_max) {
återgå Math.round ((x-in_min) * (out_max - out_min) / (in_max - in_min) + out_min);
}

Detta är den exakta formeln används av Arduino. Med den här funktionen kan du skicka ett värde och dess fördefinierat intervall och önskad dataområdet och det kommer tillbaka lämpligt värde för intervallet.

Funktionen map() returnerar negativa värden så behöver du också återskapa den Arduino constrain() funktionsom gör att du kan säkerställa värdet är begränsad till ett lägsta och högsta värde. Lägg till följande kod direkt efter funktionen map() .

Denna funktion säkerställer ett värde är inom ett visst utrymme
funktionen Bibehåll (x, in_min, in_max) {
återgå Math.round (x < in_min? in_min: x > in_max? in_max: x);
}

Nu har du skrivit de stödjande funktionerna för map() och constrain() kan du skriva callback-funktionen för analogRead() funktion du började skriva i funktionen board.on() ... Först måste du använda funktionen map() för att mappa det inkommande värdet från fotomotstånd till ett intensitetsvärde för LED.

Läs input på analoga stift 0:
this.analogRead (ANALOGPIN, function(val) {
Mappa det analoga värdet (0-1023) till en 8-bitars värde (0-255)
så det kan användas till utmatningen LED.
var ljusstyrka = karta (val, 350, 1023, 0, 255);

});

När du anger ljusstyrka värdet mappat du inkommande data från en rad olika 350-1023 till 0-255. Genom att göra så att du effektivt sätta den omgivande ljusa värdet 350 till en ljusstyrka på 0 (eftersom 350 kartor till 0). Om värdet kommer från fotomotstånd understiger 350 sedan returnerar funktionen map() ett negativt värde. För att redovisa potentialen för ett negativt värde kan du begränsa värdet till 0-255 varierar med funktionen constrain() du skrev.

Läs input på analoga stift 0:
this.analogRead (ANALOGPIN, function(val) {
Mappa det analoga värdet (0-1023) till en 8-bitars värde (0-255)
så det kan användas till utmatningen LED.
var ljusstyrka = karta (val, 350, 1023, 0, 255);

Använd funktionen tvinga för att säkerställa rätt värden
ljusstyrka = begränsa (ljusstyrka, 0, 255);

});

Detta kommer att säkerställa att värdet av ljusstyrka är mellan 0 och 255.

Det sista steget är att ange värdet för utgångsstiftet till värdet av ljusstyrka. I Lab 1 använde du digitalWrite() att ställa in produktionen stift till antingen hög eller låg (1 eller 0). Eftersom du har definierat LED utgångsstiftet som en PWM stift använder du analogWrite() i stället, som kommer att berätta för styrelsen att simulera en analog enhet med PWM. För felsökning ändamål kan du också lägga till ett console.log() samtal.

Läs input på analoga stift 0:
this.analogRead (ANALOGPIN, function(val) {
Mappa det analoga värdet (0-1023) till en 8-bitars värde (0-255)
så det kan användas till utmatningen LED.
var ljusstyrka = karta (val, 350, 1023, 0, 255);

Använd funktionen tvinga för att säkerställa rätt värden
ljusstyrka = begränsa (ljusstyrka, 0, 255);

Console.log ("val:" + (val * (5.0/1024.0)) + ", ljusstyrka:" + ljusstyrka);

Ange brigthness LED
this.analogWrite (ledPin, ljusstyrka);

});

Det är all kod - nu är du redo att köra programmet.

Se Steg
Relaterade Ämnen

IoT Workshop: Lab 1 - Digital utgång

I den här övningen kommer du tråd upp en Arduino med en enda LED och en 330 Ohm motstånd då koden och köra ett litet Node.js/Johnny-fem program som loopar och skriver sekventiella/på kommandon för att göra den LED blinkar.Om du inte redan gjort det,...

IoT Workshop: Lab 4 - skicka Data till molnet

I den här övningen kommer du bygga en enkel omgivande ljus upptäckt app (liknar Lab 2) och skicka data som samlas till molnet. Du kommer att använda kväve för att skicka data till en cloud gateway och du kommer att kunna kontrollera den messaging fun...

IoT Workshop: Lab 2 - läsa en Analog Signal

I den här övningen använder du två resistorer - en statisk motstånd och ett variabelt motstånd - att skapa en spänningsdelare som gör det möjligt att effektivt förstå intensiteten hos ljuset som identifieras av ett fotomotstånd - i huvudsak en ljusmä...

IoT Workshop: Prep arbete

Laboratorier i denna serie bygger på varandra så att du till prototyp din egen Internet of Things (IoT) enheter. I den här övningen använder du Node.js och ett open source ramverk för att interagera med hårdvara som kallas Johnny-fem, som fungerar so...

My Workshop/ Lab (2012)

Here are some pictures of my lab where I do most of my electronic projects. Jag också märkt dem med information. De flesta av metall, plast och träbearbetning görs utanför vårt hus, i en separat byggnad. Jag postat denna guide, eftersom det skulle ku...

IoT enhet för seriell till Ethernet med hjälp av TCP

Jag vet WIZ550S2E lösning för övervakning. Nyligen meddelade WIZwiki-W7500ECO plattform WIZnet. Så genomfört jag en firmware för WIZwiki-W7500ECO av WIZ550S2E SW ändring eftersom jag kan hantera en ursprungskod enkelt.Du kan veta status för utrustnin...

Kontrollerande Arduino Uno med Javascript!

Jag har fått lära Javascript för sent och jag gillar verkligen språket. Så naturligt, jag trodde finns det något sätt att programmera Arduino styrelser med Javascript!En snabb sökning hittade johnny-fem bibliotek i Javascript som använder firmata-pro...

Kontrollerande Arduino robot med iOS, iPhone, iPad eller Android

LOFI kontroll kan du styra en Arduino robot med en iOS-enhet (iPhone eller iPad) över Bluetooth LE (Bluetooth 4.0) modul som HM-10 eller HM-11.Appen var ämnad att arbeta med LOFI hjärnan controller och är kompatibel med nästan alla Arduino ombord.LAD...

Hur att bygga, göra en gitarr effekter Pedal styrelse med input utgångarna - steg för steg

Detta är en komplett guide om hur att designa och bygga din egen pedallådan för din gitarr pedaler.Trä som används var pine och målat 4 gånger att skapa fin mörk färg.Jag har köpt högkvalitativa tuffa velctro, varumärke kardborrband.Detta är de neutr...

DIY drivs Pedal styrelsen med Input Jacks

vänligen bära med mig om detta är svårt att följa eller måste klargöras... Detta är min första Instructable. Om du har en fråga, fråga gärna i kommentarerna!Detta projekt startade som egentligen bara en kombination av flera idéer. Jag ville ha en ped...

Arduino-baserad Smart Home IOT System

Hej, jag är Michalis Vasilakis från Ardumotive.com och i handboken Instructables jag visar dig hur du enkelt kan göra din egen smarta hem-system baserat på Arduino uno och en Ethernet-modul (eller sköld).Du kommer att kunna använda detta system från...

DADD - pappor mot rattfylla med bult IoT

Detta Instructable visar hur man bygger en bil säkerhetssystem som hindrar människor från rattfylleri och omedelbart begär en Uber genom att ge dem din exakta GPS-position. Projektet var en del av en workshop som genomfördes av bult IoT på IIT Guwaha...

HackerBoxes 0006: Internet saker (IoT) projekt med partikel fotonen

Hacking Internet saker! Denna månad, abonnenter till HackerBoxes arbetar med spånskivor Photon IoT att styra enheter över Internet, samla sensor data över Internet, lagra data i molnet, och mycket mer.Detta Instructable innehåller information för att...

Dropbox ersätts med BtSync på en Edison IoT

Vad du behöver:Delar:Intellekten Edison Arduino IoT12V strömförsörjning med batteribackup. Detta kan inte behövas.microSD-kort, rekommenderas 8GB eller större.USB-enhet (tillval)WiFi-anslutningProgramvara:Aktuella Yocto eller UbilinuxBTsync (hämtat d...

Remote bil övervakning och spårning med Intel Edison

Jag är vanligtvis mångordig, men för denna del ska jag försöka vara kortfattad. Detta projekt är:En Intel Edison + en GPS-mottagare + en Bluetooth OBD-II läsare (tillval eftermarknaden bil sensorer) + en bil.Lägg i några program och du kan övervaka p...

Kedjad humör-ljus med hjälp av hög effekt RGB lysdioder

jag har startet projektet mer än ett år sedan och arbetar på den på och av sedan dess. Nu är det äntligen gjort.Målet var att ha en snygg humör-ljus för mitt vardagsrum, inspirerad av en standard belysning konsol en vän hade en gång (med färgade lamp...

Gränssnitt bult med Arduino: Bult UART

IntroduktionDetta instructable är gjord för bult förbrukaren vem önskan till gränssnitt bult hårdvara enheten med Arduino Uno eller helt enkelt vill experimentera med bult UART.FörutsättningarTillgång till bult IoT workshop och dess framgångsrika slu...

Göra variabel DC Lab bänk nätaggregat som passar i din ficka!

Låt oss göra Ultra liten storlek Dc variabel Lab bänk Power Supply med Buck Boost Converter modul och 1A Lithium ion batteri laddning styrelsen från ebay."Dess så liten att du kan bära det någonstans!"Denna variabel Power Supply är utmärkta Star...

IoT anteckningar skrivare: Smartphone anteckningar på papper

"VIPER IoT anteckningar skrivare" försöker skapa ett handable medium för daglig kommunikation.Tack vare VIPER App kan du skriva meddelanden och skicka dem till en liten termoskrivare programmerade med VIPER och ansluten till nätverket via en mik...