User Tools

Site Tools


oak:tutorials:lesson_template

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
oak:tutorials:lesson_template [2016/03/22 16:19]
jwhendy
oak:tutorials:lesson_template [2016/03/22 20:39]
jwhendy
Line 1: Line 1:
-In progress... 
  
------+======Oak: RGB LED Lesson======
  
-===== OakLED basics =====+[Fritzing or photo of final main circuit for this lesson] 
 +Fritzing parts herehttps://​github.com/​digistump/​OakCore/​issues/​38
  
-[[http://​digistump.com/​wiki/​_media/​oak/​tutorials/​oak-1-led.png|{{http://​digistump.com/​wiki/​_media/​oak/​tutorials/​oak-1-led.png?400}}]]+Description of the lesson ​exThis lesson will show you how to safely connect a Red, Green, Blue LED to your Oak and control it from a sketch
  
-This tutorial will build on the [[oak:​tutorials:​blink|last]] by using an external LED bulb. We will also control the brightness of an LED vs. simply turning it on and off. There are excellent articles about LEDs, so if you want to know more about the nitty gritty of how LEDs work, please seek out other resources. One example is the excellent article, [[https://​learn.adafruit.com/​all-about-leds/​overview|All about LEDs]] on Adafruit. +=====Components ​Used:=====
- +
-===== Components ​used =====+
  
 ^ Part       ^ Quantity ​         ^Identification^ ^ Part       ^ Quantity ​         ^Identification^
 | Oak with soldered headers |1| | | Oak with soldered headers |1| |
-| Breadboard|1| | + Breadboard| 1| | 
-|5mm LED bulb, any color|2| | + 5mm RGB Common Cathod ​LED| 1| | 
-|Jumper wires|2+ 330R Resistors3Orange-Orange-Red|
-|Resistor, 1k ohm|1|Red-Red-Brown|+
  
-===== Concepts =====+[NOTE: You can find an index of the parts in the starter and ultimate kits here: [[oak:​tutorials:​kit_parts|Starter and Ultimate Kit Parts List]]]
  
-=== analogWrite() ​===+=====Concepts:​=====
  
-The ''​digitalWrite()''​ function used in the blink tutorial can send ''​HIGH''​ or ''​LOW''​ signals to a pin on the OakThis is like turning the light switch on and off. Using ''​analogWrite()'' ​is like adding a //​dimmer// ​to your switch! You can now decide if the LED is oneand how bright it should ​be.+In this section you would cover the concepts new for this lessonFor this lesson that may include PWM (both what it is, how it works, and how to change it in code with tiny code examples), LEDs (briefly what they are, as the first single ​LED lesson should cover that more in depth)RGB LEDs (how they are different then a single LED, common cathode vs annode, etc), resistors (again in brief as the first single LED lesson ​should ​cover that more in depth).
  
-=== PWM ===+Example of a concept:
  
-The term PWM stands for pulse-width modulation. A full description is outside the scope of this tutorial, but feel free to read up on the concept (e.g. on [[https://​en.wikipedia.org/​wiki/​Pulse-width_modulation|Wikipedia]]). The simplified version is that by pulsing a single voltage ​(like 3.3Von and off, the LED will behave as if we sent a lower voltage. The pulses are very fast (generally faster than one can see) and thus this is a great way to control the brightness of an LED+**PWM**: In this lesson we will use Pulse Width Modulation ​(PWM) to control the 3 different color LED emitters inside the RGB LED. By powering each color from separate pin of the Oak (through a resistorwe can use the Oak to control how much power goes to each colorwhich allows us to control ​the color of the RGB LED.
- +
-=== LED === +
- +
-An LED is light emitting diode, and a diode only allows electricity to flow in one direction. This means that LEDs are also directional. There is generally one leg of an LED that is longer, which is used to indicate ​the //​positive//​ side. The shorter leg is generally connected to ground, so electricity will flow in the positive leg, through the bulb (generating light) and through ​the negative leg to ground. +
- +
-LEDs also typically have an optimal current, which is typically about 20-30mA for a 5mm LED. To obtain this current, we use a resistor. In the interest of keeping this simple, ​we're simply providing a value of 220 ohm as a middle of the road recommendation. There'​s some good information at [[http://​www.evilmadscientist.com/​2012/​resistors-for-leds/​|Evil Mad Scientist]] about //how// these resistor values ​can be chosen if you'd like to learn more. What's certain is that you should //never// plug an LED directly into the Vin or Vcc of the Oak; too much current will destroy it! +
- +
-===== Circuit ===== +
- +
-We will build this circuit: +
- +
-[[http://​digistump.com/​wiki/​_media/​oak/​tutorials/​oak-1-led.png|{{http://​digistump.com/​wiki/​_media/​oak/​tutorials/​oak-1-led.png?​400}}]] +
- +
-  * Start by inserting the 220 ohm resistor into two different rows on the breadboard +
-  * Insert the LED into the breadboard so that it's //long// leg is in the same row as the resistorand the other leg in a different row +
-  * Connect pin 9 of the Oak to the free end of the resistor with a jumper wire +
-  * Connect a ground pin of the Oak to the row containing the short leg of the LED +
- +
-If real world pictures help, you can double check your circuit against this one: +
- +
-[pic] +
- +
-===== Code ===== +
- +
-=== Code: blink, revisited === +
- +
-Using the same code from the blink tutorial with one change, we can blink our new LED bulb!+
  
 +PWM can be used in your code like this:
 <​code>​ <​code>​
-void setup() +analogWrite(0,1023); 
-{                ​+more code here... 
 +</​code>​ 
 +Where analogWrite(0,​1023) means turn Pin0 fully on. A value from 0-1023 can be used to turn the pin on at a level from 0-100%.
  
-  // initialize digital pin 9 as an output. +What is actually happening with PWM: PWM creates ​an output ​that averages out to a certain voltage/​power level by turning the pin on and off very quicklyThe setting you set of 0-100% ​(0-1023is called the duty cycle, at 100% the pin remains ​on 100% of the time, at 50% it remains on half of the time.
-  pinMode(9, OUTPUT); //LED on Oak+
  
-}+Etc, etc, diagrams and images are welcome but each concept should be no more than two short paragraphs and a code block or image.
  
 +=====Circuit:​=====
  
-// the loop() routine runs over and over again +[Fritzing diagram of hooking ​the Oak to the RGB LED with resistors ​and the breadboard]
-void loop() +
-{+
  
-  // turn pin 9 "​on"​ by making the voltage HIGH) +Steps to make these connectionsthings to watch out for (polarityresistor codes etc)
-  digitalWrite(1HIGH); +
-   +
-  // wait a second (1000 milliseconds) +
-  delay(1000);​ +
-   +
-  // turn the LED off by making the voltage LOW +
-  digitalWrite(9LOW);+
  
-  // wait another second 
-  delay(1000);​ 
  
-+=====Code:=====
-</​code>​ +
- +
-=== Code: for() loop === +
- +
-You can also define the delays using variables and loops to make things more interesting:​+
  
 <​code>​ <​code>​
-// now we've added two variables ​to hold our +Code to show example of it working
-// on and off time delays +
-// the "​int"​ variable is able to hold integer values +
-int on_time; +
-int off_time; +
- +
-void setup()  +
-{                 +
- +
-  pinMode(1, OUTPUT); //LED on Oak +
- +
-+
- +
-void loop() +
-+
- +
-  // the for() loop will initialize a new temporary variable, i +
-  // it runs until i >= 500, adding 50 each time +
-  for(int i = 0; i < 500; i = i+50) +
-  { +
- +
-    // the on time will equal i (0, 50, 100, ...) +
-    on_time = i; +
-     +
-    // the off time will equal 500 - i (500, 450, 400, ...) +
-    off_time = 500 - i; +
- +
-    digitalWrite(1,​ HIGH); +
-    delay(on_time);​ +
-   +
-    digitalWrite(1,​ LOW); +
-    delay(off_time);​ +
-   +
-  } +
-   +
-}+
 </​code>​ </​code>​
  
-Here is what happens each time the loop runs: +Explanation of code
- +
-^time through loop ^i ^on_time ^off_time| +
-|1|0|0|500| +
-|2|50|50|450| +
-|3|100|100|300| +
-|.|.|.|.| +
-|.|.|.|.| +
-|10|450|450|50| +
- +
-When the ''​for()''​ loop above runs, ''​i''​ is equal to 0. It calculatesIf you upload this code, you will see this (click for enlarged view in new tab): +
- +
-[[http://​digistump.com/​wiki/​_media/​oak/​tutorials/​loop-changing-blink.gif|{{oak:​tutorials:​loop-changing-blink.gif?​300}}]]+
  
 +=====Conclusion:​=====
  
-Congratulations! You've taken your first steps with the OakTake a look at some of the other [[http://​digistump.com/​wiki/​oak?​redirect=1|tutorials]] for more!+Where to go from here, potential uses, etc.
oak/tutorials/lesson_template.txt · Last modified: 2016/03/22 20:39 by jwhendy