SlideShare a Scribd company logo
1 of 10
Download to read offline
Textul si imaginile din acest document sunt licentiate
Attribution-NonCommercial-NoDerivs
CC BY-NC-ND
Codul sursa din acest document este licentiat
Public-Domain
Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website /
blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul
sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara
nici un fel de limitari.
http://www.robofun.ro/forum
Arduino UNO si MOD-IO2
In acest tutorial vom exemplifica functionarea modulului MOD-IO2
impreuna cu Arduino UNO. Modulul MOD-IO2 este un modul cu microcontroller
dedicat, comunica cu Arduino prin protocolul I2C, si dispune de doua relee si
mai multe porturi GPIO (similare cu porturile digitale din Arduino).
Vei avea nevoie de urmatoarele componente:
• Arduino UNO
• Placa cu relee MOD-IO2
• Adaptor Rpi-UEXT
• 3 led-uri brick de culori diferite
• Breadboard
• Fire pentru conexiuni
Cateva lucruri despre MOD-IO2 :
• contine pe placa un microcontroller dedicat care controleaza cele doua
relee de pe placa, precum si mai multe porturi GPIO (similare cu porturile
digitale din Arduino).
• se conecteaza cu Arduino doar prin 2 fire (SCL, SDA – protocol I2C) la
Arduino.
• se alimenteaza de la o sursa de tensiune stabilizata de 12V.
• este adresabil, ceea ce inseamna ca poti inlantui mai multe module MOD-
IO2.
In cele de mai jos vom utiliza un breadboard, impreuna cu adaptorul
UEXT pentru a simplifica lucrurile si (astfel vom avea masa comuna GND intre
led-uri, Arduino si MOD-IO2).
http://www.robofun.ro/forum
Pentru exemplificare, vom folosi trei led-uri brick conectate la placa MOD-
IO2. Nu vom conecta nimic la relee, zgomotul pe care il fac acestea la cuplare
si decuplare va fi suficient pentru a ne da seama ca acestea functioneaza. In
proiectul tau, poti folosi doar releele (daca nu ai nevoie de porturi GPIO
suplimentare; ceea ce inseamna ca in cele ce urmeaza esti liber sa ignori led-
urile) conectate la porturile GPIO.
http://www.robofun.ro/forum
Tabelul de conexiuni:
Arduino UNO SCL Rpi-UEXT SCL
Arduino UNO SDA Rpi-UEXT SDA
Led brick galben IN MOD-IO2 GPIO 0
Led brick verde IN MOD-IO2 GPIO 1
Led brick rosu IN MOD-IO2 GPIO 2
Led brick galben GND Breadboard GND
Led brick verde GND Breadboard GND
Led brick rosu GND Breadboard GND
Arduino UNO GND Breadboard GND
MOD-IO2 GND Breadboard GND
Pentru comunicarea I2C intre Arduino si MOD-IO2, Arduino este master
iar placa MOD-IO2 functioneaza pe post de slave. Arduino transmite comenzi
prin magistrala I2C la frecventa de 100Khz. Din pacate, MOD-IO2 intelege doar
comenzi trimise la cel mult 50KHz, asa ca va fi necesar sa modifici frecventa
placii Arduino in fisierului de configurare de mai jos.
arduino-1.0.2/libraries/Wire/utility
Deschide fisierul twi.h si cauta liniile:
#ifndef TWI_FREQ
#define TWI_FREQ 100000L
#endif
Schimba valoarea 100000L in 50000L.
Cand vrei sa abordezi alte proiecte, nu uita sa schimbi la loc valoarea.
Programul.
Incarca in Arduino urmatorul sketch.
http://www.robofun.ro/forum
#include <Wire.h>
String inputString = "";
boolean stringComplete = false;
int led = 0;
int whichRelay = 0;
void setup() {
Serial.begin(9600);
inputString.reserve(200);
Wire.begin();
setareGPIO();
setGPIOState(0,0);
setGPIOState(1,0);
setGPIOState(2,0);
setRelayState(0,0);
setRelayState(1,0);
}
void loop() {
if (stringComplete) {
if (inputString == "led 1 onn") {
setGPIOState(0,1);
Serial.println("GPIO Led 1 ON");
} else if (inputString == "led 1 offn") {
setGPIOState(0,0);
Serial.println("GPIO Led 1 OFF");
} else if (inputString == "led 2 onn") {
setGPIOState(1,1);
Serial.println("GPIO Led 2 ON");
} else if (inputString == "led 2 offn") {
setGPIOState(1,0);
Serial.println("GPIO Led 2 OFF");
} else if (inputString == "led 3 onn") {
setGPIOState(2,1);
Serial.println("GPIO Led 3 ON");
} else if (inputString == "led 3 offn") {
setGPIOState(2,0);
Serial.println("GPIO Led 3 OFF");
} else if (inputString == "relay 1 onn") {
setRelayState(0,1);
Serial.println("RELAY 1 ON");
} else if (inputString == "relay 1 offn") {
setRelayState(0,0);
Serial.println("RELAY 1 OFF");
} else if (inputString == "relay 2 onn") {
setRelayState(1,1);
Serial.println("RELAY 2 ON");
http://www.robofun.ro/forum
} else if (inputString == "relay 2 offn") {
setRelayState(1,0);
Serial.println("RELAY 2 OFF");
} else if (inputString == "relays onn") {
setRelayState(0,1);
setRelayState(1,1);
Serial.println("BOTH RELAYS ON");
} else if (inputString == "relays offn") {
setRelayState(0,0);
setRelayState(1,0);
Serial.println("BOTH RELAYS OFF");
}
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == 'n') {
stringComplete = true;
}
}
}
void setareGPIO() {
Wire.beginTransmission(0x48);
Wire.write(0x02);
Wire.write(0xA0);
Wire.write(0x01);
Wire.write(0x00);
Wire.endTransmission();
}
/* Exemple de situatii
setGPIOState(0,1) – led-ul conectat la GPIO 0 devine ON; restul
led-urilor nu isi modifica starea
setGPIOState(1,1) – led-ul conectat la GPIO 1 devine ON
setGPIOState(0,0) – led-ul conectat la GPIO 0 devine OFF
setGPIOState(1,0) – led-ul conectat la GPIO 1 devine OFF
setGPIOState(2,1) – led-ul conectat la GPIO 2 devine ON
setGPIOState(2,0) – led-ul conectat la GPIO 2 devine OFF
*/
http://www.robofun.ro/forum
void setGPIOState(int gpio, int state) {
if (state == 1) bitSet(led, gpio);
if (state == 0) bitClear(led, gpio);
Wire.beginTransmission(0x48);
Wire.write(0x02);
Wire.write(0xA0);
Wire.write(0x02);
Wire.write(led);
Wire.endTransmission();
}
/* Exemple de situatii:
setRelayState(0,1) – releu 1 cuplat; releu 2 decuplat
setRelayState(1,1) – releu 2 cuplat; releu 1 ramane cuplat(din
instructiunea anterioara)
setRelayState(0,0) – releu 1 decuplat; releu 2 ramane cuplat(din
instructiunea anterioara)
setRelayState(1,0) – releu 2 decuplat; releu 1 ramane decuplat(din
instructiunea anterioara)
*/
void setRelayState(int relay, int state) {
if (state == 1) bitSet(whichRelay, relay);
if (state == 0) bitClear(whichRelay, relay);
Wire.beginTransmission(0x48);
Wire.write(0x02);
Wire.write(0xA0);
Wire.write(0x40);
Wire.write(whichRelay);
Wire.endTransmission();
}
Cum functioneaza?
Dupa ce ai incarcat sketch-ul in Arduino, deschide monitorul serial si
tasteaza in casuta alaturi de buton Send urmatoarele comenzi:
• led 1
• led 2
• led 3
http://www.robofun.ro/forum
• relay 1
• relay 2
• relay on
• relay off
Vei observa ca led-urile si releele isi schimba starea in functie de
comanda utilizata (pentru led-uri, vei sesiza vizual modificarea starii, iar pentru
relee vei auzi click-ul pe care il fac cand isi modifica starea).
Ce se intampla in program ?
Functia setup() initializeaza portul serial la 9600 baud, interfata I2C la
frecventa de 50Khz si aduce modulul MOD-IO2 in starea in care led-urile si
releele sunt oprite, prin cele 3 functii: setareGPIO, setLedGPIO, setRelay.
Se aloca din memorie 200 de caractere pentru variabila inputString.
In bucla loop() se testeaza daca stringComplete este true. Aceasta
variabila este legata de functia serialEvent(), ea fiind executata automat de
http://www.robofun.ro/forum
Arduino, adica nu trebuie sa o apelezi undeva in program.
In functia serialEvent() se receptioneaza caracterele de la monitorul
serial si se stocheaza in inputString. Tot aici se cauta daca s-a tastat Enter
( echivalentul lui 'n' sau new line). Daca s-a tastat inseamna ca s-a introdus
comanda completa.
if (inChar == 'n') {
stringComplete = true;
}
Cand s-a receptionat o comanda (un Enter), stringComplete devine
true.
Revenind in bucla loop(), daca variabila este true atunci se cauta
comanda (se testeaza inputString de mai multe ori) iar pentru fiecare comanda
se apeleaza o functie (fie ea setGPIOState sau setRelayState).
Functia setareGPIO() seteaza portul GPIO al placii MOD-IO, ca iesire
(output). Se comporta exact ca porturile lui Arduino (INPUT/OUTPUT).
Functia setGPIOState(int gpio, int state) primeste doua argumente si
anume portul GPIO si starea in care va comuta. In interiorul functiei, Arduino ii
transmite placii MOD-IO, comanda de a aprinde led-ul conectat la portul GPIO.
Asemanator functioneaza si functia setRelayState(int relay, int
state). Primeste doua argumente: relay si state respectiv „care dintre relee“ si
in ce stare va comuta.
Detaliile despre placa MOD-IO2 si anume, setul de comenzi, formatul
adreselor, etc sunt explicate in manualul acesteia.
http://www.robofun.ro/forum

More Related Content

What's hot

Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiCurs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiIulius Bors
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsIulius Bors
 
Curs gratuitarduino lectia1-arduinoblink
Curs gratuitarduino lectia1-arduinoblinkCurs gratuitarduino lectia1-arduinoblink
Curs gratuitarduino lectia1-arduinoblinkIulius Bors
 
Curs gratuitarduino lectia2-senzorianalogici
Curs gratuitarduino lectia2-senzorianalogiciCurs gratuitarduino lectia2-senzorianalogici
Curs gratuitarduino lectia2-senzorianalogiciIulius Bors
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareIulius Bors
 
Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul internIulius Bors
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaIulius Bors
 
Arduino multiplexarea le-durilor
Arduino multiplexarea le-durilorArduino multiplexarea le-durilor
Arduino multiplexarea le-durilorIulius Bors
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2cIulius Bors
 
Arduino indicatoare cp-usiram
Arduino indicatoare cp-usiramArduino indicatoare cp-usiram
Arduino indicatoare cp-usiramIulius Bors
 

What's hot (11)

Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiCurs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosferici
 
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocs
 
Curs gratuitarduino lectia1-arduinoblink
Curs gratuitarduino lectia1-arduinoblinkCurs gratuitarduino lectia1-arduinoblink
Curs gratuitarduino lectia1-arduinoblink
 
Curs gratuitarduino lectia2-senzorianalogici
Curs gratuitarduino lectia2-senzorianalogiciCurs gratuitarduino lectia2-senzorianalogici
Curs gratuitarduino lectia2-senzorianalogici
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicare
 
Arduino comparatorul intern
Arduino comparatorul internArduino comparatorul intern
Arduino comparatorul intern
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzoriforta
 
Arduino multiplexarea le-durilor
Arduino multiplexarea le-durilorArduino multiplexarea le-durilor
Arduino multiplexarea le-durilor
 
Arduino comunicatie i2c
Arduino comunicatie i2cArduino comunicatie i2c
Arduino comunicatie i2c
 
Arduino indicatoare cp-usiram
Arduino indicatoare cp-usiramArduino indicatoare cp-usiram
Arduino indicatoare cp-usiram
 
Arduino - GPIO
Arduino - GPIOArduino - GPIO
Arduino - GPIO
 

Viewers also liked

Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcIulius Bors
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionIulius Bors
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaIulius Bors
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Iulius Bors
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapseIulius Bors
 
Arduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxArduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxIulius Bors
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8Iulius Bors
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteoIulius Bors
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803Iulius Bors
 
Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12Iulius Bors
 
Arduino toraspberrypi firmata
Arduino toraspberrypi firmataArduino toraspberrypi firmata
Arduino toraspberrypi firmataIulius Bors
 
Arduino gyro stabilizator
Arduino gyro stabilizatorArduino gyro stabilizator
Arduino gyro stabilizatorIulius Bors
 
Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduinoIulius Bors
 

Viewers also liked (15)

Conector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pcConector bluetoothmatesilver arduino-pc
Conector bluetoothmatesilver arduino-pc
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueedition
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastatura
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapse
 
Arduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linuxArduino yun arduino-wifi-ethernet-linux
Arduino yun arduino-wifi-ethernet-linux
 
Arduino matriceled8x8
Arduino matriceled8x8Arduino matriceled8x8
Arduino matriceled8x8
 
Asamblare statie meteo
Asamblare statie meteoAsamblare statie meteo
Asamblare statie meteo
 
Arduino rtc
Arduino rtcArduino rtc
Arduino rtc
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803
 
Arduino uno rfidid-12
Arduino uno rfidid-12Arduino uno rfidid-12
Arduino uno rfidid-12
 
Arduino toraspberrypi firmata
Arduino toraspberrypi firmataArduino toraspberrypi firmata
Arduino toraspberrypi firmata
 
Arduino gyro stabilizator
Arduino gyro stabilizatorArduino gyro stabilizator
Arduino gyro stabilizator
 
Arduino pid
Arduino pidArduino pid
Arduino pid
 
Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduino
 

Similar to Arduino releemodio2

Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Iulius Bors
 
Adxl345 raspberry pi
Adxl345 raspberry piAdxl345 raspberry pi
Adxl345 raspberry piIulius Bors
 
Eap 202 astabil_555_4.0
Eap 202 astabil_555_4.0Eap 202 astabil_555_4.0
Eap 202 astabil_555_4.0Daniel Rosner
 
Arduino gsm gprs shield
Arduino   gsm gprs shieldArduino   gsm gprs shield
Arduino gsm gprs shieldIulius Bors
 
Arduino alcoolmetru
Arduino alcoolmetruArduino alcoolmetru
Arduino alcoolmetruIulius Bors
 
Informatik 2 gpio
Informatik 2 gpioInformatik 2 gpio
Informatik 2 gpioIoana Culic
 
Eap 103 termometru_4.0
Eap 103 termometru_4.0Eap 103 termometru_4.0
Eap 103 termometru_4.0Daniel Rosner
 
Controlul unui motor pas cu pas
Controlul unui motor pas cu pasControlul unui motor pas cu pas
Controlul unui motor pas cu paskramactar
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduinoIulius Bors
 
Arduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aArduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aIulius Bors
 
Cursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfCursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfChristinaArgesanu
 
E A P D 2 Astabil Cu 555
E A P  D 2 Astabil Cu 555E A P  D 2 Astabil Cu 555
E A P D 2 Astabil Cu 555Daniel Rosner
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretIulius Bors
 

Similar to Arduino releemodio2 (16)

Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298Arduino wifi shield-drivermotoarel298
Arduino wifi shield-drivermotoarel298
 
Adxl345 raspberry pi
Adxl345 raspberry piAdxl345 raspberry pi
Adxl345 raspberry pi
 
Eap 202 astabil_555_4.0
Eap 202 astabil_555_4.0Eap 202 astabil_555_4.0
Eap 202 astabil_555_4.0
 
Arduino gsm gprs shield
Arduino   gsm gprs shieldArduino   gsm gprs shield
Arduino gsm gprs shield
 
Arduino alcoolmetru
Arduino alcoolmetruArduino alcoolmetru
Arduino alcoolmetru
 
Informatik 2 gpio
Informatik 2 gpioInformatik 2 gpio
Informatik 2 gpio
 
Eap 103 termometru_4.0
Eap 103 termometru_4.0Eap 103 termometru_4.0
Eap 103 termometru_4.0
 
Proiect PP
Proiect PPProiect PP
Proiect PP
 
Controlul unui motor pas cu pas
Controlul unui motor pas cu pasControlul unui motor pas cu pas
Controlul unui motor pas cu pas
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduino
 
Arduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-aArduino gsmgprs-shield-partea-a-2-a
Arduino gsmgprs-shield-partea-a-2-a
 
Cursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdfCursuri. Calculatoare de bord.pdf
Cursuri. Calculatoare de bord.pdf
 
236700985 ret521
236700985 ret521236700985 ret521
236700985 ret521
 
E A P D 2 Astabil Cu 555
E A P  D 2 Astabil Cu 555E A P  D 2 Astabil Cu 555
E A P D 2 Astabil Cu 555
 
Arduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecretArduino yala electronicabazatapecodsecret
Arduino yala electronicabazatapecodsecret
 
Arduino - PWM
Arduino - PWMArduino - PWM
Arduino - PWM
 

More from Iulius Bors

Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspotIulius Bors
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Iulius Bors
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaIulius Bors
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelIulius Bors
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaIulius Bors
 
Cum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiCum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiIulius Bors
 

More from Iulius Bors (6)

Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspot
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificiala
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcel
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistanta
 
Cum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypiCum instaleziapachesimysql peraspberrypi
Cum instaleziapachesimysql peraspberrypi
 

Arduino releemodio2

  • 1.
  • 2. Textul si imaginile din acest document sunt licentiate Attribution-NonCommercial-NoDerivs CC BY-NC-ND Codul sursa din acest document este licentiat Public-Domain Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website / blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari. http://www.robofun.ro/forum
  • 3. Arduino UNO si MOD-IO2 In acest tutorial vom exemplifica functionarea modulului MOD-IO2 impreuna cu Arduino UNO. Modulul MOD-IO2 este un modul cu microcontroller dedicat, comunica cu Arduino prin protocolul I2C, si dispune de doua relee si mai multe porturi GPIO (similare cu porturile digitale din Arduino). Vei avea nevoie de urmatoarele componente: • Arduino UNO • Placa cu relee MOD-IO2 • Adaptor Rpi-UEXT • 3 led-uri brick de culori diferite • Breadboard • Fire pentru conexiuni Cateva lucruri despre MOD-IO2 : • contine pe placa un microcontroller dedicat care controleaza cele doua relee de pe placa, precum si mai multe porturi GPIO (similare cu porturile digitale din Arduino). • se conecteaza cu Arduino doar prin 2 fire (SCL, SDA – protocol I2C) la Arduino. • se alimenteaza de la o sursa de tensiune stabilizata de 12V. • este adresabil, ceea ce inseamna ca poti inlantui mai multe module MOD- IO2. In cele de mai jos vom utiliza un breadboard, impreuna cu adaptorul UEXT pentru a simplifica lucrurile si (astfel vom avea masa comuna GND intre led-uri, Arduino si MOD-IO2). http://www.robofun.ro/forum
  • 4. Pentru exemplificare, vom folosi trei led-uri brick conectate la placa MOD- IO2. Nu vom conecta nimic la relee, zgomotul pe care il fac acestea la cuplare si decuplare va fi suficient pentru a ne da seama ca acestea functioneaza. In proiectul tau, poti folosi doar releele (daca nu ai nevoie de porturi GPIO suplimentare; ceea ce inseamna ca in cele ce urmeaza esti liber sa ignori led- urile) conectate la porturile GPIO. http://www.robofun.ro/forum
  • 5. Tabelul de conexiuni: Arduino UNO SCL Rpi-UEXT SCL Arduino UNO SDA Rpi-UEXT SDA Led brick galben IN MOD-IO2 GPIO 0 Led brick verde IN MOD-IO2 GPIO 1 Led brick rosu IN MOD-IO2 GPIO 2 Led brick galben GND Breadboard GND Led brick verde GND Breadboard GND Led brick rosu GND Breadboard GND Arduino UNO GND Breadboard GND MOD-IO2 GND Breadboard GND Pentru comunicarea I2C intre Arduino si MOD-IO2, Arduino este master iar placa MOD-IO2 functioneaza pe post de slave. Arduino transmite comenzi prin magistrala I2C la frecventa de 100Khz. Din pacate, MOD-IO2 intelege doar comenzi trimise la cel mult 50KHz, asa ca va fi necesar sa modifici frecventa placii Arduino in fisierului de configurare de mai jos. arduino-1.0.2/libraries/Wire/utility Deschide fisierul twi.h si cauta liniile: #ifndef TWI_FREQ #define TWI_FREQ 100000L #endif Schimba valoarea 100000L in 50000L. Cand vrei sa abordezi alte proiecte, nu uita sa schimbi la loc valoarea. Programul. Incarca in Arduino urmatorul sketch. http://www.robofun.ro/forum
  • 6. #include <Wire.h> String inputString = ""; boolean stringComplete = false; int led = 0; int whichRelay = 0; void setup() { Serial.begin(9600); inputString.reserve(200); Wire.begin(); setareGPIO(); setGPIOState(0,0); setGPIOState(1,0); setGPIOState(2,0); setRelayState(0,0); setRelayState(1,0); } void loop() { if (stringComplete) { if (inputString == "led 1 onn") { setGPIOState(0,1); Serial.println("GPIO Led 1 ON"); } else if (inputString == "led 1 offn") { setGPIOState(0,0); Serial.println("GPIO Led 1 OFF"); } else if (inputString == "led 2 onn") { setGPIOState(1,1); Serial.println("GPIO Led 2 ON"); } else if (inputString == "led 2 offn") { setGPIOState(1,0); Serial.println("GPIO Led 2 OFF"); } else if (inputString == "led 3 onn") { setGPIOState(2,1); Serial.println("GPIO Led 3 ON"); } else if (inputString == "led 3 offn") { setGPIOState(2,0); Serial.println("GPIO Led 3 OFF"); } else if (inputString == "relay 1 onn") { setRelayState(0,1); Serial.println("RELAY 1 ON"); } else if (inputString == "relay 1 offn") { setRelayState(0,0); Serial.println("RELAY 1 OFF"); } else if (inputString == "relay 2 onn") { setRelayState(1,1); Serial.println("RELAY 2 ON"); http://www.robofun.ro/forum
  • 7. } else if (inputString == "relay 2 offn") { setRelayState(1,0); Serial.println("RELAY 2 OFF"); } else if (inputString == "relays onn") { setRelayState(0,1); setRelayState(1,1); Serial.println("BOTH RELAYS ON"); } else if (inputString == "relays offn") { setRelayState(0,0); setRelayState(1,0); Serial.println("BOTH RELAYS OFF"); } inputString = ""; stringComplete = false; } } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == 'n') { stringComplete = true; } } } void setareGPIO() { Wire.beginTransmission(0x48); Wire.write(0x02); Wire.write(0xA0); Wire.write(0x01); Wire.write(0x00); Wire.endTransmission(); } /* Exemple de situatii setGPIOState(0,1) – led-ul conectat la GPIO 0 devine ON; restul led-urilor nu isi modifica starea setGPIOState(1,1) – led-ul conectat la GPIO 1 devine ON setGPIOState(0,0) – led-ul conectat la GPIO 0 devine OFF setGPIOState(1,0) – led-ul conectat la GPIO 1 devine OFF setGPIOState(2,1) – led-ul conectat la GPIO 2 devine ON setGPIOState(2,0) – led-ul conectat la GPIO 2 devine OFF */ http://www.robofun.ro/forum
  • 8. void setGPIOState(int gpio, int state) { if (state == 1) bitSet(led, gpio); if (state == 0) bitClear(led, gpio); Wire.beginTransmission(0x48); Wire.write(0x02); Wire.write(0xA0); Wire.write(0x02); Wire.write(led); Wire.endTransmission(); } /* Exemple de situatii: setRelayState(0,1) – releu 1 cuplat; releu 2 decuplat setRelayState(1,1) – releu 2 cuplat; releu 1 ramane cuplat(din instructiunea anterioara) setRelayState(0,0) – releu 1 decuplat; releu 2 ramane cuplat(din instructiunea anterioara) setRelayState(1,0) – releu 2 decuplat; releu 1 ramane decuplat(din instructiunea anterioara) */ void setRelayState(int relay, int state) { if (state == 1) bitSet(whichRelay, relay); if (state == 0) bitClear(whichRelay, relay); Wire.beginTransmission(0x48); Wire.write(0x02); Wire.write(0xA0); Wire.write(0x40); Wire.write(whichRelay); Wire.endTransmission(); } Cum functioneaza? Dupa ce ai incarcat sketch-ul in Arduino, deschide monitorul serial si tasteaza in casuta alaturi de buton Send urmatoarele comenzi: • led 1 • led 2 • led 3 http://www.robofun.ro/forum
  • 9. • relay 1 • relay 2 • relay on • relay off Vei observa ca led-urile si releele isi schimba starea in functie de comanda utilizata (pentru led-uri, vei sesiza vizual modificarea starii, iar pentru relee vei auzi click-ul pe care il fac cand isi modifica starea). Ce se intampla in program ? Functia setup() initializeaza portul serial la 9600 baud, interfata I2C la frecventa de 50Khz si aduce modulul MOD-IO2 in starea in care led-urile si releele sunt oprite, prin cele 3 functii: setareGPIO, setLedGPIO, setRelay. Se aloca din memorie 200 de caractere pentru variabila inputString. In bucla loop() se testeaza daca stringComplete este true. Aceasta variabila este legata de functia serialEvent(), ea fiind executata automat de http://www.robofun.ro/forum
  • 10. Arduino, adica nu trebuie sa o apelezi undeva in program. In functia serialEvent() se receptioneaza caracterele de la monitorul serial si se stocheaza in inputString. Tot aici se cauta daca s-a tastat Enter ( echivalentul lui 'n' sau new line). Daca s-a tastat inseamna ca s-a introdus comanda completa. if (inChar == 'n') { stringComplete = true; } Cand s-a receptionat o comanda (un Enter), stringComplete devine true. Revenind in bucla loop(), daca variabila este true atunci se cauta comanda (se testeaza inputString de mai multe ori) iar pentru fiecare comanda se apeleaza o functie (fie ea setGPIOState sau setRelayState). Functia setareGPIO() seteaza portul GPIO al placii MOD-IO, ca iesire (output). Se comporta exact ca porturile lui Arduino (INPUT/OUTPUT). Functia setGPIOState(int gpio, int state) primeste doua argumente si anume portul GPIO si starea in care va comuta. In interiorul functiei, Arduino ii transmite placii MOD-IO, comanda de a aprinde led-ul conectat la portul GPIO. Asemanator functioneaza si functia setRelayState(int relay, int state). Primeste doua argumente: relay si state respectiv „care dintre relee“ si in ce stare va comuta. Detaliile despre placa MOD-IO2 si anume, setul de comenzi, formatul adreselor, etc sunt explicate in manualul acesteia. http://www.robofun.ro/forum