Consulta por entorno virtual y ayuda en un codigo

Buenas soy nuevo en el foro, estoy empezando a programar para arduino algo muy básico pero la arduino me llega dentro de una semana quisiera saber si se puede hacer en virtual gratis.
También tome un ejemplo de las que viene con las librería del sensor DHT, me gustaria saber si esta bien lo que se agrego. Todavia no tengo la arduino para poder cotejar desde ya muchas gracias

Saludos

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // el pin donde esta el sensor

// eliminar comentario segun el sensor que estemos usando
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Conecte el pin 1 (a la izquierda) del sensor a +5 V
// NOTA: Si se utiliza una tabla con la lógica de 3.3V como un Arduino Debido conectar el pin 1
// a 3.3V en vez de 5V!
// Conecte el pin 2 del sensor a lo que su DHTPIN es
// Conecte el pin 4 (a la derecha) del sensor a TIERRA
// Conecte una resistencia de 10K del pin 2 (datos) al pin 1 (alimentación) del sensor

// Inicializar sensor DHT para Arduino normal de 16 MHz
DHT dht(DHTPIN, DHTTYPE);
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold.  It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
// Arduino Due that runs at 84mhz a value of 30 works.
// Example to initialize DHT sensor for Arduino Due:
//DHT dht(DHTPIN, DHTTYPE, 30);
int ventilador = 8; // pin del ventilador
int calefactor = 9; // pin del calefactor
int vaporera = 10;  // pin de la vaporera

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");
  pinMode(8,OUTPUT);//configuracion del pin 8
  pinMode(9,OUTPUT);//configuracion del pin 9
  pinMode(10,OUTPUT);//configuracion del pin 10
  dht.begin();
}

void loop() {
  // Espere unos segundos entre mediciones.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Error al leer desde el sensor DHT!");
    return;
  }

  
  // // Debe enviar temperatura en Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humedad: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
   // temperatura
   
  if (t <= 20 || t == 20-1 || t == 20+1 ){// temperatura, cambiar numero en funcion de lo que se desee
  digitalWrite(8, LOW);
  
}else
  digitalWrite(8,HIGH);
  
  if (t <= 18){//temperatura, cambiar numero en funcion de lo que se desee
  digitalWrite(9, HIGH);
  
}else
  digitalWrite(9, LOW);
  
   // humedad
   
  if (h < 80){// humedad, cambiar numero en funcion de lo que se desee
  digitalWrite(10, HIGH);
  
}else
  digitalWrite(10, LOW);
  
  
}

Hay cosas para emular arduino, pero son de pago, y no tengo muy claro si se pueden emular las librerias, y menos claro lo tengo, con que se pueda emular un dht.
Sobre el codigo, esto:

if (t <= 20 || t == 20-1 || t == 20+1 ){// temperatura, cambiar numero en funcion de lo que se desee

Se puede substituir por esto:

if (t <= 21){// temperatura, cambiar numero en funcion de lo que se desee

Ya que antes, las sentencias del if venian a decir que si t es menor o igual que 20, ó igual que 19, ó igual que 21, haz tal cosa.

Todo eso, se cumple poniendo que si t es menor o igual que 21, haz tal cosa.

Gracias por contestar, si tienes razón la optimización de esa linea (nunca me di cuenta lo pensé así y así lo puse )
Lo demás funciona bien?
Necesitan saber que quiero hacer o viendo el código ya se dan cuenta?

El tema virtual veo que esta proteus y VVB pero son de pago
Esta también ardulab pero necesitas tener la arduino

se puede esto?
En lenguaje para arduino?
a = raw_input ('ingrese temperatura deseada ') codigo en python
Esto para no tener 20 como temperatura fija sino que lo pregunte
lo mismo se aplica con h humedad.
desde ya muchas gracias
Saludos

Gracias.

Aunque no tengas el arduino, lo que si que puedes hacer, es descargarte el software, meter el código, y compilarlo para ver que no dé ningún error.

Buenas, eso lo hago sin problema, pero no quiere decir que el código haga lo que yo quiero sino que esta bien escrito, etc

En el código voy a agregar un sensor de humedad de suelo con una bomba de agua y un sensor de oxigeno (esto no se si existe)
lo que quiero lograr es un ecosistema 100% automático para un semillero, vivero, etc
en cuanto tenga esa dos cosas presento el proyecto en el foro.
gracias por contestar saludos

La buena noticia es que si existen los sensores de óxigeno. Pero debes determinar el rango de medicion y en función de ello elegir el sensor. Ejemplos baratos son los sensores lambda de los automóviles pero hay que determinar si su rango de medición es apropiado para tu proyecto.

Muy buena noticias me voy a empapar mas en el tema.
Gracias como siempre por contestar y ayudar
Saludos

Había escrito algo mas que veo que no salió.
Acá puede estar lo que buscas
http://sensovant.com/productos/meteorologia/gases/articulo/sensor-oxigeno-suelo-tierra-campo-cultivos-termistor-SO110.html
según esto
SO-110 Sensor Oxígeno O2 de Referencia para Suelo con Termistor - Maranata-Madrid SL - NIF B-85746204]

cuesta unos 256 euros.

Muchas gracias por el dato, me gustaría de oxigeno en el aire para saber cuando tengo que ventilar etc

gracias

Buenas gracia por su ayuda, he agregado cosas en el código, pero tengo un problema para que las variables de tem, hum, humsuelo
sea dado por el cliente osea cuando inicia el programa me pida esos valores temperatura ideal, humedad ideal y la humedad del suelo ideal.
En python hago un temp = input("ingrese temperatura ideal ")
asi le asigno a la variable temp un valor y asi con todas las variables.

Como se podría hacer esto?
código con cosas que se agregaron, si le pueden echar un ojo se le agradecería mucho

#include "DHT.h"

#define DHTPIN 2     // el pin donde esta el sensor

// eliminar comentario segun el sensor que estemos usando
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Conecte el pin 1 (a la izquierda) del sensor a +5 V
// NOTA: Si se utiliza una tabla con la lógica de 3.3V como un Arduino Debido conectar el pin 1
// a 3.3V en vez de 5V!
// Conecte el pin 2 del sensor a lo que su DHTPIN es
// Conecte el pin 4 (a la derecha) del sensor a TIERRA
// Conecte una resistencia de 10K del pin 2 (datos) al pin 1 (alimentación) del sensor

// Inicializar sensor DHT para Arduino normal de 16 MHz
DHT dht(DHTPIN, DHTTYPE);
int temp = 20; // temperatura ideal
int hum = 80; // humedad ideal
int humsuelo = 10; // humedad del sulo ideal
int sensorPin = A0;  // Seleccionar el pin de entrada para el potenciómetro 
int sensorValue = 0; // Variable para almacenar el valor que viene del sensor
int ventilador = 8; // pin del ventilador
int calefactor = 9; // pin del calefactor
int vaporera = 10;  // pin de la vaporera
int ventilador2 = 11; // pin de del ventilador respaldo
int bombaagua = 12; // pin de de la bomba de agua
void setup() {
  Serial.begin(9600); 
  Serial.println("Mediciones...");
  pinMode(8,OUTPUT);//configuracion del pin 8 ventilador
  pinMode(9,OUTPUT);//configuracion del pin 9 calefactor
  pinMode(10,OUTPUT);//configuracion del pin 10 vaporera
  pinMode(11,OUTPUT);//configuracion del pin 11 ventilador2
  pinMode(12,OUTPUT);//configuracion del pin 12 bomba agua
  dht.begin();
}

void loop() {
  // Espere unos segundos entre mediciones.
  delay(2000);

// Temperatura de lectura o la humedad tarda unos 250 milisegundos! Lecturas 
// sensores también pueden ser 'viejo' (es un sensor muy lento) hasta 2 segundos
  float h = dht.readHumidity();
  // Leer temperatura Celsius
  float t = dht.readTemperature();
  // Leer temperatura en Fahrenheit
  float f = dht.readTemperature(true);
  delay(1000);
  sensorValue = analogRead(sensorPin);    
  delay(1000);          
  Serial.print("sensor humedad suelo = " );                       
  Serial.println(sensorValue); 
  
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Error al leer desde el sensor DHT22!");
    return;
  }

  // Índice de calor Compute 
  // Debe enviar temperatura en Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  Serial.print("Humedad: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
   // temperatura ventilador1
   
  if (t < temp+1 ){
  digitalWrite(8, LOW);
  
}else
  digitalWrite(8, HIGH);
  
  // temperatura ventilador2 respaldo
  
  if (t > temp+5 ){
  digitalWrite(11, HIGH);
  
}else
  digitalWrite(11, LOW);
  
  // temperatura calefactor
  
  if (t <= temp-2){
  digitalWrite(9, HIGH);
  
}else
  digitalWrite(9, LOW);
  
   // humedad vaporera
   
  if (h < hum){
  digitalWrite(10, HIGH);
  
}else
  digitalWrite(10, LOW);

   // humedad suelo
  
 if (sensorValue < humsuelo){
   digitalWrite(12, HIGH);
   
}else
  digitalWrite(12, LOW);
}

saludos

Cuanta gente crees que pueda saber introducir esos parámetros? Pocas.
Mi consejo implica un trabajo enorme pero digamos podría ser tu versión 2.0
Yo te aconsejo que lo hagas al revés. Arma una base de datos y que el usuario elija en el menú la planta a ser controlada o el ambiente correspondiente de una serie de opciones que ya tienen los parámetros optimos a los que haces referencia.

Para introducir datos via serial tienes

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

olvida el DEC, esos parámetros son para que Serial.print los muestre de determina manera. si pones Serial.println(incomingByte) veras lo que escribiste.

Primero que nada gracias por la ayuda, la gente que coloque esos datos sabe a que temperatura humedad etc etc quiere segun la semilla o planta.
Si la semilla es de ejemplo por decir algo girasol, se sabe que la temperatura ideal es 20, la humedad de ambiente es 70%, la humedad de la tierra se necesita a 8.
Ahora la semilla o el plantin es un arbol ejmplo Anacaguita sabemos que la temperatura ideal es 25 humedad etc etc
Entiendes lo que quiero hacer?. Según la planta cambiar esos valores pero que esos valores no lo tengan que cambiar desde el código fuente sino que lo agrega al iniciar la arduino , que el soft pregunte y espere los valores para luego funcionar en base a ellos
Miro lo que me pasaste, gracias

Saludos

Edito: Me encanto la idea de la bd (mysql), en mi caso me gustaría hacer la comunicación con php o python visual con html5, css3
y poder hacerlo web(usando como server una raspberry pi). He visto librerias para comunicarse por serial tanto en python como en php (si no me falla la memoria). Si esto version 2,00
Mi opción primaria era con un lcd de esos para arduino puedas colocar los parametros que he mencionado via serial,

Por eso te lo sugerí porque le agrega un nivel profesional a tu proyecto.
Si tienes intención comercial será un gancho muy fuerte para el cliente el saber que todas sus preguntas tienen respuesta y no tiene que ver un manual ni llamar al proveedor para preguntar que dato poner.

Mira en este foro que hay varias personas que estan trabajando en cosas similares.
Lo de la EBD lo aprendí de alguien que consultaba otra cosa y justamente me dió ese dato MUY BUENO pro cierto.

mira este post
http://forum.arduino.cc/index.php?topic=264618.msg1868571#msg1868571
respecto de la conexion con MySQL, al final cito un link en el que alguien creo un conector arduino MySQL muy muy bueno.
te resuelve el problema enlace.
https://code.launchpad.net/mysql-arduino

Muchas gracias, lo estudiare con detenimiento

Saludos