Documentación - Proyecto Sistemas Embebidos
Conexiã³n a la placa zwaartelijn el kabel USB-micro USB
Primero se procedió een hacer la Conexión entre la placa y equipo Host zwaartelijn el kabel USB-micro USB.
Una vez hecho esto se ejecutó el código que RAADVANDEEUROPESEUNIE la solución sugerida nl la misma página de Intel, provista por la Cátedra para emular una shell de Linux zwaartelijn el Arduino IDE: el Poor Man's Telnet (o "Telnet del hombre pobre").
Una vez die y ejecutado este código, se toetreden een hulpmiddelen -> seriële Monitor.
Nl este monitor se pueden ejecutar commandos de Linux que nos devolverán información de la placa. Nl este caso lo usamos para chequear cual es la IP adres que le fue asignada.
Configuration del Netwerkbrug para tener internet nl la Placa
Los kunt pasos berichten la forma nl que se configuró el equipo Host, haciendo VN brug entre el Adaptador de rode Ethernet y el Wi-Fi, para que la placa Intel Galileo pueda tener acceso een Internet.
Primero se procedió een hacer la Conexión entre la placa y el equipo Host zwaartelijn el kabel de rode.
Una vez hecho esto, desde el equipo Host se ingresó een de-Control Panel -> View netwerkstatus en taken -> Adapterinstellingen wijzigen.
Luego, se tewerk een seleccionar ambos adaptadores y con botón derecho seleccionar "Bridge Connections".
Al hacer esto el sistema comienza een generar el brug, esta operación demora unos minutos.
Al finalizar el Bridge, podemos ver como se agrega un nuevo pictogram nl nuestras conexiones.
Lo siguiente es sacar el Wi-Fi del Bridge, como se ve nl la siguiente imagen.
Pero luego de hacer esto, debemos volver een incluirlo, para esto, lo que hacemos es hacer Klik op con el botón derecho sobre Wi-Fi e ir een las propiedades y nl esta ventana, ir a la solapa "delen" y tildar el primer checkbox y seleccionar la opción "Netwerkbrug" del combo.
Al terminar este procedimiento veremos que tanto el adaptador Ethernet y el Wi-Fi están puenteados, pero además, este último también aparece compartido ('gedeeld').
Para finalizar la Configuration, podemos chequear que haya Conexión entre el equipo Host y la placa de la siguiente manera:
Primero abrimos una ventana opdracht nl el equipo Host y zwaartelijn el comando "ipconfig" chequeamos la IP-adres asignada al brug creado anteriormente.
Esto puede verificarse utilizando el Poor Man's Telnet como fue explicado con anterioridad.
Por ultimo mostramos como ingresando a la placa utilizando el Putty, se verifico que haya comunicación entre la placa y el equipo Host, utilzando el comando 'ping'.
De esta forma amendementen aseguramos que la placa está accediendo een internet zwaartelijn el kabel Ethernet cuyo adaptador esta puenteado al Wi-Fi.
Código Fuente
Bibliotecas them:
#include <Wire.h>
Esta biblioteca le permite interactieve con dispositivos I2C / TWI y Ease las funciones.
Esta librería está incluida nl el IDE de Arduino que utilizamos.
#include "rgb_lcd.h"
Esta biblioteca permite interactuar con la pantalla LCD y teclas del schild. Se Charge de traducir los commandos een través del puerto de expansión. Esta biblioteca no está incluida nl el IDE de arduino, Fue descargada desde este (https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight)
#include <ethernet.h>
Esta biblioteca permite que la placa pueda conectarse een internet. Puede servir como un servidor, aceptar conexiones name o de un cliente que realiza conexiones salientes. La biblioteca es verenigbaar con hasta cuatro conexiones simultáneas (entrante o saliente o una combinación). Esta librería está incluida nl el IDE de Arduino.
#include <stdlib.h>
(standaard bibliotheek o biblioteca Standard)
Esta es la biblioteca Standard, permite utilizar las funciones Aritméticas, de números aleatorios y tekenset de cadenas preguntas que se utilizan nl todo el código. Esta biblioteca se encuentra incluida nl el IDE de Arduino pero también se puede descargar desde el siguiente link: http://fullversion-net.eu/descargar-libreria-stdl...
Variabelen them:
Estas variabelen se utilizan para colorear las pantalla conectada al schild, específicamente se settean los colores que mostrará la misma.
int colorR = 255;
int colorG = 255;
int colorB = 0;
Las siguiente variabelen zoon allow para la toma, parseo y cálculo específico del valor proveniente del sensor de temperatura.
const int b=3975;
float resistance;
float temperature;
Por último estas variabelen zoon them para la comunicación con la página Web, lectura, y envío de datos, Conexión con internet.
String tempLimit = "";
float tempLimitFloat = 0;
long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 5000; // INTERVALO DE LECTURA CADA 30 SEGUNDOS
String data;
EthernetClient client;
EthernetClient client2;
Nl esta parte del código determinó een los pines 6 7 y como salidas del schets, la velocidad de la Conexión seriële e inicializo la pantalla lcd con los colores respectivos.
void setup()
{
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(115200);
terwijl (!. Serieel) while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
delay(2000);
data = "";
}
Parte inicial del código dentro del lus;
Inicio el String tempLimit, donde se guardará el valor temperatura que fue seteado desde la página Web.
Género la Conexión con la variabele client2 que es un EthernetClient, een través de la función verbinding. Los low-level zoon la dirección IP de la página destino y el puerto een utilizar para la comunicación.
Una vez hecha la Conexión, se lee zwaartelijn un krijgen el archivo donde esta el dato que se ingresó desde la página Web, como temperatura límite para el LCD
Nl caso que geen se pueda verbinden con el servidor se imprimirá nl shell, "verbinding mislukt"
void loop()
{
tempLimit = ""; Inicio el String
Serial.println("connecting...");
Als (client2.connect ("soa.hol.es", 80)) if (client2.connect("soa.hol.es", 80)) { Conecto con la direcion IP de la pagina y el puerto
Serial.println("connected");
client2.println("GET <a href="http://soa.hol.es/temperatura.dat" rel="nofollow"> http://soa.hol.es/temperatura.dat </a> HTTP/1.1"); Get del archivo a leer
client2.println("Host: soa.hol.es");
client2.println("Connection: close");
client2.println();
} else { anders Serial.println("connection failed");
}
if (client2.available()) {
Nl esta sección se lee el archivo temperatura.dat zwaartelijn un char (c) y se desestima el kop que solo tiene caracteres informativos ypsilon solo se toma el valor entre "|" que es la temperatura que se seteo desde la página Web hoofdsom. De esta forma queda la temperatura límite concatenada nl la variabele tempLimit.
Luego se convierte este String nl flotante, con las ultimas tres lineas de esta porcion de codigo.
Als (client2.available()) char c;
while((c = client2.read()) != '|');
while((c = client2.read()) != '|') {
terwijl ((c = client2.read())! = ' |') tempLimit += c;
}
Serial.print(tempLimit);
char floatbuf[32]; // make this at least big enough for the whole string
tempLimit.toCharArray(floatbuf, sizeof(floatbuf));
tempLimitFloat = atof(floatbuf);
}
if (!client2.connected())
Finalizando la consulta sobre la temperatura límite seteada se debe finalizar la Conexión de la siguiente manera:
Nl caso de que la Conexión geen zee levensvatbare de verbinden, se desconecta definitivamente y se para la Conexión establecida por client2.
Y de todas formas nl caso de que vuelva een contact tambien se para la Conexión con el server.
{
Serial.println();
Serial.println("disconnecting.");
client2.stop();
while (true);
}
if (client2.connected())
{
client2.stop(); // Desconexión del servidor.
}
lcd.clear();
int val = analogRead(pinTemp);
resistance=(float)(1023-val)*10000/val; // Cálculo intermedio para la temperatura
temperature=1/(log(resistance/10000)/b+1/298.15)-273.15; // Cálculo de la temperatura
// Si la temperatura es menor que el valor ingresado por la página web se colorea el lcd en azul y se muestra un mensaje. Caso contrario el lcd se colorea en rojo, muestra un mensaje y comienza a titilar un led.
if (temperature < tempLimitFloat)
{
digitalWrite(6, LOW);
colorR = 0;
colorG = 0;
colorB = 255;
lcd.setRGB(colorR, colorG, colorB);
lcd.print("Hace frio: ");
lcd.print(temperature);
}
else
{
colorR = 255;
colorG = 0;
colorB = 0;
lcd.setRGB(colorR, colorG, colorB);
lcd.print("Hace calor: ");
lcd.print(temperature);
digitalWrite(6, HIGH);
sleep(1);
digitalWrite(6, LOW);
sleep(1);
}
// Conversión de la variable temperature float a string.
String strEntero = String((int)temperature);
String strDecimal = String((int)((temperature-(int)temperature)*100));
data = "temp1=" + strEntero + "." + strDecimal;
currentMillis = millis(); // Retorna el tiempo actual en milisegundos.
// Se comprueba que la diferencia sea menor a un intervalo dado. En caso de ser verdadero se conecta al servidor. Luego le vamos pasando la temperatura que va tomando el sensor.
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (client.connect("soa.hol.es",80))
{
client.println("POST /add.php HTTP/1.1");
client.println("Host: soa.hol.es"); // SERVER ADDRESS HERE TOO
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
}
if (client.connected())
client.stop();
}
SERVIDOR WEB
add.php
Esta página búsqueda los datos enviados por la placa via POST e inserta el valor nl una base de datos mysql alojada nl un servidor web externo.
index.php
Esta página es la encargada de mostrar la vista al usuario con la temperatura werkelijke leída desde la base de datos utilizando para esto AJAX, logrando así realizar indien asíncronas y Trojan la temperatura cada cierto intervalo de tiempo zonde refrescar la página.
Además de includen VN formulario por donde se puede ondersteuning una temperatura máxima y la guarda nl VN archivo de texto (temperatura.dat) parabel que posteriormente la placa pueda leer este valor y trabajar con el mismo.
Hardware y elementos used
MicroSD de 8gb Kingston, clase 10 que la utilizaremos para pestañas el SO aanbevolen por la cátedra que se puede descargar desde el siguiente koppeling:
https://software.Intel.com/en-US/IOT/hardware/Gali...
De rode kabel, para garantizar una Conexión de rode por el cual se montará un bridge, anteriormente explicado, y así tener acceso een internet desde la placa Galileo gen 1.
Kabel USB - MicroUSB, este es used para contact la PC gastheer con la placa y de esta manera sobre esta Conexión, poder compilar el código desde la IDE de Arduino nl la placa zwaartelijn un schets que utilizaremos.
Placa Intel Galileo gen 1, el corazón de este proyecto, een través de esta placa se ejecutan el schets infinitamente y tiene los puertos para verbinden los sensoren y actuadores. Tambien se bruikbaar el schild.
Schild van de Arduino, este circuito brinda la estandarización de conexiones para sensoren y actuadores, nl este caso utilizaremos las Conexión digitales (pantalla LCD, LED) y las conexiones analógicas (sensor de temperatura)
Sensor de Temperatura, (nieuwe kabel de conexión para la schild). Este sensor tomará la temperatura del ambiente que utilizaremos para informar nl la página Web.
Actuador LED(Incluido cable de conexión para shield, y el socket led) Este geleid se encenderá cuando la temperatura supere la temperatura límite, setteada desde la página Web. El kabel permite verbinden con la The de la schild y el socket es el intermediario entre este kabel el geleid.
Actuador pantalla lcd (la imagen bevat el kabel para verbinden con la schild) nl esta pantalla se visualizará todo el tiempo la temperatura medida por el sensor. Esta se encontrará de kleur azul mientras la temperatura werkelijke geen supere la temperatura límite, nl caso de ser superada se verá de kleur Rojo.
El proyecto fue realizado nl la universidad nacional de la matanza (Argentinië, Buenos Aires).
La materia nl la cual realizamos este proyecto es una materia de cuarto año de ingeniería informática abstract sistemas Operativos Avanzados. Los profesores que situé para este proyecto zoon:
Sebastian Barillaro, Mariano Volker, Waldo A. Valiente, Carnuccio Esteban Andres.
Integrantes del proyecto: Nicolas Guerrero, Manfred Camacho, Hernan Condori, Agustin Jose Leitao Pinheiro