Recent Posts

Pages: [1] 2 3 ... 10
General Electronics / Re: Powersupply in car
Last post by ElCaron - Today at 11:02 am
This is most certainly a very stupid question:

1) Can I power an Arduino UNO using the 12V in a car (that may go up to 14V depending on the charging state of the battery)
Not advisable. 12V is the max spec, and that already gets pretty hot when you have stuff connected.

2) If not - are there any "plug and play" solutions (12V in --> Arduino power out)
Yes, a phone charger. Plug it into the USB port.
Alternatively, get something like an MP1584 module, set it to 7-8V and feed it into Vin.

3) If there is a similar black round power plug on an Arduino shield - can I assume that this shield can also be powered with the same voltage as the Arduino?
The "black round power plug" is specified up to higher voltages. If that thing was a shield that was supposed to do some 24V stuff, I would expect it to require 24V. So no, you cannot assume that.
The following code uses a mega to measure the voltage of 16 cells in a lithium battery, one by one, maintaining independent grounding (via solid state relays), and can instruct to discharge any cell that is above average. Data outputs via bluetooth to an android device.

I would prefer a discharge to last 3 seconds but Im not going to do the enormous amount of blinkwithoutdelay coding for that. There is a small (unknown) bug, every now and then ALL alarms trigger for no reason. I have attempted to patch this bug by checking how many alarms are triggered before triggering any.

The "impossible" BMS:
Code: [Select]

#include <Wire.h>
int del = 30;
int Pins[] = {
  A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, 2
};       // an array of pin numbers to which relays are attached
int BP[] = {
  23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53
};       // an array of pin numbers to which Resistors are attached
int bat[] = {
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 //cells to measure
int batV[] = {
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 //stored cell voltage
int pinCount = 16;           // the number of cells
int VB = 0;
int b48, ba;
int lead = 10;
String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete
int top = 0;
int bot = 0;
int all = 0;
int alarms = 0;
void setup()
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {//set up each pin
    pinMode(Pins[thisPin], OUTPUT);
    pinMode(BP[thisPin], OUTPUT);
    pinMode(BP[thisPin], HIGH);
  pinMode(A0, INPUT);//set up A0 pin for reading voltage
void serialEvent() {
  while (Serial.available()) {//listen for a command from the android
    char inChar = (char);//store the character
    inputString += inChar;//add the characters together
    if (inChar == 'A') {//if A command, it is changing top calibration number
      top = Serial.parseInt();
      top = top - 50;
      top = top / 5;
    if (inChar == 'B') {//if B command, it is changing all calibration number
      all = Serial.parseInt();
      all = all - 50;
      all = all / 5;
    if (inChar == 'C') {//if C command, it is changing bottom calibration number
      bot = Serial.parseInt();
      bot = bot - 50;
      bot = bot / 5;
    if (inChar == 'D') {//if D command, it is changing lead number
      lead = Serial.parseInt();
      lead = lead / 5;
    if (inChar == '\n') {//check for end of command
      stringComplete = true;
void loop()
  if (stringComplete) {
    inputString = "";
    stringComplete = false;
  for (int thisPin = 0; thisPin < pinCount; thisPin++) { //this loop will go through each cell one by one
    digitalWrite(Pins[thisPin], HIGH); //turn on the relay so we can measure the cell
    for (int i = 0; i < 20; i++) { //measure the voltage of each cell 20x
      int V = analogRead(A0); //measure the voltage on the analog pin
      VB = VB + V; //add the 20 measurements together
    bat[thisPin] = VB / 20; //take average of the 20 measurements
    VB = 0;
    bat[thisPin] = constrain(bat[thisPin], 400, 900); //check for error measurements
    batV[thisPin] = bat[thisPin];//store the voltage reading
    batV[thisPin] = map(bat[thisPin], 434, 867, (200 + bot), (400 + top)); //convert the analog reading into mv
    batV[thisPin] = (batV[thisPin] + all); //calibrate the voltage
    b48 = b48 + batV[thisPin]; //add the cell voltages together to give pack voltage
    digitalWrite(Pins[thisPin], LOW); //turn off the relay, we have finished measuring that cell
  } //check for an abnormal number of alarms, first count how many alarms
  if (batV[0] - lead > ba) { //is battery voltage above average? if yes, track the alarms
  if (batV[1] - lead > ba) {
  if (batV[2] - lead > ba) {
  if (batV[3] - lead > ba) {
  if (batV[4] - lead > ba) {
  if (batV[5] - lead > ba) {
  if (batV[6] - lead > ba) {
  if (batV[7] - lead > ba) {
  if (batV[8] - lead > ba) {
  if (batV[9] - lead > ba) {
  if (batV[10] - lead > ba) {
  if (batV[11] - lead > ba) {
  if (batV[12] - lead > ba) {
  if (batV[13] - lead > ba) {
  if (batV[14] - lead > ba) {
  if (batV[15] - lead > ba) {
Generale / Re: Inviare comandi su seriale
Last post by nid69ita - Today at 10:59 am
Si, vero la S non c'e' 
Ricorda però una cosa.   La myCmd memorizza eventuali dati della precedente S solo se dopo la S c'e' qualcosa.

Se invii   S1234   memorizza 1234
poi invii  S  e basta, lui non fa nessun azzeramento su myCmd, quindi rimane 1234
poi invii D lui avrà ancora myCmd con 1234
The nodes will have a settable address that can be changed via 2 buttons and displayed on a seven segment display. This address will be changed periodically and some nodes will be set as the same address so they both/all receive certain packets.
Why not design a system that is easy to implement given the available technology. Give each Arduino a different wireless address.

If you really need to change an identifier on an Arduino you could have a variable the holds an ID which can be changed at will and which can have duplicates. The ID can be included in the message.

If you explain what you are trying to achieve (rather than how you think it might be done) it will be much easier to make useful suggestions.

Français / Re: Impossible de televerser s...
Last post by gilbert45 - Today at 10:54 am
Si s'est un officiel

You need a suitable motor driver between an Arduino and any motor. With a suitable driver an Arduino could control almost any motor.

If you have a low-friction turntable that needs to turn at low speed you probably don't need a very powerful motor.

If you build the turntable and measure the torque needed to rotate it then you will have data for choosing the motor.

I've used 'pcbway' a lot of times for my pcbs. The quality is satisfying and they ship to Europe. The shipment usually takes 15-25 days. The shipping costs go up depending on the weight of your pcbs so try to keep it light if possible.

looks like that here a lot of people are advicing their own sites....

since i don t need to meet any standard and i do really REALLY simple stuff someone can advice me a cheep site?
Français / Re: Impossible de televerser s...
Last post by kamill - Today at 10:47 am
Ca devrait fonctionner avec les drivers installés en même temps que l'IDE arduino
Generale / Re: Costruzione Orologio a led...
Last post by Claudio_F - Today at 10:46 am
così complicato?
Ma elettronica e programmazione sono oggettivamente materie molto vaste che richiedono studio e pratica prima di poter progettare qualcosa da zero. I sistemi di oggi (librerie software e moduli già pronti come Arduino e i vari shield) semplificano un po', nel senso che permettono entro certi limiti di "assemblare" senza doversi occupare di tutti i minimi dettagli progettuali, ad esempio per pilotare display LCD "intelligenti" bastano pochi fili e si trovano molti esempi di base sul software da scrivere. Ma usare componenti non intelligenti (come i display LED in questione) richiede di sapere come vanno usati i diodi, calcolare quanta corrente serve per l'intero insieme, che dissipazioni di potenza ci sono in gioco, come realizzare un apposito "driver" per i segmenti (o sceglierne e comandarne uno esistente). Per questo è praticamente impossibile una "guida passo passo".

Direi che le strade (stiamo parlando di hobby) sono due:
-la prima è quella di trovare un progetto già bello e pronto e copiarlo pari pari (magari chiedendo per i dubbi)
-la seconda è tenere si a mente l'obiettivo dell'orologio (perché senza un obiettivo difficilmente si è motivati a fare qualcosa), ma prima di arrivare ad esso fare una lunga serie di (già interessanti ed istruttivi in sè stessi) esperimenti intermedi con ogni componente, che permettano di acquisire a piccoli passi la pratica e le conoscenze necessarie.

Sicuramente va letto qualcosa sui componenti base (diodi, transistor, calcolo resistenze acc), bisogna provare ad alimentare "a mano" in modo corretto un solo display, provare a comandare con Arduino dei LED semplici in modo da vedere come si fa ad accendere/spegnere qualcosa e a creare delle sequenze comandate da programma, poi come si può comandare un segmento tramite Arduino e un driver di potenza intermedio. Poi mettere insieme tutte queste cose e provare a fare ad esempio conteggio avanti e indietro su un solo display premendo due pulsanti. Poi vedere come si possono controllare più display insieme (multiplex, driver seriali ecc). Quando si saprà visualizzare il numero a quattro cifre che si vuole, allora si può dire "ho acquisito lo skill visualizzazione" (e nel frattampo un sacco di sottoskill), e si può partire con quello della gestione dell'ora, preferibilmente leggendo un real time clock già pronto di cui si trovano già esempi.

Ecco... qui iniziamo ad entrare in tecnicismi per me incomprensibili. Comunque credo che si sia già in ambito di programmazione della scheda parlando di questi aspetti, corretto?
Si e no, le due cose (hardware e software) non sono svincolate tra loro, si può costruire un hardware tenendo conto di come lo si vuole comandare con il software. Il discorso anodo/catodo è prettamente elettronico, il modo di usare HIGH e LOW a software dipende da come si è progettato il circuito di comando del singolo segmento.

Poi ovviamente si, Arduino si alimenta non solo via USB ma anche con un alimentatore esterno, ad esempio a 12V, la cui potenza va calcolata in base a quanto deve assorbire l'intero progetto.

Giusto per cominciare con qualche numero... i display che hai linkato su RS (belli, non li conoscevo, anche a me sembra che il prezzo sia sceso -occhio che va aggiunta l'iva più trasporto-), prima di tutto bisogna conoscerne le caratteristiche elettriche, e a questo serve il datasheet sulla destra (rigorosamente in inglese), da cui si evince che ogni segmento richiede da 7.5 a 10V di tensione e 60mA di corrente. Sette segmenti completamente accesi al massimo della luminosità (escluso il punto decimale) richiedono perciò 420mA, che usando un alimentatore da 12Vcc significano almeno 5 watt di potenza. Ora, considerando che i segmenti non saranno sempre tutti accesi, che la luminosità non sarà tenuta al massimo, e che probabilmente le diverse cifre verranno comandate in multiplex (una sola accesa per volta in rapida sequenza), un normale alimentatorino 12Vcc 1A dovrebbe bastare.
Have you looked at the diagram for connection of the digital sensor?

As Robin2 has said, where are you supplying power.

Can you tell us your electronics, programming, arduino, hardware experience?

Thanks.. Tom... :)
Pages: [1] 2 3 ... 10

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131