Show Posts
Pages: 1 ... 467 468 [469] 470 471 ... 745
7021  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 18, 2012, 02:41:42 pm
risci a loggare i valori mentre sei in volo? bisogna vedere se l'errore deriva dai sensori, dal SW o dagli ESC quando danno potenza.

Imho devi ricontrollare il collegamento ai sensori
7022  International / Generale / Re: Progetto torre di hanoi on: January 18, 2012, 07:47:44 am
Quale board mi consigliate di comprare, prima per imparare, e poi per realizzare questo progettino (o anche qualcos'altro se cambiassi idea smiley-roll)?
Mi stavo orientando su Arduino UNO rev.3 ma, mi servirebbe un consiglio da qualcuno con esperienza  xD

Dal punto di vista potenza di calcolo la UNO basta e avanza, la torre di Hanoi è un problema semplice da risolvere dal punto di vista informatico.
Quello che è difficile da realizzare per il tuo progetto è la parte meccanica che sposta fisicamente i piatti, il modo più semplice per risolvere è utilizzare un piccolo braccio robot commerciale come quelli di Lynxmotion, però tra braccio e servocontroller vai a spendere qualche centinaio di Euro, anche con altre soluzioni meccaniche la spesa è sempre abbastanza alta.
Una soluzione alternativa è utilizzare un rappresentazione grafica della torre, con relative animazioni, su un pc collegato via usb (seriale virtuale) ad Arduino, in pratica Arduino risolve il puzzle mentre il pc muove i pezzi in base ai comandi impartiti da Arduino.


quoto in pieno l'idea di usare un braccio già fatto, altrimenti se non hai mecchine CNC a disposizione o un'ottima manualità nella lavorazione di plastiche, legno o alternative è più il tempo perso che i soldi risparmiati (e il tempo è denaro...)

in olte il braccio lo usi anche per altri progetti, tipo un grattaschiena automatico smiley
7023  International / Megatopic / Re: swRTC on: January 17, 2012, 07:02:47 pm
prova a metterlo di un giorno dopo alla data timestamp...

edit: forse di year*365.2422 fa fatto un round sempre al +1, cioè se è > 0  anche di 1/10000000 va fatto +1 invece che troncare come fa il C... se un giorno è già iniziato, non va contato come giorno in più, perchè sarà contato in ore minuti e secondi  smiley
7024  International / Megatopic / Re: swRTC on: January 17, 2012, 06:22:54 pm
The above scheme means that on a normal UTC day, of duration 86 400 s
7025  International / Megatopic / Re: swRTC on: January 17, 2012, 05:55:19 pm
il problema deriva dal fatto che se leggi attentamente la storia del timestamp, scopriresti che in realtà anche lui ha un errore da calcolare
7026  International / Megatopic / Re: swRTC on: January 17, 2012, 05:19:22 pm
ad occhio hai solo sbagliato le dimensioni delle costanti

adesso son troppo fuso per controllare, magari domani mattina

edit: macchè domani mattina.. lavoro! magari domani sera (uff!!!) smiley-mr-green
7027  International / Generale / Re: Progetto torre di hanoi on: January 17, 2012, 05:18:00 pm
anche un paio di sensori di pressione sulla "pinza" potrebbero far comodo. per contare il numero di dischi, un ping sensor (che puoi fare con 2 led, vedi su questo forum) è abbastanza semplice, se sfrutti il fatto che di lato la torer è una scaletta smiley e a questo punto diventa anche abbastanza semplice individuare il "palo" in cui inserire l'anello

l'algoritmo p una baggianata, io l'ho scoperto giocandoci, magari non è ottimizzato ma fondamentalmente; se devi spostare una torre di pari anelli, il primo lo metti dove NON vuoi arrivare dei 2 pali liberi, viceversa se dispari.
facile no?
7028  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 05:10:51 pm
allora, gli esc escono di fabbrica con già un range impostato. La cosa ideale è rifare la procedura di settaggio se l'ESC lo permette, altrimenti colleghi l'esc all'arduino, e con uno sketch vari il valore in uscita alla servo in modo da trovare il range minimo e massimo, e cambiare di conseguenza le impostazioni all'interno del programma di controllo.

per esempio io ho usato questo:

Code:
#include <Servo.h>
#define PIN_MOTORE 3

Servo motore = Servo();

void setup(){
  Serial.begin(19200);
  motore.attach( PIN_MOTORE, 700, 2500 );
}

int enginePower=0;
unsigned long lastPrint=0;
void loop(){
  boolean lettoQualcosa=false;
  while (Serial.available() > 0){
    char letto = Serial.read();
    lettoQualcosa=true;
    switch(letto){
      case '-':
        enginePower--;
        motore.write(enginePower);
        break;
      case '+':
        enginePower++;
        motore.write(enginePower);
        break;
      case 's':
        enginePower=0;
        motore.write(enginePower);
        break;
    }
  }
  if (lettoQualcosa){
    Serial.print("new power: ");
    Serial.println(enginePower);
  }
  if (millis() - lastPrint > 1000){
    lastPrint=millis();
    Serial.println(enginePower);
  }
}

come noterete con + e - aumentate e diminuite enginePower (valore max 180, min 0, secondo la libreria Servo), noterete che con enginePower a 0 probabilmente gli ESC non si armano, infatti 700 è un valore troppo basso per la maggior parte degli esc, e 2500 troppo alto (l'esc si resetta). Con s otterrete lo stop immediato dei motori.
Una volta che avete ottenuto il valore di enginePower minimo (chiamiamolo enginePowerMin) e massimo (chiamiamolo enginePowerMax), otterrete i valori da impostare con 2 map:
valoreMin = map(enginePowerMin, 0, 180, 700, 2500);
valoreMax = map(enginePowerMax, 0, 180, 700, 2500);
7029  International / Megatopic / Re: swRTC on: January 17, 2012, 04:55:43 pm
Ah, hai ricontrollato la funzione per avere il timestamp? Perché va avanti di un giorno? Eppure il codice mi pare corretto!

davvero? ma quale, la tua quale delle 2, o la tua?
7030  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 02:48:03 pm
sì, gli ESC hanno una memoria interna, una volta fatto il setup deviu rifarlo solo se cambi i paramentri di min e max nel codice
7031  International / Generale / Re: anche su 1.0 le stringhe mi fanno impazzire.. on: January 17, 2012, 02:03:47 pm
basta osservare la wstring.cpp:


Code:
String & String::operator = (const char *cstr)
{
if (cstr) copy(cstr, strlen(cstr));
else invalidate();

return *this;
}

nel tuo caso "" finisce puntato da &cstr, e if (cstr) credo ritorni false... quindi viene invalidato:

Code:
void String::invalidate(void)
{
if (buffer) free(buffer);
buffer = NULL;
capacity = len = 0;
}

come puoi vedere ora il buffer è NULL. Ora quando fai += credo che avvenga un casino della madonna. Se è così è un bug della libreria.
7032  International / Generale / Re: ARDUINO e STEPPER 17PU-h324-G2VS on: January 17, 2012, 01:52:21 pm
[cancellato per eccesso di ignoranza  smiley-mr-green ]
7033  International / Megatopic / Re: swRTC on: January 17, 2012, 01:30:11 pm
questo funziona:
comuqnue ad occhio hai solo sbagliato le dimensioni delle costanti
Code:
int swRTC::updateDate(){
  unsigned long time = getTimestamp();
/* 
  Serial.print( "timestamp: " );
  Serial.println( time );
*/
  unsigned long day = time/(60L*60L*24L);
  float remaining = time-day*(60L*60L*24L);
/* 
  Serial.println( remaining );
 
  Serial.print( "day: " );
  Serial.println( day );
*/ 
  int year = (day / 365.2422);
  float dayRemaining = day-year*365.2422;
  year+=1900;
/* 
  Serial.print( "year: " );
  Serial.println( year );
  Serial.println( dayRemaining );
*/
  if (dayRemaining>=365.2422)
    return 1;//my math is wrong!
 
  if (year<1900)
    return 2;//year not supported!
/* 
  Serial.print( "dayRemaining: " );
  Serial.println( dayRemaining );
*/
  int month=0;
  while (dayRemaining > daysPerMonth[month]){
    dayRemaining -= daysPerMonth[month];
//    Serial.print( "added month: " );
//    Serial.println( dayRemaining );
    month++;
  }
 
  month++;//because month 0 doesn't exist
/* 
  Serial.print( "month: " );
  Serial.println( month );
*/ 
  if (month>12)
    return 3;//my math is wrong!
 
//  Serial.println( dayRemaining );
 
  if (dayRemaining>=(60L*60L*24L))
    return 4;//my math is wrong!
/*
  Serial.print( "dayRemaining: " );
  Serial.println( dayRemaining );
*/
  day=dayRemaining;
  if (dayRemaining-day>0){ //add partial day!
    day++;
  }
 
  int hours = remaining/(60L*60L);
  remaining = remaining-hours*(60L*60L);
/* 
  Serial.println( remaining );
 
  Serial.print( "hours: " );
  Serial.println( hours );
*/
  if (remaining>=(60L*60L))
    return 5;//my math is wrong!
 
  int minutes = remaining/(60L);
  remaining = remaining-minutes*(60L);
/*
  Serial.print( "minutes: " );
  Serial.println( minutes );
 
  Serial.print( "seconds: " );
  Serial.println( remaining );
*/ 
  if (remaining>=60)
    return 6;//my math is wrong!
   
  now.year = year;
  now.month = month;
  now.day = day;
  now.hour = hours;
  now.minute = minutes;
  now.second = remaining; 
  return 0;
}
7034  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 07:29:10 am
ah tu alimenti arduino in modo indipendente dagli esc, corretto?
bel casino, magari puoi mettere un tasto che blocca l'esecusione, e che premi quando colleghi i motori, oppure usi il relè
7035  International / Generale / Re: Hardware debounce in pull-down on: January 16, 2012, 06:46:49 pm
no mauro, gli interrupt on change (se non sui due pin interrupt), lavorano sul registro. quindi devi avere una copia del byte rappresentante gli 8 registri, fare una xor (se non erro) tra nuova e vecchia immagine, e ottieni i un byte con 1 ai pin che hanno cambiato di valore. oppure in questo caso puoi direttamente estrarre un bit usando una AND tra il registro e 2^(bit che vuoi leggere da 0 a 7)

Quote
Mi pare che astro si riferisse a delle macro cbi e sbi
esatto:

Code:
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
Pages: 1 ... 467 468 [469] 470 471 ... 745