BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Arduino Uno: chi ci gioca? (https://www.baronerosso.it/forum/circuiti-elettronici/369985-arduino-uno-chi-ci-gioca.html)

andore 14 maggio 17 21:02

Citazione:

Originalmente inviato da aero330 (Messaggio 5039507)
E che ci sta a fare il forum :lol::lol:

Ci sta a dare fastidio a te, ElNonino e ai prossimi che si aggiungeranno al thread:icon_rofl

aero330 15 maggio 17 00:21

Citazione:

Originalmente inviato da andore (Messaggio 5039644)
Ci sta a dare fastidio a te, ElNonino e ai prossimi che si aggiungeranno al thread:icon_rofl

Se rispondiamo è perche ci piace essere "infastiditi" di domande :icon_rofl

Per il motore in DC non dovresti aver problemi a pilotarlo: in rete se cerchi trovi SICURAMENTE come fare e come collegarlo.
Ti basta scegliere uno dei pin rimasti liberi, dichiararlo come uscita e accenderlo/spegnerlo se vuoi un controllo ON/OFF con "digitalwrite" oppure con controllo PWM (da 0 a max con valori ntermedi) con la funzione "analogwrite".
Circuitalmente parlando basta un resistore tra il pin che hai scelto e la base del transistor (il valore non ricordo ma almeno di qualche Kohm), l'emettitore a massa e il collettore a uno dei due fili del motore, l'altro filo a Vcc.
Occhio che i 5v forniti dall'arduino mediante cavo usb potrebbero non bastare per il motore in DC in quanto hanno la carattetristica di assorbire molta corrente per lo spunto inziiale per cui potresti vedere l'arduino resettarsi all'avvio del motore stesso. Ti consiglio di caricare il firmware e poi alimentare la scheda con un'altra fonte di energia a 5V

aero330 15 maggio 17 00:33

Dimenticavo...anche un diodo in antiparallelo al motore per evitare sovratensioni negative. Cerca in google e avrai le risposte, non sono a PC adesso

andore 15 maggio 17 11:38

Citazione:

Originalmente inviato da aero330 (Messaggio 5039711)
Dimenticavo...anche un diodo in antiparallelo al motore per evitare sovratensioni negative. Cerca in google e avrai le risposte, non sono a PC adesso

Si infatti, ho trovato molti circuiti ma in sostanza é lo stesso, il modulo di energia aggiuntiva c'è l'ho e quindi, mi tocca solo mettermi sotto oggi pomeriggio B)

andore 15 maggio 17 15:23

Collegamenti completati e schema finalmente finito:lol:

https://s21.postimg.org/8dwk643nb/Clima_serra_bb.jpg

Il problema ora sorge nel codice che, dal solo motore dc con monitor virtuale, invio 255 e parte, a 0 si ferma come dovrebbe essere, per cui qui tutto ok.

Ma visto che ora nel codice di certo non posso fare copia/incolla in questo modo:

Codice:

#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

#define DHTPIN 8  // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = 0;
int t;
int h;
int motorPin = 7;

void setup() {
  lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
  lcd.setCursor(0,0);

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);

  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
  RTC.adjust(DateTime(__DATE__, __TIME__));

  pinMode(motorPin, OUTPUT);
  Serial.begin(9600);
  while (! Serial);
  Serial.println("Speed 0 to 255");
  Serial.println("But the advice 50 to 255. Because the minimum voltage required to start the motor is 50.");
  }
}

void loop() {

  t = dht.readTemperature();
  h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0
 
  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print("Umidita'");
  lcd.setCursor(15,0);
  lcd.print("C");
  lcd.setCursor(15,1);
  lcd.print("%");
  lcd.setCursor(12, 0);
  lcd.print(t);
  lcd.setCursor(12, 1);
  lcd.print(h);
 
  delay(5000);
 
  lcd.clear();  //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)
 
  statepin = digitalRead (setpin);
  if (statepin == LOW)
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
 
  DateTime now = RTC.now();
  sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,0);
  lcd.print( buffer1 );
  sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );

  delay(5000);

  lcd.clear(); //Pulisco lo schermo e ricomincio da capo

  if (Serial.available())
  {
    int speed = Serial.parseInt();
    if (speed >= 0 && speed <= 255)
    {
      analogWrite(motorPin, speed);
    }
  }

}

Bisognerebbe dichiarare la i giusto?

per cui, ignorantemente parlando se

i=30C°

i>30C° (motorPin, LOW)

if i<30C° (motorPin; speed)

Una cosa del genere giusto?

andycar 15 maggio 17 17:11

Al posto di questo....
=======================================
if (Serial.available())
{
int speed = Serial.parseInt();
if (speed >= 0 && speed <= 255)
{
analogWrite(motorPin, speed);
}
}
========================================

metti...

=========================================
if (t > 30)
{
speed = 255 ;
}
else
{
speed = 0 ;
}
analogWrite(motorPin, speed);
=========================================

andore 15 maggio 17 17:56

Citazione:

Originalmente inviato da andycar (Messaggio 5039830)
Al posto di questo....
=======================================
if (Serial.available())
{
int speed = Serial.parseInt();
if (speed >= 0 && speed <= 255)
{
analogWrite(motorPin, speed);
}
}
========================================

metti...

=========================================
if (t > 30)
{
speed = 255 ;
}
else
{
speed = 0 ;
}
analogWrite(motorPin, speed);
=========================================

Gentilissimo, immaginavo fosse una cosa del genere:)

ora provo e vi faccio sapere^_^

andore 15 maggio 17 18:08

No, purtroppo mi restituise questo errore:shutup:

Codice:

Arduino:1.8.2 (Windows 10), Scheda:"Arduino/Genuino Uno"

C:\Users\USER\Desktop\Progetti Arduino\Clima_serra\Clima_serra.ino: In function 'void loop()':

Clima_serra:85: error: 'speed' was not declared in this scope

 speed = 255 ;

 ^

Clima_serra:89: error: 'speed' was not declared in this scope

 speed = 0 ;

 ^

Clima_serra:91: error: 'speed' was not declared in this scope

 analogWrite(motorPin, speed);

                      ^

exit status 1
'speed' was not declared in this scope

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Il codice che ho modificato è questo:

Codice:

//Con l'aiuto di aero330 ed ElNonino, utenti di www.baronerosso.it
#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

#define DHTPIN 8  // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = 0;
int t;
int h;
int motorPin = 7;

void setup() {
  lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
  lcd.setCursor(0,0);

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);

  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
  RTC.adjust(DateTime(__DATE__, __TIME__));
  }
 
  {
  pinMode(motorPin, OUTPUT);
  }
}

void loop() {

  t = dht.readTemperature();
  h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0
 
  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print("Umidita'");
  lcd.setCursor(15,0);
  lcd.print("C");
  lcd.setCursor(15,1);
  lcd.print("%");
  lcd.setCursor(12, 0);
  lcd.print(t);
  lcd.setCursor(12, 1);
  lcd.print(h);
 
  delay(5000);
 
  lcd.clear();  //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)
 
  statepin = digitalRead (setpin);
  if (statepin == LOW)
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
 
  DateTime now = RTC.now();
  sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,0);
  lcd.print( buffer1 );
  sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );

  delay(5000);

  lcd.clear(); //Pulisco lo schermo e ricomincio da capo

  if (t > 30)
{
speed = 255 ;
}
else
{
speed = 0 ;
}
analogWrite(motorPin, speed);

}

PS. Il pin 7 non è un digitalW:unsure:rite?

ElNonino 15 maggio 17 18:13

Devi dichiarare la variabile speed.
"
int speed;
"
o qualcosa di simile.

:yeah:

andycar 15 maggio 17 18:15

Non hai dichiarato la variabile: speed

Inserisci:

int speed = 0;

Prima del

void setup() {


Tutti gli orari sono GMT +2. Adesso sono le 15:39.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002