Professional Documents
Culture Documents
PRAKTIKA BILDUMA
J. PARIENTE
2014-2015 IKASTURTEA
AURKIBIDEA
0. HITZAURREA..............................................................................5
1. Sarrera.........................................................................................7
4. FRITZING...................................................................................15
4.1. Zer da FRITZINGa?
4.2. Zertarako balio du?
4.3. FRITZINGa instalatu
4.4. Diseinuak egiteko erremintak
4.4.1. Protoboarda
4.4.2. Eskema
4.4.3. PCBa
4.5. Diseinuak ekoiztea
1
PRAKTIKAK..............................................................................................31
1. Blokea: serie-monitorea......................................................................32
1P1 Serie-monitorean kaixo! Inprimatu
1P2 Serie-monitorean formatuak lantzen
1P3 Sarreren eta irteeren datuak bistaratu
1P4 Led bat piztu serie-monitoretik
4. Blokea: Display-a.................................................................................68
4P1: Displayan testua bistaratu
4P2: Testua bistaratu. Pantaila keinukari
4P3: Serie-monitoretik displayra
4P4: Sarrera-irteeren egoerak displayan bistaratu
5. Blokea: Teklatua...................................................................................82
5P1: Teklatua. Teklatutik serie-monitorean idatzi
5P2: Teklatua. Teklatutik display batean idatzi
5P3: Teklatua. Pin-a eskatu programa exekutatzeko I
5P4: Teklatua. Pin-a eskatu programa exekutatzeko II
2
6. Blokea: Real Time Clock.....................................................................97
6P1: RTCa. Martxan jarri eta konfiguratu
6P2: RTCa. Orduaren formatu berria display batean
6P3: RTCa. Ordua eta dataren arabera irteera bat aktibatu
7. Blokea: Infragorriak...........................................................................107
7P1: IGak. Urrutiko aginteen botoien kodea eskuratu
7P2: IGak. Urrutiko aginte bat testeatu
7P3: IGak. Irteerak aktibatu urrutiko aginte batekin
3
12. Blokea: RS232 bidez VELLEMAN K8056 kontrolatu.....................178
4
HITZAURREA
Ongi etorri Arduinoaren mundura! Esku artean baldin baduzu liburu hau,
esan nahi du Arduinoa landuko duzula. Ezer baino lehen, animo! Lasai hartu,
eta gozatu ezazu!
5
Zelan erabili liburu hau
Proiektu bati ekin baino lehen, ikasi behar da programaren estruktura
nolakoa den. Bigarrenik, ezinbestekoa da sarrera eta irteera analogiko zein
digitalak menderatzea. Eta, gainera, konexio elektrikoak egiten jakin behar da.
6
1. SARRERA
Arduino open-hardware plataforma da. Sarrera eta irteera (S/I) analogiko eta
digitaletan oinarrituta dagoen plaka bat da, Processing garapen-hizkuntza
erabilita programatua.
7
2. ARDUINO PLATAFORMA INSTALATZEA
8
3. ARDUINO TXARTEL BAT MARTXAN JARTZEA
Instalazioa egiteko, argazki hauetan ageri diren pausoak jarraitu behar dira:
9
1 Zabaldu: Kontrol-panela / Sistema eta segurtasuna / Sistema / Gailu-
kudeatzailea
2 Beste gailuak jartzen duen tokian, eskumako botoia sakatu eta
Kontrolatzailearen driver-a eguneratu sakatu.
3 Agertuko den leihoan, Arduinoa instalatuta dagoen karpetara joan,
drivers karpetan sartu eta sakatu jarraitu.
4 Instalatu ezazu.
5 Gogoratu behar dugu zein portutan instalatu dugun. Kasu honetan,
COM8 portua da.
10
2 Beste gailuak, Kontrolatzailearen driver-a eguneratu.
11
4 Instalatu ezazu
5 Gogoratu behar dugu zein portutan instalatu dugun. Kasu honetan, COM8 portua da
12
3.2. Txartela konfiguratu
2 Non konektatu den arduino txartela ere esan behar zaio programari.
Joan Herramientas/Puerto serial/ (Erremintak/serie-portua/) eta agertuko den
zerrendan dagokion portua adieraziko dugu.
13
3.3. Txartela egiaztatu
Blink programa kargatu, eta honako hau konprobatuko dugu: txartelak berak
duen led txiki bat piztu eta itzali egiten dela segundo bateko maiztasunarekin.
Bukatzeko, eta programatutakoa gertatzen dela bermatzeko, aldaketa bat
egingo dugu: oraingoan, segundo bat piztuta eta 100 milisegundo itzalita egon
behar du ledak. Programa berriro kargatu eta programatutakoak funtzionatzen
badu, kitto! Txartela martxan dago!
14
4. FRITZING
Protoboarda
Eskema elektrikoa
PCBa
15
4.2. Zertarako balio du?
4.4.1. Protoboarda
16
4.4.2. Eskema
Diseinuak eskema elektriko moduan ere egin daitezke eta itxura horretan
bistaratu.
4.4.3. PCB
17
Garatutako diseinua, bukatuta eta frogatuta dagoenean, ekoiztera bidali
daiteke “fabricate” tekla sakatuta.
18
PRAKTIKAK
Helburua
19
P1.1: FRITZINGa. Lehenengo muntaia diseinatzea
1. Helburuak
Irteera digital bat konektatuko da led batekin eta erresistentzia batekin: 4. pina
erabiliko da.
2. Prozedura
Programa ireki. Protoboard atalean sakatu. Protoboard bat agertuko da, hutsik.
Eskuinaldean, osagaiak daude. Arduino UNO bat aterako da. Baita led bat,
pultsadore bat, erresistentzia bi eta potentziometro bat ere.
20
Osagaiak kokatuta daude. Erreparatu protoboardak zenbait konexiotan hartu
duen kolore berdeari. Horrek adierazten du, benetako protoboard batean
bezala, zein zulo dauden konektatuta beren artean.
Eskema bat sortzen denean, ahalik eta txukunen egin behar da, eta,
horretarako, osagaiak mugitu, kopiatu, errotatu edo egin beharrekoa egingo da.
Gainera, kableatua egiteko, kable urdinak bakarrik erabili dira. Kableen kolorea
aldatzeak erraztu egingo digu diseinu-lana. Beraz, kableen kolorea aldatuko
dugu. Kableen kolorea irizpide jakin batzuen arabera aldatuko da: Elikadurako
kableak gorriak (+Vcc) eta beltzak (GND) izango dira, eta, normalean,
gainerakoak, urdinak. Baina zenbat eta konplexuagoa izan diseinua, orduan eta
kolore gehiago beharko dira. Eskemak itxura hau hartuko du:
21
P1.2: FRITZINGa. Lehenengo eskema diseinatzea
1. Helburuak
2. Prozedura
Aurreko praktika berarekin jarraituko dugu. “Eskema” sakatu, eta hor hasiko da
bigarren partea.
a) b)
Bigarren pausoa osagaiak kableatzea da. Eskemak itxura hau izan dezake:
22
P1.3: FRITZINGa. Lehenengo PCBa diseinatzea
1. Helburuak
2. Prozedura
Aurreko praktika berarekin jarraituko dugu. “PCB” sakatu, eta hor hasiko da
praktika honi dagokion partea.
Eskema pantailan, aurreko praktikan erabili diren osagai guztiak agertuko dira,
desantolatuta. Lehenengo pausoa osagaiak eskeman antolatzea da:
Irudian ageri dira, alde batetik, arduino plaka bat, eta bestetik, eraiki nahi den
PCBa. Bien arteko konexioak zuzenean egiten dira. Hau da, ez dago tarteko
konektorerik. Praktika hau egiteko, konektoreak muntatuko dira. Bat plaka
elikatzeko; beste bat, 2 pin digitalentzat; eta azkenengoa, pin
analogikoarentzat:
23
PCBa pantailan, desantolatuta agertuko dira aurreko praktikan erabili diren
osagai guztiak. Lehenengo pausoa osagaiak PCBan antolatzea da. Osagaiak
eraikiko den plakan antolatuko dira. Alde batetik, plaka ahalik eta txikien izan
dadin, eta bestetik, osagaien konexioak ahalik eta laburren izan daitezen.
Gainera, konektoreak, jakina, plakaren alde berean kokatuko dira, kanpoko
kableak erraz konektatu daitezen. Plaka hau proposatzen da:
Azkeneko pausoan, arduinoa kenduko da, plaka neurri egokian moztuko da eta
pistak trazatuko dira:
24
Diseinu hau PDFra esportatuko dugu, eta “copper top” PDFa sortuko da. PDFa
zabalduta, diseinua ikusiko da.
Diseinu hori plaka fabrikatzeko erabiliko da. Plaka ohiko eretan fabrikatu
daiteke:
25
P2: FRITZING. Bigarren PCBa diseinatzea
1. Helburuak
2. Prozedura
Txip generiko bat hartuko da; izan ere, estandarrak dira “IC” txip hauen
neurriak. Txip horren ezaugarrietan pin kopurua aldatu daiteke. Kasu
honetarako, 14 pineko txipa dela esango da.
Konektorea ere estandarra izango da eta horren pin kopurua ere aldatu egin
ahal da. Hauek dira aukeratutako bi osagaiak:
Gogoratu:
26
Osagaiak protoboardaren gainean kokatu:
Protoboard leihotik PCB leihora pasatuko gara, eta diseinatzen hasiko gara:
27
Osagaiak elkartu, plaka neurrira egin, eta pistak trazatu ondoren, proposatutako
diseinua hau da:
Bukatzeko, diseinua PDF moduan bistaratu daiteke “Export for PDF” eginda,
edota fabrikatzera bidali.
Egindako PCBaren diseinua hau da. Ekoizteko prezioak ere ikusi daitezke.
Aurreko praktikarekin konparatuta, ikusi daiteke plakaren tamainak garrantzia
duela:
28
P3: FRITZING. Bigarren muntaia bat diseinatzea
1. Helburuak
Pultsadore bi, led bi eta potentziometro bi erabiliko dira. Gainera, motor txiki bi
gehituko dira irteera analogikoetan. Pinen banaketa hau da:
2. Prozedura
P3 praktika honetan erabiliko diren osagaiak P1.1 praktikan ageri dira. Beraz,
P1.1 praktika berrerabili eta osagaiak gehituko zaizkio, P2 praktika egiteko eta
denbora aurrezteko.
P1.1 praktika ireki, “fitxategia / gorde honela” sakatu eta “P3_protoboard” izena
emango diogu.
Kableatzean, elikadurako kableak gorriak (+Vcc) eta beltzak (GND) izango dira,
analogikoak urdinak, eta digitalak berdeak. Hauxe da egin beharreko muntaia:
29
5. Arduinoarekin sortutako kodigoa testu dokumentu batera
esportatzea
Sarritan gertatzen da –irakasle batek praktika berri bat sortu nahi duenean, edo
ikasle batek txosten bat sortzen duenean…– sortutako kodigoa testu
dokumentu batera esportatu nahi izatea. Kodigo horrek galdu egiten ditu HTML
formatuak dituen koloreak zuzenean kopiatzen bada testu dokumentuan.
Irudian ageri den bezala:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
pinMode(buttonAlarma, INPUT);
pinMode(buttonResetAlarma, INPUT);
digitalWrite (buttonAlarma, HIGH);
digitalWrite (buttonResetAlarma, HIGH);
Serial.begin(9600);
}
Nahi dugun kodigoa. Koloreekin Kopiatzen den kodigoa. Kolorerik
gabea
30
2. Kopiatutako testua, testu fitxategi batean itsatsi (NOTEPAD programan
adibidez). Itxura hau izango du; baina, lasai egon, konbertsio ona egingo
du eta:
5. Hor agertuko den testua zuzenean kopiatu daiteke eta edozein testu
dokumentutan itsatsi, kolore eta guzti. Hona hemen lortutako emaitza:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
pinMode(buttonAlarma, INPUT);
pinMode(buttonResetAlarma, INPUT);
digitalWrite (buttonAlarma, HIGH);
digitalWrite (buttonResetAlarma, HIGH);
Serial.begin(9600);
31
PRAKTIKAK
32
1. BLOKEA:
SERIE-MONITOREA
33
1. BLOKEA: SERIE-MONITOREA
Helburua
Arduinoak serie-portua (RX, TX) edo (0, 1) pinak erabiltzen ditu serieko
transmisioak egiteko.
34
Kapitulu honetan praktika hauek egingo dira:
35
SERIE-MOITOREA. PRAKTIKAK
1. Helburuak
2. Prozedura
3. Materiala
36
4. Kodeak
/*
Serie-monitorean Kaixo! inprimatu
*/
void setup()
{
Serial.begin(9600);
Serial.println ("Serie-monitorea testeatzen!!!");
}
void loop()
{
Serial.println ("Kaixo!");
delay (2000);
}
37
1P2 SERIE-MONITOREAN FORMATUAK LANTZEN
/*
Praktika honekin serie-monitorean datuak inprimatzen ikasiko da
Serial.print(78); // "78" inprimatuko du
Serial.println(78); // "78" inprimatuko du eta orga-itzulera eragingo du
Serial.println(); // orga-itzulera eragingo du
Serial.print("\t"); // tabuladore bat sartuko du
*/
void setup() {
Serial.begin(9600); // serie-komunikazioa izan
}
void loop() {
38
}
39
1P3 SARREREN ETA IRTEEREN DATUAK BISTARATU
/*
Aldagai analogiko baten balioa inprimatu
Aldagai digital baten balioa inprimatu
Aldagai baten balioa inprimatu
*/
int sarreraDigitala = 2;
int irteeraDigitala = 4; // 2. pina irteera digital moduan erabiliko da.
int digitalSarreraBalioa = 0;
int digitalIrteeraBalioa = 0;
int analogSarreraBalioa = 0;
int analogIrteeraBalioa = 0;
void setup() {
// Sarrera eta Irteeren deklarazioa:
pinMode(irteeraAnalogikoa, OUTPUT);
pinMode(sarreraDigitala, INPUT);
pinMode(irteeraAnalogikoa, OUTPUT);
Serial.begin(9600); // serial-komunikazioa izan
}
void loop() {
// Sarrera analogiko bat irakurri (Tenperatura, adibidez). Balioa egokitu: 10 ºC – 40 ºC.
Tenperatura inprimatu:
analogSarreraBalioa = analogRead(sarreraAnalogikoa);
analogSarreraBalioa= map(analogSarreraBalioa, 0, 1023, 10, 40);
Serial.print ("Sarrera Analogikoa = ");
Serial.print (analogSarreraBalioa);
Serial.println (" gradu");
// Irteera analogiko bat irakurri. Balioa egokitu: % 0 - % 100. Portzentajea inprimatu:
analogIrteeraBalioa = 254;
40
analogWrite(irteeraAnalogikoa, analogIrteeraBalioa);
analogIrteeraBalioa = map(analogIrteeraBalioa, 0, 254, 0, 100);
Serial.print ("Irteera Analogikoa = %");
Serial.println (analogIrteeraBalioa);
// Sarrera digital bat irakurri. HIGH edo LOW dagoen inprimatu:
digitalSarreraBalioa = digitalRead(sarreraDigitala);
if(digitalSarreraBalioa == HIGH) {Serial.println ("Sarrera Digitala = 1 ");}
else {Serial.println ("Sarrera Digitala = 0 ");}
// Irteera digital bat irakurri. HIGH edo LOW dagoen inprimatu:
digitalWrite(irteeraDigitala, LOW);
digitalIrteeraBalioa = digitalRead(irteeraDigitala);
if(digitalIrteeraBalioa == HIGH) {Serial.println ("Irteera Digitala = 1 ");}
else {Serial.println ("Irteera Digitala = 0 ");}
Serial.println ();
}
41
1P4 LED BAT PIZTU SERIE-MONITORETIK
/*
Praktika hau HC-05 modulua frogatzeko erabiliko da.
Oraingoan, irteera digital bat piztuko da.
Serie-monitoretik 'p' sakatu 13. LEDa PIZTEKO
Serie-monitoretik 'a' sakatu 13. LEDa AMATATZEKO
Arduinoak datuak RX/TX pinetik jasoko ditu.
*/
void setup()
{
pinMode(led13, OUTPUT);
Serial.begin(9600);
Serial.println("Sakatu ezazu p/a LEDa pizteko/amatatzeko!!!");
}
void loop()
{
// Arduinoaren RX/TX serie-portuko bufferrean datuak badaude:
if( Serial.available()>0 ){
jasoAginduak = Serial.read(); // Byte bat irakurri eta aldagaian gorde
// Jasotako bytearen arabera, led bat piztu/amatatu
if(jasoAginduak == 'p' ){digitalWrite(led13, HIGH);
Serial.println("PIN 13 piztuta");}
if(jasoAginduak == 'a' ){digitalWrite(led13, LOW);
Serial.println("PIN 13 amatatuta");}
}
delay(100);
}
42
2. BLOKEA:
43
2. BLOKEA: SARRERA ETA IRTEERA DIGITALAK
Helburua
44
2P1: SARRERA DIGITALA IRAKURRI
1. Helburuak
2. Prozedura
Setup errutinan pina konfiguratuko da. 2. pina sarrera digital gisa deklaratuko
da eta serie-komunikazioa hasiko da.
Sarrera zer egoeratan dagoen irakurri eta gordeko da. Pultsadorea sakatuta
edo aske dagoen erabaki behar da. Serie-monitorean pultsadorea sakatuta edo
aske dagoela bistaratuko da. Irakurketen artean, denbora tarte bat (delay)
txertatzen da bistaratutakoa lasaiago irakurtzeko.
3. Materiala
45
4. Eskema elektrikoa
5. Oharrak
46
6. Kodigoa
/*
Sarrera digital bat irakurtzea
2. pina sarrera digital gisa konfiguratu. Irakurketa digitalak egingo dira. Serie-monitorean iraku
rketaren emaitzak bistaratuko dira.
*/
// setup errutina behin bakarrik exekutatuko da. Pinak bertan konfiguratu behar dira:
void setup() {
// pin digitala sarrera gisa deklaratuko da:
pinMode(sakatuBotoia, INPUT);
// serial komunikazioa izan:
Serial.begin(9600);
}
// loop errutina behin eta berriro exekutatuko da. Programa nagusia hemen idatziko da:
void loop() {
// sarrera irakurri eta gorde:
int zelanDago = digitalRead(sakatuBotoia);
// sarrera sakatuta edo aske dagoen irakurri:
if (zelanDago == LOW){
Serial.println("Sakatuta!!"); // serie-monitorean pultsadorea sakatuta dagoela inprimatuko da
} else{
Serial.println("Aske!!"); // serie-monitorean pultsadorea aske dagoela inprimatuko da
}
delay(1000); // irakurketen artean denbora tarte bat sartuko da
}
47
2P2: SARRERA-IRTEERA DIGITALAK. LOGIKA DIGITALA
1. Helburuak
Sarrerak irakurriko dira. Irakurketa horien arabera irteera bat idatziko da.
Ariketa honetan, pultsadore bi sakatuta daudenean led bat piztuko da (AND
operadorea: &&). Beste operadore logiko batzuk ere frogatu daitezke.
2. Prozedura
3. Materiala
4. Eskema elektrikoa
48
5. Oharrak
Arduino txartelak led bat dauka integratuta 13. pinean. Lehenengo frogak
egiteko oso ondo dator, konexio gutxiago egin behar direlako.
OPERADORE LOGIKOAK:
OR operadorea : ||
NOT operadorea: !
6. Kodea
/*
Irakurketa digitalak egingo dira. Emaitza hauen arabera irteera bat idatziko da.
Ariketa honetan, sarrera bi hauek piztuta daudenean led bat piztuko da (AND operadorea: &&)
.
Beste operadore logiko batzuk ere frogatu daitezke.
*/
// Sarreren eta irteeraren konfigurazioa egin
const int SakatuBotoia1 = 2; // 2. pinaren izena
const int SakatuBotoia2 = 4; // 4. pinaren izena
// Aldagaiak:
int zelanDago1 = 0; // Aldagaia irakurketa digitalak gordetzeko.
int zelanDago2 = 0; // Aldagaia irakurketa digitalak gordetzeko.
void setup() {
pinMode(ledPin, OUTPUT); // pin digitala irteera gisa deklaratuko da
pinMode(SakatuBotoia1, INPUT); // pin digitala sarrera gisa deklaratuko da
pinMode(SakatuBotoia2, INPUT); // pin digitala sarrera gisa deklaratuko da
}
49
2P3: AURREKO PRAKTIKA PULL-UP ERRESISTENTZIA BARIK
1. Helburuak
Sarrerak irakurriko dira. Irakurketa horien arabera, irteera bat idatziko da.
Ariketa honetan, pultsadore bi sakatuta daudenean led bat piztuko da (AND
operadorea: &&). Beste operadore logiko batzuk ere frogatu daitezke.
2. Prozedura
3. Materiala
50
4. Eskema elektrikoa
5. Oharrak
Behar izanez gero, NOT operadorea erabili daiteke, irteerak balio egokia izan
dezan.
Praktika honetan, pultsadorearen logika honako hau da: sakatuta 0 eta sakatu
barik 1. Irteera erraz molda daiteke aurreko praktikan bezala funtzionatu dezan:
51
6. Kodea
/*
Irakurketa digitalak egingo dira. Emaitza hauen arabera irteera bat idatziko da.
Ariketa honetan, sarrera bi hauek piztuta daudenean led bat piztuko da (AND operadorea: &&
)
Beste operadore logiko batzuk ere frogatu daitezke.
BARNE pull-up erresistentziak erabiliko dira.
Irakurketak egiteko ez da aldagairik erabiliko.
*/
// Sarreren eta irteeraren konfigurazioa egin:
const int SakatuBotoia1 = 2; // 2. pinaren izena
const int SakatuBotoia2 = 4; // 4. pinaren izena
const int ledPin = 13; // Arduinoak integratuta duen LEDaren izena
void setup() {
pinMode(ledPin, OUTPUT); // pin digitala irteera gisa deklaratuko da
pinMode(SakatuBotoia1, INPUT); // pin digitala sarrera gisa deklaratuko da
pinMode(SakatuBotoia2, INPUT); // pin digitala sarrera gisa deklaratuko da
3.
52
3. BLOKEA:
53
3. BLOKEA: SARRERA ETA IRTEERA ANALOGIKOAK
Helburua
54
TEORIA APUR BAT
Orain arte, logika digitala landu da, eta LOW eta HIGH balioak erabili dira.
Sarrera analogikoen bidez, 0 V-en eta 5 V-en arteko edozein balio lortu
daiteke. Izan ere, 0 V-en eta 5 V-en artean infinitu balio daude; baina,
zenbat balio daude 0-5 V tartean arduino txartel batean? Datu horrek
bihurgailuaren emango du doitasuna.
4 2n = 24 = 16 321.5 mV
8 2n = 28 = 256 16.24 mV
55
Bit Tarteen zenbatekoa Tenperatura jausiak
tarteko
4 2n = 24 = 16 100 ºC/16 = 6.25 ºC
56
3P1: SARRERA ANALOGIKO BAT IRAKURRI
3. Helburuak
4. Prozedura
A0 sarrera analogikoari “potentziometroa” izena emango zaio.
Setup errutinan, pina konfiguratuko da eta serie-komunikazioa egongo dela
adieraziko da. A0 pina ez da deklaratu behar sarrera analogiko gisa, horixe
bakarrik izan daitekeelako: sarrera eta analogikoa.
Loop errutinan, programa nagusia idatziko da: sarrera zer egoeratan dagoen
irakurri eta gordeko da. Irakurritako balioa serie-monitorean bistaratuko da:
ºC-tan eta voltetan. Irakurketen artean denbora tarte bat sartuko da
inprimatutakoa astiroago bistaratzeko.
5. Materiala
57
6. Eskema elektrikoa
7. Oharrak
58
8. Kodea
/*
SARRERA ANALOGIKO BAT IRAKURRI
Potentziometro bat erabilita, 0 eta 5 V tarteko balio analogikoak ne
urtuko dira.
Irakurritako balioak serie-monitorean bistaratuko dira.
Egindako irakurketak 0 V = 0 eta 5 V = 1023 izango dira eta tarteko
balio guztiak.
Irakurritako balioak voltetan ere emango dira.
*/
void setup() {
Serial.begin(9600); // serie-komunikazioa izan
}
void loop() {
PotBalioa = analogRead(potentziometroa); // Potentziometroan
dagoen tentsioa irakurri
// serie-monitorean egindako irakurketa analogikoak bistaratuko
dira:
Serial.print("POTENTZIOMETROAREN IRAKURKETA: ");
Serial.print(PotBalioa, 0); // Irakurketa inprimatu
Serial.print("\t");
Serial.print("VOLTIO: ");
Serial.print(PotBalioa*5/1023, 4); // Bihurketa, emaitza voltetan
izateko. Emaitza 4 hamartarrekin emango da.
Serial.println("V");
delay (1000); // Irakurketak segundo bateko
tartearekin egingo dira.
}
59
3P2: SARRERA ANALOGIKO BAT IRAKURRI. BLINK
1. Helburuak
2. Prozedura
3. Materiala
4. Eskema elektrikoa
60
5. Kodea
/*
LED keinukari bat sortuko da.
LEDak zein maistasunez egiten duen keinu
potentziometro batetik irakurritako balio analogikoa da.
*/
void setup() {
// LED pina irteera izango da:
pinMode(LED, OUTPUT);
}
void loop() {
// Potentziometroan dagoen tentsioa irakurri eta gorde:
PotBalioa = analogRead(potentziometroa);
// LEDa piztu eta itzali:
digitalWrite(LED, HIGH);
delay(PotBalioa);
digitalWrite(LED, LOW);
delay(PotBalioa);
}
61
3P3: IRTEERA ANALOGIKO BAT IDATZI.
1. Helburuak
2. Prozedura
3. Materiala
62
4. Eskema elektrikoa
5. Oharrak
63
6. Kodea
/*
SARRERA ANALOGIKO BAT IRAKURRI eta haren balioa IRTEERA ANALOG
IKO batean idatzi
Potentziometro bat erabilita, 0 V -5 V tarteko balio analogikoak neurtuko dira
Irakurritako balioak Irteera analogiko batean idatziko dira.
Egindako irakurketak 0 V = 0 eta 5 V = 1.023 izango dira, eta tarteko balio
guztiak.
Egindako idazketak 0 V = 0 eta 5 V = 254 izango dira, eta tarteko guztiak.
*/
void setup() {
// LED pina irteera izango da:
pinMode(AO3, OUTPUT);
Serial.begin(9600); // serie-komunikazioa izan
}
void loop() {
// Potentziometroan dagoen tentsioa irakurri eta gorde:
PotBalioa = analogRead(potentziometroa);
PotBalioa = map(PotBalioa, 0, 1023, 0, 254);
PotBalioaVoltiotan = PotBalioa*5/254;
Serial.println (PotBalioaVoltiotan, 4); // Bihurketaren emaitza voltetan izateko.
Emaitza 4 hamartarrekin emango da.
delay (500);
analogWrite(AO3, PotBalioa);
}
64
3P4: BALIO ANALOGIKOAK KONPARATU.
1. Helburuak
2. Prozedura
3. Materiala
65
4. Eskema elektrikoa
5. Oharrak
Konparazio-operadoreak
Aldagaien edo konstanteen arteko konparazioak if estrukturekin egiten
dira. Konparazio-operadoreak hauek dira:
x == y // x y-ren berdina
x != y // x y-ren desberdina
x<y // x y baino txikiagoa
x>y // x y baino handiagoa
x <= y // x y baino txikiagoa edo berdina
x >= y // x y baino handiagoa edo berdina
66
6. Kodea
/*
Gela bateko tenperatura kontrolatu behar da. Tenperatura-sentsore anal
ogiko bi erabiliko dira: T1 eta T2.
Irakurriko dituzten tenperaturak 10 ºC-ren eta 40 ºC-
ren artean egongo dira.
Sentsore biek tenperatura antzerako bat neurtu behar lukete. Funtziona
menduak baldintza hauek beteko ditu:
T1-T2 ≥ 2 ºC edo T1-T2 ≤ 2 ºC LED BERDEA PIZTU
T1-T2 ≥ 3 ºC edo T1-T2 ≤ 3 ºC HAIZAGAILUA % 25eko
abiaduran PIZTU
T1-T2 ≥ 5 ºC edo T1-T2 ≤ 5 ºC HAIZAGAILUA % 50eko
abiaduran PIZTU
T1-T2 ≥ 5 ºC edo T1-T2 ≤ 10 ºC HAIZAGAILUA % 100eko
abiaduran PIZTU
T1-T2 ≥ 10 ºC edo T1-T2 ≤ 10 ºC ALARMA PIZTU
*/
void setup() {
// irteeren deklarazioa:
pinMode(ledBerdea, OUTPUT);
pinMode(Alarma, OUTPUT);
pinMode(haizEmailea, OUTPUT);
Serial.begin(9600); // serie-komunikazioa izan
}
void loop() {
// Potentziometroan dagoen tentsioa irakurri eta gorde:
T1Balioa = analogRead(T1);
T2Balioa = analogRead(T2);
T1Balioa= map(T1Balioa, 0, 1023, 10, 40);
T2Balioa= map(T2Balioa, 0, 1023, 10, 40);
67
haizeBalioa = 254/2;
}
if (T1Balioa - T2Balioa >= 10) {
digitalWrite(ledBerdea, LOW);
digitalWrite(Alarma, HIGH);
haizeBalioa = 254;
}
analogWrite(haizEmailea, haizeBalioa);
haizeBalioa= map(haizeBalioa, 0, 254, 0, 100);
Serial.print ("T1=");
Serial.print (T1Balioa);
Serial.print (", T2=");
Serial.print (T2Balioa);
Serial.print (", T1- T2 =");
Serial.print (T1Balioa-T2Balioa);
Serial.print (", HAIZE EMAILEA = %");
Serial.println (haizeBalioa);
68
4. BLOKEA:
DISPLAYa
69
4. BLOKEA: DISPLAYa
Helburua
Arduinoari DISPLAY bat erantsiko zaio, eta praktika batzuk egingo dira
maneiatzen ikasteko.
70
DISPLAY BAT ARDUINOAN KONEKTATU
PARALELO-KONEXIOA:
DISPLAYA ARDUINOA
RS 12
Enable 11
D4 5
D5 4
D6 3
D7 2
SERIE-KONEXIOA
Gaur egun, plaka txiki bat jartzen zaio LCD pantailari, I2C bihurgailua deritzona.
Horrek PARALELO konexioa SERIE bihurtzen du:
71
Kontrolatzeko instalatu behar den liburutegia hau da: <LiquidCrystal_I2C.h>
DISPLAY ARDUINO
GND GND
Vcc +5V
SDA A4
SCL A5
2. pausoa
Liburutegi hau Arduino IDE programan instalatu behar da. Horretarako,
liburutegia inportatzeko agindu behar diogu programari: Sketch/ Importar
Librería / Add Library… sakatu behar da. Jaitsitako liburutegia bilatu eta
instalatzeko bai sakatu.
72
Praktika hauetan erabiliko den eskema elektrikoa
DISPLAYA ARDUINOA
GND GND
Vcc +5V
SDA A4
SCL A5
73
4P1: DISPLAYan TESTUA BISTARATU
1. Helburuak
2. Prozedura
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
3. Materiala
74
4. Kodea
/*Praktika honetan, mezu bat bistaratuko da 16 x 2-ko DISPLAYan
Display mota hau erabiliko da: 16 karaktereko eta 2 lerroko I2C Displaya
Atzean LCM1602A IIC V1" interfacea du. Lau kable besterik ez da konektatu behar.
*/
/*-----( Behar diren liburutegiak inportatu )-----*/
#include <Wire.h> // Liburutegi hau instalatuta dator Arduino IDE programan
// DISPLAYrako liburutegia instalatu beharra dago. LCD I2C liburutegia hemendik jaitsiko da:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Beste LCD liburutegirik badago, ezabatu egin behar dira edo beste toki batera mugitu.
// Liburutegian, begiratu "Docs" karpeta erabili daitekeen komandoak ikusteko.
#include <LiquidCrystal_I2C.h>
/*-----( Konstanteak deklaratu )-----*/
// LCDaren helbidea; 0 x 27 jarri 20 karaktere eta 4 lineako displayrako
// I2C txipak zein pin erabiltzen dituen adierazi:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD I2C helbidea idatzi
/*-----( Aldagaiak deklaratu )-----*/
75
4P2: TESTUA BISTARATU. PANTAILA KEINUKARI
1. Helburuak
Pare bat aldaketa izango du: argia piztu eta itzali egingo da eta pantaila
garbitzen ikasiko da.
2. Prozedura
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
3. Materiala
76
4. Oharrak
5. Kodea
/* Praktika hau aurrekoa bezalakoa da: Mezu bat bistaratuko da 16 x
2-ko DISPLAYan.
Pare bat aldaketa izango du: argia piztu eta itzali egingo da eta p
antaila garbitzen ikasiko da.
Display mota hau erabiliko da: 16 karaktereko eta 2 lerroko I2C Dis
playa
Atzean LCM1602A IIC V1" interfazea du. Lau kable besterik ez da kon
ektatu behar.
*/
/*-----( Behar diren liburutegiak inportatu )-----*/
#include <Wire.h> // Hau instalatuta dator Arduino IDE programan
// Bestea ez dator. Instalatu beharra dago. LCD I2C Liburutegia hemen
dik jaitsiko da:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Beste LCD liburutegirik badago, ezabatu egin behar
dira edo beste toki batera mugitu.
// Liburutegian, begiratu "Docs" karpeta erabili daitekeen komandoak i
kusteko.
#include <LiquidCrystal_I2C.h>
/*-----( Konstanteak deklaratu )-----*/
// LCDaren helbidea; 0 x 27 jarri 20 karaktere eta 4 lineako displayra
ko
// I2C txipak zein pin erabiltzen dituen jarri:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD
I2C helbidea idatzi
/*-----( Aldagaiak deklaratu )-----*/
77
Honekin argia ere piztuko da
// ------- argia keinukari 3 alditan -------------
for(int i = 0; i< 3; i++)
{
lcd.backlight();
delay(500);
lcd.noBacklight();
delay(500);
}
lcd.backlight(); // bukaeran argia piztuta utzi
//-------- Karaktereak idatzi DIPLAYan erakusteko ------------------
// OHARRA: Kurtsorearen kokalekua (KARAKTEREA, LERROA) 0n hasiko da
lcd.setCursor(0,0); //Kurtsorea (0, 0) kokalekuan kokatu: 1go lerroa
delay(1000);
lcd.print("Kaixo, Mundua!"); // Mezu bat bidali
delay(1000);
lcd.setCursor(0,1); //Kurtsorea (0, 1) kokalekuan kokatu: 2. lerroa
lcd.print("Ze moduz zabiz?"); // Mezu bat bidali
delay(3000);
}
lcd.clear();
lcd.setCursor(0,1);
lcd.print("KAIXO,");
lcd.setCursor(8,1);
delay(500);
lcd.print("MUNDUA!!");
delay(500);
78
4P3: SERIE-MONITORETIK DISPLAYRA
1. Helburuak
2. Materiala
3. Kodea
/* 3. praktika honetan SERIE-MONITOREAN idazten dena DISPLAYan bistara
tuko da.
Display mota hau erabiliko
da: 16 karaktereko eta 2 lerroko I2C Displaya
Atzean LCM1602A IIC V1" interfazea du. Lau kable besterik ez da kon
ektatu behar.
*/
/*-----( Behar diren liburutegiak inportatu )-----*/
#include <Wire.h> // Hau instalatuta dator Arduino IDE programan
// Bestea ez dator. Instalatu beharra dago. Hemendik, LCD I2C Liburute
gia jaitsiko da:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Beste LCD liburutegirik badago, ezabatu egin behar
dira edo beste toki batera mugitu.
// Liburutegian, begiratu "Docs" karpeta erabili daitekeen komandoak i
kusteko.
#include <LiquidCrystal_I2C.h>
/*-----( Konstanteak deklaratu )-----*/
// LCDaren helbidea 0 x 27 jarri 20 karaktere eta 4 lineako displayrak
o
// I2C txipak zein pin erabiltzen dituen jarri:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD
I2C helbidea idatzi
/*-----( Aldagaiak deklaratu )-----*/
79
Serial.begin(9600);
lcd.begin(16,2); // LCDa hasieratu 16 karaktere eta 2 lerrorako.
Horrekin, argia ere piztuko da
// ------- argia keinukari 3 alditan -------------
for(int i = 0; i< 3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // bukaeran argia piztuta utzi
//-------- Karaktereak idatzi DIPLAYan erakusteko ------------------
// OHARRA: Kurtsorearen kokalekua (KARAKTEREA, LERROA) 0n hasiko da
lcd.setCursor(0,0); //Kurtsorea (0, 0) kokalekuan kokatu: 1go lerroa
lcd.print("Kaixo, Mundua!"); // Mezu bat bidali
delay(1000);
lcd.setCursor(0,1); //Kurtsorea (0, 1) kokalekuan kokatu: 2. lerroa
lcd.print("Ze moduz zabiz?"); // Mezu bat bidali
delay(3000);
// Itxaron eta erabiltzailearentzat mezu berri bat bidali:
// Serie-Monitorea abiarazi. Karaktereak idatzi eta displayan bistarat
u
lcd.clear();
lcd.setCursor(0,0); //Lehenengo karakterea lehenengo lerrokoa
lcd.print("SerieMon Erabili"); // Mezu bat bidali
lcd.setCursor(0,1);
lcd.print("Idatzi eta intro"); // Mezu bat bidali
}
80
4P4: SARREREN ETA IRTEEREN EGOERAK DISPLAYAN
BISTARATU
1. Helburuak
S1·S2 = I1
S1+S2 = I2
S1·S2·S3 = I3
2. Prozedura
Kurtsorea non kokatuko den eta zer bistaratuko den gehitu behar da.
Sarreren eta irteeren egoera, 0 edo 1, irakurri behar da eta displayan inprimatu.
3. Materiala
81
4. Kodea
//Sarrerak esleitu:
const int S1=2; const int S2=3; const int S3=4;
//Irteerak esleitu:
const int I1=5; const int I2=6; const int I3=7;
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD I2C helbidea
idatzi
delay(400);
}
82
5. BLOKEA:
TEKLATUA
83
5. BLOKEA: TEKLATUA
Helburua
Arduinoari TEKLATU bat erantsiko zaio eta praktika batzuk egingo dira
erabiltzen ikasteko.
- Teklatua egiaztatzen
- Arduinoari TEKLATU bat konektatzeko zer konexio mota dauden
- <keypad.h> liburutegia gehitzen
- TEKLATUTIK bidalitako datuak interpretatzen
84
TEKLATU BATEN KONEXIOAK EGIAZTATU
85
TEKLATU BAT ARDUINOAN KONEKTATU ETA KONFIGURATU
Keypad teklatua = Keypad( makeKeymap(teklak), lineaPins, zutabe Pins, linea, zutabe);
86
TEKLATU BAT ARDUINOAN PROGRAMATU
Teklatua erabiltzeko “keypad.h” liburutegia jaitsi eta instalatu behar da.
DISPLAYarekin egin zen era berean. Liburutegia hemendik jaitsi daiteke:
http://playground.arduino.cc/code/Keypad
87
PRAKTIKAK
1. Helburuak
2. Prozedura
3. Materiala
88
4. Kodea
/* Teklatuan sakatzen diren teklak serie-monitorean bistaratuko dira.
Erabiliko den teklatua 4x4 matrizekoa izango da baina 4x3 erabiliko da.
Letrak baztertuko dira.
*/
#include <Keypad.h>
char tekla;
int zenbakia;
89
5P2: TEKLATUA. TEKLATUTIK DISPLAY BATEAN IDATZI
1. Helburuak
2. Prozedura
3. Materiala
90
4. Kodea
/* Teklatuan sakatzen diren teklak DISPLAYan bistaratuko dira.
Erabiliko den teklatua 4x4 matrizekoa izango da.
*/
#include <Keypad.h>
#include <Wire.h> // for I2C LCD
#include <LiquidCrystal_I2C.h>
int count=0;
char tekla;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Teklatua");
lcd.setCursor(0,1); //Kurtsorea (0, 1) kokalekuan kokatu: 2. lerroa
lcd.print("testeatzen!");
delay(2000);
lcd.clear();
lcd.print("Teklak sakatu");
lcd.setCursor(0,1); //Kurtsorea (0, 1) kokalekuan kokatu: 2. lerroa
lcd.print("itzazu!!");
delay(2000);
lcd.clear();
}
void loop()
{
char tekla = teklatua.getKey();
if (tekla != NO_KEY)
{
lcd.print(tekla);
count++;
if (count==17)
{
lcd.clear();
count=0;
}
}
}
91
92
5P3: TEKLATUA. PIN ESKATU PROGRAMA EXEKUTATZEKO I
1. Helburuak
Programa erraz bat exekutatzea da helburua: LED bat piztea edo amatatzea.
Programa exekutatzeko, PIN bat eskatuko da: 1234.
'*' edo '#' teklekin programatik aterako da, eta PINa berriro sartu beharko da.
2. Prozedura
3. Materiala
93
4. Kodea
#include <Keypad.h>
#include <Wire.h> // for I2C LCD
#include <LiquidCrystal_I2C.h>
int posizioa = 0;
int gorri = 10;
int berde = 11;
// boolean locked;
void setup()
{
Serial.begin(9600);
pinMode (gorri, OUTPUT);
pinMode (berde, OUTPUT);
programaNagusia(false);
lcd.begin(16, 2);
lcd.print(" ONGI ETORRI!!"); delay(2000); lcd.clear();
lcd.print(" Mesedez,"); lcd.setCursor(0,1);
lcd.print(" Sartu PINa:"); delay(2000); lcd.clear();
}
void loop()
{
char tekla = teklatua.getKey();
if (tekla == '*' || tekla == '#')
{ posizioa = 0; programaNagusia(false); }
if (posizioa == 4)
{ programaNagusia(true); }
delay(100);
94
}
5. OHARRAK
95
5P4: TEKLATUA. PINA ESKATU PROGRAMA EXEKUTATZEKO
II
1. Helburuak
PIN berri bat sartu behar bada, aurretik, '*' tekla sakatu behar da zenbatzailea
berrabiarazteko. PIN berria sartu denean, PINa konprobatzeko, '#' tekla sakatu behar
da “ENTER” izango balitz bezala.
2. Prozedura
3. Materiala
96
- 16x2 display bat
97
4. Kodea
// PIN bat eskatuko da programa bat exekutatu baino lehen.
// PIN hau zuzena denean, programa nagusi bat exekutatuko da (hasteko led bat piztuko da).
// PIN hau zuzena ez denean, programa nagusia ez da exekutatuko (hasteko led bat amatatuko
da).
// Programaren egoera DISPLAY batean bistaratuko da. Ongi etorria/PIN zuzena/ez zuzena
#include <Keypad.h>
#include <Wire.h> // for I2C LCD
#include <LiquidCrystal_I2C.h>
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
lcd.begin(16, 2);
lcd.print("ONGI ETORRI!!"); delay(2000); lcd.clear();
lcd.print("Mesedez,"); lcd.setCursor(0,1);
lcd.print("Sartu PINa:"); delay(2000);
}
void loop()
{
irakurriTeklatua();
programaNagusia(martxan);
}
void irakurriTeklatua()
{
char tekla = teklatua.getKey();
if (tekla != NO_KEY)
{ switch(tekla)
{
case '*': z=0; break; // Z hasieratu behar da PIN berri bat sartzeko
case '#': delay(100); // # sakatu beharra dago PINa egiaztatzeko.
konprobatuPIN(); break;
default: egiaztatzaile[z]=tekla; z++;
98
}
}
}
void konprobatuPIN()
{
int zuzen=0; int i;
for ( i = 0; i < 4 ; i++ )
{
if (egiaztatzaile[i]==PIN[i]) {zuzen++;}
}
if (zuzen==4) {zuzenPIN();}
else {gaizkiPIN();}
for (int zz=0; zz<4; zz++) // hasieran sartutako kodea ezabatuko du
{egiaztatzaile[zz]=0;}
}
if (martxan)
{
digitalWrite (led, HIGH);
}
else
{
digitalWrite (led, LOW);
}
}
99
6. BLOKEA:
100
6. BLOKEA: REAL TIME CLOCK
Helburua
Praktika hauen helburua orduaren eta dataren menpe dagoen irteera digital bat
kontrolatzea da.
101
6P1: RTC. MARTXAN JARRI ETA KONFIGURATU
1. Helburuak
2. Prozedura
http://playground.arduino.cc/Main/DS1302
Kodearen zati hau bilatu eta dagokion data eta ordua idatzi:
// Bete itzazu aldagai hauek behar den ordu eta datarekin:
int seconds, minutes, hours, dayofweek, dayofmonth, month, year;
Hona hemen serie-monitorean zein formatutan ikusiko diren ordua eta data.
Bost segundoko maiztasunarekin agertuko dira ordu eta data berriak:
102
3. Materiala
4. Eskema elektrikoa
5. Oharrak
Merkatuan hainbat modelo dago. Nahiz eta konexioak antzekoak izan, egokitu
egin behar dira eta arreta handiarekin irakurri behar da produktuaren
deskripzioa:
103
104
6P2: RTC. ORDUAREN FORMATU BERRIA DISPLAY BATEAN
1. Helburuak
2. Prozedura
Jatorrizko kodean, bilatu ezazu zati hau eta egin aldaketa hauek:
delay( 5000);
sprintf( buffer, "%02d:%02d:%02d", \
bcd2bin( rtc.h24.Hour10, rtc.h24.Hour), \
bcd2bin( rtc.Minutes10, rtc.Minutes), \
bcd2bin( rtc.Seconds10, rtc.Seconds));
Serial.print(buffer);
Kodigoa aldatuta lcd.setCursor(0,0);
lcd.print(buffer);
sprintf(buffer, "%d-%d-%d E=%d", \
2000 + bcd2bin( rtc.Year10, rtc.Year), \
bcd2bin( rtc.Month10, rtc.Month), \
bcd2bin( rtc.Date10, rtc.Date), \
rtc.Day);
Serial.println( buffer);
lcd.setCursor(0,1);
lcd.print(buffer);
delay( 1000);
105
106
3. Materiala
4. Eskema elektrikoa
DISPLAYa ARDUINOa
GND GND
Vcc +5V
SDA A4
SCL A5
107
5. Kodea
Kode hau oso luzea denez, egin beharreko aldaketak aipatuko ditugu:
void loop()
{
sprintf( buffer, "%02d:%02d:%02d", \
bcd2bin( rtc.h24.Hour10, rtc.h24.Hour), \
bcd2bin( rtc.Minutes10, rtc.Minutes), \
bcd2bin( rtc.Seconds10, rtc.Seconds));
Serial.print(buffer);
lcd.setCursor(0,0);
lcd.print(buffer);
sprintf(buffer, "%d-%d-%d E=%d", \
2000 + bcd2bin( rtc.Year10, rtc.Year), \
bcd2bin( rtc.Month10, rtc.Month), \
bcd2bin( rtc.Date10, rtc.Date), \
rtc.Day);
Serial.println( buffer);
lcd.setCursor(0,1);
lcd.print(buffer);
delay( 1000);
108
6P3: RTC. ORDUAREN ETA DATAREN ARABERA AKTIBATU
IRTEERA BAT
1. Helburuak
Praktika honen helburua irteera digital bat piztea da. Kasu honetan, orduaren
eta dataren menpe dagoen irteera bat kontrolatuko da. Aurreko praktika
berrerabili genezake. Baita aurreko eskema elektrikoa ere.
2. Prozedura
Jatorrizko kodean, bilatu ezazu zati hau eta egin aldaketa hauek:
sprintf( buffer, "%02d:%02d:%02d", \
bcd2bin( rtc.h24.Hour10, rtc.h24.Hour), \
bcd2bin( rtc.Minutes10, rtc.Minutes), \
bcd2bin( rtc.Seconds10, rtc.Seconds));
Serial.print(buffer);
lcd.setCursor(0,0);
lcd.print(buffer);
sprintf(buffer, "%d-%d-%d E=%d", \
2000 + bcd2bin( rtc.Year10, rtc.Year), \
Jatorrizko kodea bcd2bin( rtc.Month10, rtc.Month), \
bcd2bin( rtc.Date10, rtc.Date), \
rtc.Day);
Serial.println( buffer);
lcd.setCursor(0,1);
lcd.print(buffer);
delay( 1000);
urtea = 2000 + bcd2bin( rtc.Year10, rtc.Year);
hila= bcd2bin( rtc.Month10, rtc.Month);
Kodea aldatuta eguna = bcd2bin( rtc.Date10, rtc.Date);
astekoEguna = rtc.Day;
sprintf( buffer, "%02d:%02d:%02d", \
ordua, \
minutuak, \
segundoak);
Serial.print(buffer);
lcd.setCursor(0,0);
lcd.print(buffer);
sprintf(buffer, "%d-%d-%d E=%d", \
urtea, \
hila, \
eguna, \
astekoEguna);
Serial.println( buffer);
lcd.setCursor(0,1);
109
lcd.print(buffer);
3. Materiala
4. Kodea
Kode honek bi azpikode ditu, eta bakoitzak eginkizun bat du esleituta. Biak
frogatuko dira. Azpikodeetako bat gaituta dagoenean bestea ez da egongo, eta
aldrebes (// kenduta edo jarrita):
// IRTEERAK DEKLARATU. BAITA PROGRAMAN ERABILIKO DIREN PARAMETROAK ERE
int LED13 = 13;
int ordua; int minutuak; int segundoak;
int urtea; int hila; int eguna; int astekoEguna;
…
void setup()
{
// Orduaren eta dataren arabera piztuko diren irteerak deklaratu:
pinMode(LED13, OUTPUT); // pin digitala irteera gisa deklaratuko da
digitalWrite (LED13, LOW);
}
…
void loop()
{
// HEMEN ALDAGAIAK ERABILIKO DIRA ORDUAREN ETA DATAREN FORMATUAREKIN LAN
EGITEKO
ordua = bcd2bin( rtc.h24.Hour10, rtc.h24.Hour);
minutuak = bcd2bin( rtc.Minutes10, rtc.Minutes);
segundoak = bcd2bin( rtc.Seconds10, rtc.Seconds);
urtea = 2000 + bcd2bin( rtc.Year10, rtc.Year);
hila= bcd2bin( rtc.Month10, rtc.Month);
eguna = bcd2bin( rtc.Date10, rtc.Date);
astekoEguna = rtc.Day;
sprintf( buffer, "%02d:%02d:%02d", \
ordua, \
minutuak, \
segundoak);
Serial.print(buffer);
lcd.setCursor(0,0);
110
lcd.print(buffer);
sprintf(buffer, "%d-%d-%d E=%d", \
urtea, \
hila, \
eguna, \
astekoEguna);
Serial.println( buffer);
lcd.setCursor(0,1);
lcd.print(buffer);
//LED bat aktibatzea baldintzen arabera, kasu honetan, DATAREN eta ORDUAREN
arabera:
//LEDa astelehen eta ostegunetan piztuko da, 22:00etatik 00:00ak arte:
if ((ordua >= 22) && ((astekoEguna == 1)|| (astekoEguna == 4)))
{digitalWrite (LED13, HIGH);}
else {digitalWrite (LED13, LOW);}
delay(1000);
}
Zalantzarik badago, hemen dago kode osoa. Letra oso txikia denez, ez dago
irakurtzerik, baina kopiatu egin daiteke eta IDE programan itsatsi:
// Orduaren edota dataren arabera, irteera digital bat aktibatuko da.
// Lehenengo kasua: LED bat aktibatzea 2 minutu, 22:15etik 22:17ra void loop()
// Bigarren kasua: LED bat aktibatzea astelehen eta ostegunetan, 22:00etatik 00:00ak arte {
ds1302_struct rtc;
// DS1302 RTC char buffer[80]; // the code uses 70 characters.
// ----------
// // HEMEN ALDAGAIAK ERABILIKO DIRA ORDUAREN ETA DATAREN FORMATUAREKIN LAN EGITEKO
// Open Source / Public Domain ordua = bcd2bin( rtc.h24.Hour10, rtc.h24.Hour);
// minutuak = bcd2bin( rtc.Minutes10, rtc.Minutes);
// Version 1 segundoak = bcd2bin( rtc.Seconds10, rtc.Seconds);
// By arduino.cc user "Krodal".
// June 2012 urtea = 2000 + bcd2bin( rtc.Year10, rtc.Year);
// Using Arduino 1.0.1 hila= bcd2bin( rtc.Month10, rtc.Month);
// Version 2 eguna = bcd2bin( rtc.Date10, rtc.Date);
// By arduino.cc user "Krodal" astekoEguna = rtc.Day;
// March 2013
// Using Arduino 1.0.3, 1.5.2 // NON BISTARATUKO DEN ERE ESANGO DA: SERIE-MONITOREAN ETA DISPLAY BATEAN
// The code is no longer compatible with older versions. DS1302_clock_burst_read( (uint8_t *) &rtc);
// Added bcd2bin, bin2bcd_h, bin2bcd_l
// A few minor changes. sprintf( buffer, "%02d:%02d:%02d", \
// ordua, \
// minutuak, \
// Documentation: datasheet segundoak);
// Serial.print(buffer);
// The DS1302 uses a 3-wire interface: lcd.setCursor(0,0);
// - bidirectional data. lcd.print(buffer);
// - clock
// - chip select sprintf(buffer, "%d-%d-%d E=%d", \
// It is not I2C, not OneWire, and not SPI. urtea, \
// So the standard libraries can not be used. hila, \
// Even the shiftOut() function is not used, since it eguna, \
// could be too fast (it might be slow enough, astekoEguna);
// but that's not certain). Serial.println( buffer);
// lcd.setCursor(0,1);
// I wrote my own interface code according to the datasheet. lcd.print(buffer);
// Any three pins of the Arduino can be used.
// See the first defines below this comment, //LED bat aktibatzea baldintzen arabera, kasu honetan, ORDUAREN arabera:
// to set your own pins. //LEDa 2 minutuz egongo da piztuta, 15. eta 16. minutuak:
// //if (((ordua >= 22) && (minutuak >= 15)) && ((ordua <= 22) && (minutuak <= 16))) {digitalWrite (LED13, HIGH);}
// The "Chip Enable" pin was called "/Reset" before. //else {digitalWrite (LED13, LOW);}
//
// The chip has internal pull-down registers. //LED bat aktibatzea baldintzen arabera, kasu honetan, DATAREN eta ORDUAREN arabera:
// This keeps the chip disabled, even if the pins of //LEDa astelehen eta ostegunetan piztuko da, 22:00etatik 00:00ak arte:
// the Arduino are floating. if ((ordua >= 22) && ((astekoEguna == 1)||(astekoEguna == 4))) {digitalWrite (LED13, HIGH);}
// else {digitalWrite (LED13, LOW);}
//
// Range
// ----- delay(1000);
// seconds : 00-59 }
// minutes : 00-59
// hour : 1-12 or 0-23 // --------------------------------------------------------
// date : 1-31 // DS1302_clock_burst_read
// month : 1-12 //
// day : 1-7 // This function reads 8 bytes clock data in burst mode
// year : 00-99 // from the DS1302.
// //
// // This function may be called as the first function,
// Burst mode // also the pinMode is set.
// ---------- //
// In burst mode, all the clock data is read at once. void DS1302_clock_burst_read( uint8_t *p)
// This is to prevent a rollover of a digit during reading. {
// The read data is from an internal buffer. int i;
//
// The burst registers are commands, rather than addresses. _DS1302_start();
// Clock Data Read in Burst Mode
// Start by writing 0xBF (as the address), // Instead of the address,
// after that: read clock data // the CLOCK_BURST_READ command is issued
// Clock Data Write in Burst Mode // the I/O-line is released for the data
// Start by writing 0xBE (as the address), _DS1302_togglewrite( DS1302_CLOCK_BURST_READ, true);
// after that: write clock data
// Ram Data Read in Burst Mode for( i=0; i<8; i++)
// Start by writing 0xFF (as the address), {
// after that: read ram data *p++ = _DS1302_toggleread();
// Ram Data Write in Burst Mode }
// Start by writing 0xFE (as the address), _DS1302_stop();
// after that: write ram data }
//
// // --------------------------------------------------------
// Ram // DS1302_clock_burst_write
// --- //
// The DS1302 has 31 of ram, which can be used to store data. // This function writes 8 bytes clock data in burst mode
// The contents will be lost if the Arduino is off, // to the DS1302.
// and the backup battery gets empty.
// It is better to store data in the EEPROM of the Arduino. //
// The burst read or burst write for ram is not implemented // This function may be called as the first function,
// in this code. // also the pinMode is set.
// //
// void DS1302_clock_burst_write( uint8_t *p)
// Trickle charge {
// -------------- int i;
// The DS1302 has a build-in trickle charger.
// That can be used for example with a lithium battery _DS1302_start();
// or a supercap.
// Using the trickle charger has not been implemented // Instead of the address,
// in this code. // the CLOCK_BURST_WRITE command is issued.
// // the I/O-line is not released
_DS1302_togglewrite( DS1302_CLOCK_BURST_WRITE, false);
#include <Wire.h> // Hau Arduino IDE programan instalatuta dator
#include <LiquidCrystal_I2C.h> for( i=0; i<8; i++)
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol {
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD I2C helbidea idatzi // the I/O-line is not released
_DS1302_togglewrite( *p++, false);
// IRTEERAK DEKLARATU. BAITA PROGRAMAN ERABILIKO DIREN PARAMETROAK ERE }
int LED13 = 13; _DS1302_stop();
int ordua; int minutuak; int segunduak; }
int urtea; int hila; int eguna; int astekoEguna;
// Set your own pins with these defines ! // --------------------------------------------------------
#define DS1302_SCLK_PIN 6 // Arduino pin for the Serial Clock // DS1302_read
#define DS1302_IO_PIN 7 // Arduino pin for the Data I/O //
#define DS1302_CE_PIN 8 // Arduino pin for the Chip Enable // This function reads a byte from the DS1302
// (clock or ram).
//
// Macros to convert the bcd values of the registers to normal // The address could be like "0x80" or "0x81",
// integer variables. // the lowest bit is set anyway.
// The code uses seperate variables for the high byte and the low byte //
// of the bcd, so these macros handle both bytes seperately. // This function may be called as the first function,
#define bcd2bin(h,l) (((h)*10) + (l)) // also the pinMode is set.
#define bin2bcd_h(x) ((x)/10) //
#define bin2bcd_l(x) ((x)%10) uint8_t DS1302_read(int address)
{
uint8_t data;
// Register names.
// Since the highest bit is always '1', // set lowest bit (read bit) in address
// the registers start at 0x80 bitSet( address, DS1302_READBIT);
// If the register is read, the lowest bit should be '1'.
#define DS1302_SECONDS 0x80 _DS1302_start();
#define DS1302_MINUTES 0x82 // the I/O-line is released for the data
#define DS1302_HOURS 0x84 _DS1302_togglewrite( address, true);
#define DS1302_DATE 0x86 data = _DS1302_toggleread();
#define DS1302_MONTH 0x88 _DS1302_stop();
#define DS1302_DAY 0x8A
#define DS1302_YEAR 0x8C return (data);
#define DS1302_ENABLE 0x8E }
#define DS1302_TRICKLE 0x90
#define DS1302_CLOCK_BURST 0xBE
#define DS1302_CLOCK_BURST_WRITE 0xBE // --------------------------------------------------------
#define DS1302_CLOCK_BURST_READ 0xBF // DS1302_write
#define DS1302_RAMSTART 0xC0 //
#define DS1302_RAMEND 0xFC // This function writes a byte to the DS1302 (clock or ram).
#define DS1302_RAM_BURST 0xFE //
#define DS1302_RAM_BURST_WRITE 0xFE // The address could be like "0x80" or "0x81",
#define DS1302_RAM_BURST_READ 0xFF // the lowest bit is cleared anyway.
//
// This function may be called as the first function,
// also the pinMode is set.
// Defines for the bits, to be able to change //
// between bit number and binary definition. void DS1302_write( int address, uint8_t data)
// By using the bit number, using the DS1302 {
// is like programming an AVR microcontroller. // clear lowest bit (read bit) in address
// But instead of using "(1<<X)", or "_BV(X)", bitClear( address, DS1302_READBIT);
// the Arduino "bit(X)" is used.
#define DS1302_D0 0 _DS1302_start();
#define DS1302_D1 1 // don't release the I/O-line
#define DS1302_D2 2 _DS1302_togglewrite( address, false);
#define DS1302_D3 3 // don't release the I/O-line
#define DS1302_D4 4 _DS1302_togglewrite( data, false);
#define DS1302_D5 5 _DS1302_stop();
#define DS1302_D6 6 }
#define DS1302_D7 7
// --------------------------------------------------------
// Bit for reading (bit in address) // _DS1302_start
#define DS1302_READBIT DS1302_D0 // READBIT=1: read instruction //
// A helper function to setup the start condition.
// Bit for clock (0) or ram (1) area, //
// called R/C-bit (bit in address) // An 'init' function is not used.
#define DS1302_RC DS1302_D6 // But now the pinMode is set every time.
// That's not a big deal, and it's valid.
// Seconds Register // At startup, the pins of the Arduino are high impedance.
#define DS1302_CH DS1302_D7 // 1 = Clock Halt, 0 = start // Since the DS1302 has pull-down resistors,
// the signals are low (inactive) until the DS1302 is used.
// Hour Register void _DS1302_start( void)
#define DS1302_AM_PM DS1302_D5 // 0 = AM, 1 = PM {
#define DS1302_12_24 DS1302_D7 // 0 = 24 hour, 1 = 12 hour digitalWrite( DS1302_CE_PIN, LOW); // default, not enabled
pinMode( DS1302_CE_PIN, OUTPUT);
// Enable Register
#define DS1302_WP DS1302_D7 // 1 = Write Protect, 0 = enabled digitalWrite( DS1302_SCLK_PIN, LOW); // default, clock low
pinMode( DS1302_SCLK_PIN, OUTPUT);
// Trickle Register
#define DS1302_ROUT0 DS1302_D0 pinMode( DS1302_IO_PIN, OUTPUT);
#define DS1302_ROUT1 DS1302_D1
#define DS1302_DS0 DS1302_D2 digitalWrite( DS1302_CE_PIN, HIGH); // start the session
#define DS1302_DS1 DS1302_D2 delayMicroseconds( 4); // tCC = 4us
#define DS1302_TCS0 DS1302_D4 }
#define DS1302_TCS1 DS1302_D5
#define DS1302_TCS2 DS1302_D6
#define DS1302_TCS3 DS1302_D7 // --------------------------------------------------------
// _DS1302_stop
//
// Structure for the first 8 registers. // A helper function to finish the communication.
// These 8 bytes can be read at once with //
// the 'clock burst' command. void _DS1302_stop(void)
// Note that this structure contains an anonymous union. {
// It might cause a problem on other compilers. // Set CE low
typedef struct ds1302_struct digitalWrite( DS1302_CE_PIN, LOW);
{
uint8_t Seconds:4; // low decimal digit 0-9 delayMicroseconds( 4); // tCWH = 4us
uint8_t Seconds10:3; // high decimal digit 0-5 }
uint8_t CH:1; // CH = Clock Halt
uint8_t Minutes:4;
uint8_t Minutes10:3; // --------------------------------------------------------
uint8_t reserved1:1; // _DS1302_toggleread
union //
{ // A helper function for reading a byte with bit toggle
struct //
{ // This function assumes that the SCLK is still high.
uint8_t Hour:4; //
uint8_t Hour10:2; uint8_t _DS1302_toggleread( void)
uint8_t reserved2:1; {
uint8_t hour_12_24:1; // 0 for 24 hour format uint8_t i, data;
} h24;
struct data = 0;
{ for( i = 0; i <= 7; i++)
uint8_t Hour:4; {
uint8_t Hour10:1; // Issue a clock pulse for the next databit.
uint8_t AM_PM:1; // 0 for AM, 1 for PM // If the 'togglewrite' function was used before
uint8_t reserved2:1; // this function, the SCLK is already high.
uint8_t hour_12_24:1; // 1 for 12 hour format digitalWrite( DS1302_SCLK_PIN, HIGH);
} h12; delayMicroseconds( 1);
};
uint8_t Date:4; // Day of month, 1 = first day // Clock down, data is ready after some time.
uint8_t Date10:2; digitalWrite( DS1302_SCLK_PIN, LOW);
uint8_t reserved3:2; delayMicroseconds( 1); // tCL=1000ns, tCDD=800ns
uint8_t Month:4; // Month, 1 = January
uint8_t Month10:1; // read bit, and set it in place in 'data' variable
uint8_t reserved4:3; bitWrite( data, i, digitalRead( DS1302_IO_PIN));
uint8_t Day:3; // Day of week, 1 = first day (any day) }
uint8_t reserved5:5; return( data);
uint8_t Year:4; // Year, 0 = year 2000 }
uint8_t Year10:4;
uint8_t reserved6:7;
uint8_t WP:1; // WP = Write Protect // --------------------------------------------------------
}; // _DS1302_togglewrite
//
// A helper function for writing a byte with bit toggle
void setup() //
{ // The 'release' parameter is for a read after this write.
ds1302_struct rtc; // It will release the I/O-line and will keep the SCLK high.
//
lcd.begin(16,2); // LCDa hasieratu void _DS1302_togglewrite( uint8_t data, uint8_t release)
Serial.begin(9600); {
Serial.println(F("DS1302 Real Time Clock")); int i;
Serial.println(F("Version 2, March 2013"));
for( i = 0; i <= 7; i++)
{
// Start by clearing the Write Protect bit // set a bit of the data on the I/O-line
// Otherwise the clock data cannot be written digitalWrite( DS1302_IO_PIN, bitRead(data, i));
// The whole register is written, delayMicroseconds( 1); // tDC = 200ns
// but the WP-bit is the only bit in that register.
DS1302_write (DS1302_ENABLE, 0); // clock up, data is read by DS1302
digitalWrite( DS1302_SCLK_PIN, HIGH);
// Disable Trickle Charger. delayMicroseconds( 1); // tCH = 1000ns, tCDH = 800ns
DS1302_write (DS1302_TRICKLE, 0x00);
if( release && i == 7)
// Remove the next define, {
// after the right date and time are set. // If this write is followed by a read,
#define SET_DATE_TIME_JUST_ONCE // the I/O-line should be released after
#ifdef SET_DATE_TIME_JUST_ONCE // the last bit, before the clock line is made low.
// This is according the datasheet.
// Aldagai hauek bete itzazu behar den ordua eta datarekin: // I have seen other programs that don't release
int seconds, minutes, hours, dayofweek, dayofmonth, month, year; // the I/O-line at this moment,
// and that could cause a shortcut spike
// on the I/O-line.
// HEMEN ORDUA ETA DATA ZEHAZTUKO DIRA. ADIBIDEZ, 2014-10-26, 10:00:00, IGANDEA: ASTEKO 7. EGUNA. pinMode( DS1302_IO_PIN, INPUT);
// ORDUA ETA DATA ZAHAZTU:
seconds = 55; // For Arduino 1.0.3, removing the pull-up is no longer needed.
minutes = 59; // Setting the pin as 'INPUT' will already remove the pull-up.
hours = 23; // digitalWrite (DS1302_IO, LOW); // remove any pull-up
dayofweek = 7; // asteko eguna 1...7 }
dayofmonth = 26; // Hileko eguna, 1...31 else
month = 10; // Hila 1...12 {
year = 2014; // Urtea digitalWrite( DS1302_SCLK_PIN, LOW);
delayMicroseconds( 1); // tCL=1000ns, tCDD=800ns
// Orduaren eta dataren arabera piztuko diren irteerak deklaratu: }
pinMode(LED13, OUTPUT); // pin digitala irteera gisa deklaratuko da }
digitalWrite (LED13, LOW); }
rtc.Seconds = bin2bcd_l( seconds);
rtc.Seconds10 = bin2bcd_h( seconds);
rtc.CH = 0; // 1 for Clock Halt, 0 to run;
rtc.Minutes = bin2bcd_l( minutes);
rtc.Minutes10 = bin2bcd_h( minutes);
// To use the 12 hour format,
// use it like these four lines:
// rtc.h12.Hour = bin2bcd_l( hours);
// rtc.h12.Hour10 = bin2bcd_h( hours);
// rtc.h12.AM_PM = 0; // AM = 0
// rtc.h12.hour_12_24 = 1; // 1 for 24 hour format
rtc.h24.Hour = bin2bcd_l( hours);
rtc.h24.Hour10 = bin2bcd_h( hours);
rtc.h24.hour_12_24 = 0; // 0 for 24 hour format
rtc.Date = bin2bcd_l( dayofmonth);
rtc.Date10 = bin2bcd_h( dayofmonth);
rtc.Month = bin2bcd_l( month);
111
rtc.Month10 = bin2bcd_h( month);
rtc.Day = dayofweek;
rtc.Year = bin2bcd_l( year - 2000);
rtc.Year10 = bin2bcd_h( year - 2000);
rtc.WP = 0;
112
7. BLOKEA:
INFRAGORRIAK
113
7. BLOKEA: INFRAGORRIAK
Helburua
114
PRAKTIKAK
1. Helburuak
Kodea arduinoan exekutatzen denean, ordua eta data egokituko dira eta serie-
monitorean bistaratuko dira.
2. Prozedura
http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
#include <IRremote.h> https://www.pjrc.com/teensy/td_libs_IRremote.html
115
116
3. Materiala
4. Eskema elektrikoa
5. Kodea
// Kode honek urrutiko aginteen botoien kodea irakurtzen du eta serie-
monitorean bistaratzen du.
#include <IRremote.h>
int igPIN = 2;
IRrecv irrecv(igPIN);
decode_results eskuratutakoKodea;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Hartzailea hasieratu
Serial.println("Kaixo!! Sakatu urrutiko agintearen botoia eta
helbidearen kodea esango dizut!");
}
void loop() {
if (irrecv.decode(&eskuratutakoKodea)) {
Serial.print("Sakatutako botoiaren kodea: ");
Serial.print(eskuratutakoKodea.value, HEX);
Serial.println(" da");
irrecv.resume(); // Hurrengo balioa hartu
}
}
117
6. Emaitzak
Botoien helbideen zerrenda bat egingo da, eta bakoitzaren kodea jarriko da.
Urrutiko agintearen botoiak ezkerretik eskuinera eta goitik behera doaz:
1 FFA25D
2 FF629D
3 FFE21D
4 FF22DD
5 FF02FD
6 FFC23D
7 FFE01F
8 FFA857
9 FF906F
10 FF6897
11 FF9867
12 FFB04F
13 FF30CF
14 FF18E7
15 FF7A85
16 FF10EF
17 FF38C7
18 FF5AA5
19 FF42BD
20 FF4AB5
21 FF52AD
118
7P2: IG. URRUTIKO AGINTE BAT TESTEATU
6. Helburuak
7. Prozedura
Aurreko praktikan eskuratu diren botoien kodeekin software berri bat egingo da.
Software horrekin, urrutiko agintea testeatuko dugu: urrutiko agintearen botoi
bat sakatzen denean, botoi horren esanahia bistaratuko da serie-monitorean,
eta urrutiko agintea ondo dagoen jakingo dugu.
119
120
8. Kodea
// Urrutiko aginte baten seinale infragorriak jasoko dira.
// Urrutiko aginte horren botoien esanahia serie-monitorean bistaratuko da.
// Horrekin, egindako kode eta botoien esleipena zuzena dela egiaztatuko da
#include "IRremote.h"
void setup()
{
Serial.begin(9600);
Serial.println("Infragorriak testeatzen!");
Serial.println("Sakatu urrutiko agintearen botoiak eta ziurtatu egokiak
direla!");
irrecv.enableIRIn(); // Hartzailea hasieratu
}
void loop()
{
if (irrecv.decode(&eskuratutakoKodea)) // Jaso al da seinale infragorririk?
{
translateIR(); // Sakatu den botoiaren esanahia serie-monitorean
inprimatu
irrecv.resume(); // Hurrengo balioa hartu
}
}
121
7P3: IG. IRTEERAK AKTIBATU URRUTIKO AGINTE BATEKIN
1. Helburuak
2. Prozedura
Piztu L2 2 14 FF18E7
Piztu L3 3 15 FF7A85
Amatatu 4 16 FF10EF
L1
Amatatu 5 17 FF38C7
L2
Amatatu 6 18 FF5AA5
L3
122
3. Kodea
// Urrutiko aginte baten seinale infragorriak jasoko dira
// Urrutiko aginte horren botoien esanahia serie-monitorean bistaratuko da
// Horrekin, egindako kode eta botoien esleipena zuzena dela egiaztatuko da
#include "IRremote.h"
void setup()
{
Serial.begin(9600);
Serial.println("Ifragorriak testeatzen!");
Serial.println("Sakatu urrutiko agintearen botoiak eta ziurtatu egokiak
direla!");
irrecv.enableIRIn(); // Hartzailea hasieratu
void loop()
{
if (irrecv.decode(&eskuratutakoKodea)) // Jaso al da InfraGorri seinalerik?
{
translateIR();// Sakatu den botoiaren esanahia serie-monitoretik inprimatu
irrecv.resume(); // Hurrengo balioa hartu
}
}
123
8. BLOKEA:
ETHERNET
124
8. BLOKEA: ETHERNET
Helburua
125
KONEXIOAK
Shield honek reset botoia bat dauka, eta plaka biak aldi berean erreseteatzeko
balio du: Bai arduino-plaka eta bai ETHERNET SHIELD plaka.
Plakari, libre dagoen IP helbide bat esleitu behar zaio. MAC helbidea gailu
batek izango duen helbidea da. Ez erabili MAC helbide bera plaka bat baino
gehiago konektatzen baduzu.
- LINK: sarean dagoela adierazten du, eta datuak bidaltzen edo jasotzen
direnean dir-dir jartzen da.
- FULLD: full duplex-ek sare-konexioa dagoela adierazten du.
- 100M: 100 Mb/s-ko sare konexioa dago.
- RX: datuak jasotzean, keinuka jartzen da, bestela itzalita dago.
- TX: datuak bidaltzean, keinuka jartzen da, bestela itzalita dago.
126
- COLL: sarean talkak sortzen direnean, keinuka jartzen da, bestela itzalita
dago.
Eruterraren IPa atzeko partean dator: 192.168.0.1. Horrez gain, erabiltzaile eta
pasahitz bat datoz erruterrean konfigurazioak egin ahal izateko.
Libre dagoen IP helbide bat esleitu beharko diogu arduinoari (guk geuk),
192.168.0.XXX barrutikoa; adibidez, 192.168.0.200. Helbide hori ea libre
dagoen jakin behar da erabili baino lehen:
127
128
IP HELBIDEA LORTZEA: ARDUINOA ORDENAGAILURA KONEKTATU
Programa findu arte, arduinoa ordenagailura lotuta egingo dugu lan. Hori lortu
ostean, erruterrean jarriko dugu erosoagoa delako eta ez dugulako bueltaka ibili
behar. Gainera, konektoreak apurtu egin daitezke sarritan jarri eta kendu
ibiltzen bagara.
129
2. Arduinoa ordenagailura konektatu eta CMD exekutatu kontsola agertu
dadin. Kontsolan “ipconfig” idatzi komandoa exekutatzeko. Leiho hau
agertuko da:
130
Goazen, orduan, 169.254.231.252 helbidea libre dagoen aztertzera.
Windowsen kontsolan ping 169.254.231.252 exekutatuko dugu. Erantzunik ez
badago, helbide hori libre dagoela esan nahi du. Hemen ez dago erantzunik,
beraz, 169.254.231.252 helbide hori arduinoari emango diogu:
Laburbilduta:
Erruterraren helbidea:
192.168.0.1
131
8P1 LAN. SARRERA ANALOGIKOEN BALIOAK ONLINE
ERAKUTSI
1. Helburuak
2. Prozedura
Arduinoak, sarean ikusgai egon dadin, programa behar du eta IP bat; beraz,
kargatu egingo diogu programa, eta IPa ere programa horren bidez esleituko
diogu.
3. Materiala
132
4. Eskema elektrikoa
Gogora ezazu 10, 11, 12 eta 13 pinak ezin daitezkeela erabili, Ethernet
Shieldak erabiliko dituela.
5. Oharrak
133
ZEIN IP HELBIDE ERABILI
Erabiliko den IPa eskura izan behar da. Kasu honetan, 192.168.0.200 da
erruterrera konektatzen bada arduinoa; eta 169.254.231.252, ordenagailura
konektatzen bada arduinoa.
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,200);
134
6. Kodea
/*
Web Zerbitzaria: Sarrera analogikoen balioak, A0-A5
web-orrialde baten bistaratu
*/
#include <SPI.h>
#include <Ethernet.h>
// Hemen IP helbidea jarriko da
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,0,200); //192.168.0.200
EthernetZerbitzaria zerbitzaria(80); // Ethernet zerbitzariaren
liburutegia
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // Itxaron serie-portuarekin konektatzeko. Leonardo plakarako
bakarrik
}
void loop()
{
// Etortzen diren bezeroak entzun
EthernetBezeroa bezeroa = zerbitzaria.available();
if (bezeroa) {
Serial.println("new bezeroa");
// http eskaria linea zuri batekin bukatuko da
boolean currentLineIsBlank = true;
while (bezeroa.connected()) {
if (bezeroa.available()) {
char c = bezeroa.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
// bidali mezu estandar bat
bezeroa.println("HTTP/1.1 200 OK");
bezeroa.println("Content-Type: text/html");
bezeroa.println("Connection: close");
bezeroa.println("Refresh: 5"); // freskatzea 5 segundoero
bezeroa.println();
bezeroa.println("<!DOCTYPE HTML>");
bezeroa.println("<html>");
135
bezeroa.print(sensorReading);
bezeroa.print(" da. ");
bezeroa.println("<br />");
}
bezeroa.println("</html>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1); // web-orrialdeari denbora emango zaio datua jaso dezan.
bezeroa.stop(); // Konexioa itxi
Serial.println("bezeroa disonnected");
}
}
136
8P2 LAN. LED BAT PIZTU WEB-ORRIALDE BATETIK
1. Helburuak
Irteera digital bat piztea da helburua. Oraingoan, LAN sare batetik eta HTML
hizkuntza erabilita, oinarrizko bi botoidun web-orrialde bat sortuko da.
2. Prozedura
Arduinoak, sarean ikusgai egon dadin, programa behar du eta IP bat; beraz,
kargatu egingo diogu programa, eta IPa ere programa horren bidez esleituko
diogu.
3. Materiala
4. Eskema elektrikoa
Gogora ezazu 10, 11, 12 eta 13 pinak ezin daitezkeela erabili,. Ethernet
Shieldak erabiliko dituela.
137
5. Kodea
/*
Irteera digital bat ordenagailu baten bitarrtez piztu eta amatatuko da
.
Web-orrialde txiki bat sortuko da bi botoirekin HTML formatuan
*/
#include <SPI.h>
#include <Ethernet.h>
// Hemen IP helbidea jarriko da
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,0,200); //IP 192.168.0.200
EthernetZerbitzaria zerbitzaria(80); // Ethernet zerbitzariaren
liburutegia
int PIN_LED=8;
String readString=String(30);
String state=String(3);
void setup() {
Ethernet.begin(mac, ip); // Hasieratu Ethernet konexioa eta
zerbitzariaa
zerbitzaria.begin();
pinMode(PIN_LED,OUTPUT);
digitalWrite(PIN_LED,LOW);
state="ITZALITA";
}
void loop() {
EthernetBezeroa bezeroa= zerbitzaria.available();
if(bezeroa) {
boolean lerrozuria=true;
while(bezeroa.connected()) {
if(bezeroa.available()) {
char c=bezeroa.read();
if(readString.length()<30) {
readString.concat(c);
}
if(c=='\n' && lerrozuria)
{
int LED = readString.indexOf("LED=");
if(readString.substring(LED,LED+5)=="LED=T") {
digitalWrite(PIN_LED,HIGH);
state="PIZTUTA"; }
else if (readString.substring(LED,LED+5)=="LED=F") {
digitalWrite(PIN_LED,LOW);
state="ITZALITA";
}
//Web-orrialdea sortu
bezeroa.println("HTTP/1.1 200 OK");
bezeroa.println("Content-Type: text/html");
bezeroa.println(); // Web-orrialdea HTML formatuan
bezeroa.println("<html>");
bezeroa.println("<head>");
bezeroa.println("<title>LED bat piztu/itzali</title>");
bezeroa.println("</head>");
bezeroa.println("<body width=100% height=100%>");
bezeroa.println("<center>");
bezeroa.println("<h1>LED bat piztu/itzali</h1>");
138
bezeroa.print("<br><br>");
bezeroa.print("LEDaren egoera: ");
bezeroa.print(state);
bezeroa.print("<br><br><br><br>");
bezeroa.println("<input type=submit value=PIZTU
style=width:200px;height:75px onClick=location.href='./?LED=T\'>");
bezeroa.println("<input type=submit value=ITZALI
style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
bezeroa.println("</center>");
bezeroa.println("</body>");
bezeroa.println("</html>");
bezeroa.stop();
// bezeroarekin konexioa bukatu
readString="";
}
}
}
}
}
Konprobatu ezazu, led batekin edo polimetroarekin, ea 8. pina piztu edo itzali
egiten den.
139
9. BLOKEA:
INTERNET
140
9. BLOKEA: INTERNET
Helburua
141
IP HELBIDEAK: TEORIA APUR BAT
IP helbide publikoa
IP publikoak bakarrak dira. Ezin daitezke errepikatu. Helbide hori gure erruterra
Interneteko web-zerbitzari batekin konektatzeko erabiltzen den helbidea da.
IP helbide pribatua
Etxeko gailuak –ordenagailu bi, inpresora bat eta eskaner bat, adibidez–
beren artean IP helbide pribatuekin komunikatzen dira. IP helbide horiek
berdinak izan daitezke beste hainbat sare pribatutan. Sare pribatu horietan IP
helbide berak izateak ez du konfliktorik eragingo, sare horiek Internetetik
isolaturik baitaude.
Internetera ateratzeko, bitarteko bat behar da: IP publikoa eta bide jakin
bat: IP pribatua eta irekitako portu bat.
142
IP FINKOAK ETA DINAMIKOAK
Makina batek, sarera konektatzean, beti IP helbide bera erabiltzen badu, esaten
da IP Finkoa duela. Honen adibide, Interneteko web zerbitzariak ditugu.
- IP finko bat alokatzea eta zerbitzu horren truke behar den tarifa ordaindu.
https://www.noip.com/sign-up
144
ROUTERRA KONFIGURATU
Nabigatzailetik zure erruterra konfiguratzeko orrian sartuko gara. Nirea hau da:
http://192.168.0.1/. Erruterraren erabiltzailea eta pasahitza eskatuko dizkigu.
Sartu itzazu eta has gaitezen konfigurazioa egiten:
Merkatuan, erruter modelo anitz dago. Bakoitzak bere konfigurazio menua du;
baina ez arduratu, hori telebista konfiguratzea bezain erraza baita. Azken
finean, telebista eta erruter gehienek aukera antzerakoak dituzte. Hurrengo
irudian agertzen da telefonia-etxe baten erruterraren menu nagusia. Erruter
jartzen duen tokian klikatuz gero, konfiguratzen has gaitezke. Ezer egin baino
lehen, LAN atalean, DHCP gaituko dugu:
145
3. pausoa: Erruterraren NAT aukera konfiguratu:
Esan dugunez, sare pribatu bat Internetera (edo beste sare batera)
konektatzeko, bitarteko bat behar dugu: NATa. Erruterrak NATari egiten dio dei,
eta NATak bitartekari edo itzultzaile gisa egingo du lan.
Erruterrean, 100. portua irekiko dugu. Hortik eta ez beste portu batetik izango
dugu arduinoa eskuragarri Internet bidez. Urrutitik konektatzean gure
erruterrera 100. portutik sartzen bagara, NAT-ak gure eskaria arduinoaren IP
pribatura bideratuko du, gure kasuan 192.168.0.200.
146
4. pausoa: Erruterraren DDNS aukera konfiguratu:
DDNS atalera joko dugu eta gure IP dinamikoari domeinua esleituko diogu.
147
5. pausoa: Erruterra berrabiarazi
8. Pausoa: TESTEATU
148
Arduinoari web-nabigatzaile batetik deitzen badiogu, portua ere adierazi behar
dugu: Bestela, helbidea ez da osorik egongo. Bi era daude arduinoa Interneten
bidez aurkitzeko:
http://arduinoaSarean.ddns.net/:100/
149
9P1 LAN. SARRERA ANALOGIKOEN BALIOAK ONLINE
ERAKUTSI
1. Helburuak
2. Prozedura
Arduino Ethernet Shield plaka bat konektatuko diogu arduinoari. Elikadura eta
sareko kablea jarriko dizkiogu: erruterretik arduinora (RJ45 ethernet kable
estandar batekin).
Arduinoari, sarean ikusgai egoteko, behar duen programa kargatuko zaio. Eta
IP helbidea esleituko zaio.
3. Materiala
4. Eskema elektrikoa
Gogora ezazu 10, 11, 12 eta 13 pinak ezin daitezkeela erabili, Ethernet
Shieldak erabiliko baititu.
150
5. Oharrak
Erabiliko den IPa eskura izan behar da. Kasu honetan, 192.168.0.200
da. Portua, 100. Programa honetan, MAC helbidea eta SUBNET ez dira
aldatuko. GATEWAY erruterraren IPa da:
// Hemen IP helbidea idatziko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP
helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer zerbitzaria(100); //erabili nahi dugun portua
151
6. Kodea
/*
INTERNETEN bidez 6 sarrera analogikoen egoera kontsultatuko da.
HTML formatuan taula bat sortuko da
Web-orrialdearen kolorea berdea izango da
Web-orrialdeari LINK bat gehituko zaio.
*/
#include <SPI.h>
#include <Ethernet.h>
/*
// Hemen IP helbidea jarriko da
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(169,254,231,252); //IP 169.254.231.252
EthernetServer zerbitzaria(80); // Ethernet zerbitzariaren liburutegia
*/
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer zerbitzaria(100); //erabili nahi dugun portua
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // Itxaron portu-seriearekin konektatzeko. Leonardo plakarako
bakarrik
}
void loop()
{
// Etortzen diren bezeroak entzun
EthernetClient bezeroa = zerbitzaria.available();
if (bezeroa) {
Serial.println("new client");
// http eskaria lerro zuri batekin bukatuko da
boolean currentLineIsBlank = true;
while (bezeroa.connected()) {
if (bezeroa.available()) {
char c = bezeroa.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
//Web-orrialdea sortu
bezeroa.println("HTTP/1.1 200 OK");
bezeroa.println("Content-Type: text/html");
152
bezeroa.println("Connection: close");
bezeroa.println("Refresh: 5"); // freskatzea 5 segundoero
bezeroa.println(); // Web-orrialdea HTML formatuan
bezeroa.println("<!DOCTYPE HTML>");
bezeroa.println("<html>");
bezeroa.println("<head>");
bezeroa.println("<title>SARRERA ANALOGIKOAK IRAKURRI</title>");
bezeroa.println("</head>");
bezeroa.println("<body>"); //cliente.println("<body width=100%
height=100%>");
bezeroa.println("<body bgcolor=#97FC95 height=100% width=100%>");
bezeroa.println("<p style=text-align: right;>PLAYGROUND <a
href=http://playground.arduino.cc/ >ARDUINO</a></p>");
bezeroa.println("<center>");
bezeroa.println("</body>");
bezeroa.println("</html>");
bezeroa.stop();
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1); // web-bilatzaileari denbora emango zaio datua jaso
dezan.
bezeroa.stop(); // Konexioa itxi
Serial.println("bezeroa deskonektatuta");
}
}
153
Gogoratu zer egin behar den arduinoan sartzeko:
Hauxe ikusi behar da: konexioa aztertu ea balio analogikoak bat datozen
egindako konexioekin. Hemen, adibidez, 5. sarrera analogikoa GND pinera
konektatu da.
154
9P2 LAN. LED BAT PIZTU WEB-ORRIALDE BATETIK
6. Helburuak
Irteera digital bat piztea da helburua. Oraingoan, Interneten bidez eta HTML
hizkuntza erabilita, bi botoi dituen leiho txiki bat sortuko da.
Atzeko kolorea berdea izango da. PIZTUTA ere berdez agertuko da, eta
ITZALITA, berriz, gorriz.
1. Prozedura
Arduinoari, sarean ikusgai egon dadin, behar duen programa kargatuko zaio.
Ondoren, IP helbidea esleituko zaio.
2. Materiala
3. Eskema elektrikoa
Gogora ezazu 10, 11, 12 eta 13 pinak ezin direla erabili, Ethernet Shieldak
erabiliko baititu.
155
4. Kodea
/*
Arduinoa kontrolatu INTERNETEN bidez
SARTZEKO http://zureIPhelbidea/:100/ helbidea erabili arduinoa erruter
rera konektatuta badago
Irteera digital bat ordenagailu baten bitartez piztu eta amatatuko da.
Bi botoidun web-orrialde bat sortuko da HTML formatuan.
*/
#include <SPI.h>
#include <Ethernet.h>
// Hemen IP helbidea jarriko da
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(169,254,231,252); //IP 169.254.231.252
EthernetServer zerbitzaria(80); // Ethernet zerbitzariaren liburutegia
/*
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer zerbitzaria(100); //erabili nahi dugun portua
*/
int Pin4=4;
String readString;
String egoera=String(11);
void setup(){
pinMode(Pin4, OUTPUT); //kontrolatuko den pina; argi bat, adibidez
zerbitzaria.begin();
egoera="<span style=color:red><font size='6'>ITZALITA</span>";
}
void loop(){
// Konexio-bezero bat sortu
EthernetClient bezeroa = zerbitzaria.available();
if (bezeroa) {
while (bezeroa.connected()) {
if (bezeroa.available()) {
char c = bezeroa.read();
//leer char
if (readString.length() < 100) {
readString += c; }
if (c == '\n') {
156
egoera="<span style=color:green><font size='6'>PIZTUTA</span>";}
if(readString.indexOf("?LED.F") >0) {digitalWrite(Pin4, LOW);
egoera="<span style=color:red><font size='6'>ITZALITA</span>";}
157
Konprobatu ezazu, led batekin edo polimetroarekin, ea 4. pina piztu eta
itzaltzen den.
158
10. BLOKEA:
159
10. BLOKEA: APP BAT SORTU ARDUINOA KONTROLATZEKO
Helburua
160
NetIO. SARRERA
161
Lehenengo pausoa kontu bat sortzea da, eta aplikazioan sartzea. Hemen duzu
NetIO aplikazioan kontua sortzeko linka: http://netio.davideickhoff.de/es/
162
Diseinua eginda dagoenean, “Save Online” sakatuta, lainoan gordeko da.
“Add Attribute”: sakatu egin behar dugu “initialsend” propietatea ager dadin:
host: Arduinoak erabiliko duen IPa idatziko dugu: IP pribatua LAN sare batekin
lan egiteko edo IP publikoa Interneten bidez lan egiteko.
163
initialsend: Komunikazioa hasteko agur bat bidaltzen da. “KaixoArdu”,
adibidez.
Pages: Gure interfazeak orrialde bakarra izan dezake edo berriak sortu
daitezke “+Add new page” sakatuta. Orrialdeari nahi den izena emango zaio.
164
165
Label, button, slider, switch, eta webView-en konfigurazioa azalduko da:
“Add Item” sakatu eta LABEL bat gehitu ondoren, LABEL-a pantailan jarriko
dugu eta neurria emango diogu. Gero, “Add Attribute“ sakatu eta reads,
interval, parseResponse, formatResponse ezaugarriak aukeratuko ditugu:
“Add Item” sakatu eta BUTTON bat gehitu ondoren, BUTTON-a pantailan
jarriko dugu eta neurria emango diogu. Gero, “Add Attribute“ sakatu eta sends
aukeratuko dugu. Ezaugarririk inportanteena hau da:
“Add Item” sakatu eta SLIDER bat gehitu ondoren, SLIDER-a pantailan jarriko
dugu eta neurria emango diogu. Ezaugarririk inportanteenak hauek dira:
“Add Item” sakatu eta SWITCH bat gehitu ondoren, SWITCH-a pantailan jarriko
dugu eta neurria emango diogu. Ezaugarririk inportanteenak hauek dira:
Kontuz!!! read edo send komandoetan erabiltzen diren aldagaiek ezin dute izen
bera izan.
167
10P1: APP. SARRERA ETA IRTEERA DIGITALAK LANDU
1. Helburuak
Lehenengo praktikaren helburua APP bat sortzea da, sarrera eta irteera
digitalak maneiatzeko. Lehenengoa denez, praktika sinple bat egingo dugu:
arduinoarekin komunikatu, sarrera digital baten egoera irakurri eta irteera digital
bat piztu/amatatuko da:
2. Prozedura
3. Materiala
168
4. APPa sortzeko datuak:
169
5. Kodea
#include <SPI.h>
#include <Ethernet.h>
/*
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte ip[] = { 192, 168, 0, 200 }; //192.168.0.200
*/
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer zerbitzaria(100);
#define BUFFER 10
int ledSwitch = 3;
int ledPultsadorea = 4;
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
zerbitzaria.begin();
pinMode(ledSwitch, OUTPUT);
pinMode(ledPultsadorea, INPUT);
}
void loop()
{
int index = 0;
char komandoa[BUFFER];
// SWITCH
if (strstr(komandoa, "onBidali")) {appBezeroa.println("OK");
digitalWrite(ledSwitch, HIGH);}
if (strstr(komandoa, "offBidali")) {appBezeroa.println("OK");
digitalWrite(ledSwitch, LOW);}
// LABEL
if (strstr(komandoa, "BOTON")) {
if (digitalRead(ledPultsadorea) == HIGH){appBezeroa.println("ON");}
else {appBezeroa.println("OFF");} }
}
}
170
}
1. Helburuak
2. Prozedura
3. Materiala
171
4. APPa sortzeko datuak:
172
5. Kodea
#include <SPI.h>
#include <Ethernet.h>
/*
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte ip[] = { 192, 168, 0, 200 }; //192.168.0.200
*/
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer arduinoZerbitzaria(100);
#define BUFFER 10
int led = 3;
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
arduinoZerbitzaria.begin();
pinMode(led, OUTPUT);
}
void loop()
{
int index = 0;
char komandoa[BUFFER];
// SLIDE
if (strstr(komandoa, "SLID")) {appBezeroa.println("OK");
analogWrite(led, atoi(&komandoa[5])*10);}
//LABEL ANALOGIKOA
if (strstr(komandoa, "irakurri0"))
{int T0= map(analogRead(A0), 0, 1023, 0, 100); appBezeroa.println(T0);}
173
10P3: APP. SARRERA ETA IRTEERA DIGITALAK. TOGGLE
1. Helburuak
Hirugarren praktikaren helburua APP bat sortzea da sarrera eta irteera digitalak
maneiatzeko. Praktika sinple bat egingo dugu: arduinoarekin komunikatu,
sarrera digitalen zer egoeratan dauden irakurri eta irteera digitalak
piztu/amatatuko dira. Irteerak piztu/amatatzeko, TOGGLE egingo da, hau da,
irteeren egoera aldatzeko botoi bakar bat erabiliko da.
2. Prozedura
3. Materiala
174
4. APPa sortzeko datuak:
175
5. Kodea
#include <SPI.h>
#include <Ethernet.h>
/*
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte ip[] = { 192, 168, 0, 200 }; //192.168.0.200
*/
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer arduinoZerbitzaria(100);
#define BUFFER 10
//IRTEERA DIGITALAK
int ID2 = 2; int ID3 = 3; int ID4 = 4; int ID5 = 5;
//SARRERA DIGITALAK
int SD6 = 6; int SD7 = 7; int SD8 = 8; int SD9 = 9;
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
arduinoZerbitzaria.begin();
void loop()
{
int index = 0;
char komandoa[BUFFER];
// BOTOIAK
if (strstr(komandoa, "3_BOTOIA2")) {appBezeroa.println("OK"); digitalWrite(ID2,!digitalRead(ID2));}
if (strstr(komandoa, "3_BOTOIA3")) {appBezeroa.println("OK"); digitalWrite(ID3,!digitalRead(ID3));}
if (strstr(komandoa, "3_BOTOIA4")) {appBezeroa.println("OK"); digitalWrite(ID4,!digitalRead(ID4));}
if (strstr(komandoa, "3_BOTOIA5")) {appBezeroa.println("OK"); digitalWrite(ID5,!digitalRead(ID5));}
// LABEL DIGITALA: SARRERAK
if (strstr(komandoa, "3_PIN6")) {
if (digitalRead(SD6) == HIGH){appBezeroa.println("ON");} else {appBezeroa.println("OFF");} }
if (strstr(komandoa, "3_PIN7")) {
if (digitalRead(SD7) == HIGH){appBezeroa.println("ON");} else {appBezeroa.println("OFF");} }
if (strstr(komandoa, "3_PIN8")) {
if (digitalRead(SD8) == HIGH){appBezeroa.println("ON");} else {appBezeroa.println("OFF");} }
if (strstr(komandoa, "3_PIN9")) {
if (digitalRead(SD9) == HIGH){appBezeroa.println("ON");} else {appBezeroa.println("OFF");} }
}
}
}
176
10P4: APP. SARRERA ETA IRTEERA DIGITALAK ETA
ANALOGIKOAK
1. Helburuak
Hirugarren praktikaren helburua APP bat sortzea da, sarrera eta irteera
digitalak eta analogikoak maneiatzeko. Arduino Duemilanove txartela
kontrolatzen duen praktika sinple bat egingo dugu: Aplikazioak hiru orrialde
izango ditu: PORTADA, DIGITALAK, eta ANALOGIKO.
2. Prozedura
3. Materiala
177
4. APPa sortzeko datuak:
PAGE. PORTADA
178
PAGE. DIGITALAK
PAGE. ANALOGIKOAK
179
5. Kodea
#include <SPI.h>
#include <Ethernet.h>
/*
byte mac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
byte ip[] = { 192, 168, 0, 200 }; //192.168.0.200
*/
// Hemen IP helbidea jarriko da
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 0, 200 }; // IP lokala 192.168.0.200
byte gateway[] = { 192, 168, 0, 1 }; // Erruterraren IP helbidea
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer arduinoZerbitzaria(100);
#define BUFFER 10
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
arduinoZerbitzaria.begin();
pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT);
pinMode(SLIDE5, OUTPUT); pinMode(SLIDE6, OUTPUT);
void loop()
{
int index = 0;
char komandoa[BUFFER];
// SWITCH
if (strstr(komandoa, "onsend7")) {appBezeroa.println("OK"); digitalWrite(led7, HIGH);}
if (strstr(komandoa, "offsend7")){appBezeroa.println("OK"); digitalWrite(led7, LOW);}
if (strstr(komandoa, "onsend8")) {appBezeroa.println("OK"); digitalWrite(led8, HIGH);}
if (strstr(komandoa, "offsend8")){appBezeroa.println("OK"); digitalWrite(led8, LOW);}
if (strstr(komandoa, "onsend9")) {appBezeroa.println("OK"); digitalWrite(led9, HIGH);}
if (strstr(komandoa, "offsend9")){appBezeroa.println("OK"); digitalWrite(led9, LOW);}
// SLIDE
if (strstr(komandoa, "SLIDE5")) {appBezeroa.println("OK"); analogWrite(SLIDE5,
atoi(&komandoa[7])*10);}
if (strstr(komandoa, "SLIDE6")) {appBezeroa.println("OK"); analogWrite(SLIDE6,
atoi(&komandoa[7])*10);}
//LABEL ANALOGIKOA
if (strstr(komandoa, "A0")){int T0= map(analogRead(A0), 0, 1023, 0, 100); appBezeroa.println(T0);}
if (strstr(komandoa, "A1")){int T1= map(analogRead(A1), 0, 1023, 0, 100); appBezeroa.println(T1);}
if (strstr(komandoa, "A2")){int T2= map(analogRead(A2), 0, 1023, 0, 100); appBezeroa.println(T2);}
if (strstr(komandoa, "A3")){int T3= map(analogRead(A3), 0, 1023, 0, 100); appBezeroa.println(T3);}
if (strstr(komandoa, "A4")){int T4= map(analogRead(A4), 0, 1023, 0, 100); appBezeroa.println(T4);}
if (strstr(komandoa, "A5")){int T5= map(analogRead(A5), 0, 1023, 0, 100); appBezeroa.println(T5);}
}
}
}
180
181
11. BLOKEA:
BLUETOOTH
182
11. BLOKEA: BLUETOOTH
Helburua
Arduinoari Bluetooth bidez emango zaizkio aginduak: Irteera digital bat piztu
edo amatatu, sarrera analogiko bat irakurri. Smartphone batetik emango
dizkiogu aginduak arduinoari.
183
TEORIA APUR BAT
#include <SoftwareSerial.h>
Serial.begin(9600);
Serial.println("Konexioa egin da!");
nirePortua.begin(9600);
nirePortua.println("Konexioa egin da!");
184
11P1: HC05. TXARTEL BAT EGIAZTATU
1. Helburuak
2. Prozedura
Egiaztapen hauek zuzenak badira, ondo! Laster izango duzu martxan HC05
txartela!
3. Materiala
4. Eskema elektrikoa
ARDUINOA HC05
+5V +Vcc
GND GND
185
11P2: HC05. TXARTELAREKIN LED BAT PIZTU
1. Helburuak
2. Prozedura
186
9. p/a sakatu, LEDa piztu/amatatzeko.
3. Materiala
4. Eskema elektrikoa
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
5. Kodea:
void setup()
{
pinMode(led13, OUTPUT);
Serial.begin(9600);
Serial.println("p/a sakatu LEDa pizteko/amatatzeko");
}
void loop()
{
// Arduinoaren RX/TX serie-portuko bufferrean datuak badaude:
if( Serial.available() ){
jasoAginduak = Serial.read(); // Byte bat irakurri eta aldagaian gorde
// Jasotako bytearen arabera, led bat piztu/amatatu
if(jasoAginduak == 'p' ){digitalWrite(led13, HIGH); Serial.println("PIN 13
ON");}
if(jasoAginduak == 'a' ){digitalWrite(led13, LOW); Serial.println("PIN 13
OFF");}
}
187
delay(100);
}
/*
Praktika hau HC-05 modulua frogatzeko erabiliko da.
Oraingoan irteera digital bat piztuko da.
Serie-monitoretik 'p' sakatu 13. LEDa PIZTEKO
Serie-monitoretik 'a' sakatu 13. LEDa AMATATZEKO
Arduinoak datuak RX eta TX pinetatik jaso eta bidali beharrean, 2 eta
3 pinetatik jaso eta bidaliko ditu (Rx2, Tx2)
*/
#include <SoftwareSerial.h>
SoftwareSerial nirePortua(2,3); // Arduinoan sortutako serie-portua
(Rx, Tx)
void setup()
{
pinMode(led13, OUTPUT);
nirePortua.begin(9600);
nirePortua.println("p/a sakatu LEDa pizteko/amatatzeko");
}
void loop()
{
// Arduinoaren RX/TX serie-portuko bufferrean datuak badaude:
if( nirePortua.available() ){
jasoAginduak = nirePortua.read(); // Byte bat irakurri eta aldagaian
gorde
// Jasotako bytearen arabera, led bat piztu/amatatu
if(jasoAginduak == 'p' ){digitalWrite(led13, HIGH);
nirePortua.println("PIN 13 ON");}
if(jasoAginduak == 'a' ){digitalWrite(led13, LOW);
nirePortua.println("PIN 13 OFF");}
}
delay(100);
}
188
11P3: HC05. TXARTELA KONFIGURATU. AT KOMANDOAK
1. Helburuak
2. Prozedura
3. Materiala
4. Eskema elektrikoa
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
ENABLE +5V
189
5. Kodea
/*
AT komandoak erabili. HC-05 Bluetooth txartela testeatu
*/
#include <SoftwareSerial.h>
void setup()
{
Serial.begin(9600);
nirePortua.begin(38400);
Serial.println ("AT komandoak hasieratu:");
}
void loop()
{ // HC-05 moduloak irakurriko ditu serie-monitoretik bidalitako AT komandoak
if(Serial.available()) nirePortua.write(Serial.read());
// Serie-monitoreak irakurriko ditu HC-05 modulotik bidalitako AT komandoen erantzuna
if(nirePortua.available()) Serial.write(nirePortua.read());
}
190
Oinarrizko AT komando hauek sartuko dira HC05 txartela konfiguratzeko:
http://www.linotux.ch/arduino/HC-
0305_serial_module_AT_commamd_set_201104_revised.pdf
191
11P4: HC05. SARRERA ANALOGIKO BATEN BALIOA
SMARTPHONEAN
1. Helburuak
2. Prozedura
Kodea arduinoan kargatu, konexioak egin, BlueTerm aplikazioa ireki eta HC05
txartela parekatu. Pasahitza sartuta smartphonean, pantailan segundoero
tenperatura agertuko da.
3. Materiala
4. Eskema elektrikoa
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
192
5. Kodea
/*
A0 sarrera analogikoan dagoen balioa irakurri eta BlueTerm aplikaziora
bidali
*/
#include <SoftwareSerial.h>
SoftwareSerial nirePortua(2,3);
int sarreraA0=0;
void setup(){
nirePortua.begin(9600);
nirePortua.println("Konektatu da!!");
}
void loop(){
sarreraA0 = analogRead(A0);
nirePortua.print("A0 irakurketa:"); nirePortua.println(sarreraA0);
delay(1000);
}
193
11P5: HC05. ARDUDROID
1. Helburuak
2. Prozedura
http://www.techbitar.com/ardudroid-simple-bluetooth-control-for-arduino-and-android.html
3. Materiala
4. Eskema elektrikoa
194
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
195
5. Kodea
/*
Proiektua: ArduDroid
EGILEA: Hazim Bitar (techbitar at gmail dot com)
Lizentzia: Public domain
*/
#define START_CMD_CHAR '*'
#define END_CMD_CHAR '#'
#define DIV_CMD_CHAR '|'
#define CMD_DIGITALWRITE 10
#define CMD_ANALOGWRITE 11
#define CMD_TEXT 12
#define CMD_READ_ARDUDROID 13
#define MAX_COMMAND 20
#define MIN_COMMAND 10
#define IN_STRING_LENGHT 40
#define MAX_ANALOGWRITE 255
#define PIN_HIGH 3
#define PIN_LOW 2
String inText;
void setup() {
Serial.begin(9600);
Serial.println("ArduDroid 0.12 Alpha by TechBitar (2013)");
Serial.flush();
}
void loop()
{
Serial.flush();
int ard_command = 0;
int pin_num = 0;
int pin_value = 0;
// Pinak zer zenbaki duen irakurri, eta zer balio duen
pin_num = Serial.parseInt(); // pinaren zenbakia irakurri
pin_value = Serial.parseInt(); // balioa irakurri
196
if (ard_command == CMD_ANALOGWRITE) {
analogWrite( pin_num, pin_value );
// GEHITU HEMEN ZURE KODEA
return;
}
// 2a) SAKATU DUZUN PIN DIGITALAREN AKZIOA
void set_digitalwrite(int pin_num, int pin_value)
{
switch (pin_num) {
case 13:
pinMode(13, OUTPUT);
digitalWrite(13, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 12:
pinMode(12, OUTPUT);
digitalWrite(12, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 11:
pinMode(11, OUTPUT);
digitalWrite(11, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 10:
pinMode(10, OUTPUT);
digitalWrite(10, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 9:
pinMode(9, OUTPUT);
digitalWrite(9, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 8:
pinMode(8, OUTPUT);
digitalWrite(8, pin_value);
// add your code here
break;
case 7:
pinMode(7, OUTPUT);
digitalWrite(7, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 6:
pinMode(6, OUTPUT);
digitalWrite(6, pin_value);
// add your code here
break;
case 5:
pinMode(5, OUTPUT);
digitalWrite(5, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 4:
pinMode(4, OUTPUT);
digitalWrite(4, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 3:
pinMode(3, OUTPUT);
digitalWrite(3, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
case 2:
pinMode(2, OUTPUT);
digitalWrite(2, pin_value);
// GEHITU HEMEN ZURE KODEA
break;
}
}
197
198
11P6: HC05. BLUETOOTH SPP PRO APLIKAZIOA
1. Helburuak
2. Prozedura
Konfigurazioa hau da: Aplikazioa ireki, “keyboard mode” sakatu botoiak agertu
daitezen. “buttons set” sakatu botoiak konfiguratzeko: Berton, botoiari, izena
jarriko eta komando bat esleituko diogu, “A”, adibidez:
Kodea arduinoan kargatu, konexioak egin, ATC aplikazioa ireki eta HC05
txartela parekatu. Pasahitza sartu eta arduinoa kontrolatu.
3. Materiala
199
- HC05 bluetooth txartel bat
4. Eskema elektrikoa
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
5. Kodea
/*
Praktika honek BLUETOOTH SPP PRO aplikazioak bidaltzen dituen komandoak exekutatuko ditu.
10 irteera digital kontrolatuko dira.
Smartphonearen pantailan sakatutako pultsadoreak irteera digitalak piztu/amatatuko ditu.
Arduinoak datuak RX eta TX pinetatik jaso eta bidali beharrean, 2 eta 3 pinetatik jaso eta
bidaliko ditu (Rx2, Tx2)
*/
#include <SoftwareSerial.h>
SoftwareSerial nirePortua (2,3); // Arduinoan sortutako serie-portua (Rx, Tx)
char jasoAginduak; // BlueTerm aplikaziotik jasoko diren datuak aldagai honetan gordeko dira
// Piztu/amatatuko ditugun irteera digitalak:
int ID4 = 4; int ID5 = 5; int ID6 = 6; int ID7 = 7; int ID8 = 8; int ID9 = 9;
int ID10 = 10; int ID11 = 11; int ID12 = 12; int ID13 = 13;
void setup()
{
// Irteera digitalak konfiguratu:
pinMode(ID4, OUTPUT); pinMode(ID5, OUTPUT); pinMode(ID6, OUTPUT); pinMode(ID7, OUTPUT);
pinMode(ID8, OUTPUT); pinMode(ID9, OUTPUT); pinMode(ID10, OUTPUT); pinMode(ID11, OUTPUT);
pinMode(ID12, OUTPUT); pinMode(ID13, OUTPUT);
nirePortua.begin(9600);
nirePortua.println("IRTEERA DIGITALAK KONTROLATU");
}
void loop()
{
// Arduinoaren RX/TX serie-portuko bufferrean datuak badaude:
if( nirePortua.available() ){
jasoAginduak = nirePortua.read(); // Byte bat irakurri eta aldagaian gorde
// Jasotako bytearen arabera, led bat piztu/amatatu
if(jasoAginduak == 'A' ){digitalWrite(ID4, !digitalRead(ID4)); nirePortua.println("ID4
TOGGLE");}
if(jasoAginduak == 'B' ){digitalWrite(ID5, !digitalRead(ID5)); nirePortua.println("ID5
TOGGLE");}
if(jasoAginduak == 'C' ){digitalWrite(ID6, !digitalRead(ID6)); nirePortua.println("ID6
TOGGLE");}
if(jasoAginduak == 'D' ){digitalWrite(ID7, !digitalRead(ID7)); nirePortua.println("ID7
TOGGLE");}
if(jasoAginduak == 'E' ){digitalWrite(ID8, !digitalRead(ID8)); nirePortua.println("ID8
TOGGLE");}
if(jasoAginduak == 'F' ){digitalWrite(ID9, !digitalRead(ID9)); nirePortua.println("ID9
TOGGLE");}
if(jasoAginduak == 'G' ){digitalWrite(ID10, !digitalRead(ID10)); nirePortua.println("ID10
TOGGLE");}
if(jasoAginduak == 'H' ){digitalWrite(ID11, !digitalRead(ID11)); nirePortua.println("ID11
TOGGLE");}
if(jasoAginduak == 'I' ){digitalWrite(ID12, HIGH); nirePortua.println("ID12");}
if(jasoAginduak == 'i' ){digitalWrite(ID12, LOW); nirePortua.println("ID12");}
if(jasoAginduak == 'J' ){digitalWrite(ID13, HIGH); nirePortua.println("ID13");}
if(jasoAginduak == 'j' ){digitalWrite(ID13, LOW); nirePortua.println("ID13");}
}
delay(100);
}
200
201
11P7: HC05. ATC LITE APLIKAZIOA
1. Helburuak
2. Prozedura
ATC LITE smartphonera jaitsiko da, eta konfiguratu. Botoiak besterik ez dira
konfiguratuko. Botoi bakoitzari kode bat esleituko zaio. Botoi hori sakatzean,
ATC LITEk botoiak duen komando hori bidaliko dio arduinoari eta arduinoak
exekutatu egingo du.
Konfigurazioa hau da: ATC LITE programa ireki, “Edit Properties” sakatu eta
konfiguratu nahi den botoia sakatu. “Data sent on touch” sakatzen badugu, hor
bidali nahi den kodigoa idatziko dugu, “A”, adibidez.
3. Materiala
202
4. Eskema elektrikoa
BLUETOOHA ARDUINOA
Vcc +5V
GND 0V
5. Kodea
203
12. BLOKEA:
VELLEMAN K8056
204
12. BLOKEA: RS232 BIDEZ VELLEMAN K8056 KONTROLATU
Helburua
205
Velleman K8056 txartelak 8 errele ditu. Horiek, hainbat eratan kontrolatu
daitezke:
RS232 Komandoak
Txartelak hainbat komando ditu, Clear, Set eta Toggle dira garrantzitsuenak:
206
Komandoak bidaltzeko sekuentzia, hau da:
1. CHR$(13)
2. card address (1..255)
3. instruction
4. address (1..255) or relay# (‘1′..’9′ ASCII)
5. checksum (2-complement of the sum of the 4 previous bytes + 1)
Velleman Liburutegia
Alban S. Tilanusek Velleman txartela kontrolatzeko liburutegia sortu du.
Liburutegi horrekin, RS232 komandoak erraz erabili daitezke orain arte erabili
dugun ohiko programazio motarekin. Hitz gutxitan, K8056 txartela erraz
kontrolatu daiteke Albanek sortu duen liburutegiarekin. Hauek izango dira
erreleak aktibatzeko gure programetan erabiliko diren komandoak:
Errele bat piztu, 1etik 8ra. 9 jartzen badugu, guztiak piztuko dira:
Relay.ON(1,4); Relay.digitalWrite(1,9,HIGH);
Errele bat itzali, 1etik 8ra. 9 jartzen badugu, guztiak itzaliko dira:
Relay.OFF(1,4); Relay.digitalWrite(1,9,LOW);
Errele baten egoera aldatu: Piztu, itzalita badago, edo itzali, piztuta badago:
Relay.Toggle(1,4);
Errele guztiak itzali:
Relay.EmergencyStop();
Gogoratu liburutegi hau eskuz gehitu behar dela. Liburutegi hau liburutegien
karpetan izango duzu.
207
Konexioak
Arduinoaren serie-portuek TTL irteera dute; beraz, ez dira bateragarriak RS232
sistemarekin. Bateragarri egiteko, TTL-RS232 bihurgailu bat erabili behar da.
TTL balioak erraz moldatu daitezke RS232 balioetara SparkFun-en MAX3232
bihurgailuarekin. Horixe da proiektu honetan erabili den bihurgailua. Konexioak
hauek dira:
208
P1: K8056. TXARTELA TESTEATU
1. Helburuak
Erreleak piztu, amatatu eta haien egoera aldatu behar da. Baita guztiak batera
piztu edo amatatu ere.
2. Prozedura
3. Materiala
4.
209
5. Kodea
/*
Velleman K8056 txartelaren kontrola
Egilea: Alban.S. Tilanus
*/
#include <K8056Velleman.h>
K8056Velleman Relay;
void setup()
{
Relay.begin(3);
Relay.EmergencyStop();
for (int i = 0; i <= 8; i++) {Relay.ON(1,i);delay(500);}
Relay.OFF(1,4); delay(500);
Relay.EmergencyStop(); delay(500);
Relay.Toggle(1,3); delay(500);
Relay.Toggle(1,3); delay(500);
Relay.digitalWrite(1,9,HIGH); // Guztiak piztu.
delay(500);
Relay.digitalWrite(1,9,LOW); // Guztiak piztu.
}
void loop()
{
210
12P2: K8056. INFRAGORRIEN BIDEZ TXARTELA KONTROLATU
1. Helburuak
Botoiak, 1etik 8ra: botoi bakoitzak 1etik 8ra dagokion errelea piztu edo
amatatuko du. Power botoiak errele guztiak piztuko ditu. Isildu botoiak eta 9.
botoiak errele guztiak itzaliko dituzte.
2. Prozedura
3. Materiala
211
4. Eskema elektrikoa
Infragorrien eskema
212
5. Kodea
/*
Aurreko praktika erabiliko dugu, INFRAGORRIEN praktikarekin batera e
rreleak aktibatzeko.
Botoiak hauek izango dira:
1: 1.errelea piztuko edo amatatuko du
2: 2.errelea piztuko edo amatatuko du
3: 3.errelea piztuko edo amatatuko du
4: 4.errelea piztuko edo amatatuko du
5: 5.errelea piztuko edo amatatuko du
6: 6.errelea piztuko edo amatatuko du
7: 7.errelea piztuko edo amatatuko du
8: 8.errelea piztuko edo amatatuko du
9: Errele guztiak piztuko ditu.
Power: Errele guztiak itzaliko ditu.
//kOMANDOAK
//Relay.begin(3);
//Relay.EmergencyStop(); // Errele guztiak itzaltzen ditu
//Relay.ON(1,9); // Errele guztiak pizten ditu
//Relay.OFF(1,9); // Errele guztiak itzaltzen ditu
//Relay.ON(1,4); // 4. errelea pizten du
//Relay.OFF(1,4); // 4. errelea itzaltzen du
//Relay.Toggle(1,3); // 3. errelearen egoera-balioak truk
atzen ditu
//Relay.digitalWrite(1,6,HIGH); // Relay.ON(1,6); bietako bat
//Relay.digitalWrite(1,6,LOW); // Relay.OFF(1,6); bietako bat
*/
#include <K8056Velleman.h>
#include “IRremote.h”
K8056Velleman Relay;
void setup()
{
Serial.begin(9600);
Serial.println(“Infragorriak testeatzen!”);
Serial.println(“Erreleak piztu/amatatu itzazu!”);
Relay.begin(3);
Relay.EmergencyStop(); // Errele guztiak itzaltzen ditu
213
void loop()
{
if (irrecv.decode(&eskuratutakoKodea)) // Jaso al da seinale
infragorririk?
{
translateIR(); // Sakatu den botoiaren esanahia serie-
monitoretik inprimatu
irrecv.resume(); // Hurrengo balioa hartu
}
}
214
13. BLOKEA:
MOSFET.
215
13. BLOKEA: MOSFET. IRTEERA DIGITALEN BALIOA
EGOKITU
Helburua
216
ARDUINOAREN IRTEERA DIGITAL BAT EGOKITU, BESTE TENTSIO BAT
ETA BESTE POTENTZIA BAT IZATEKO
217
MOSF SATURATUTA EBAKITA
ET
N VGS > Vth eta VDS > ( VGS – VGS < Vth
Vth)
P VGS > Vth eta VDS < ( VGS – VGS < Vth
Vth)
Balio digitalekin lan egiten dutenean , “saturatutako eremuan: ON” eta “moztuta
eremuan: OFF” egiten dute lan, hau da, MOSFETak etengailu bat balitz bezala
egiten du lan: irekita edo itxita.
218
.
MOSFET bat saturatzeko, Gate terminalean dagoen tentsioa balio jakin batera
heldu behar da, VGS > Vth. Arduinoa 5 volteko tentsiora heldu daiteke, eta,
MOSFETaren arabera, tentsio hori nahikoa izan daiteke MOSFETa
saturatzeko, edo ez. Potentziako MOSFET batean, gerta daiteke V th > 5v izatea.
Gainera, MOSFETak, saturaziora heltzen ez bada eta lineako eremuan
geratzen bada, potentzia handia xurgatuko du: Pmosfet = Vsd * Isd.
Irudi honetan ikusten da MOSFETa saturatzeko 5.5V < V GS < 7.5V bete behar
dela, eta arduinoarekin ez da nahikoa 5 volt baitu:
219
MOSFET baten kurbak VGS eta IDS balio desberdinen arabera. Lineako eta saturazioko eremuak
220
MOSFET “Logic level” baten eta arrunt baten arteko konparazioa
221
13P1: N KANALEKO MOSFET “LOGIC LEVEL” BAT ERABILI
222
13P2: N KANALEKO MOSFET ARRUNT BAT ERABILI
Zirkuitu horrek logika inbertsoa erabiltzen du. Hau da, arduinoak irteeran balio
positiboa duenean, MOSFETa irekita dago, eta arduinoak irteeran balio
negatiboa duenean, MOSFETa itxita dago. Abantaila bat du: etapa horrekin
edozein MOSFET saturatu ahal izatea bermatzen da, etapa elikatzeko tentsioa
egokituta.
223
13P3: P KANALEKO MOSFET ARRUNT BAT ERABILI
224
14. BLOKEA:
225
14. BLOKEA: DATUAK GORDE SD TXARTEL BATEAN
Helburua
226
KONEXIOAK
227
PRAKTIKAK
9. Prozedura
Konexioak egin, SD txartel bat sartu, kodea kargatu, serie-monitorea ireki eta
bistaratzen diren datuak egokiak diren konprobatu.
10. Materiala
11. Konexioak
228
14P1: SD. TESTEATU
1. Helburuak
2. Kodea
/*
SD txartela TESTEATU
Programa honekin SD txartela bat frogatuko da.
SD txartelaren ezaugarriak hartuko dira.
Programa hau SD txartel batek funtzionatzen duen edo ez egiaztat
zeko erabili dezakezu
Konexioak hauek dira:
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4
ETHERNET SHIELD batekin ez da konexiorik egin behar.
*/
#include <SD.h>
// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;
// aldatu hau SD shield edo modulu bat erabiliko baduzu;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields eta moduluak: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // itxaron serie-portuari konexioa egiteko. Bakarrik
Leonardorako}
}
229
pinMode(10, OUTPUT);
// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print("\nVolume type is FAT");
Serial.println(volume.fatType(), DEC);
Serial.println();
230
Serial.print("Volume size (Kbytes): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Volume size (Mbytes): ");
volumesize /= 1024;
Serial.println(volumesize);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}
void loop(void) {
}
231
14P2: SD. DATUAK IRAKURRI ETA IDATZI
1. Helburuak
Praktika honen helburua SD txartel batean datuak idaztea eta irakurtzea da.
2. Kodea
/*
SD txartela irakurri/idatzi
Programa honekin SD txartel batean irakurri eta idatziko da.
Konexioak hauek dira:
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4
ETHERNET SHIELD batekin ez da konexiorik egin behar.
*/
#include <SD.h>
File nireFitxategia;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // itxaron serie-portuari konexioa egiteko. Bakarrik
Leonardorako}
}
if (!SD.begin(4)) {
Serial.println(" SD txartela EZ da hasieratu!");
return;
}
Serial.println(" SD txartela hasieratu da!");
232
// fitxategia ixten:
nireFitxategia.close();
Serial.println(" eginda!");
} else {
// fitxategia ireki ez bada, errorea dagoela abisatu:
Serial.println(" errorea testua.txt irekitzen!");
}
void loop()
{
233
14P3: SD. FITXATEGIAK SORTU ETA EZABATU
1. Helburuak
Praktika honen helburua SD txartel batean fitxategiak sortzea eta idaztea da.
2. Kodea
/*
SD txartelean fitxategi bat sortu eta ezabatu
Konexioak hauek dira:
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4
ETHERNET SHIELD batekin ez da konexiorik egin behar.
*/
#include <SD.h>
File nireFitxategia;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // itxaron serie-portuari konexioa egiteko. Bakarrik
Leonardorako}
}
if (!SD.begin(4)) {
Serial.println(" SD txartela EZ da hasieratu!");
return;
}
Serial.println(" SD txartela hasieratu da!");
if (SD.exists("adibidea.txt"))
{Serial.println("adibidea.txt fitxategia badago!");}
else {Serial.println("adibidea.txt fitxategia ez
234
dago!");}
if (SD.exists("adibidea.txt"))
{Serial.println("adibidea.txt fitxategia badago");}
else {Serial.println("adibidea.txt fitxategia ez dago");}
}
void loop()
{
235
14P4: SD. DAUDEN FITXATEGIAK ERAKUTSI
1. Helburuak
2. Kodea
/*
SD txartelean fitxategi bat sortu eta ezabatu
Konexioak hauek dira:
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4
ETHERNET SHIELD batekin ez da konexiorik egin behar.
*/
#include <SD.h>
File root;
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // itxaron serie-portuari konexioa egiteko. Bakarrik
Leonardorako}
}
if (!SD.begin(4)) {
Serial.println(" SD txartela EZ da hasieratu!");
return;
}
Serial.println(" SD txartela hasieratu da!");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("eginda!");
}
void loop()
{
}
236
while(true) {
237
238
14P5: SD. SARRERA ANALOGIKOEN BALIOAK GORDE
1. Helburuak
2. Kodea
/*
SD txartelean hiru sentsore analogikoren balioak idatziko d
ira
Konexioak hauek dira:
MOSI - pin 11
MISO - pin 12
CLK - pin 13
CS - pin 4
ETHERNET SHIELD batekin ez da konexiorik egin behar.
*/
#include <SD.h>
void setup()
{
Serial.begin(9600);
while (!Serial) {
; // itxaron serie-portuari konexioa egiteko. Bakarrik
Leonardorako
}
if (!SD.begin(chipSelect)) {
Serial.println(" SD txartela EZ da hasieratu!");
return;
}
Serial.println(" SD txartela hasieratu da!");
Serial.println("Hiru sentsoreen balioa irakurtzen:");
}
239
void loop()
{
// string bat sortu informazioa gordetzeko:
String datuKatea = "";
240
3. Serie-monitorean bistaratzen diren datuak
241