SlideShare a Scribd company logo
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.
Arduino – monitorizare locuinta
In acest tutorial vei descoperi cum se poate monitoriza o locuinta utilizand un senzor de
temperatura, un senzor de efractie, o placa Arduino si un shield Wi-FI. Este o solutie simpla prin care
poti observa daca cineva ti-a deschis usa de la intrare sau daca temperatura este normala.
Exista o gama variata de senzori care pot detecta efractia (senzor magnetic, inductiv,
fotoelectric). In cazul de fata s-a utilizat, pe post de senzor de efractie, un buton brick. Daca butonul a
fost apasat se considera ca usa a fost deschisa si senzorul a fost declansat.
Toata informatia o vei citi cu ajutorul unui browser deoarece placa Arduino se va comporta ca
si un server web. Asta inseamna ca iti poti monitoriza locuinta chiar si de pe un smartphone cu
conexiune la internet.
Vei avea nevoie de urmatoarele componente:
• O placa Arduino - http://www.robofun.ro/arduino
• Un Arduino Wifi Shield - http://www.robofun.ro/arduino_wifi_shield
• Un alimentator extern Arduino
http://www.robofun.ro/surse_de_alimentare/alimentatoare/alimentator-extern-arduino
• Un senzor de presiune atmosferica si temperatura BMP085 Blue Edition
http://www.robofun.ro/senzori/vreme/senzor-presiune-atmosferica-bmp085-blue
• Un buton mare brick - http://www.robofun.ro/electronice/butoane/buton-mare-brick
• Un breadboard - http://www.robofun.ro/breadboard/breadboard_mini
• Fire de conexiune mama-tata si tata-tata - http://www.robofun.ro/cabluri
Cum se conecteaza senzorul si butonul brick ?
1. Infige shield-ul Wifi in pinii placii Arduino.
2. Conecteaza senzorul de presiune atmosferica si temperatura BMP085 Blue Edition dupa
urmatorul tabel:
http://www.robofun.ro/forum
Senzor pin VCC Arduino pin 3.3V
Senzor pin GND Arduino pin GND
Senzor pin SDA Arduino pin SDA
Senzor pin SCL Arduino pin SCL
3. Conecteaza butonul brick astfel:
Buton pin GND Arduino pin GND
Buton pin VCC Arduino pin 5V
Buton pin OUT Arduino pin D2
4. Conecteaza alimentatorul Arduino in mufa Jack.
http://www.robofun.ro/forum
Codul sursa.
Dupa ce ai realizat toate conexiunile fizice dintre senzori si placa Arduino, acum este momentul
sa incarci sketch-ul de mai jos.
Inainte de a incarca sketch-ul in Arduino cauta cele 2 linii si modifica-le conform routerului tau:
char ssid[] = "ssid";
char pass[] = "parola secreta";
Copiaza codul de mai jos cu copy/paste, incarca-l in placa Arduino si deschide Monitorul
Serial. La cateva momente de la deschiderea Monitorului Serial iti va aparea urmatoarea informatie.
Informatia de mai sus iti arata ca placa Arduino s-a conectat cu succes la router si este pregatita
sa primeasca cereri. IP-ul care apare in imagine este IP-ul pe care il tastezi in browser.
Poti sa deschizi orice browser si sa tastezi IP-ul in bara de link-uri. Asa iti va aparea informatia
dupa ce te-ai conectat la placa Arduino.
Utilizand un smartphone iti va aparea asa.
http://www.robofun.ro/forum
In acelasi timp poti observa in Monitorul Serial cateva detalii despre dispozitivul care se
conecteaza la placa Arduino.
http://www.robofun.ro/forum
#include <SPI.h>
#include <WiFi.h>
#include <Wire.h>
#define BMP085_ADDRESS 0x77 // I2C address of BMP085
const unsigned char OSS = 0; // Oversampling Setting
// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;
long b5;
char ssid[] = "ssid";
char pass[] = "parola secreta";
int status = WL_IDLE_STATUS;
boolean door_status = false;
WiFiServer server(80);
void setup() {
pinMode(2, INPUT);
// start serial port for debugging purposes
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
// Attach interrupt to pin 2
attachInterrupt(0, setDoorStatus, FALLING);
// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
http://www.robofun.ro/forum
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
server.begin();
// you're connected now, so print out the status:
printWifiStatus();
}
void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a
newline
// character) and the line is blank, the http request has
ended,
// so you can send a reply
if (c == 'n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<meta http-equiv="refresh"
content="5">");
float temperature = bmp085GetTemperature(bmp085ReadUT());
float pressure = bmp085GetPressure(bmp085ReadUP());
float atm = pressure / 101325; // "standard atmosphere"
float altitude = calcAltitude(pressure);
client.print("Temperatura: ");
client.print(temperature);
client.print(" grade C.");
client.print(" Presiunea: ");
client.print(atm);
client.print(" atm.");
http://www.robofun.ro/forum
if (door_status == false){
client.println(" Usa este securizata");
}
else {
client.println(" Atentie! Usa a fost deschisa.");
}
client.println("<br />");
client.println("</html>");
break;
}
if (c == 'n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != 'r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
http://www.robofun.ro/forum
void setDoorStatus() {
door_status = true;
}
void bmp085Calibration()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}
// Calculate temperature in deg C
float bmp085GetTemperature(unsigned int ut){
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
b5 = x1 + x2;
float temp = ((b5 + 8)>>4);
temp = temp /10;
return temp;
}
long bmp085GetPressure(unsigned long up){
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = b5 - 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
http://www.robofun.ro/forum
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
long temp = p;
return temp;
}
char bmp085Read(unsigned char address)
{
unsigned char data;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
return Wire.read();
http://www.robofun.ro/forum
}
// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}
// Read the uncompensated temperature value
unsigned int bmp085ReadUT(){
unsigned int ut;
// Write 0x2E into Register 0xF4
// This requests a temperature reading
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// Wait at least 4.5ms
delay(5);
// Read two bytes from registers 0xF6 and 0xF7
ut = bmp085ReadInt(0xF6);
return ut;
}
// Read the uncompensated pressure value
unsigned long bmp085ReadUP(){
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
http://www.robofun.ro/forum
// Write 0x34+(OSS<<6) into register 0xF4
// Request a pressure reading w/ oversampling setting
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
// Wait for conversion, delay time dependent on OSS
delay(2 + (3<<OSS));
// Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);
up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) |
(unsigned long) xlsb) >> (8-OSS);
return up;
}
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // start transmission to
device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int readRegister(int deviceAddress, byte address){
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while(!Wire.available()) {
// waiting
}
http://www.robofun.ro/forum
v = Wire.read();
return v;
}
float calcAltitude(float pressure){
float A = pressure/101325;
float B = 1/5.25588;
float C = pow(A,B);
C = 1 - C;
C = C /0.0000225577;
return C;
}
http://www.robofun.ro/forum

More Related Content

DOCX
codings related to avr micro controller
PDF
Embedded system course projects - Arduino Course
DOCX
(381877808) 102054282 5-listing-program
DOCX
Realisation de controlleur VGA(VHDL)
PPTX
Arduino by bishal bhattarai IOE, Pashchimanchal Campus Pokhara, Nepal
DOCX
Direct analog
TXT
Ir remote kit_blink.pde
PDF
codings related to avr micro controller
Embedded system course projects - Arduino Course
(381877808) 102054282 5-listing-program
Realisation de controlleur VGA(VHDL)
Arduino by bishal bhattarai IOE, Pashchimanchal Campus Pokhara, Nepal
Direct analog
Ir remote kit_blink.pde

What's hot (18)

PDF
Itsp documentation quadcopter flight controller based on kalman filters
PPTX
Arduino cic3
PDF
AVR Micro controller Interfacing
PDF
Key recovery attacks against commercial white-box cryptography implementation...
PPTX
Bluetooth
PDF
Lecture7
DOCX
Simply arduino
PPT
Cs423 raw sockets_bw
PDF
Arduino projects &amp; tutorials
DOCX
Fingerprint base security system
PDF
selected input/output - sensors and actuators
PDF
Connectivity for Local Sensors and Actuators Using nRF24L01+
DOCX
Lampiran 1.programdocx
PDF
Dsd lab Practical File
PDF
Arduino Lecture 3 - Interactive Media CS4062 Semester 2 2009
PDF
Cataloge schneider plc schneider-dienhathe.vn
PDF
Webshield internet of things
PDF
PM16 Technical Specification 20022013
Itsp documentation quadcopter flight controller based on kalman filters
Arduino cic3
AVR Micro controller Interfacing
Key recovery attacks against commercial white-box cryptography implementation...
Bluetooth
Lecture7
Simply arduino
Cs423 raw sockets_bw
Arduino projects &amp; tutorials
Fingerprint base security system
selected input/output - sensors and actuators
Connectivity for Local Sensors and Actuators Using nRF24L01+
Lampiran 1.programdocx
Dsd lab Practical File
Arduino Lecture 3 - Interactive Media CS4062 Semester 2 2009
Cataloge schneider plc schneider-dienhathe.vn
Webshield internet of things
PM16 Technical Specification 20022013
Ad

Viewers also liked (20)

PDF
Curs gratuitarduino lectia6-senzoriforta
PDF
Curs gratuitarduino lectia9-senzoriatmosferici
PDF
Curs gratuitarduino lectia5-accelerometre
PDF
Set prizecomandatedinarduino
PDF
Arduino pid
PDF
Conector bluetoothmatesilver arduino-pc
PDF
Raspberry piuln2803
PDF
Curs gratuitarduino lectia15-seismografcuexcel
PDF
Arduino toraspberrypi firmata
PDF
Curs gratuitarduino lectia4-modalitati decomunicare
PDF
Arduino yala electronicabazatapecodsecret
PDF
Curs gratuitarduino lectia2-senzorianalogici
PDF
Programare in prolog_pentru_inteligenta_artificiala
PDF
Arduino releemodio2
PDF
Arduino wifi shield-drivermotoarel298
PDF
Arduino rtc
PDF
Curs gratuitarduino lectia10-lcd-uri
PDF
Motoare pascupasarduinoeasydriver
PDF
Curs gratuitarduino lectia1-arduinoblink
PDF
Arduino yun arduino-wifi-ethernet-linux
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia5-accelerometre
Set prizecomandatedinarduino
Arduino pid
Conector bluetoothmatesilver arduino-pc
Raspberry piuln2803
Curs gratuitarduino lectia15-seismografcuexcel
Arduino toraspberrypi firmata
Curs gratuitarduino lectia4-modalitati decomunicare
Arduino yala electronicabazatapecodsecret
Curs gratuitarduino lectia2-senzorianalogici
Programare in prolog_pentru_inteligenta_artificiala
Arduino releemodio2
Arduino wifi shield-drivermotoarel298
Arduino rtc
Curs gratuitarduino lectia10-lcd-uri
Motoare pascupasarduinoeasydriver
Curs gratuitarduino lectia1-arduinoblink
Arduino yun arduino-wifi-ethernet-linux
Ad

Similar to Arduino shield wifi-monitorizarelocuinta (20)

PDF
Introduction to Arduino and Circuits
PPTX
Gas leakage detection system
PDF
មេរៀនទីd៥ conneeeection with Arduino .pdf
PPTX
Sensors and Actuators in Arduino, Introduction
DOCX
Project_report_on_Attendance_system
PDF
Comunicação Android Arduino - JASI 2015
PDF
Embedded system lab work
KEY
Scottish Ruby Conference 2010 Arduino, Ruby RAD
PDF
Gaztea Tech Robotica 2016
PPTX
Arduino Programming Familiarization
PDF
Starting with Arduino
PPTX
IoT with openHAB on pcDuino3B
PPTX
Arduino Slides With Neopixels
PPT
Multi Sensory Communication 2/2
PDF
Arduino uno basic Experiments for beginner
PPTX
Fun with arduino
PDF
What will be quantization step size in numbers and in voltage for th.pdf
PDF
Android project
PDF
Introduction to Arduino
PPTX
Arduino intro.pptx
Introduction to Arduino and Circuits
Gas leakage detection system
មេរៀនទីd៥ conneeeection with Arduino .pdf
Sensors and Actuators in Arduino, Introduction
Project_report_on_Attendance_system
Comunicação Android Arduino - JASI 2015
Embedded system lab work
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Gaztea Tech Robotica 2016
Arduino Programming Familiarization
Starting with Arduino
IoT with openHAB on pcDuino3B
Arduino Slides With Neopixels
Multi Sensory Communication 2/2
Arduino uno basic Experiments for beginner
Fun with arduino
What will be quantization step size in numbers and in voltage for th.pdf
Android project
Introduction to Arduino
Arduino intro.pptx

More from Iulius Bors (14)

PDF
Raspberry pi wirelesshotspot
PDF
Raspberry pi timelapse
PDF
Raspberry pi lcd-shield20x4
PDF
Raspberry pi bmp085blueedition
PDF
Raspberry pi firmata - arduino
PDF
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
PDF
Curs gratuitarduino lectia13-mousesitastatura
PDF
Curs gratuitarduino lectia12-conexiunewifi-googledocs
PDF
Curs gratuitarduino lectia11-muzicacuarduino
PDF
Curs gratuitarduino lectia8-comunicareethernet
PDF
Curs gratuitarduino lectia7-senzoridistanta
PDF
Curs gratuitarduino lectia3-proiectesimple-1
PDF
Cum instaleziapachesimysql peraspberrypi
PDF
Asamblare statie meteo
Raspberry pi wirelesshotspot
Raspberry pi timelapse
Raspberry pi lcd-shield20x4
Raspberry pi bmp085blueedition
Raspberry pi firmata - arduino
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia3-proiectesimple-1
Cum instaleziapachesimysql peraspberrypi
Asamblare statie meteo

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Big Data Technologies - Introduction.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Empathic Computing: Creating Shared Understanding
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Approach and Philosophy of On baking technology
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
Machine Learning_overview_presentation.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
A comparative analysis of optical character recognition models for extracting...
20250228 LYD VKU AI Blended-Learning.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Big Data Technologies - Introduction.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Mobile App Security Testing_ A Comprehensive Guide.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
“AI and Expert System Decision Support & Business Intelligence Systems”
Empathic Computing: Creating Shared Understanding
Building Integrated photovoltaic BIPV_UPV.pdf
Approach and Philosophy of On baking technology
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Spectroscopy.pptx food analysis technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Machine Learning_overview_presentation.pptx
sap open course for s4hana steps from ECC to s4
Review of recent advances in non-invasive hemoglobin estimation
Assigned Numbers - 2025 - Bluetooth® Document
A comparative analysis of optical character recognition models for extracting...

Arduino shield wifi-monitorizarelocuinta

  • 1. 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.
  • 2. Arduino – monitorizare locuinta In acest tutorial vei descoperi cum se poate monitoriza o locuinta utilizand un senzor de temperatura, un senzor de efractie, o placa Arduino si un shield Wi-FI. Este o solutie simpla prin care poti observa daca cineva ti-a deschis usa de la intrare sau daca temperatura este normala. Exista o gama variata de senzori care pot detecta efractia (senzor magnetic, inductiv, fotoelectric). In cazul de fata s-a utilizat, pe post de senzor de efractie, un buton brick. Daca butonul a fost apasat se considera ca usa a fost deschisa si senzorul a fost declansat. Toata informatia o vei citi cu ajutorul unui browser deoarece placa Arduino se va comporta ca si un server web. Asta inseamna ca iti poti monitoriza locuinta chiar si de pe un smartphone cu conexiune la internet. Vei avea nevoie de urmatoarele componente: • O placa Arduino - http://www.robofun.ro/arduino • Un Arduino Wifi Shield - http://www.robofun.ro/arduino_wifi_shield • Un alimentator extern Arduino http://www.robofun.ro/surse_de_alimentare/alimentatoare/alimentator-extern-arduino • Un senzor de presiune atmosferica si temperatura BMP085 Blue Edition http://www.robofun.ro/senzori/vreme/senzor-presiune-atmosferica-bmp085-blue • Un buton mare brick - http://www.robofun.ro/electronice/butoane/buton-mare-brick • Un breadboard - http://www.robofun.ro/breadboard/breadboard_mini • Fire de conexiune mama-tata si tata-tata - http://www.robofun.ro/cabluri Cum se conecteaza senzorul si butonul brick ? 1. Infige shield-ul Wifi in pinii placii Arduino. 2. Conecteaza senzorul de presiune atmosferica si temperatura BMP085 Blue Edition dupa urmatorul tabel: http://www.robofun.ro/forum
  • 3. Senzor pin VCC Arduino pin 3.3V Senzor pin GND Arduino pin GND Senzor pin SDA Arduino pin SDA Senzor pin SCL Arduino pin SCL 3. Conecteaza butonul brick astfel: Buton pin GND Arduino pin GND Buton pin VCC Arduino pin 5V Buton pin OUT Arduino pin D2 4. Conecteaza alimentatorul Arduino in mufa Jack. http://www.robofun.ro/forum
  • 4. Codul sursa. Dupa ce ai realizat toate conexiunile fizice dintre senzori si placa Arduino, acum este momentul sa incarci sketch-ul de mai jos. Inainte de a incarca sketch-ul in Arduino cauta cele 2 linii si modifica-le conform routerului tau: char ssid[] = "ssid"; char pass[] = "parola secreta"; Copiaza codul de mai jos cu copy/paste, incarca-l in placa Arduino si deschide Monitorul Serial. La cateva momente de la deschiderea Monitorului Serial iti va aparea urmatoarea informatie. Informatia de mai sus iti arata ca placa Arduino s-a conectat cu succes la router si este pregatita sa primeasca cereri. IP-ul care apare in imagine este IP-ul pe care il tastezi in browser. Poti sa deschizi orice browser si sa tastezi IP-ul in bara de link-uri. Asa iti va aparea informatia dupa ce te-ai conectat la placa Arduino. Utilizand un smartphone iti va aparea asa. http://www.robofun.ro/forum
  • 5. In acelasi timp poti observa in Monitorul Serial cateva detalii despre dispozitivul care se conecteaza la placa Arduino. http://www.robofun.ro/forum
  • 6. #include <SPI.h> #include <WiFi.h> #include <Wire.h> #define BMP085_ADDRESS 0x77 // I2C address of BMP085 const unsigned char OSS = 0; // Oversampling Setting // Calibration values int ac1; int ac2; int ac3; unsigned int ac4; unsigned int ac5; unsigned int ac6; int b1; int b2; int mb; int mc; int md; long b5; char ssid[] = "ssid"; char pass[] = "parola secreta"; int status = WL_IDLE_STATUS; boolean door_status = false; WiFiServer server(80); void setup() { pinMode(2, INPUT); // start serial port for debugging purposes Serial.begin(9600); Wire.begin(); bmp085Calibration(); // Attach interrupt to pin 2 attachInterrupt(0, setDoorStatus, FALLING); // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); http://www.robofun.ro/forum
  • 7. status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } server.begin(); // you're connected now, so print out the status: printWifiStatus(); } void loop() { // listen for incoming clients WiFiClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == 'n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<meta http-equiv="refresh" content="5">"); float temperature = bmp085GetTemperature(bmp085ReadUT()); float pressure = bmp085GetPressure(bmp085ReadUP()); float atm = pressure / 101325; // "standard atmosphere" float altitude = calcAltitude(pressure); client.print("Temperatura: "); client.print(temperature); client.print(" grade C."); client.print(" Presiunea: "); client.print(atm); client.print(" atm."); http://www.robofun.ro/forum
  • 8. if (door_status == false){ client.println(" Usa este securizata"); } else { client.println(" Atentie! Usa a fost deschisa."); } client.println("<br />"); client.println("</html>"); break; } if (c == 'n') { // you're starting a new line currentLineIsBlank = true; } else if (c != 'r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disonnected"); } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); } http://www.robofun.ro/forum
  • 9. void setDoorStatus() { door_status = true; } void bmp085Calibration() { ac1 = bmp085ReadInt(0xAA); ac2 = bmp085ReadInt(0xAC); ac3 = bmp085ReadInt(0xAE); ac4 = bmp085ReadInt(0xB0); ac5 = bmp085ReadInt(0xB2); ac6 = bmp085ReadInt(0xB4); b1 = bmp085ReadInt(0xB6); b2 = bmp085ReadInt(0xB8); mb = bmp085ReadInt(0xBA); mc = bmp085ReadInt(0xBC); md = bmp085ReadInt(0xBE); } // Calculate temperature in deg C float bmp085GetTemperature(unsigned int ut){ long x1, x2; x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15; x2 = ((long)mc << 11)/(x1 + md); b5 = x1 + x2; float temp = ((b5 + 8)>>4); temp = temp /10; return temp; } long bmp085GetPressure(unsigned long up){ long x1, x2, x3, b3, b6, p; unsigned long b4, b7; b6 = b5 - 4000; // Calculate B3 x1 = (b2 * (b6 * b6)>>12)>>11; x2 = (ac2 * b6)>>11; x3 = x1 + x2; b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2; // Calculate B4 x1 = (ac3 * b6)>>13; http://www.robofun.ro/forum
  • 10. x2 = (b1 * ((b6 * b6)>>12))>>16; x3 = ((x1 + x2) + 2)>>2; b4 = (ac4 * (unsigned long)(x3 + 32768))>>15; b7 = ((unsigned long)(up - b3) * (50000>>OSS)); if (b7 < 0x80000000) p = (b7<<1)/b4; else p = (b7/b4)<<1; x1 = (p>>8) * (p>>8); x1 = (x1 * 3038)>>16; x2 = (-7357 * p)>>16; p += (x1 + x2 + 3791)>>4; long temp = p; return temp; } char bmp085Read(unsigned char address) { unsigned char data; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 1); while(!Wire.available()) ; return Wire.read(); http://www.robofun.ro/forum
  • 11. } // Read 2 bytes from the BMP085 // First byte will be from 'address' // Second byte will be from 'address'+1 int bmp085ReadInt(unsigned char address) { unsigned char msb, lsb; Wire.beginTransmission(BMP085_ADDRESS); Wire.write(address); Wire.endTransmission(); Wire.requestFrom(BMP085_ADDRESS, 2); while(Wire.available()<2) ; msb = Wire.read(); lsb = Wire.read(); return (int) msb<<8 | lsb; } // Read the uncompensated temperature value unsigned int bmp085ReadUT(){ unsigned int ut; // Write 0x2E into Register 0xF4 // This requests a temperature reading Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x2E); Wire.endTransmission(); // Wait at least 4.5ms delay(5); // Read two bytes from registers 0xF6 and 0xF7 ut = bmp085ReadInt(0xF6); return ut; } // Read the uncompensated pressure value unsigned long bmp085ReadUP(){ unsigned char msb, lsb, xlsb; unsigned long up = 0; http://www.robofun.ro/forum
  • 12. // Write 0x34+(OSS<<6) into register 0xF4 // Request a pressure reading w/ oversampling setting Wire.beginTransmission(BMP085_ADDRESS); Wire.write(0xF4); Wire.write(0x34 + (OSS<<6)); Wire.endTransmission(); // Wait for conversion, delay time dependent on OSS delay(2 + (3<<OSS)); // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB) msb = bmp085Read(0xF6); lsb = bmp085Read(0xF7); xlsb = bmp085Read(0xF8); up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS); return up; } void writeRegister(int deviceAddress, byte address, byte val) { Wire.beginTransmission(deviceAddress); // start transmission to device Wire.write(address); // send register address Wire.write(val); // send value to write Wire.endTransmission(); // end transmission } int readRegister(int deviceAddress, byte address){ int v; Wire.beginTransmission(deviceAddress); Wire.write(address); // register to read Wire.endTransmission(); Wire.requestFrom(deviceAddress, 1); // read a byte while(!Wire.available()) { // waiting } http://www.robofun.ro/forum
  • 13. v = Wire.read(); return v; } float calcAltitude(float pressure){ float A = pressure/101325; float B = 1/5.25588; float C = pow(A,B); C = 1 - C; C = C /0.0000225577; return C; } http://www.robofun.ro/forum