Pages: 1 [2] 3 4 5   Go Down
Author Topic: pinMode IN/OUT  (Read 2447 times)
0 Members and 1 Guest are viewing this topic.
Tuscany
Offline Offline
Edison Member
*
Karma: 80
Posts: 2176
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non capisco questo passaggio

Quote
//Sensori
  pinMode(32, INPUT);
digitalWrite(32, LOW);

e' un input, perche' lo vorresti mettere LOW ?

2) Si, il tuo problema puo' essere disturbi sull'alimentazione
Che scheda rele' usi ?

3) Mi controlli una cosa...

se c'e' continuita' , sulla breadboard, dal primo foro all'ultimo di una riga di alimentazione ( quella rossa o blu )
« Last Edit: April 12, 2014, 05:02:27 pm by Brunello » Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Personalmente non collegherei mai un relè direttamente ad un pin Arduino, essi hanno una piccola capacità di assorbire/dare Corrente di pochi mA ed anche ammettendo che trovassimo un relè con piccolissima corrente di eccitazione, comunque, per il fatto di essere un carico induttivo (come un solenoide, un motore elettrico o una bobina magnetica di un altoparlante per esempio) genera una corrente/tensione di ritorno detta flyback al momento di sospendere la nostra eccitazione al device, queste correnti/tensioni solitamente sono brevissime ma hanno la caratteristica di essere molto superiori a quelle di pilotaggio, avvolte nell'ordine di anche 40-70 volts ma durano pochi ms al massimo.  Per evitare danni ai componenti che attivano carichi induttivi, si usa un diodo. 
In rete troverai un casino di materiale al riguardo di come collegare un relè, il problema è il tipo di relè, vi sono di piccola tensione (5V) media (12V) e alta tensione (oltre 24V secondo me) nonché quelli a corrente AC per pilotare utenze a 220V per esempio.
A prescindere dal relè utilizzato, io lo piloterei con un integrato idoneo, si possono usare transistor, FET, MOSFET, IGBT o Darlington.   Di questi solo i darlington hanno incorporato il diodo di protezione.  Ecco alcune pagine interessanti che dovresti leggere:

http://forum.arduino.cc/index.php?topic=159154.0
http://forum.arduino.cc/index.php?topic=52512.0
http://fritzing.org/projects/controling-8-relay-with-arduino-mega-adk
http://www.danielealberti.it/2013/09/rele-e-arduino.html
http://forum.arduino.cc/index.php?PHPSESSID=1e4a4883d1494c29861a458c565d7b79&topic=36133.msg265830#msg265830
http://blog.elettronicain.it/2013/01/04/le-mie-avventure-con-arduino/
http://www.instructables.com/id/Connecting-a-12V-Relay-to-Arduino/step6/The-Schematic/

Non ti preoccupare per il fatto di essere un "niubbo" in elettronica, anch'io lo sono, solo che con qualche anno di pratica in più, ma alcune cose le ho imparate facendo pratica, vedi?

Per l'osservazione fatta da Brunello:  Come mai metti un pin in input e poi lo metto low?  che io sappia avvolte si mette il pin in Ingresso High per così poter utilizzare il pull-up interno per poter "sentire" segnali LOW, l'ho visto fare specialmente con pin interrupt.

Immagino che il test suggerito sia per verificare che le masse che alimentano i relè ed arduino siano condivise, se non lo sono, possono portare a problematice di disturbi vari come questi da te indicati.
Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per l'osservazione fatta da Brunello:  Come mai metti un pin in input e poi lo metto low?  che io sappia avvolte si mette il pin in Ingresso High per così poter utilizzare il pull-up interno per poter "sentire" segnali LOW, l'ho visto fare specialmente con pin interrupt.
Non solo per gli interrupt. Serve a dare uno stato definito al pin, perché un pin lasciato "libero" è flottante, ossia capta qualunque cosa, anche una mano avvicinata al pin. Attivando la R di pull-up interna, si da uno stato alto ben definito.
Non vorrei che pensasse che mettendo il pin in input e poi facendo il digitaWrite con LOW si attivasse una R di pull-down interna, che sulle MCU Atmel non esiste.
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno a tutti,
allora inizio con il ringraziarvi per il vostro prezioso aiuto, adesso inizio a capirci qualcosina sulla problematica anche se ancora c'è molta strada per vedere della luce in fondo al tunnel smiley.

1. La scheda relè che utilizzo lavora a 5V: http://www.amazon.it/Modulo-Relè-Relay-Canali-Arduino/dp/B00E370JAC/ref=sr_1_4?ie=UTF8&qid=1397376512&sr=8-4&keywords=relè

2. Per quanto riguarda l'istruzione digitalWrite(PIN, LOW) per il pin in INPUT avete ragione. Era lì inizialmente in HIGH per il pull-up, l'ho messo in LOW perché pensavo potesse andare anche in pull-down (come accennava leo72) ma a quanto pare non si può fare. Inoltre solo adesso, cercando su internet, mi sono accorto che il pull-up si può mettere anche con pinMode(PIN, INPUT_PULLUP);

3. Ho controllato le piste di alimentazione sulla breardboard con un multimetro e confermo la continuità di entrambi i poli su tutta la pista. Per curiosità mia ho anche controllato la continuità delle piste interne, naturalmente in verticale, ed anche quelle sono ok.

4. Vi posto anche un video del problema. Come si vede, toccando in sequenza i sensori capacitivi monostabili, si accendono i relè ma gli ultimi due sensori (ma in realtà, toccando continuamente i sensori, capita con tutti in maniera casuale) restano attivi, molto probabilmente per uno dei disturbi di ritorno tensione di cui parlavate.

http://youtu.be/G6EH3s8yUnY  


@hiperformance71
Grazie per i link, adesso gli do subito un'occhiata, anche perché non sono molto informato su MOSFET o Darlington e devo prima documentarmi in merito smiley. Grazie mille anche per l'incoraggiamento smiley, quando lavoro su un piccolo progetto di elettronica e sorgono problemi di questo tipo, il web è l'unica fonte a disposizione che può aiutare a capire ma spesso mi ritrovo a non saper cosa cercare... anche una piccola indicazione può essere di grande aiuto, e per questo ringrazio ancora tutti voi smiley-wink
Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con la scheda che stai usando, tutto il discorso dei mosfet/darlington ecc decade! mi sembra di intravedere degli integrati e dei diodi per ogni relè, quindi in questa applicazione non devi aggiungerne perché già dotata o almeno così mi sembra dalla foto.

Per il discorso del pin pull-up ha ragione Leo, anche se non l'ho mai usato per tale scopo, perchè ho sempre preferito mettervi io la resistenza di pull_up quindi non ci mai fatto caso delle altre possibilità, solo ultimamente l'ho vista usare con gli interrupt appunto dove ovviamente, un pin "flottante", "erratico" (stato logico incerto quindi) potrebbe scattare senza ragione apparente.

Comunque, fai qualche prova su quel pin, se ti serve il pull down, metticelo esterno, magari una resistenza da 4,7-10K e ri testa il tutto.  Se nemmeno cos' dovesse funzionare a dovere, ti suggerirei di controllare le schede comprate separatamente, per accertare che siano apposto.
Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vendendo il filmato e rileggendo il commento messo prima del video, mi viene da pensare a qualche problema di debouncing, hai provato ad usare un tempo maggiore di attesa, magari mentre stai passando il dito,  rileva centinaia di ON/OFF e quindi ti potrebbe dare stati incerti, boh, almeno e quello che penso qui su due piedi, giusto per escludere qualcosa, prova a mettere al posto dei bottoni capacitivi dei comunissimi pulsanti, se il problema scompare allora quasi sicuramente il problema ha ha che vedere con i pulsanti capacitivi ed il debouncing (sono molto grandi?)  anzi, pensandoci su, magari mi viene da pensare, e se li distanziassi maggiormente tra di loro? 
Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato con un debounce più alto ma il risultato non cambia, cioè vi è un maggiore ritardo nell'interazione Sensore/Relè ma alcuni sensori (in maniera casuale) restano accesi/impallati come prima. In effetti non ho ancora capito se il problema sia davvero hardware o software.
Anche se pensandoci bene non penso sia software... aldilà dello script che utilizzo per accendere il relè al tocco di un sensore, il problema dei sensori che si accendono da soli o che restano accesi/impallati all'accensione dei relè, si presenta anche con il semplice script di dichiarazione in setup(); che avevo postato prima:

Code:
 pinMode(22, OUTPUT);
  digitalWrite(22, LOW);
  pinMode(23, OUTPUT);
  digitalWrite(23, LOW);
  pinMode(24, OUTPUT);
  digitalWrite(24, LOW);
  pinMode(25, OUTPUT);
  digitalWrite(25, LOW);

  //Sensori
  pinMode(32, INPUT);
  pinMode(33, INPUT);
  pinMode(34, INPUT);
  pinMode(35, INPUT);


Inoltre se eseguo lo stesso script con i relè diseccitati (o anche staccando direttamente la scheda dei relè), i sensori restano spenti e toccandoli non presentano alcun problema e non si incantano mai. Per questo motivo ho pensato ad un problema di disturbi elettrici da parte dei relè.

Giusto per informazione sullo script che ho realizzato per l'accensione dei relè al tocco di un sensore, riposto lo script postato in precedenza (non so se avevi già avuto modo di vederlo).
Sulla base di uno script trovato proprio sul sito arduino.cc ho creato questa libreria:

ClickButton.h
Code:
#ifndef ClickButton_H
#define ClickButton_H

#if (ARDUINO <  100)
#include <WProgram.h>
#else
#include <Arduino.h>
#endif


#define CLICKBTN_PULLUP HIGH


class ClickButton
{
  public:
    ClickButton();
    void setPin(uint8_t buttonPin, uint8_t ledPin);
    void Update();
    int buttonPin;    // the number of the pushbutton pin
    int ledPin;      // the number of the LED pin

    int ledState;         // the current state of the output pin
    int buttonState;             // the current reading from the input pin
    int lastButtonState;   // the previous reading from the input pin

    // the following variables are long's because the time, measured in miliseconds,
    // will quickly become a bigger number than can be stored in an int.
    long lastDebounceTime;  // the last time the output pin was toggled
    long debounceDelay;    // the debounce time; increase if the output flickers
};

#endif



ClickButton.cpp
Code:
#include "ClickButton.h"

ClickButton::ClickButton()
{
  ledState = HIGH;         // the current state of the output pin
  buttonState;             // the current reading from the input pin
  lastButtonState = LOW;   // the previous reading from the input pin

  // the following variables are long's because the time, measured in miliseconds,
  // will quickly become a bigger number than can be stored in an int.
  lastDebounceTime = 0;  // the last time the output pin was toggled
  debounceDelay = 50;    // the debounce time; increase if the output flickers
  // debounceDelay = 100;    // ho provato, come mi ha detto hiperformance71, ad aumentare il debounce ma il problema persiste
  buttonPin;
  ledPin;
}

void ClickButton::setPin(uint8_t buttonPini, uint8_t ledPini)
{
  buttonPin = buttonPini;
  ledPin = ledPini;
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);

  // set initial LED state
  digitalWrite(ledPin, ledState);
}

void ClickButton::Update()
{

// read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);
  Serial.println(reading);
  // check to see if you just pressed the button
  // (i.e. the input went from LOW to HIGH),  and you've waited
  // long enough since the last press to ignore any noise:  

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }
  
  // set the LED:
  digitalWrite(ledPin, ledState);

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;

}

In Setup() un ciclo for cicla n volte per quanti pulsanti voglio collegare e chiama, per ogni indice dell'array di tipo ClickButton, il metodo setPin(Sensore, Pin) che crea l'associazione Sensore/Pin. A questo punto, dentro loop(), un'ulteriore ciclo for chiama il metodo update() di ogni istanza ClickButton.

ecco  lo Sketch:

Code:
#include "ClickButton.h"
const int nPin = 4;
ClickButton button1[100];
int count = 0;

void setup()
{
  
  for(int x=22; x<22+nPin; x++){
    button1[count].setPin((10+x), x);
    count++;
  }

}

void loop()
{
  for(int x=0; x<nPin; x++){
    button1[x].Update();
  }
}


Tu pensi che l'inserimento di un ULN2803 non aiuterebbe a risolvere eventuali ritorni di corrente da parte delle bobine dei relè nel momento in cui si diseccitano?
« Last Edit: April 13, 2014, 05:53:06 am by pino8314 » Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per l'analisi del codice, lascio il posto a gente più esperta di me, ma analizzando quello che hai detto, ovvero che senza la board relè collegata il problema non si presenta, mi fa pensare che sia veramente una questione di disturbi hardware da parte dei relè,  e a questo punto, devo pensare che forse la stessa scheda non sia del tutto ok, magari gli manca qualcosa o si sono dimenticati di dire che ci devi mettere tu qualcos'altro.

Comunque,  per prima cosa tenta di implementare un diodo come quelli presenti nei link che ti ho messo.  già questo dovrebbe ridurre di un bel po le interferenze che il relè potrebbe far rientrare quando viene diseccitato.

Per il ULN2803 o anche il ULN2003,  si, credo che sarebbe un bel passo avanti nella direzione della protezione di Arduino e poi, ti consentirebbe di pilotare carichi maggiori (se non ricordo male, ogni piedino di un ULN2003 può fornire fino a 500mA e se ne possono anche mettere diversi pin collegati tra loro in parallelo ed aumentare la corrente gestibile).   
Sarebbe interessante vedere meglio la scheda interessata e vedere che componenti ha montati su, i diodi mi sembravano più dei zener che diodi tradizionali, non sono esperto, ma credo che se fossero zener, forse non sono utilizzati per cui sono utili, ma dalla foto non riesco a captare altro, magari una più ravvicinata e ad alta risuluzione chiarirebbe i miei dubbi.

Se non vado errato, tu attivi i relè con un comando HIGH, giusto?  quindi in uscita sul piedino dell'arduino verso la board relè in presenza di attivazione sara a +5V, quindi credo che ti convenga provare con un ULN2003 (che conosco, il 2803 non me lo ricordo molto ma dovrebbe essere una versione a 8 darlingtong invece dei 7 del 2003, al massimo, verifica i datasheet e segui uno dei progetti indicati nei link)  in questo caso, funzionerebbe senza fare modifiche importanti, metti l'ULN2003 in una braeadboard al centro dove c'è il canale doppio, e collega i fili restanti, se ricordo bene, il pin 8 è GND e 9 è +5V/+12V, gli altri pin vanno collegati da 1 a 7 verso arduino, ed i loro pin attivati saranno quello giusto di fronte (quindi per attivare il pin 16, dovrai eccitare il pin 1 con arduino e così via per gli altri 6 pin).   quindi i relè, andranno messi dal pin 10 al 16.

Comunque, dai un'occhiata ai link che ti ho postato, le info qui su sono a memoria, e la mia avvolte mi gioca brutti scherzi, e poi, ci ho giocato con loro 3-4 anni fa, quindi potrei essere confuso, verifica..

A questo punto, l'uso di mosfet si complica perche quelli che conosco io, pilotano GND mentre i tuoi relè vengono pilotati da +5V (VCC quindi) esistono anche con pilotaggio positivo, ma non ci ho avuto a che fare, per questi, ti conviene attendere indicazioni dai bravi elettronici che popolano questo forum.
Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No, i Relè si eccitano in stato LOW perchè sono a logica negata, perciò sul darlington dovrei connetterli invertiti presumo. Comunque hai detto benissimo riguardo ai collegamenti, ho dato un'occhiata ai link che mi hai girato e dice proprio di collegare in quel modo il darlington.

ecco un altri due video e la foto della scheda Relè:

Con i Relè Collegati
http://youtu.be/xL-uZZgBXFE

Senza Relè Collegati
http://youtu.be/h3sSifQcwh0




Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

leggendo in giro c'è chi dice che un ULN2803 accetta tensioni superiori a 5v ma è vera questa cosa? questa immagine sembrerebbe dire il contrario

0-40 V - COM


anche dal datasheet sembrerebbe che l'ULN2803 supporta i 5v, mente l'ULN2804 i 6-16v... voi che mi dite?
http://pdf1.alldatasheet.com/datasheet-pdf/view/182611/TOSHIBA/ULN2803APG.html

Type
ULN2803APG / AFWG

Input Base Resistor
2.7 kΩ

Designation
TTL, 5 V CMOS

-----------------

Type
ULN2804APG / AFWG

Input Base Resistor
10.5 kΩ

Designation
6~15 V PMOS, CMOS
« Last Edit: April 13, 2014, 09:37:09 am by pino8314 » Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Usa solo quelli con logica 5V TTL, gli altri lasciali stare.  Anche perchè io vado in base alla massa, ovvero, se ci sono 100 progetti basati su ULN2803/2003 e magari 2-3 sugli altri, è per qualcosa no?  Basicamente la differenza sostanziale tra i due 2803/2003 è la quantità di darlington, 8 per il 2803 e 7 per il 2003.  

Ma ancora non ho capito, alla fine, per eccitare i relè, che segnale gli devi dare con arduino, un LOW o un HIGH ?  e a questo che mi riferivo prima io.

Comunque, recapitolando,  se dai un segnale di 5V su uno dei pin del darlington (1 a 7 se ULN2003, 1 a 8 se ULN2803) si attiverà il pin opposto, quindi per il pin 1 si attiverà il pin 16 (del ULN2003) o il pin 18 (del UNL2803)  dando un GND al Relè o carico a lui collegato.  Al disattivarsi il segnale, il relè o altro carico induttivo, creerà una corrente/tensione di ritorno detta di flyback che tenterà di tornare indietro verso il darlington, esso mediante i diodi interni, scaricherà queste tensioni sul circuito di alimentazione o COM e proteggendo sia il darlington che l'arduino da spiacevoli conseguenze.

Un'ultima domanda, ma le alimentazioni, sia di arduino che della scheda relè è in comune?  immagino hai messo il GND in comune tra loro no?  se non lo hai fatto, specie se usi due alimentazioni separate (del tipo l'arduino da USB e la scheda relè da alimentatore) devi avere la massa in comune tra i due o non funzionerà o funzionerà male.

Di questo lascio la parola a membri del forum più autorevoli per chiarimenti, come ti ho detto in post precedenti, io sono nubbio come te, ma con qualche kilometro in più  smiley-wink


« Last Edit: April 13, 2014, 11:12:58 am by hiperformance71 » Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I Relè di questa scheda si eccitano se da arduino gli arriva un segnale LOW e si disesccitano se gli arriva un segnale HIGH. Sono a logica negata, funzionano all'inverso.

Relè e sensori sono tutti alimentati da arduino, non ho alimentatori esterni per il momento ma sto provvedendo ad adeguarmi. Ho comperato online un alimentatore da 5v 3A USB e questa scheda
http://www.ebay.it/itm/Modulo-MB102-Alimentatore-per-Breadboard-Modulo-3-3V-5V-per-Arduino-PIC-/151062339913?pt=Attrezzature_e_strumentazione&hash=item232c046149&_uhb=1
adatta alla Breadboard che eroga una corrente di 700mA (facendo due calcoli di assorbimento tra relè e sensori, rientro al di sotto dei 700mA).
Dopo aver messo l'alimentatore esterno provvederò a combinare la massa con quella di Arduino.

Spero di risolvere con i Darlington e con l'alimentazione esterna... grazie ancora per il tuo aiuto e vi terrò aggiornati smiley
Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok adesso ho capito.   Quindi adesso stai alimentando la scheda relè mediante il +5V di arduino, giusto?  mmm, non conosco l'assorbimento della scheda relè, ma penso che effettivamente, l'alimentatore di arduino non è proprio indicato a fornire tanta corrente, specie se lo fai da USB che se non ricordo male, riesce a fornire fino a 500mA, quindi hai fatto bene a prendere un nuovo alimentatore, quando lo alimenterai, non dimenticare di mettere la massa comune tra arduino e tutti i componenti, scheda relè e pulsanti capacitivi.

Quindi se misuri sui pin di attivazione della board relè, ti trovi un +5V giusto?  ci dovrebbe essere un pull-up per funzionare correttamente, ma immagino di si, si vedono 2 resistenze ed un LED per relè oltre a quel grosso componente DIL che ritengo sia un optoaccoppiatore e quel piccolo transistor...

« Last Edit: April 13, 2014, 12:08:20 pm by hiperformance71 » Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si nei pin di attivazione mi trovo i +5v se attivati.
Hai detto bene, la porta USB 2.0 eroga soltanto un massimo di 500mA che non è il massimo sicuramente. Considera che, da quello che ho letto sui datasheet, i relè assorbo 50-60mA e i sensori capacitivi 20mA. Cosa molto strana che non ho mai capito, facendo dei calcoli:

60x8=480 mA - assorbimento totale per tutti i relè eccitati
20x8= 160mA - assobimento totale per tutti i sensori attivi
Totale=640mA

Come può essere che arduino riesca a tenere 640mA di assorbimento se ne riceve soltanto 500mA!?

Per quanto riguarda il mettere in comune la massa tra l'alimentatore esterno ed arduino, ho pensato di fare proprio come lo schema che mi hai linkato. http://fritzing.org/projects/controling-8-relay-with-arduino-mega-adk

Se collego GND a monte (come nello schema de link) dovrebbe andar bene no?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 116
Posts: 6020
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si nei pin di attivazione mi trovo i +5v se attivati.
Hai detto bene, la porta USB 2.0 eroga soltanto un massimo di 500mA che non è il massimo sicuramente. Considera che, da quello che ho letto sui datasheet, i relè assorbo 50-60mA e i sensori capacitivi 20mA. Cosa molto strana che non ho mai capito, facendo dei calcoli:

60x8=480 mA - assorbimento totale per tutti i relè eccitati
20x8= 160mA - assobimento totale per tutti i sensori attivi
Totale=640mA

Come può essere che arduino riesca a tenere 640mA di assorbimento se ne riceve soltanto 500mA!?
....

Perdona pino8314 ... ma leggendo questo tuo post devo veramente dirtelo ...
... senza offesa, ma a te mancano le basi fondamentali dell'elettronica e le informazioni di base su Arduino.

Prima di proseguire con tanti bei progetti, faresti meglio a prendere un buon testo di elettronica e cominciare a capire cosa è la tensione, cosa è la corrente, la legge di Ohm e così via ... perché senza le basi fondamentali ... avrai sempre delle difficoltà.

Detto questo, tanto per evitare di fare danni, precisiamo alcuni valori ...

1. la corrente massima che si può ASSORBIRE, alimentando Arduino dalla USB è di 500 mA ... di più non ne può dare, quindi ... se il carico ASSORBE di più ... semplicemente viene temporaneamente distaccato dal "resettable polyfuse". Vai nel reference di Arduino UNO e guarda il paragrafo "USB Overcurrent Protection"

2. ogni singolo pin di Arduino è in grado di fornire al massimo 40 mA, ma quello è veramente il limite massimo. Per un uso normale bisogna stare al 65 - 70% di detto valore.

3. anche se ogni pin può dare al massimo 40 mA, la somma totale di quanto si può assorbire dai vari pin è comunque limitata a 200 mA massimi, pena il danneggiamento del chip. Anche qui, in un uso normale e continuativo ... è bene stare al 65 - 70% di detto valore.

4. se Arduino viene alimentato dal Jack o dal pin Vin... la corrente massima erogabile è funzione di quanto riesce a disspiare il regolatore di tensione. Più è alta la Vin e maggiore sarà la dissipazione di calore, di conseguenza ... minore la corrente che si potrà assorbire senza ... bruciarlo.

Guglielmo
« Last Edit: April 13, 2014, 03:29:04 pm by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Pages: 1 [2] 3 4 5   Go Up
Jump to: