Arduino ethernet/sensore di umidità/ventola 12v

Salve a tutti, volevo innanzi tutto ringraziare coloro che hanno contribuito allo sviluppo di arduino e tutte le persone che ci danno consigli e ci aiutano nei forum!
Volevo chiederle un aiuto per quanto riguarda un progettino che sto provando a fare con arduino.
Ho comprato la versione Arduino Ethernet (http://arduino.cc/en/Main/ArduinoBoardEthernet) senza Poe, un sensore di umidità (http://www.regaliedesideri.it/hobby-equip/electronics/components/sensors/humidity-and-temperature-sensor.html) che si collega e alimenta direttamente con arduino e una ventola da pc classica da 12 v. Il mio scopo era quello di far accendere la ventola al superamento di una determinata soglia di umidità e spegnerla quando l'umidità scende al di sotto di un certo livello. Purtoppo trovo delle difficoltà a collegare la ventola ad arduino il quale fornisce solo 5v e la ventola ne consuma 12. Ho cercato delle guide in internet ma non c'erano esempi simili o comunque quel poco che c'era era spiegato male. Ho cercato anche nel forum ma non ho trovato nulla che potesse aiutarmi a parte questo topic (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290539065). Devo avvertire che ho più conoscenze informatiche che elettroniche :slight_smile:
Ringrazio fin da subito tutti coloro che mi risponderanno!

Ale

Ciao e benvenuto

purtoppo trovo delle difficoltà a collegare la ventola ad arduino il quale fornisce solo 5v e la ventola ne consuma 12

per pilotare la tua ventola, puoi usare un mosfet :

Ok, leggo la guida provo a fare il tutto e posto i risultati!
Nel frattempo grazie mille .
Ale

Ho usato il mosfet come consigliato e riesco a far girare la ventola a comando. Grazie per il suggerimento!!!!
Ora però ho un altro problema... il codice da caricare su arduino per leggere la temperatura e umidità non funziona... ho usato questo codice: #include <Ports.h>
#include "PortsSHT21.h"
#include <Wire.h>
#include <LibHumidity.h>
//3 sensors
SHT21 hsensor1 (1);
SHT21 hsensor2 (2);
SHT21 hsensor3 (3);
float h, t;
LibHumidity humidity = LibHumidity(0);

void setup()
{
Serial.begin(9600);
Serial.println("Power On");
pinMode(16, OUTPUT);
digitalWrite(16, LOW); //GND pin
pinMode(17, OUTPUT);
digitalWrite(17, HIGH); //VCC pin
pinMode(13, OUTPUT);
}

void loop()
{

// Get data from first sensor
hsensor1.measure(SHT21::HUMI);
hsensor1.measure(SHT21::TEMP);
hsensor1.calculate(h, t);
float hum1 = (h);
float temp1 = (t);
Serial.println(temp1);

// Get data from second sensor
hsensor2.measure(SHT21::HUMI);
hsensor2.measure(SHT21::TEMP);
hsensor2.calculate(h, t);
float hum2 = (h);
float temp2 = (t);
Serial.println(temp2);

// Get data from third sensor
hsensor3.measure(SHT21::HUMI);
hsensor3.measure(SHT21::TEMP);
hsensor3.calculate(h, t);
float hum3 = (h);
float temp3 = (t);
Serial.println(temp3);

// Get data from fourth sensor
float hum4 = (humidity.GetHumidity());
float temp4 = (humidity.GetTemperatureC());
Serial.println(temp4);
}[/table]

e ho scaricato le librerie ports e portsSTH21 da GitHub - mrjonny2/PortsSHT21: Soft SHT21 libraries modified for arduino 1.0
la libreriaLibHumidity da GitHub - liquidware/LibHumidity: A humidity sensor library for Arduino

ma compliando mi da un errore: sketch_apr19a.cpp: In function 'void loop()':
sketch_apr19a:52: error: 'class LibHumidity' has no member named 'GetTemperatureC'

quacuno sa dirmi da cosa può dipendere???
Grazie in anticipo!

Se guardi in LibHumidity.h il metodo si chiama GetTemperature() e non GetTemperatureC() come inserito nella penultima riga di codice.

Ciao
QP

Purtroppo mi ero accorto di questo errore subito dopo aver pubblicato il post... =(
e mi da sempre errore...questa volta scrive:

C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\Ports\Ports.cpp: In static member function 'static void Sleepy::powerDown()':
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\Ports\Ports.cpp:615: error: 'PRR0' was not declared in this scope

:astonished:

Alessandro_Santo:
Purtroppo mi ero accorto di questo errore subito dopo aver pubblicato il post... =(
e mi da sempre errore...questa volta scrive:

C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\Ports\Ports.cpp: In static member function 'static void Sleepy::powerDown()':
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\Ports\Ports.cpp:615: error: 'PRR0' was not declared in this scope

:astonished:

L'errore indicato ti informa che nel file Ports.cpp è utilizzato PRR0 e che questo simbolo non è dichiarato. PRR0 (Power Reduction Register 0, ma esiste anche PRR1) è un registro che riguarda l'atmega2560 (Arduino Mega) e non atmega328p che ha solo il registro PRR.
Puoi provare a modificare if file Ports.cpp sostituendo PRR0 con PRR ma potrebbero esserci altre magagne.

Ciao
QP

Ringrazio ancora per tutti i consigli... ho sostituito i PPR0 con PPR in ports.cpp però mi da questi errori:

C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:27:20: error: wiring.h: No such file or directory
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp: In constructor 'LibHumidity::LibHumidity(uint8_t)':
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:39: error: 'OUTPUT' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:39: error: 'pinMode' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:40: error: 'LOW' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:40: error: 'digitalWrite' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:42: error: 'HIGH' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp: In member function 'uint16_t LibHumidity::readSensor(uint8_t)':
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:114: error: 'class TwoWire' has no member named 'send'
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:115: error: 'delay' was not declared in this scope
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:124: error: 'class TwoWire' has no member named 'receive'
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:125: error: 'class TwoWire' has no member named 'receive'

Un po di errori li ho risolti cercando su internet il file wiring.h (presa da: http://arduino.googlecode.com/svn-history/r22/trunk/core/wiring.h )e mettendolo nella cartella LibHumidity.. Ora lanciando la verifica mi scrive:

C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp: In member function 'uint16_t LibHumidity::readSensor(uint8_t)':
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:114: error: 'class TwoWire' has no member named 'send'
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:124: error: 'class TwoWire' has no member named 'receive'
C:\Documents and Settings\Santo_ale\Desktop\arduino-1.0\libraries\LibHumidity\LibHumidity.cpp:125: error: 'class TwoWire' has no member named 'receive'

Che abbia sbagliato libreria LibHumidity?! :relaxed:
Grazie
Ale

Non saprei che dirti.
L'unica cosa che mi viene in mente è di provare con l'IDE 0023.

Ciao
QP

QuercusPetraea:
Non saprei che dirti.
L'unica cosa che mi viene in mente è di provare con l'IDE 0023.

Ciao
QP

Ok ora provo!
Grazie
Ale

Alessandro_Santo:

QuercusPetraea:
Non saprei che dirti.
L'unica cosa che mi viene in mente è di provare con l'IDE 0023.

Ciao
QP

Ok ora provo!
Grazie
Ale

Adesso mi da 108 righe di errori :slight_smile: :slight_smile: :slight_smile: :slight_smile: ahaha
grazie lo stesso, vedrò se riesco a trovare altre soluzioni!
Ciao
Ale

Ciao,

l'errore ultimo che hai (send e receive) e' dovuto al fatto che con Arduino IDE 1.0 per l'I2C "send" e' diventato "write" e "receive" e' diventato "read". .

Ad ogni modo potevi correggere il problema della libreria LibHumidity sostituendo wiring.h con Arduino.h

Ad ogni modo non capisco perche' stai utilizzando due librerie diverse per leggere lo stesso tipo di sensore, in totale tenti di leggere 4 diversi sensori (tre con la libreria Ports di Jeelabs modificata e uno con la libreria di LiquidWare).

Se utilizzi la libreria Ports di Jeelabs (modificata per utilizzare il sensore SHT21) tieni conto che e' una implementazione del I2C che non utilizza l'I2C hardware del ATmega, ma e' utilizza la tecnica del bit-bang.

//3 sensors
SHT21 hsensor1 (1);
SHT21 hsensor2 (2);
SHT21 hsensor3 (3);

I numeri 1, 2 e 3 fra parentesi si riferiscono al numero del port utilizzato (nel JeeNode, un clone di Arduino vi sono 4 connettori, denominati port 1, 2, 3 e 4.
Per vedere la corrispondenza coi nomi dei pin Arduino (e ATmega) vedi questo link.
http://jeelabs.net/projects/hardware/wiki/JeeNode#bfheader-8c4c7dcbc21fd8d0d4f6494595def0ba

Per semplificare l'utilizzo della libreria Ports, l'autore ha introdotto una modifica al codice, per cui ha introdotto un "port" in piu', chiamato 0, che utilizza i pin analogici Arduino 4 e 5 come pin per l'I2C (pur utilizzand osempre il bit-bang.
Vedi » Software- and hardware-I2C » JeeLabs

Per vedere che prestazioni ha questa implementazione dell'I2C puoi vedere
http://jeelabs.org/2012/01/03/bit-banged-i2c-timing/

Vi e' una versione nativa per SHT11 nella libreria Port originale (che trovi qui).

Ciao,
Marco.