Buongiorno a tutti, ho un ultima domanda, poi chiudo il topic.
Ho aggiunto un lcd che mi stampi i valori di mio interesse nel progetto e lo sketch in simulazione si comporta bene.
Ora voglio assemblare il tutto e cominciare a fare le prove sul campo, ma sono molto indeciso su come alimentare il tutto.
Il mio progetto si presenta con:
-arduino uno r3
-modulo pressione differenziale mpx5100dp
-2 pulsanti
-schermo lcd a due righe
-2 relè stato solido omron a 5v
La mia intenzione è alimentare l'arduino con un alimentatore da 9v.
Il sensore di pressione e i 2 pulsanti li alimento direttamente con arduino, mentre per i relè e lo schermo lcd sono indeciso se prendere un alimentatore da 5 v oppure usare uno stepdown dc to dc usando solo un alimentatore da 9v.
Fatemi sapere qual'è la scelta migliore, anche se c'è un altro modo diverso da questo.!
Grazie ancora per l'attenzione.
Lascio il codice del progetto se qualcuno volesse dare un occhiata
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,8,9,10,11);
int inputVariable = 0;
int minima = 100;
int neutral = 100;
int var = 0;
int var2 = 0;
int bassa = 5;//alzo la zona neutra
int alta = 6;//diminuisco la zona neutra
int buzzer = 7;//suono
int stampa = 0;
unsigned long previousMillis;
int ferma = 8000;
int stato = 0;
void setup() {
lcd.begin(16,2);
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(bassa, INPUT);
pinMode(alta, INPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
lcd.setCursor(0,0);
var = digitalRead(bassa);//leggo pin5
var2 = digitalRead(alta);//leggo pin 6
inputVariable = analogRead(A2);//leggo pressostato
if (inputVariable != stampa)//stampo il valore solo se è diverso
{ Serial.println(inputVariable, DEC);//scrivi sul monitor il valore pressione
lcd.setCursor(0,0);//prima riga lcd
lcd.print("PRESSIONE ");//scrivi pressione
lcd.setCursor(0,1);//seconda riga lcd
lcd.print( " ");//cancella
lcd.setCursor(0,1);//seconda riga lcd
lcd.print( inputVariable,DEC);//scrivi valore pressione
stampa = analogRead(A2);//definisco stampa
}
if (var == HIGH)//schiacciando 5 aumenta la zona neutra
{
minima = minima + 10;
tone(buzzer, 1000, 200);//suono
Serial.println(minima, DEC);//stampo
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BANDA NEUTRA DA");
lcd.setCursor(0,1);
lcd.print( " ");
lcd.setCursor(0,1);
lcd.print(minima,DEC);
digitalWrite(bassa, LOW);
delay(20);
}
if (var2 == HIGH)//schiacciando 6 diminuisce la zona neutra
{
minima = minima - 10;
tone(buzzer, 500, 200);//suono
Serial.println(minima, DEC);//stampo
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BANDA NEUTRA A ");
lcd.setCursor(0,1);
lcd.print( " ");
lcd.setCursor(0,1);
lcd.print(minima+100,DEC);
digitalWrite(alta, LOW);
delay(20);
}
if (inputVariable < minima)//se ho pressione bassa
{
digitalWrite(4, LOW);
if ((millis() - previousMillis) > ferma)//chiudo le finestre a intervallo di 8 secondi
{
unsigned long previousMillis = millis();
stato = digitalRead(3);
digitalWrite(3, !stato);
}
}
if (inputVariable >= minima && inputVariable <= minima + neutral)//pressione neutra, non faccio niente
{ digitalWrite(3, LOW);
digitalWrite(4, LOW);
unsigned long previusMillis = millis();
}
if (inputVariable > minima + neutral)//pressione alta apro la finestra
{
unsigned long previousMillis = millis();
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
delay(20);
}