Allora, questa è una bozza dell'installazione:
https://drive.google.com/open?id=0B7nY_lPfJGciOGN4d0hCd1k3R0E
Il motore è in realtà l'elettrovalvola.
Lo switch è utilizzato per inserire la modalità "muto" o meno.
I sensori a BJT sono collegati secondo lo schema del sito postato all'inizio del topic.
Il progetto ha anche una shield ethernet per visualizzare lo stato delle vasche da remoto.
Tutto funzionava perfettamente con un alimentatore a 12V (con 4 diodi in serie per avere 9V) ad alimentare l'elettrovalvola e Arduino alimentato da USB.
Ora, provando senza l'elettrovalvola, il sistema è del tutto instabile.
Nel caso possa servire, posto anche il codice (senza Ethernet).
/*
const int NSENSORS = 15;
//PINS
const int buzzerPin = 12;
const int stopLevelPin = 45;
const int openValvePin = 22;
const int closeValvePin = 23;
const int redPin = 2;
const int greenPin = 3;
const int bluePin = 4;
const int muteSwitchPin = 5;
//
int firstTargetPin = 30; //targetPin = 30, 31, 32, ...
int targetBeepCount = 3;
int stopBeepCount = 5;
int loopDelay = 1000;
bool resetNeeded = 0;
bool mute = 0;
bool prevStopState;
bool prevTargetState[NSENSORS];
int targetLevelPin[NSENSORS];
int targetLevel[NSENSORS];
void setup() {
mute = digitalRead(muteSwitchPin);
pinMode(buzzerPin, OUTPUT);
pinMode(stopLevelPin, INPUT);
pinMode(openValvePin, OUTPUT);
pinMode(closeValvePin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(muteSwitchPin, INPUT);
for (int i = 0; i < 3; i++) {
if (!mute) {
setColor(0, 255, 0);
beep(buzzerPin, 1768, 50);
setColor(0, 0, 0);
} else {
setColor(0, 0, 255);
delay(50);
setColor(0, 0, 0);
}
delay(100);
}
for (int i = 0; i < NSENSORS; i++) {
pinMode(targetLevelPin*, INPUT);*
(digitalRead(targetLevelPin) == LOW) ? (prevTargetState = 0) : (prevTargetState = 1);
* }*
* (digitalRead(stopLevelPin) == LOW) ? (prevStopState = 0) : (prevStopState = 1);*
* if (digitalRead(stopLevelPin) == HIGH) { //Below max level*
* digitalWrite(openValvePin, HIGH);*
* delay(50);*
* digitalWrite(openValvePin, LOW);*
* } else { //Max level reached*
* resetNeeded = 1;*
* setColor(255, 0, 0);*
* digitalWrite(closeValvePin, HIGH);*
* delay(50);*
* digitalWrite(closeValvePin, LOW);*
* if (!mute)*
* beepnTimes(stopBeepCount, 100);*
* }*
* for (int i = 0; i < NSENSORS; i++) {*
_ targetLevelPin = firstTargetPin + i;
* }
delay(1000);
}
void loop() {
mute = digitalRead(muteSwitchPin);
if (!resetNeeded) {
if (!mute) {
setColor(0, 255, 0);
} else {
setColor(0, 0, 255);
}
}
if (digitalRead(stopLevelPin) == LOW && prevStopState == 1) { //Max Level reached -STOPPO TUTTO-
resetNeeded = 1;
digitalWrite(closeValvePin, HIGH);
delay(50);
digitalWrite(closeValvePin, LOW);
//setColor(160, 190, 0);
setColor(255, 0, 0);
if (!mute)
beepnTimes(stopBeepCount, 100);
//beep(buzzerPin, 5000, 50); // buzz the buzzer on pin 4 at 2500Hz for 500 milliseconds*
* prevStopState = 0;
}
////////////////////
for (int i = 0; i < NSENSORS; i++) {_
targetLevel _= digitalRead(targetLevelPin);
if (targetLevel == LOW && prevTargetState == 1 && !resetNeeded) { //target level reached
setColor(0, 0, 0);
setColor(120, 255, 255);
prevTargetState = 0;
if (!mute) {
beepnTimes(targetBeepCount, 1000);
} else {
delay(targetBeepCount * 1000);
}
}
if (targetLevel == HIGH) { //below target
prevTargetState = 1;
}
}
delay(100);
if (!resetNeeded)
setColor(0, 0, 0);
delay(loopDelay);
}
[/quote]*_