A25 Muita sensoreita ja oheislaitteita - matpi/EmbeddedSystemsUTU GitHub Wiki
##Numeronäppäimistö
-Näppäimistö josta en ymmärrä miten se toimii mutta se toimii!
-
Ei maata, ei virtaa, vain suoraan yksi datapinni jokaista riviä ja saraketta kohti
-
Laite tunnistaa napin painalluksen, ei sitä onko nappi pohjassa vai ylhäällä- Näpäimistöä on siis luettava tiheästi että saadaan painallukset talteen.
###1. Käyttäkää arduino-ohjelmasta löytyvää esimerkkiä ja kokeilkaa näppäimistöä. Tutkikaa miten koodi toimii.
CustomKeypad esimerkki voidaan muokata helposti sopivaksi kolmisarakkeiselle ja neliriviselle näppäimistölle. Koodi voi tällöin olla esimerkiksi seuraava:
/* @file CustomKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact [email protected]
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
*/
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {8, 7, 6, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 3, 2}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
###2. Tehkää oma sovellus jossa ohjaatte jotakin toista laitetta tai näyttöä näppäimistöllä
##RFID tunnistus
-Rfid-tunnnistin osaa lukea sähkökenttäänsä tulevan lätkän ID-numeron ja mahdollisesti myös kirjoittaa lätkään tietoa ja lukea sitä.
-Tämä malli toimii 3.3v käyttöjännitteellä ja sen kanssa pitää käyttää Arduino nanoa 3.3v jännitteelle asetettuna. Jos käytätte Arduino Unoa, niin käyttäkää jännitteen tason muunninta (voltage level converter). Tällöin Unon + 5V tulee muuntimen A puolen VCC pinniin (AVCC), GND muuntimen A puolen GND pinniin (AGND), Arduinon D10 tulee muuntimen ASDA pinniin ja Arduinon D13 tulee muuntimen ASCL pinniin... muuntimen B-puolelta johtimet jatkuvat RFID moduulin vastaaviin pinneihin.
###1. Ladatkaa arduino-ohjelmasta löytyvä mallikoodi arduino nanoon ja kykekää laite koodin alussa kuvatulla tavalla. Huom. SS pinni onkin tässä moduulissa merkitty kirjaimilla SDA, eli arduinon pinni 10 siihen kiinni.
###2. Kun saatte malliesimerkin toimimaan, ladatkaa ja kokeilkaa alla oleva koodi. Tehkää siitä oma sovellus jossa ohjaatte jotakin laitetta rfid-lätkällä. Tässä koodissa ei ole erikseen ohjeistusta RFID-moduulin kaikista pinnikytkennöistä. Ne löytyvät Arduino-ohjelman mallikoodista, mutta laitetaanpa ne vielä tähän:
- Pin layout should be as follows (on Arduino Uno):
- MOSI: Pin 11 / ICSP-4
- MISO: Pin 12 / ICSP-1
- SCK: Pin 13 / ISCP-3
- SDA: Pin 10
- RST: Pin 9
#include <SPI.h>
#include <RFID.h>
#include <LiquidCrystal.h>
#define SS_PIN 10
#define RST_PIN 9
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
RFID rfid(SS_PIN, RST_PIN);
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
if (rfid.isCard()) //onko korttia luettavissa
{
if (rfid.readCardSerial())
{
/* Jos kortin lukeminen onnistuu, luvut on tallenettu
lukusarjaan josta ne voidaan lukea muuttujiin*/
Serial.println(" ");
Serial.println("Card found");
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
//Serial.println(" ");
Serial.println("Cardnumber:");
Serial.print("Dec: ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(", ");
Serial.print(rfid.serNum[4],DEC);
Serial.println(" ");
// tulostetaan sama heksalukuina
Serial.print("Hex: ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[1],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[2],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[3],HEX);
Serial.print(", ");
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
Serial.print("LUETTU!");
Serial.println(" ");
delay(1000);
}
}
rfid.halt();
}
##Oled näyttö
-
Oled tekniikkalla saadaan kirkkaita ja vähävirtaisia näyttöjä joissa on laaja katselukulma.
-
Tämä näyttö käyttää I2C-väylää, siinä on valmiina ylösvetovastukset ja se on 5v yhteensopiva.
-
Näytöllä voi näyttää grafiikaa
-Näytön osoite saattaa vaihdella näytöstä riippuen jos oletus 0x3D ei toimi kokeilkaa 0x3C osoitteella. Demoilla käytössä oleva laite käyttää osoitetta 0x3C.
###1. Ladatkaa Goif2cOLED kirjaston joku esimerkki, kytkekää näyttö ja testatkaa toimiiko.
###2. Kokeilkaa alla olevaa pelkistettyä koodia, muokatkaa sitä.
###3. Tehkää jokin oma sovellus jossa hyödynnätte näyttöä.
/*
Creat heartbeat animation.
Circuit:
* I2C OLED Panel attached to pins SDA, SCL
* Power inputs attached to pins 3V3, +5V,GND,GND,VIN
Created 17 Jan 2012
by: Jimbo.we(www.geekonfire.com)
*/
#include <Wire.h>
#include <GOFi2cOLED.h>
#include <avr/pgmspace.h>
GOFi2cOLED GOFoled;
//32x32 pixeles
const unsigned char PROGMEM heart1[]={
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x80,
0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F,
0x0F, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//56x56 pixeles
const unsigned char PROGMEM heart2[]={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFC, 0xF8, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x07, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F, 0x1F, 0x0F,
0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x0F, 0x07,
0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x0F, 0x07, 0x03,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
void setup() {
//default address is 0x3D.
GOFoled.init(0x3C);
// init done
GOFoled.display(); // show splashscreen
delay(2000);
GOFoled.clearDisplay();
GOFoled.setTextSize(1);
GOFoled.setTextColor(WHITE);
}
void loop()
{
GOFoled.setCursor(14,56);
GOFoled.print("Ihanaa on Oppia!");
GOFoled.drawBitmap(48, 16, heart1, 32, 32, WHITE); //draw heart1 bitmap.
GOFoled.display();
delay(500);
GOFoled.clearDisplay();
GOFoled.setCursor(14,56);
GOFoled.print("Ihanaa on Oppia!");
GOFoled.drawBitmap(36, 4, heart2, 56, 56, WHITE); //draw heart2 bitmap.
GOFoled.display();
delay(500);
GOFoled.clearDisplay();
}
##Nokia -näyttö
-
Perinteinen kännykän lcd-näyttö. Varsin vähävirtainen ja suosittu projekteissa
-
Pystyy näyttämään grafiikkaa
-
3.3v käyttöjännite ja datalinjat, käyttäkää arduino nanoa 3.3v jännitteellä.
-
Erillinen taustavalo joka kytketään maahan
###1. Wikin "näytöt"- sivulla on ohjeet näytön kytkemiseen ja mallikoodi. Kokeilkaa myös arduino-ohjelmasta löytyvää mallikoodia jossa näkyy grafiikoita.
###2. Muokatkaa ja soveltakaa mallin koodia.
##Ilmanpainemittari
- Aistii kapasitiivisesti vallitsevan ilmanpaineen. Toimii välillä 300 metriä merenpinnan alla ja 3000 metriä yläpuolellä.
-Käyttää I2c väylää ja 3.3v jännitettä.
-voidaan käyttää korkeuden havaitsemiseen noin 0,5 metrin tarkkuudella.
###1. Ladatkaa arduino-ohjelman BMP85-kirjaston esimerkkikoodi, kytkekää moduuli ja testatkaa sitä. Kalibroikaa korkeuslukema hyödyntäen ilmatieteenlaitoksen säädataa.
###2. Tehkää jokin oma sovellus hyödyntäen esimerkkikoodia ja muita koodeja.
##Nunchuk ohjain
-nintendon ohjain joka käyttää avointa I2C-protokollaa -suosittu hakkereiden parissa -halvat kopiot melko hyviä -Joystick, kaksi nappia ja 3-akselinen kiihtyvyysanturi -3.3v laite
##1. Kokeilkaa arduino-ohjelmasta löytyvää kirjaston esimerkkikoodia
Jos Sarjamonitori näyttää tosi epämääräistä dataa, vaihtakaa baudrate oikeaksi sarjamonitorista. Vaihtoehtoisesti on säädettävä koodista baudratea eli lähetysnopeutta. Nyt koodissa on asetettu nopeudeksi 19200 bps.
##2. Soveltakaa
Käyttösovellus Nunchuck ohjaimella toteutettuna: http://hacknmod.com/hack/real-time-diy-pan-tilt-camera-with-arduino-wii-nunchuck/
##Moottoriohjaus H-silta moduulilla
-LN298N on vanha mutta kelpo H-silta IC kahden DC-moottorin tai yhden askelmoottorin ajamiseen
- Useimpia h-siltoja ohjataan samalla tavalla: yhtä moottorikanavaa kohti on kaksi suuntapinniä ja yksi enable. Kun suuntapinnit ovat molemmat HIGH tai LOW, moottori on pysäyksissä. Kun toinen pinni on LOW ja toinen HIGH moottori pyörii jompaan kumpaan suuntaan. Vaihtamalla pinnien tila päinvastaiseksi suunta kääntyy. Enable-pinnillä säädellään antaako piiri kanavalle virtaa. Kun sitä pulssitetaan analogWrite-komennolla, voidaan moottorin nopeutta säätää.
###1. Kokeilkaa kytkeä ja kokeilla tämän ohjeen mukaan. Moottoreille kytketään siis virta erillisestä virtalähteestä: http://tronixlabs.com/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/ HUOM! tutoriaalin koodissa on siis kaksi erilaista aliohjelmaa, joissa käydään pääsilmukasta vuorotellen.
###2. Yrittäkää soveltaa jotakin sensoria moottorin ohjaukseen
##Arduino motor shield Tähän on helpoin tie hyödyntää valmista kirjastoa ja tutoriaalia: https://learn.adafruit.com/adafruit-motor-shield/library-install ###1. Kun kirjasto on asennettu, valitkaa adafruitin sivulla vasemmalla olevasta valikosta DC-moottoria koskevat osiot.
###2. Kokeilkaa ohjata moottoreita ja säätää niiden nopeutta jotakin sensoria käyttäen
##DHT22
-Sensori pystyy mittaamaan ilmankosteutta lähdes 0-100% välillä, lukemaan lämpötilaa sekä plussan että pakkasen puolella, ja on vieläpä vähävirtainen
-
toimii 3.3v ja 5.5v
-
vain yksi datalinja, johon laitetaan 10k ylösvetovastus
###1. Ladatkaa arduino-ohjelmasta löytyvän DHT-kirjaston esimerkki arduinoon, kytkekää sensori ja kokeilkaa. ###2. Tehkää soveltava koodi.
Lego-kotelo Arduinoon: http://scuola.arduino.cc/courses/lessons/view/gQ7noDN