Show Posts
Pages: 1 ... 24 25 [26] 27 28 ... 104
376  International / Generale / Re: Aiuto scelta amplificatore per cella di carico on: July 07, 2014, 05:47:05 am
Ho trovato questo schema sicuramente funzionante.
377  International / Generale / Re: Consiglio per elettrovalvola on: July 07, 2014, 05:17:38 am
Poiché l'elettrovalvola assorbe almeno 300mA puoi pilotarla direttamente con un darlington NPN (ad esempio TIP120) usando sempre un diodo 1N4004/7 ai capi della stessa, cioè come se fosse l'avvolgimento di un relè.
378  International / Software / Re: Boiler alimentato da fotovoltaico on: July 06, 2014, 07:02:09 pm
Cominciamo con il dire che tu vuoi misurare la corrente continua proveniente dai pannelli che entra nel tuo inverter.
Il sensore è molto semplice da usare: devi collegare la scheda (perché l'ACS712 è montato su una piccola scheda, vero?) in serie tra il positivo proveniente dai pannelli e l'ingresso dell'inverter. L'alimentazione la fornisci dai +5V di Arduino e ovviamente dal suo ground.
L'ingresso analogico A0 di Arduino lo colleghi, invece, al VOUT della scheda.
Il segnale che riceverai varierà da 0V sino ad un massimo di 5V in corrispondenza del fondo scala del sensore che è 30A.
Ma la corrente non basta perché anche la tensione varia secondo il soleggiamento.
Quindi devi anche misurare la tensione dei pannelli tramite un opportuno partitore resistivo.
Qui la cosa diventa un po' più complicata poiché nel tuo impianto potrebbero esserci varie configurazioni di più stringhe in serie/parallelo.
Come sono configurati i tuoi pannelli?
379  International / Software / Re: Lettura Status Byte con PLL TSA5511 on: July 06, 2014, 06:04:49 pm
Ipotizzo: la libreria è a 7 bit di indirizzo e quella necessaria per il PLL dovrebbe essere ad 8 bit.
Le istruzioni della Wire dicono:
Quote
Note
There are both 7- and 8-bit versions of I2C addresses. 7 bits identify the device, and the eighth bit determines if it's being written to or read from. The Wire library uses 7 bit addresses throughout. If you have a datasheet or sample code that uses 8 bit address, you'll want to drop the low bit (i.e. shift the value one bit to the right), yielding an address between 0 and 127.
e tu correttamente hai eliminato il LSB con uno right shift ottenendo 0x61 (immagino essendo MA1 = 0 e MA0 = 1) ma forse la manovra non piace a quel PLL.
380  International / Software / Re: Lettura Status Byte con PLL TSA5511 on: July 06, 2014, 01:19:21 pm
Ma nello sketch tu chiedi 2 byte ma ne leggi uno soltanto.
Se ho ben capito il funzionamento del PLL dovresti fare così:
Code:
Wire.beginTransmission(0x61); // device address
  Wire.write(0x00); // set start address
  Wire.endTransmission(); // invia dati

  Wire.requestFrom(0x61, 1);  // richiesta 1 byte
  I = byte(Wire.read()); // 1° byte

...
381  International / Generale / Re: Consiglio per elettrovalvola on: July 06, 2014, 10:26:24 am
Per il primo impianto di irrigazione casalingo usai un ricambio per lavatrici/lavastoviglie funzionante a 230V.
Però lavorare con alte tensioni è un po' pericoloso e preferisco consigliarti questa:
www.futurashop.it/index.php?route=product/product&filter_name=elettrovalvola&product_id=1697
Ce ne sono molte altre, comunque, in commercio.
382  International / Generale / Re: relè ad impulsi 230V 10A on: July 06, 2014, 10:18:45 am
Esistono dei sensori di corrente per sapere su circola o meno corrente in un circuito AC.
Ad esempio potresti usare Allegro MicroSystems mod. ACS712 di cui esistono versioni montate su una piccola scheda che differiscono solo per la corrente max che sopportano.
www.lucadentella.it/2011/11/29/sensore-di-corrente-con-arduino/
Poiché il relè ha due vie, ne occorrono due, uno per circuito.
383  International / Software / Re: Lampeggio su display on: July 06, 2014, 05:12:49 am
Il listato è un po' pasticciato e mi sono permesso di mettrelo un po' a posto.
Formalmente è corretto, ma non ho avuto la possibilità di testarlo.
Nota che ora hai guadagnato una riga in più sul display.
Code:
#include "Wire.h"
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <LiquidCrystal.h>

#define DS1307_I2C_ADDRESS 0x68
#define BUTTON A0

int DS18B20_Pin = 6;
float temperature = 0.0;
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire ds(DS18B20_Pin);

void setup() {
  Wire.begin();
  Serial.begin(9600);
  lcd.begin(20, 4);

  // Modificare i seguenti valori per impostare il vostro orologio ad ogni avvio del programma.
  // Probabilmente si desidera impostare solo l'orologio una volta e quindi rimuovere
  // la chiamata setDateDs1307 .
  //   second = 00;
  //   minute = 04;
  //   hour = 01;
  //   dayOfWeek = 5;
  //   dayOfMonth = 27;
  //   month = 6;
  //   year = 14;
  //   setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);// chiamata per settare l'orologio
}

void loop() {

  temperature = getTemp();
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

  lcd.clear(); // clear LCD screen

  lcd.setCursor(5,0); // prima riga
  lcd.print("archimede70");

  lcd.setCursor(0,1); // seconda riga ---> www DD/MM/YYYY hh.mm
  switch(dayOfWeek){
  case 1:
    lcd.print("Lun");
    break;
  case 2:
    lcd.print("Mar");
    break;
  case 3:
    lcd.print("Mer");
    break;
  case 4:
    lcd.print("Gio");
    break;
  case 5:
    lcd.print("Ven");
    break;
  case 6:
    lcd.print("Sab");
    break;
  case 7:
    lcd.print("Dom");
    break;
  } 
  lcd.print(" ");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("/");
  if (month < 10) lcd.print("0");
  lcd.print(month, DEC); 
  lcd.print("/20");
  lcd.print(year, DEC);
  lcd.print(" ");
  lcd.print(hour, DEC);
  lcd.print(".");
  if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.print(".");
  if (second < 10) lcd.print("0");
  lcd.print(second, DEC);

  lcd.setCursor(0,3);  // quarta riga
  lcd.print("Temp.: ");
  lcd.print(temperature);

  Serial.println(temperature);

  delay(1000);
}

float getTemp() {   //returns the temperature from one DS18B20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if (!ds.search(addr)) {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if (addr[0] != 0x10 && addr[0] != 0x28) {
    Serial.print("Device is not recognized");
    return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE); // Read Scratchpad

  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;
}


byte decToBcd(byte val) {   // Convert normal decimal numbers to binary coded decimal
  return ((val/10*16) + (val%10));
}


byte bcdToDec(byte val) {   // Convert binary coded decimal to normal decimal numbers
  return ((val/16*10) + (val%16));
}

// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
void stopDs1307() {
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(0x80);
  Wire.endTransmission();
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second, // 0-59
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));    // 0 to bit 7 starts the clock
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));      // If you want 12 hour am/pm you need to set
  // bit 6 (also need to change readDateDs1307)
  Wire.write(decToBcd(dayOfWeek));
  Wire.write(decToBcd(dayOfMonth));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f);  // Need to change this if 12 hour am/pm
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}
384  International / Hardware / Re: Problema DC Motor on: July 06, 2014, 04:17:04 am
Come alimenti la pompa?
Il sospetto è che, essendo a 5V, tu lo alimenti dai +5V di Arduino il cui stabilizzatore non può erogare che 0.5-0.8 A, mentre la pompa richiede 2A, per lo meno di spunto.
Secondo me è un problema di alimentazione: quando l'integrato stabilizzatore si surriscalda o la tensione di uscita scende al di sotto di un certo livello, il micro si resetta.
Usa un alimentatore da 5V 2A solo per la pompa.
385  International / Generale / Re: Pompa sommersa alimentabile a batteria? on: July 05, 2014, 12:09:26 pm
Quote
nell'esempio sopra credo che la pompa sia sempre in funzione..
A quanto ho letto la pompa non è sommersa, consuma 3W e lavora in modo intermittente da un minimo di 2 ad un massimo di 48 volte al giorno.
In un anno perciò, nel caso peggiore, resta accesa per 4383 ore che corrispondono a 12 ore al giorno.
Ammesso che la pompa sia a 12V, quando è accesa il consumo di corrente è 3W / 12V = 0.25A
Quindi la batteria deve essere dimensionata per fornire 12V e 250mA per 12 ore al giorno.
Una batteria al Pb da 12V 7Ah avrebbe un'autonomia di solo un giorno.
386  International / Generale / Re: Ricezione Telecomando Apricancello on: July 05, 2014, 11:25:23 am
Ogni radiocomando ha una "firma" identificativa (codice) e, se tu la conosci, puoi filtrare via sofware quelli che iniziano diversamente.
387  International / Generale / Re: Anemometro ad ultrasuoni on: July 05, 2014, 10:58:04 am
Questo è italiano e pure certificato (stando all'autore) in tunnel del vento per una precisione del 3%.
Lo "sgabello", a mio avviso, ha anche il vantaggio di ridurre il problema di neve, grandine ed uccelli.
forum.meteonetwork.it/strumenti-meteo/131748-anemometro-ad-ultrasuoni.html
 
388  International / Hardware / Re: Problema con la scheda Pololu DRV8825 on: July 05, 2014, 10:09:58 am
Quote
Per quel che concerne l'alimentazione 24 V  (1,3 A) con un contensatore da 35 V (100μF) sono più che sufficienti .
RIPETO: il tuo motore lavora con una tensione nominale di 8.6V con una corrente di 1.1A.

Come fai a farlo lavorare con 24V senza surriscaldarlo?
Ok che c'è una limitazione in corrente, ma 24V mi sembrano troppi!
Quote
Current limiting
To achieve high step rates, the motor supply is typically much higher than would be permissible without active current limiting. For instance, a typical stepper motor might have a maximum current rating of 1 A with a 5Ω coil resistance, which would indicate a maximum motor supply of 5 V. Using such a motor with 12 V would allow higher step rates, but the current must actively be limited to under 1 A to prevent damage to the motor.

The DRV8825 supports such active current limiting, and the trimmer potentiometer on the board can be used to set the current limit.
389  International / Generale / Re: Sensore temperatura matiz on: July 05, 2014, 10:02:07 am
Il valore NTC nominale alla temperatura di 25°C ed il coefficiente Beta.
Tipo questo:
TERMISTORE, NTC, WIRE LEADED
Tipo termistore: NTC
Resistenza: 10kohm
Thermistor Tolerance: -2% to +2%
Beta Value (K): 3988K
390  International / Software / Re: Lettura Status Byte con PLL TSA5511 on: July 05, 2014, 09:48:04 am
Confesso che anche per me la libreria Wire è un po' ostica da comprendere.
Tuttavia, io sapevo che prima di interrogare un dispositivo occorre iniziare una trasmissione:
Code:
 Wire.beginTransmission(Adr); // device address
  Wire.write(0x00); // set start address
  Wire.endTransmission(); // invia dati

  Wire.requestFrom(Adr, 2);   // richiesta 2 byte
  I = byte(Wire.read()); // 1° byte
  K = byte(Wire.read());        //  2° byte
...

Pages: 1 ... 24 25 [26] 27 28 ... 104