Upload
jason-griffey
View
269
Download
11
Embed Size (px)
DESCRIPTION
Workshop I delivered at Code4LibDC Unconference 2014 on open hardware and arduino for libraries and archives.
Citation preview
Intro to ArduinoThe Basics of Open Hardware and Circuits
Jason Griffey Evenly Distributed LLC
http://evenlydistributed.net
Code4LibDC 2014
SSID: LibraryBox - Free Content!
Folder: Code4LibDC
http://librarybox.us
Connect to wifi signal, then launch/refresh any browser
Software install?
Let’s Plug In
Open Source Hardware
Photo by sobczak.paul - http://flic.kr/p/aDD8ep
Arduino
Photo by bjepson - http://flic.kr/p/8EVHqm
Why Arduino?
Open Hardware
Photo by dam - http://flic.kr/p/8hLXBM
Photo by dam - http://flic.kr/p/8hLXwT
Photo by dam - http://flic.kr/p/8hQcJs
Photo by dam - http://flic.kr/p/8hQcDG
Photo by dam - http://flic.kr/p/8hQcDG
Photo by Nathan Chantrell - http://flic.kr/p/aALqhd
Photo by Nathan Chantrell - http://flic.kr/p/aALqhd
A La Mode
http://learn.adafruit.com/system/assets/assets/000/000/426/original/FSR402_MED.jpg?1340650766
Sensors
Arduino Software
Our Hardware
Fritzing
ArduinoIDE
Our Sketch
int val; !void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); Serial.begin(9600); } !void loop() { Serial.println(analogRead(0)); val = analogRead(0); !if (val > 256) digitalWrite(2,HIGH); if (val < 256) digitalWrite(2,LOW); if (val > 512) digitalWrite(3,HIGH); if (val < 512) digitalWrite(3,LOW); !if (val > 768) digitalWrite(4,HIGH); if (val < 768) digitalWrite(4,LOW); !if (val > 769) digitalWrite(5,HIGH); if (val < 1020) digitalWrite(5,LOW); }
Globals
Setup
Loop
int val; !void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); Serial.begin(9600); } !void loop() { Serial.println(analogRead(0)); val = analogRead(0); !if (val > 256) digitalWrite(2,HIGH); if (val < 256) digitalWrite(2,LOW); if (val > 512) digitalWrite(3,HIGH); if (val < 512) digitalWrite(3,LOW); !if (val > 768) digitalWrite(4,HIGH); if (val < 768) digitalWrite(4,LOW); !if (val > 769) digitalWrite(5,HIGH); if (val < 1020) digitalWrite(5,LOW); }
Globals
Setup
Loop
int val; !void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); Serial.begin(9600); } !void loop() { Serial.println(analogRead(0)); val = analogRead(0); !if (val > 256) digitalWrite(2,HIGH); if (val < 256) digitalWrite(2,LOW); if (val > 512) digitalWrite(3,HIGH); if (val < 512) digitalWrite(3,LOW); !if (val > 768) digitalWrite(4,HIGH); if (val < 768) digitalWrite(4,LOW); !if (val > 769) digitalWrite(5,HIGH); if (val < 1020) digitalWrite(5,LOW); }
Globals
Setup
Loop
int val; !void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); Serial.begin(9600); } !void loop() { Serial.println(analogRead(0)); val = analogRead(0); !if (val > 256) digitalWrite(2,HIGH); if (val < 256) digitalWrite(2,LOW); if (val > 512) digitalWrite(3,HIGH); if (val < 512) digitalWrite(3,LOW); !if (val > 768) digitalWrite(4,HIGH); if (val < 768) digitalWrite(4,LOW); !if (val > 769) digitalWrite(5,HIGH); if (val < 1020) digitalWrite(5,LOW); }
Globals
Setup
Loop
Can you:
Can you:
• Change one of the Pin Numbers?
Can you:
• Change one of the Pin Numbers?
• Re-wire the ground wires?
Can you:
• Change one of the Pin Numbers?
• Re-wire the ground wires?
• Change the order the LEDs light up?
Can you:
• Change one of the Pin Numbers?
• Re-wire the ground wires?
• Change the order the LEDs light up?
• Light up 2 LEDs at once?
Can you:
• Change one of the Pin Numbers?
• Re-wire the ground wires?
• Change the order the LEDs light up?
• Light up 2 LEDs at once?
• Add another LED?
Can you:
• Change one of the Pin Numbers?
• Re-wire the ground wires?
• Change the order the LEDs light up?
• Light up 2 LEDs at once?
• Add another LED?
• Swap the sensor?
Structure/* Each Arduino sketch must contain the following two functions. */void setup(){/* this code runs once at the beginning of the code execution. */}void loop(){/* this code runs repeatedly over and over as long as the board is powered. */}
Comments// this is a single line/* this isa multiline */
SetuppinMode(pin, [INPUT \ OUTPUT \ INPUT_PULLUP]);/* Sets the mode of the digital I/O pin. It can be set as an input, output, or an input with an internal pull-up resistor. */
Control Structuresif(condition){// if condition is TRUE, do something here}else{// otherwise, do this}
for(initialization; condition; increment){// do this}/* The ‘for’ statement is used to repeat a block of statements enclosed in curly braces. An increment counter is usually used to increment and terminate the loop. */
Digital I/OdigitalWrite(pin, val); /* val = HIGH or LOW. Sets the digital pin to either ON or OFF. */int var = digitalRead(pin);/* Reads the voltage from a digital pin. Returns either HIGH or LOW. */int var = digitalRead(pin);/* Reads the value from a specified digital pin, either HIGH or LOW. */
Analog I/OanalogWrite(pin, val); /* Writes an analog voltage to a pin.val = integer value from 0 to 255 */int var = analogRead(pin);/* Reads the voltage from the specified analog pin. */int var = analogRead(pin);/* Reads the value from the specified analog pin. */
Timedelay(time_ms);/* Pauses the program for the amount of time (in milliseconds). */delayMicroseconds(time_us);/* Pauses the program for the amount of time (in microseconds). */millis();/* Returns the number of milliseconds since the board began running the current program. max: 4,294,967,295 */micros();/* Returns the number of microseconds since the board began running the current program. max: 4,294,967,295 */
Serial CommunicationSerial.begin(baudrate);/* Sets the data rate in bits per second (baud) for serial data transmission. */Serial.print("");/* Sets the data rate in bits per second (baud) for serial data transmission. */Serial.print("Hello World!!");/* Sends a string "Hello World!!" to the serial bus. This will be seen on the Serial Monitor in Arduino. */Serial.println("Hello World!");/* Identical to Serial.print(), but this also adds a carriage-return / line-feed to advance to the next line. */Serial.println("");/* Identical to Serial.print(), but this also adds a carriage-return / line-feed to advance to the next line. */boolean Serial.available()/* Serial.available() returns TRUE if there is data available on the Serial bus. */int Serial.read();/* Returns a single byte of data available from the Serial buffer. */int Serial.read();/* Returns a single byte of data available from the Serial buffer. */
Data Typesvoid // nothing is returnedboolean // 0, 1, false, truechar // 8 bits: ASCII characterbyte // 8 bits: 0 to 255, unsignedint // 16 bits: 32,768 to 32,767, signedlong /* 32 bits: 2,147,483,648 to 2,147,483,647, signed */float // 32 bits, signed decimal
ConstantsHIGH \ LOWINPUT \ OUTPUTtrue \ false
Mathematical Operators= // assignment+ // addition- // subtraction* // multiplication/ // division% // modulus
Logical Operators== // boolean equal to!= // not equal to< // less than> // greater than<= // less than or equal to>= // greater than or equal to&& // Boolean AND|| // Boolean OR! // Boolean NOT
Bitwise Operators& // bitwise AND| // bitwise OR^ // bitwise XOR~ // bitwise INVERTvar << n // bitwise shift left by n bitsvar >> n // bitwise shift right by n bits
Libraries#include <libraryname.h>/* this provides access to special additional functions for things such as servo motors, SD card, wifi, or bluetooth. */
Advanced I/Otone(pin, freq);/* Generates a square wave of the specified frequency to a pin. Pin must be one of the PWM (~) pins. */tone(pin, freq, duration);/* Generates a square wave of the specified frequency to a pin for a duration in milliseconds. Pin must be one of the PWM (~) pins. */noTone(pin);// Turns off the tone on the pin.
LilyPad ProtoSnap Simple:
RedBoard:
ATmega328Microcontroller
TemperatureSensor(Pin A1)
Button(Pin A5)
Vibe Motor(Pin 3)
RGB LED(Pins R=9,G=11, B=10)
Switch(Pin 2)
LightSensor(Pin A6)
Buzzer/Speaker(Pin 7)
LEDs(Light Emitting Diodes)(Pins 5, 6, A2, A4, A3)
Power In
Power5V / 3.3 / GND
USB to ComputerReset
AnalogInputs
SCL/SDA(I2C Bus)
ATmega328Microcontroller
Digital I/OPWM(3,5,6,9,10,11)
Building Your Own Hardware
Patron Counters
$300
$280
Build One Yourself
Build One Yourself
• Arduino - $35
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
• Sensor (infrared, laser tripwire, ultrasonic, or PID) - $10
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
• Sensor (infrared, laser tripwire, ultrasonic, or PID) - $10
• TOTAL COST - $70
Temperature/Humidity Loggers
$240
$415
Build One Yourself
Build One Yourself
• Arduino - $35
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
• Temperature/Humidity Sensor - $5-10
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
• Temperature/Humidity Sensor - $5-10
• LCD Display screen - $15
Build One Yourself
• Arduino - $35
• Data Logger Shield - $20
• SD Card - $10
• Temperature/Humidity Sensor - $5-10
• LCD Display screen - $15
• TOTAL COST - $85
Other Possibilities
Other Possibilities
• RFID Reader
Other Possibilities
• RFID Reader
• Barcode Scanner
Other Possibilities
• RFID Reader
• Barcode Scanner
• Seat usage detector
Other Possibilities
• RFID Reader
• Barcode Scanner
• Seat usage detector
• What else?
Go Build Stuff!
Email: [email protected]
Site: jasongriffey.net
gVoice: 423-443-4770
Twitter: @griffey
http://librarybox.us
http://evenlydistributed.net
!Founder & Principal Consultant
Evenly Distributed LLChttp://pinboard.in/u:griffey/
Jason Griffey