-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPrototype 1 : Ensemble du programme avec ordinateur
178 lines (152 loc) · 6.09 KB
/
Prototype 1 : Ensemble du programme avec ordinateur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
// Modifier Buffer Arduino : dans un terminal entrer la commande : sudo gedit /usr/share/arduino/libraries/SoftwareSerial/SoftwareSerial.h
// Modifier la valeur de MAX_RX_BUFFER à 256
#include <OneWire.h>
#include <SoftwareSerial.h>
#define DS18B20 0x28
#define BROCHE_ONEWIRE 4
#define SEUIL_BAS 15.0
#define SEUIL_HAUT 25.0
#define TEMPS_ATTENTE 30 // En secondes
#define TEMPS_ATTENTE_SECURITE 6 // En secondes
// Variables capteurs
OneWire ds(BROCHE_ONEWIRE);
byte adresseCapteur1 [8]; // Adresse du premier capteur
float temperatureCapteur1= (SEUIL_BAS + SEUIL_HAUT) /2;
boolean intervalleCapteur1=true;
// Variables relatives au shield GPRS
SoftwareSerial GSM(7,8); // GSM : relatif au shield GPRS ; Serial : relatif à l'ordinateur
int ledGSM = 13;
int onModulePin = 9; // the pin to switch on the module (without press on button)
String phone_number="+33647877083"; // ********* is the number to call
void getTemperature (float *temp, const byte addr[])
{
byte data[2];
ds.reset();
ds.select(addr); // Sélectionne le capteur de température
ds.write(0x44,1); // Lance la mesure de température
delay(800);
ds.reset(); // Reset pour envoyer maintenant la demande de lecture
ds.select(addr);
ds.write(0xBE); // Demande de lecture du scratchpad
data[0] = ds.read(); // Lit les 2 premiers octets du scratchpad sur lesquels est contenue la température
data[1] = ds.read();
*temp = ((data[1] << 8) | data[0]) * 0.0625; // Conversion en degrés celsius
}
void switchGSMModule()
{
digitalWrite(onModulePin,HIGH);
delay(2100);
digitalWrite(onModulePin,LOW);
}
boolean envoyerUnMessage(float temp, boolean intervalle) // "intervalle" sert a différencier si est rentré ou sorti de l'intervalle de température
{
switchGSMModule(); // switches the GSM module ON
delay(500);
GSM.print("AT+CPIN=\"0000\"\r\n"); // Entrer le code PIN
Serial.print("AT+CPIN=\"0000\"\r\n"); // Affichage réponse sur ordinateur
while (!GSM.available());
while (GSM.available())
{
Serial.write(GSM.read());
}
delay(20000); // Attente de l'établissement du réseau
while (!GSM.available());
while (GSM.available())
{
Serial.write(GSM.read());
}
GSM.print("AT+CMGF=1\r\n"); // sets the SMS mode to text
while (!GSM.available());
while (GSM.available())
{
Serial.write(GSM.read());
}
delay(1600);
GSM.print("AT+CMGS=\""); // send the SMS number
GSM.print(phone_number);
GSM.print("\"\r\n");
while(GSM.read()!='>');
if (!intervalle) // SMS body, deux possibilités
{
GSM.print("Attention, le seuil critique de temperature ");
GSM.print("dans le capteur 1 a ete atteint. La temperature");
GSM.print(" est de ");
}
else
{
GSM.print("La temperature est de nouveau acceptable. Elle est de ");
}
GSM.print(temp, 2);
GSM.print(" degres celsius."); // Fin SMS body
delay(500);
GSM.write(0x1A); // Sends ++
GSM.write(0x0D);
GSM.write(0x0A);
while (!GSM.available());
while (GSM.available())
{
Serial.write(GSM.read());
}
delay(20000);
while (!GSM.available());
while (GSM.available())
{
Serial.write(GSM.read());
}
switchGSMModule(); // Switch OFF module GSM
return true;
}
void setup()
{
// Setup Capteurs
Serial.begin(9600); // Initialisation du port série
ds.reset();
ds.search(adresseCapteur1); // Recherche et stock l'adresse du capteur 1
// Setup GSM
GSM.begin(19200); // UART baud GSM rate
delay(100);
pinMode(ledGSM, OUTPUT);
pinMode(onModulePin, OUTPUT);
}
void loop ()
{
getTemperature (&temperatureCapteur1, adresseCapteur1); // Demande la température du capteur 1
Serial.print("Temperature : "); // Affiche la température
Serial.print(temperatureCapteur1);
Serial.write('°');
Serial.write('C');
Serial.println();
if (intervalleCapteur1 & ((temperatureCapteur1 < SEUIL_BAS) | (temperatureCapteur1 > SEUIL_HAUT))) // On sort de l'intervalle acceptable
{
delay (TEMPS_ATTENTE_SECURITE*1000); // Attente de 6s
getTemperature (&temperatureCapteur1, adresseCapteur1);
Serial.print("Temperature : "); // Affiche la température
Serial.print(temperatureCapteur1);
Serial.write('°');
Serial.write('C');
Serial.println();
if ((temperatureCapteur1 < SEUIL_BAS) | (temperatureCapteur1 > SEUIL_HAUT)) // Seconde vérification
{
if(envoyerUnMessage (temperatureCapteur1,false)){
intervalleCapteur1=false;
}
}
}
else if (!intervalleCapteur1 & (temperatureCapteur1 > SEUIL_BAS) & (temperatureCapteur1 < SEUIL_HAUT)) // On rentre à nouveau dans cet intervalle
{
delay (TEMPS_ATTENTE_SECURITE*1000); // Attente de 6s
getTemperature (&temperatureCapteur1, adresseCapteur1);
Serial.print("Temperature : "); // Affiche la température
Serial.print(temperatureCapteur1);
Serial.write('°');
Serial.write('C');
Serial.println();
if ((temperatureCapteur1 > SEUIL_BAS) & (temperatureCapteur1 < SEUIL_HAUT)) // Seconde vérification
{
if(envoyerUnMessage (temperatureCapteur1,true)){
intervalleCapteur1=true;
}
}
}
delay (TEMPS_ATTENTE*1000); // Attends 30s avant de recommencer
}