Accendere e spegnere una lampadina 220 con Yun e deviatore

Lo scopo di questo progetto inizialmente era quello di accendere e spegnere una lampadina 220V da una pagina Web.
A mano a mano che il progetto evolveva ho voluto inserire nel circuito un deviatore e le segnalazioni (via mail) di chi aveva spento/acceso (il web, il deviatore).
Per le segnalazioni via mail non ho usato il server Yun (non ci sono riuscito) ma, come si vede nel codice, ho inviato un post a un altro server PHP.

index.html

[code language=”html” padlinenumbers=”true” htmlscriptxml=”true”]
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>SECONDINO</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<style>
body{width: 100%; text-align: center;}
.button{width:200px; margin: auto; margin-top:24px;}
label[for="rele"].ui-state-active {background: green none repeat scroll 0 0; color: white;} /* cambio il css del pulsante, quando è attivo, si colora */
#tabs{width: 900px; margin:auto;}
</style>
<script>
$(document).ready(function() {
loadActualData(); // leggo i file scritti nel json per avere un aggiornamento dello stato delle porte del microprocessore.
//invio i dati ad Arduino
$(‘#rele’).click(function(){interruttore(this,"3",$("#rele").attr("nextcommand"),$("#alimentatore").val());});
});
$(function() {
$( "#drele" ).buttonset();
$( "#tabs" ).tabs();
});
</script>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#ui">Alimentazione con deviatore</a></li>
</ul>
<div id="ui">
<div class="button" id="drele">
<input type="checkbox" id="rele" nextcommand="high">
<label id="labelrele" for="rele">Deviatore</label>
</div>
<input type="hidden" id="alimentatore"></div>
</div>
<script>
function loadActualData(){
$.getJSON("/data/get/",function(data){ //path dove vengono salvati i dati dallo scketch ti Arduino
//alert (JSON.stringify(data));
//per cambiare lo stato del pulsante e la colorazione devo modificare le propriet√† del pulsante, l’attributo aria-pressed e le classi della label
if((data.value.ALIMENTATORE)==="1" && (data.value.RELE)==="1"){$(‘#rele’).prop(‘checked’, true).attr(‘nextcommand’,’low’);$(‘#labelrele’).attr(‘aria-pressed’, true).addClass(‘ui-state-active’);};
if((data.value.ALIMENTATORE)==="1" && (data.value.RELE)==="0"){$(‘#rele’).prop(‘checked’, true).attr(‘nextcommand’,’high’);$(‘#labelrele’).attr(‘aria-pressed’, true).addClass(‘ui-state-active’);};
if((data.value.ALIMENTATORE)==="0" && (data.value.RELE)==="0"){$(‘#rele’).attr(‘checked’, false).attr(‘nextcommand’,’high’);$(‘#labelrele’).attr(‘aria-pressed’, false).removeClass(‘ui-state-active’);};
if((data.value.ALIMENTATORE)==="0" && (data.value.RELE)==="1"){$(‘#rele’).attr(‘checked’, false).attr(‘nextcommand’,’low’);$(‘#labelrele’).attr(‘aria-pressed’, false).removeClass(‘ui-state-active’);};
if((data.value.ALIMENTATORE)==="1"){$(‘#alimentatore’).val("1");}else{$(‘#alimentatore’).val("0");};
});
timeout=setTimeout("loadActualData()",4000);
}

function interruttore(elemento, pin, comando, alimentatore){
//alert(comando);
$.ajax({url : "/arduino/"+comando+pin+"&",
beforeSend: function(){refresh("stop");},
success: function(){refresh("start");}
});
}

function refresh(cosa){
if (cosa=="start") {timeout=setTimeout("loadActualData()",4000);} else {clearTimeout(timeout);};
}

</script>
</body>
</html>
[/code]

Sketch


#include 
#include 
#include 
int RELE = 3; // PIN DEL RELE
int ALIMENTATORE = A0; //PIN DELL'ALIMENTATORE USO L'ANALOGICO PERCHE' QUESTO ALIMENTATORE QUANDO SI SPEGNE CI METTE CIRCA 2MIN AD ARRIVARE A O, QUINDI USO <1023 PER DETERMINARE SE E' SPENTO
String statoAlimentatore; //LO USO PER CAPIRE SE "LA LAMPADINA" E' ACCESA O SPENTA
String ultimoStatoAlimentatore="0"; //LO STATO INZIALE DELL'ALIMENTATORE
String fonte; //CLIENT WEB
String stato; //LO STATO DEL SISTEMA: ALIMENTATORE+RELE+CLIENT WEB
YunServer server;
void setup() {
  Serial.begin(9600);
  pinMode(RELE,OUTPUT);
  pinMode(ALIMENTATORE,INPUT);
  Bridge.begin();  
  server.begin();
}
void loop() {
  YunClient client = server.accept();
  if (String(analogRead(ALIMENTATORE))=="1023"){ 
    statoAlimentatore="1";  ///CAMBIO LO STATO DELL'ALIMENTATORE 
    Bridge.put("ALIMENTATORE",statoAlimentatore); // SCRIVO IN DATA/GET IL VALORE DELL'ALIMENTATORE
    Bridge.put("RELE",""+String(digitalRead(RELE))+"");
  } else {
    statoAlimentatore="0"; 
    Bridge.put("ALIMENTATORE",statoAlimentatore);
    Bridge.put("RELE",""+String(digitalRead(RELE))+"");
  }
  if (client) {
    process(client);
    client.stop();
  }
  if (statoAlimentatore!=ultimoStatoAlimentatore) {
    stato=statoAlimentatore+"-"+String(digitalRead(RELE))+"-"+fonte;
    Bridge.put("STATO",stato); //SCRIVO IND DATA/GET LO STATO DEL SISTEMA
    if(stato=="1-0-"){fonte="";inviaMail("ON DA TASTIERA");} //INVIO UNA MAIL A SECONDA DI CHI STA ACCENDENDO O SPEGNENDO
    if(stato=="0-0-"){fonte="";inviaMail("OFF DA TASTIERA");} //NON USO LO SWITCH PERCHE' NON VA SULLE STRINGHE
    if(stato=="0-1-W"){fonte="";inviaMail("OFF DA ARDUINO");}
    if(stato=="0-1-"){fonte="";inviaMail("OFF DA TASTIERA");}
    if(stato=="0-0-W"){fonte="";inviaMail("OFF DA ARDUINO");}
    if(stato=="1-1-W"){fonte="";inviaMail("ON DA ARDUINO");}
    if(stato=="1-1-"){fonte="";inviaMail("ON DA TASTIERA");}
    if(stato=="1-0-W"){fonte="";inviaMail("ON DA ARDUINO");}
    ultimoStatoAlimentatore=statoAlimentatore; //REIMPOSTO LO STATO E ASPETTO IL PROSSIMO CAMBIAMENTO
    };
  delay(500);
}
void process(YunClient client) {
  String command = client.readStringUntil('&'); // ULTIMO CARATTERE DELLA STRINGA INVIATA DAL BROWSER
  if (command == "high3") { 
    fonte="W"; 
    stato="";
    digitalWrite(3,HIGH);
    } else {
    fonte="W";
    stato="";
    digitalWrite(3,LOW);}
}
void inviaMail(String msg) {
  Process myscript;
  myscript.runShellCommand("curl --data \"msg="+msg+"\" http://ilvostroserver./arduino/sendmail.php");
}

Gallery

[LBS id=238]

Arduino Nessun commento