Show Posts
Pages: 1 2 [3] 4 5 ... 18
31  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 31, 2013, 10:40:09 am
 smiley-roll
Anche io toglierei la R3 e inserirei la R4 e R5 sul PCA9600 del display/tastiera per far un bel lavoro.

Queste due resistenze, si chiamano resistenze di fine linea e andrebbero montate sul dispositivo più distante.
 smiley-wink

I valori di R4 e R5 sono corretti, ma R3 creerebbe un caduta di circa 1,5V sulla linea + che potrebbe disturbare il segnale.
Tale accorgimento potrebbe essere utile nel caso i device non sono di tipo slave.
In questo modo si potrebbe verificare il + con un analog input, dove se il segnale scende almeno di 1v, vuol dire che il bus è occupato.
Nel nostro caso, al momento sono di tipo slave, dove il master è uno solo, la cenntrale.  smiley-draw
32  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 12:11:54 pm
 smiley
Ciao Bertu,

qualcuno con un po' di esperienza è sempre ben accetto.

Il progetto è open e sto cercando di renderlo il più professionale possibile, o per lo meno ci provo, estrapolando le cose migliori un pò da una parte ed un pò dall'altra, visto che anche io ho montato diversi antifurti di diverse marche ormai da 20 anni a questa parte.

Le basi HW le trovi qui: http://arduoalarmsimple.blogspot.it/

Buon lavoro.
33  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 12:00:41 pm
 smiley-razz
Mentre il bus per poter collegare ppiù device è questo.
34  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 11:59:35 am
 smiley-mr-green
Allora il collegamento tra i due PCA9600 è questo, diretto ponticellando RX con TX dello stesso verso l'altro e viceversa.
35  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 08:56:28 am
 smiley-cry
Credo ancora non vada bene.

Intanto hai collegato i driver PCA9600 a 4 fili come 485, io lo farei 422 a due fili.

Verifica anche se si devono intrecciare i segnali (il TX deve andare nell' RX e via dicendo) guarda il datasheet in PDF.  smiley-roll

Il PCA9600 di partenza si deve trovare vicino Arduino, mentre l'altro vicino al PCF8574 vicino al display, quindi devi rivedere lo schema.

In poche parole il cavo lungo si trova tra i due PCA9600.  smiley-wink

36  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 04:11:01 am
Ciao Testato,

Quote
Non so, probabilmente Giuseppe ha più esperienza di me in merito, se usare un 5 poli con schermo, e tenere la garza connessa solo lato arduino, aiuterebbe ulteriormente. Cioe gnd internamente al cavo e gnd lato garza non mi convince.
Cosa ne pensi Giuseppe ?

Il GND come cavo, permette di portare un bel pò di mA senza generare disturbi, mentre il GND su schermo, non deve portare alcun segnale di appoggio, ma deve essere utilizzato come semplice schermo (protezione, schermo dei cavi gabbia di Faraday).

In mancanza di altro, come ultima spiaggia lo si può utilizzare per portare il segnale, ma con assorbimenti relativamente bassi per non generare eventuali disturbi che potrebbere in questo caso entrare in tutti gli alri cavi.

Alle volte ci sono cavi schermati con la calza e un cavo spelato che sono a contatto, ma in questo caso il cavo spelato porterà i mA di alimentazione e segnali, mentre la calza servirà da schemo.

37  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 03:59:28 am
 smiley-roll

Userai semplicemente un cavo schermato a 6 fili per antifurto.

Normalmente è composto da:
cavo rosso da 0,25mm (+12V power)
cavo nero da 0,25mm (GND power)
cavo giallo da 0,15mm
cavo verde da 0,15mm
cavo bianco da 0,15mm
cavo blu da 0,15mm

Come vedi il +5v, il +12v, sono segnali che occorre proteggere se portati fuori dalla centrale.

Altra soluzione, quella di portare fuori solo il +12V ed inserire uno stabilizzatore es.LM7805 sul circuito di utilizzo.

Questi sono tutti accorgimenti da tener conto sulla realizzazione pratica di una centrale.

Se ci si vuole complicare ancora un pò, basterebbe utilizzare un doppino con gli eventuali circuiti convertitori, dove vengono generati ad esempio 4-20mA e trasformati in tensioni che a sua volta vengono sfruttati per alimentare il circuito.

Il sistema PoE ad esempio fà proprio questo e anche ad elevate velocità con segnali a 100Mbs per le schede ETH.

Ma alla fine quanto costa? ....... Forse è meglio portare fuori il +5V o per farla più pulita, inserire uno stabilizzatore a 5V nel dispositivo da pochi centesimi di euro.


Decidi tù. Normalmente, nelle centrali in commercio, utilizzano solo il 12V poi abbassato a 5V per le varie CPU distribuite.

 smiley-razz

38  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 03:07:45 am
 smiley-roll
Quote
Il PCA 9600 e i PCF8574 resteranno vicino ad arduino e partirò con un cavo di circa 10m dai PCF8574 che andranno a comandare il display, keypad, buzzer, retroilluminazione (anche qui credo di non avere problemi) l'unico problema è portare i 5v e il gnd al display ecc..mi sbaglio?

Credo non sia corretto !
Il PCA9600 ti permette di potenziare e filtrare il segnale I2C verso 422/485, ma attento , ne dovrai mettere 2, uno in partenza e uno in arrivo come descritto sul datasheet.
http://www.nxp.com/documents/data_sheet/PCA9600.pdf

I dispositivi non devono essere vicini, e poi l'utilizzo lontano, ma il contrario.  smiley-wink

Il collegamento corretto sarà:
1) Arduino collegato al PCA9600 di partenza
2) cavo lungo 10-20mt (preferibilmente schermato)
3) PCA9600 di arrivo
4) collegamento al PCF8574 che nella stessa scheda è collegato con il display
5) collegamento al PCF8574 che nella stessa scheda è collegato con la tastiera
e così via......


Guarda l'immagine allegata.
39  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 02:22:17 am
Il PCF8574 è una soluzione, anche perchè diminuisci i cavi da far girare, ma comunque usa cavo schermato come consigliato.
Il doppino non ti basta più, dorai portare anche l'alimentazione (GND e +5V ed eventualmente il +12V) e a questo punto se usi un'altro PCF8574 , o più, con 4-5 fili potrai andare dove vuoi, verso i vari sensori e contatti fino ad un massimo di 8  PCF8574.

Per ogni PCF8574 potresti collegare 8 ingressi !!!  Rimane comunque il problema della schermatura anche a 5V dei collegamenti ai contatti.

Questo credo sarà argomento di discussione nei prossimi post, in realtà dove ci si era arenati nel primo progetto arduoalarm.
40  International / Software / Re: ArduoAlarmMega / ArduoMegaAlarm on: August 30, 2013, 01:44:35 am
 smiley
Ciao jack, un saluto alla comunità,

come anticipato privatamente, rispondo anche qui alle tue richieste, anche perchè mi piacerebbe continuare il progetto nonostante ci siano diversi personaggi bastian contrari.

Quote
le resistenze per il keypad vanno bene da 10k?
SI.

Quote
inoltre posso collegare lcd + keypad + potenziometro + retroilluminazione + un led verde + scheda ingresso per i contatti direttamente al +5 dell'arduino oppure mi conviene utilizzare un'alimentatore esterno?
Certo che si può, basta non esagerare con la corrente da fornire al led della retroilluminazione del display, che solitamente non supera i 150mA.
Se preferisci il led è separato dal circuito, quindi potresti anche alimentarlo con 12V, ma attento ai consumi in sand-by.


Quote
se utilizzo un cavo tipo quello per i citofoni con 8 fili per collegare i pin di arduino all'lcd e keypad con una lunghezza di circa 10 metri ho problemi?

Un consiglio, con il digitale di questo tipo, per collegamenti superiori a 50cm, scordati il cavo dei citofoni, a meno che non utilizzi interfaccie dedicate per l'uso di tale cavo.
Usa sempre cavo schermato con GND collegato allo schermo nel punto di partenza (ES. Arduino) e non esagerare con la lunghezza, potresti avere brutte sorprese sul funzionamento dei device e di arduino stesso.
Se il cavo poi passa insieme al cavo di rete, ancora peggio.



Giuseppe G.
41  International / Hardware / Re: ArduoServoTime on: April 20, 2013, 12:56:26 pm
Al momento ho messo in funzione solo i servo.

Le idee sono tante, quadranti che ruotano, manine che indicano l'ora, lancerre illuminate, numeri che si muovono etc...

Appena ne realizzo uno carino, lo posto sul sito.
42  International / Hardware / Re: ArduoServoTime on: April 20, 2013, 12:36:54 pm
Quote
In realtà sono almeno il doppio anche su un servo economico, però mi spieghi come pensi di far girare le lancette, in modo continuo su 360°, con un dispositivo che può girare solo 180° ?

In realtà non ho detto che devono girare a 360°, 180° bastano, tipo contachilometri.


Quote
ciao, stavo pensando anche io di fare una cosa simile ma mi è venuto subito un dubbio. come fai a mettere le 3 lancette nello stesso posto? Stai usando un qualche meccanismo?

Il servo motore delle ore e dei minuti, si possono ad esempio posizionare uno di fronte all' altro, mentre quello dei secondi, separato come un cronografo.
43  International / Hardware / ArduoServoTime on: April 20, 2013, 11:41:03 am
 smiley-mr-green
Un saluto a tutta la comunity.

Al contrario di chi pensa che l' open sia solo un modo per poter ottenere informazioni e poi tranne profitto, volevo condividere una mia idea su di un progetto alquanto "strano".

Creare un orologio a lancette con arduino.

 smiley-roll smiley-roll smiley-roll
Pensandoci un pò, sono arrivato alla conclusione che sia fattibilissimo, senza usare marchingegni o artifizi particolari.

Certo un pò costoso rispetto ad un orologio da parete, ma comunque credo originale.

Userò un arduino uno, 3 servo motori, tre pulsanti e tre resistenze da 10k(non per forza necessarie) come per LCD.

Inizialmente pensavo ad uno o più motori passo passo, ma credo non semplice come realizzazione del meccanismo di posizionamento, mentre sapevo per certo che i servomotori si posizionano dove voglio con un range di ben 180 posizioni ed in modo molto preciso.

Allora dopo l'acquisto dei servo, ecco il mio primo prototipo che ho chiamato ArduoServoTime.

Buon divertimento, e per chi è interessato, via all ' evoluzioni creative.

Code:
/* Sketch ArduoServoTime R.0.0
 ________________________________________________________________________________________________________________
 
 Invent & Create by Giuseppe G. (giusby & gengysghey) 16/04/2013
 
 Basic design first published in the "http://www.arduoservotime.blogspot.it" site
 
 Enjoy.
 ________________________________________________________________________________________________________________
 
 Version By Giuseppe G.
 Update:16/01/2013
 Revision:0.0
 ________________________________________________________________________________________________________________
 
 Compiled with Arduino IDE 1.0.4 Windows XP 32bit
 ________________________________________________________________________________________________________________
 
 Caracteristics R.0.0
  1 servo motor for hour
  1 servo motor for minute
  1 servo motor for second
_________________________________________________________________________________________________________________
 
 Hardware Basic components R.0.0
 1 Arduino Uno
 3 servo motor
 3 button
 3 resistor 10K
 
 1 LCD 16x2 6 wire
 1 trimmer 10K
 ________________________________________________________________________________________________________________
 
 The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 7
 * LCD D5 pin to digital pin 6
 * LCD D6 pin to digital pin 5
 * LCD D7 pin to digital pin 4
 * LCD R/W pin to ground
 * LCD ends to +5V and ground
 * wiper to LCD VO pin (10K resistor trimmer)
  
 * control motor servo 1 hour digital pin 8
 * control motor servo 2 minute digital pin 9
 * control motor servo 3 second digital pin 10
 
 * button up hour digital pin 2
 * button up minute digital pin 3
 * button up second digital pin 13
 
 */

//************************************************************************************************************
// SKETCH Arduo Servo Time Version for ARDUINO UNO By Giuseppe G. with HD R0.0
//************************************************************************************************************


// use this if is necessary for IDE
//#if defined(ARDUINO) && ARDUINO >= 100  
//#include "Arduino.h"                    
//#else                                  
//#include "WProgram.h"                  
//#endif                                  


// include the library code:
#include <LiquidCrystal.h>
#include <Time.h>
#include <Servo.h>

//DECLARATION VARIABLES:

Servo servoH;        //motor hout
Servo servoM;        //motor minute
Servo servoS;        //motor second

byte adjs=48;        // automatic correction second for day without RTC
boolean memltime=0;  // memory DST adjast

int ore;            //hours
int minuti;         //minutes
int secondi;        //seconds

byte keyH=2;        // button hour
byte keyM=3;        // button minute
byte keyS=13;       // button second

boolean selb=0;      // memory change pressed buttons


// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);//(RS,E,D4,D5,D6,D7)


//*************************************************************************************

void setup() {
  
  Serial.begin(9600);      //enable serial monitor
  
  
  pinMode(keyS, INPUT);  //configure pin button second
  pinMode(keyM, INPUT);  //configure pin button minute
  pinMode(keyH, INPUT);  //configure pin button hour
  
  servoH.attach(8);      //define motor hour
  servoM.attach(9);      //define motor minute
  servoS.attach(10);     //define motor second

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // Print a message version project to the LCD on start-up.

  delay (500);  //wait 1 second



  //set restart device Time default(hr,min,sec,day,month,yr);
  setTime(00,00,00,16,4,2013);

 
}// end setup

//*************************************************************************************

void loop() {//main subroutine program of device

  check_time();
  view_dt(0,0);
  
  ore = map(hour(), 0, 23, 0, 180);
  minuti = map(minute(), 0, 59, 0, 180);
  secondi = map(second(), 0, 59, 0, 180);
  
  int oreT=hour();
  int minutiT=minute();
  int secondiT=second();
  
  servoH.write(ore);
  servoM.write(minuti);
  servoS.write(secondi);

  if(digitalRead(keyH) ==1 && selb == 0) {selb = 1; oreT++; setTime(oreT,minutiT,secondiT,1,1,2013);delay(100);}
  if(digitalRead(keyM) ==1 && selb == 0) {selb = 1; minutiT++; setTime(oreT,minutiT,secondiT,1,1,2013);delay(100);}
  if(digitalRead(keyS)==1 && selb == 0) {selb = 1; secondiT++; setTime(oreT,minutiT,secondiT,1,1,2013);delay(100);}

  if(digitalRead(keyH)==0 && digitalRead(keyM)==0 && digitalRead(keyS)==0){selb = 0;} //reset memory pressed buttons

} //end loop

//*************************************************************************************

void check_time(){

  // adj real time correction(increase adjs second for day"
  if (hour() == 23 && minute() == 59 && second() == 60 - adjs){
    setTime(23,59,59,day(),month(),year());
  }

  // alignment daylight saving time correction +1
  if (hour() == 2 && minute() == 00 && second() == 00 && weekday() == 1 && month() == 3 && day() > 24 ){
    setTime(03,00,00,day(),month(),year());
    memltime=0;
  }

  // alignment daylight saving time correction -1
  if (memltime == 0 && hour() == 3 && minute() == 00 && second() == 00 && weekday() == 1 && month() == 10 && day() > 24 ){
    setTime(02,00,00,day(),month(),year());
    memltime=1;
  }
}

//*************************************************************************************

void view_dt(int col,int rig) {

  // view time on LCD
  lcd.setCursor(col,rig);
  printDigit(hour());
  lcd.print(F(":"));
  printDigit(minute());
  lcd.print(F(":"));
  printDigit(second());

  // view time on serial terminal
  printDigit_ser(hour());
  Serial.print(":");
  printDigit_ser(minute());
  Serial.print(":");
  printDigit_ser(second());
  Serial.println(".");
  
}

//*************************************************************************************

void printDigit(int digits){ // utility function for digital clock display: prints preceding colon and leading 0
  if(digits < 10){lcd.print(F("0"));}
    lcd.print(digits);
}

//*************************************************************************************

void printDigit_ser(int digits){ // utility function for digital clock on serial terminal: prints preceding colon and leading 0
  if(digits < 10){Serial.print("0");}
    Serial.print(digits);
}

//*********************************************************************************************************************************************************************************    
//end sketch PROJECT By Giuseppe G. Site:"http://www.arduoservotime.blogspot.it"  Mail:"cimice96@hotmail.it"  Post:"www.arduino.cc/forum"
//*********************************************************************************************************************************************************************************    


44  International / Software / Re: [Risolto] Problema con PCF8574AP on: March 29, 2013, 05:32:52 pm
 smiley-mr-green

Scusatemi, ho risolto.

Avevo sbagliato il comando di scrittura.

Lascio comunque la soluzione, anche se mi sento un pò ridicolo per l'errore.

Se i moderatori del forum ritengono che questo sia obsoleto, possono cancellarlo.


Correzione sul comando "wire.print":

Code:
// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

void setup()
{
    Wire.begin();
    Serial.begin(9600);
}

void loop()
{

  Wire.requestFrom(0x3A,1);
    if(Wire.available())              //If the request is available
    {
        x=Wire.read();                //Receive the data
    }
    if(x<255)                         //If the data is less than 255
    {
        if (x==0) { y = 0; }; //null
        if (x==1) { y = 1; }; //P1
        if (x==2) { y = 2; }; //P2
        if (x==4) { y = 4; }; //P3
        if (x==8) { y = 8; }; //P4
        if (x==16) { y = 16; }; //P5        
        if (x==32) { y = 32; }; //P6
        if (x==64) { y = 64; }; //P7
        if (x==128) { y = 128; }; //P8        
    }
    Wire.beginTransmission(0x3B);      //Begin the transmission to PCF8574
    Wire.print(y,0);                     //Send the data to PCF8574
    Wire.endTransmission();            //End the Transmission
  Serial.println(y);
}

La riga corretta è la seguente:

   Wire.print(y,0);                     //Send the data to PCF8574

gli esempi che ho trovato su internet, non evidenziavano questo aspetto "wire.print(y, 0);", ma solo "wire.print(y);" in particolare il codice che vedete l'ho copiato pari da un esempio.

Lascio per scontato che gli esempi che si trovano nelle descrizioni delle librerie, siano testati. Da qui, il problema.


45  International / Software / [Risolto] Problema con PCF8574AP on: March 29, 2013, 05:07:49 pm
Un saluto a tutti.

Mi sapreste aiutare a risolvere questo problema ?

Non riesco a capire perchè non funziona il PCF8574AP collegato ai pin SDA ed SCL rispettivamente ai pin A4 ed A5 di arduino con la comunicazione I2C.

Mi spiego.
Il circuito legge 8 ingressi digitali collegati al primo PCF8574AP configurato in ingresso e rispettivamente il secondo PCF8574A configurato in uscita ha collegato 8 led.
Alla pressione del tato 1 si deve accendere il led 1, 2 il led 2 e così via.

Tutto bene fino al tasto 4, dopo tutto un casino.

Ho notato che in ingresso, vengono letti tutti gli ingressi correttamente, mentre per le uscite, il valore corretto che viene gestito si ferma a 14, dopo di chè non comprendo perchè le uscite con peso binario 16 e 32 sono sempre attive e quelle con peso 32 e 64 sempre spente.


Il codice utilizzato è il seguente:
Quote
// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

void setup()
{
    Wire.begin();
    Serial.begin(9600);
}

void loop()
{

  Wire.requestFrom(0x3A,1);
    if(Wire.available())              //If the request is available
    {
        x=Wire.read();                //Receive the data
    }
    if(x<255)                         //If the data is less than 255
    {
        if (x==0) { y = 0; }; //null
        if (x==1) { y = 1; }; //P1
        if (x==2) { y = 2; }; //P2
        if (x==4) { y = 4; }; //P3
        if (x==8) { y = 8; }; //P4
        if (x==16) { y = 16; }; //P5        
        if (x==32) { y = 32; }; //P6
        if (x==64) { y = 64; }; //P7
        if (x==128) { y = 128; }; //P8        
    }
    Wire.beginTransmission(0x3B);      //Begin the transmission to PCF8574
    Wire.print(y);                     //Send the data to PCF8574
    Wire.endTransmission();            //End the Transmission
  Serial.println(y);
}


Grazie per l'attenzione.
Pages: 1 2 [3] 4 5 ... 18