SSaluti a tutti, mi chiamo Elia. Mi diletto anch'io di elettronica ed affini. Pensando di fare cosa gradita ho pensato di fare uno schemino dei collegamenti sul progetto di Windom che allego. In attesa dei nuovi suggerimenti proposti da Windom, ed ulteriori sviluppi, attendo scalpitando. segnalate eventuali errori. Saluti.
Nell' attesa cher venga pubblicato l'articolo, anticipo lo schema di come ho collegato il tutto al fine di controllare il puntamento via bus I2C.
I motori funzionano a 12 volt e non possono essere controllati direttamente da Arduino che verrebbe bruciato immediatamente,occorre interporre un driver per motori C.C. come indicato nello schema.
Siccome serve a poco lo schema senza il software,se qualcuno mi spiega come fare, pubblico anche questo. Resta il problema che il tutto è fatto in funzione della meccanica di rotazione modificata con l'aggiunta di un potenziometro per ottenera la posizione della meccanica stessa, come verrà spiegato dettagliatamente alla pubblicazione dell' articolo.
Grazie windom46 per lo schema. Adesso comincio a smanettare, qualcosa verrà fuori. Se non ti crea molto disturbo sarebbe molto gradito il software. Puoi allegarlo utilizzando il pulsante a sinistra "incolla da word". chiaramente deve essere in formato word. Grazie anticipatamente, saluti e a buon rendere.
Come suggeritomi da chimera, allego il software per Arduino (IDE1.05) che sto utilizzando attualmente in giro per la Sardegna da oltre un mese senza problemi.
Mentre ci sono, anticipo anche il link del video pubblicato su Youtube sulle ultime modifiche apportate e sul nuovo sistema di controllo via bluetooth con il Galaxy S3.
software per Arduino:
/* CONTROLLO BRANDEGGIO (Motore303) per Antenna SELFSAT, con ARDUINO-UNO, bussola * CMPS10 e Display 16x2 in modalità I2C (SatWindom_I2C_rev.2) * *********************************************************************************/ #include <Wire.h> // include librerie #include <LiquidCrystal_I2C.h> #include <EEPROM.h> #include <avr/wdt.h> #define Reset_AVR() wdt_enable(WDTO_30MS) // softReset sistema #define ADDRESS 0x60 // definisce indirizzo CMPS10 #define inSF A1 // pin in SatFinder #define inCom A2 // pin in Pulsanti #define inPot A3 // pin in Potenziometro #define ledMA 12 // pin led man/auto #define inMot 13 // pin motore acceso #define motDa 9 // pin motore direzione(1) #define motDb 10 // pin motore direzione(2) #define motEa 3 // pin motore elevazione(1) #define motEb 11 // pin motore elevazione(2) LiquidCrystal_I2C lcd(0x20,16,2); // setta LCD (address, colonne, linee)
int levelSF; // livello segnale del SatFinder char level = -1; // barra segnale SatFinder byte oldState = LOW; // imposta stato bistabile int dirOut; // lettura bussola in gradi int dirHB = EEPROM.read(0); // legge direziona dalla cella 0 int elevHB = EEPROM.read(1); // legge elevazione dalla cella 1 byte pass = 0; // num.loop per limitare scrittura display const byte sicRot = 60; // sicurezza rotazione const byte centro = 183; // rotazione a 180° int posPot; // posizione rotazione antenna const byte range = 1; // tolleranza su angolazioni byte dirLock = 0; // direzione OK byte elevLock = 0; // elevazione OK const byte velRid = 100; // riduzione velocità a 100/255 const byte prox = 5; // gradi mancanti alla posizione byte centroRot = 0; // centro rotazione meccanica int manButton; // ingresso comandi manuali char elevOut, skew; // valore elevazione e skew(da CMPS10)
void setup(){ lcd.init(); // inizializza lcd pinMode(inSF, INPUT); // ingresso livello SatFinder pinMode(inPot, INPUT); // cursore potenziometro rotazione pinMode(inCom, INPUT); // ingresso pulsanti comandi manuali pinMode(ledMA, OUTPUT); // LED manuale/auto pinMode(inMot, INPUT); // sensore motore acceso pinMode(motDa, OUTPUT); // motore orientamento 9/10 pinMode(motDb, OUTPUT); pinMode(motEa, OUTPUT); // motore elevazione 3/11 pinMode(motEb, OUTPUT); // pin digitali 0-1-2-4-5-6-7-8 e analogico A0, liberi. ferma(); // ferma i motori if (inMot == LOW){lcd.backlight();} // accende display // visualizza su display i valori memorizzati nella EEPROM lcd.setCursor(0,0); lcd.print("**** HOTBIRD ***"); lcd.setCursor(0,1); lcd.print("Dir."); lcd.print(dirHB, DEC); lcd.setCursor(9,1); lcd.print("Elev."); lcd.print(elevHB, DEC); lcd.print(" "); lcd.print(" "); delay(3000); // attesa 3 secondi lcd.clear(); }
void loop() { byte highByte, lowByte; // valori di highByte e lowByte per dirOut Wire.beginTransmission(ADDRESS); // inizio comunicazione con CMPS10 Wire.write(2); // invia registro per la lettura Wire.endTransmission(); Wire.requestFrom(ADDRESS, 4); // richiesta di 4 bytes da CMPS10 while(Wire.available() < 4); // attesa disponibilità bites highByte = Wire.read(); // lettura azimut(direzione) lowByte = Wire.read(); // lettura decimali azimut(direzione) elevOut = Wire.read()+57; // lettura elevazione+compensazione skew = Wire.read(); // lettura angolazione dirOut = ((highByte<<8)+lowByte)/10; // calcolo direzione manButton = analogRead(inCom); // valori comandi manuali immessi su(A2) posPot = map(analogRead(inPot),102,924,0,359); // posizione rotazione rimappata levelSF = analogRead(inSF); // livello segnale SatFinder // Partitore resistivo per inviare 6 valori (100-200-300-400-500-600) // sul pin(A2) e ottenere un convertitore A/D per le varie funzioni. // 7,8K verso 5v.+ 6 da 2,2k per il partitore + 1 da 100k tra A2 e massa
// ********* BISTABILE COMMUTAZIONE MAN./AUTO ****************** if (manButton > 50 && manButton < 150) { // manButton=100 (Manuale/Auto) if (oldState == LOW) { oldState = HIGH; // attiva automatismi e digitalWrite(ledMA, HIGH); // accende LED elevLock = 0; // imposta elevLock e dirLock a 0 dirLock = 0; }else{ oldState = LOW; // attiva comandi manuali e digitalWrite(ledMA, LOW); // spegne LED } delay(500); // attende 1/2 secondo } if (oldState == LOW) { // comandi manuali attivato if (manButton < 50) ferma(); // arresta motori if (manButton > 150 && manButton < 250) salva(); // 200;salva valori Elev.Dir. nella EPROM if (manButton > 250 && manButton < 350) alza(); // 300;alza antenna if (manButton > 350 && manButton < 450) abbassa(); // 400;abbassa antenna if (manButton > 450 && manButton < 550 && elevOut < sicRot) orario(); // 500;hiude antenna if (manButton > 550 && manButton < 650 && elevOut < sicRot) antiorario();// 600;apre antenna }else{orienta();} if (digitalRead(inMot) == HIGH) chiude(); // chiude ant.a motore acceso // ***** Scrive su LCD 16x2 con livello segnale ***** pass = pass+1; // limitazione scrittura display if (pass == 1) { if (elevOut > 85) { // controllo livello camper lcd.setCursor(0,0); lcd.print("LIVELLO___CAMPER"); lcd.setCursor(0,1); if (((88-elevOut)==0) && ((skew-3)== 0)) { // usa gli assi pitch,roll(da compensare) lcd.print("*** IN PIANO ***"); // per controllare il livello del camper }else{ lcd.print("A/P "); lcd.print(88-elevOut, DEC); lcd.print(" "); lcd.setCursor(9,1); lcd.print("Lat."); lcd.print(skew-3, DEC); lcd.print(" "); } }else{ // controllo posizionamento antenna lcd.backlight(); lcd.setCursor(0,0); lcd.print("Elev."); lcd.print(elevOut, DEC); lcd.print(" "); lcd.setCursor(9,0); lcd.print("Dir."); lcd.print(dirOut, DEC); lcd.print(" "); lcd.setCursor(0,1); if (levelSF > 30) { // formazione barra livello segnale lcd.print("Level."); for (int lev=0; lev<=levelSF/8; lev++) { lcd.print(level); } lcd.print(" "); }else{ lcd.print("Segn."); lcd.print(levelSF); lcd.print(" "); lcd.setCursor(9,1); lcd.print("Pos."); lcd.print(posPot, DEC); lcd.print(" "); } } } if (pass > 50) {pass = 0;} // scrive su display ogni 50 loop delay(10); } /*********** FUNZIONI RIPETITIVE *****************/ void alza() { digitalWrite(motEa, HIGH); if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut < 30){ analogWrite(motEb, velRid); }else{ digitalWrite(motEb, LOW); } } /***************************************************/ void abbassa() { digitalWrite(motEb, HIGH); if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut > 80){ analogWrite(motEa, velRid); }else{ digitalWrite(motEa, LOW); } } /***************************************************/ void orario() { // gira in senso orario digitalWrite(motDb, HIGH); if (((dirOut > dirHB-prox) && (dirOut < dirHB+prox)) || posPot > 345){ analogWrite(motDa, velRid); }else{ digitalWrite(motDa, LOW); } } /***************************************************/ void antiorario() { // gira in senso antiorario digitalWrite(motDa, HIGH); if (((dirOut > dirHB-prox) && (dirOut < dirHB+prox)) || posPot < 15){ analogWrite(motDb, velRid); }else{ digitalWrite(motDb, LOW); } } /***************************************************/ void ferma() { // ferma rotazione motori digitalWrite(motDa, HIGH); digitalWrite(motDb, HIGH); digitalWrite(motEb, HIGH); digitalWrite(motEa, HIGH); oldState = LOW; // disattiva automatismi e digitalWrite(ledMA, LOW); // spegne LED } /***************************************************/ void salva() { EEPROM.write(0, dirOut); // memorizza direzione nella cella 0 EEPROM.write(1, elevOut); // memorizza elevazione nella cella 1 delay(500); Reset_AVR(); // resetta sistema } /***************************************************/ void chiude() { // chiude antenna (MOTORE acceso) oldState = LOW; // disattiva automatismi e digitalWrite(ledMA, LOW); // spegne LED if (centroRot == 0){ if (elevOut > sicRot) {alza(); // porta elevazione in sicurezza }else{ if (posPot > centro + range) antiorario(); if (posPot < centro - range) orario(); // porta rotazione a 180° } } if (posPot == centro) { centroRot = 1; digitalWrite(motDa, HIGH); // ferma rotazione antenna digitalWrite(motDb, HIGH); } if (centroRot == 1) abbassa(); } /***************************************************/ void orienta() { // mantiene l'antenna entro i valore impostati if (elevOut > elevHB + range) {alza(); // alza antenna }else{ // orienta antenna se elevOut < elevHB if (dirOut > dirHB + range) antiorario(); if (dirOut < dirHB - range) orario(); if ((dirOut > dirHB - range) && (dirOut < dirHB + range)) { digitalWrite(motDa, HIGH); // ferma rotazione antenna digitalWrite(motDb, HIGH); dirLock = 1; // direzione OK } if (elevOut > elevHB + range) alza(); // alza antenna if (elevOut < elevHB - range) abbassa(); // abbassa antenna if ((elevOut < elevHB + range) && elevOut > (elevHB - range)) { digitalWrite(motEa, HIGH); // ferma elevazione antenna digitalWrite(motEb, HIGH); elevLock = 1; // elevazione OK } } if (((elevLock == 1) && (dirLock == 1)) || (levelSF > 80)) centra(); } /*** Centraggio perfetto satellite. Programma ancora da sviluppare, in attesa di perfezionare il movimento della meccanica. Sostituendo almeno il motore della rotazione con uno Stepper, si avrebbe la massima precisione e la possibilità di bloccare la meccanica, con un minimo di tensione PWM su una fase. Resta da verificare l'influenza dei maggiori campi magnetici creati sul funzionamento della bussola. Per il momento la ricerca si ferma se durante la scansione, in prossimità delle posizioni salvate, il livello segnale supera il 30% ********************/ void centra(){ if (levelSF > 30) { // se il segnale supera il 30%, si ferma. ferma(); oldState = LOW; // attiva comandi manuali e digitalWrite(ledMA, LOW); // spegne LED } } /******************************* FINE PROGRAMMA ********************************************/
Mi sono accorto di un erore del software rispetto allo schema elettrico, dovuto al fatto che a me non funzionava più il pin analogico A0 e quindi avevo usato i pin A1,A2 e A3.
Si prega pertanto di correggere le linee:
#define inSF A1 // pin in SatFinder #define inCom A2 // pin in Pulsanti #define inPot A3 // pin in Potenziometro
nel seguente modo:
#define inSF A0 // pin in SatFinder #define inPot A1 // pin in Potenziometro #define inCom A2 // pin in Pulsanti
Va detto che si possono usare i pin analogici che si desidera, basta che ci sia corrispondenza tra schema elettrico e software.
aiuto! sono in possesso di un brandeggio come quello di windom46 sprovvisto di motorini qualcuno mi può dare una dritta a quale modello mi devo orientare e possibilmente dove poterli reperire. Chiaramente devo pilotarli con arduino utilizzando il progetto di windom46. Grazie
Dovessi cambiare i motori adesso, però, sull' elevazione, essendo quello originale un po' lento, metterei il RH15812630, sempre a pag.125, che fa 9 RPM.
Questo è l'interno dei motoriduttori originali, ingranaggio che sforza meno in nylon e gli altri metallici, niente di eccezionale. Quelli che dici tu, almeno dalla struttura esterna, sono senz'altro meglio, vedo pure che ci sono con diverso rapporto di riduzione. Non resta che provare (altezza 63 mm....ci stanno?). Come fai ad accoppiarli alla meccanica senza ingranaggi? Fai tutto con pulegge e cinghie dentate?
Io, come vedi all'inizio del video, l'ho fatto sulla rotazione, riducendo a zero i giochi di accoppiamento.
La cosa comporta diverse modifiche alla meccanica, che saranno spiegate dettagliatamente non appena in redazione troveranno il tempo di pubblicare l'articolo.
i vecchi motorini funzionavano a 24v ed erano accoppiati tramite un ingranaggio in metallo che sono riuscito a conservare. Ho notato che i vecchi motori hanno lo stesso diametro dell'asse di rotazione, quindi posso utilizzare l'ingranaggio che viene blocccato con una coppiglia che funge da fermo. Comunque sto valutando l'idea di poter utilizzare qualche motore di alzacristallo di qualche auto, ma solo se sarà possibile utilizzare l'ingranaggio originale. Domani proverò a fare una foto all'interno del brandeggio.
i vecchi motorini funzionavano a 24v ed erano accoppiati tramite un ingranaggio in metallo che sono riuscito a conservare. Ho notato che i vecchi motori hanno lo stesso diametro dell'asse di rotazione, quindi posso utilizzare l'ingranaggio che viene blocccato con una coppiglia che funge da fermo. Comunque sto valutando l'idea di poter utilizzare qualche motore di alzacristallo di qualche auto, ma solo se sarà possibile utilizzare l'ingranaggio originale. Domani proverò a fare una foto all'interno del brandeggio.
Ciao tedesto, se ti riferisci al controllo via bluetooth con cellulare Android del video, l’app l’ho fatta con MitAppInventor(beta). Con la versione 2, trovo che il BlocksEditor non vada avanti e poi sia di difficile gestione, ma forse dipende dal mio PC un po’ vecchiotto o dal collegamento Internet.
Per inviare i dati al cellulare, ho creato una stringa unica di 30 caratteri con una “X” finale come riferimento. I dati inviati sono:
direzione, elevazione, skew, livello segnale, posizione potenziometro rotazione e stato bistabile manuale/automatico, per avere la certezza dello stato del controllo.
Occorrerà poi splittare la stringa in ricezione per ricavare tutte le variabili. Io ho provato anche questo metodo ma il primo sistema secondo me è più veloce e introduce meno latenza nell’esecuzione dei comandi.
Il tempo di mettere insieme tutto il materiale e vedro’ se qualcuno avrà voglia di pubblicarlo.
Allego il link dell’ultima interfaccia in quanto sono riuscito, dopo aver corretto anche una formula per il calcolo dell’orientamento parabola trovata su Wikipedia ad ottenere i dati di puntamento usando latitudine/longitudine del GPS del cellulare o anche solo dalla triangolazione delle cellule telefoniche.
Vorrei ancora riuscire a disattivare lo standby del display, tipo quando si usa il navigatore che il display rimane sempre acceso, ma questa la vedo più dura in quanto non ho trovato istruzioni in merito.
ciao chimera, può darsi che i primi brandeggi usassero motori a 24v, i miei invece, sono a 12v. Sui motori dei tergicristalli, a parte il fatto che bisogna riuscire a farceli stare, avevo sentito altre discussioni dove dicevano che i campi magnetici creati, rendevano impossibile l'utilizzo della bussola. Probabilmente o non sono sufficiente schermati contro i disturbi o assorbono troppo, creando maggior flusso magnetico. Penso che la prima idea che avevi avuto (eBay), non sia da scartare.
grazie per la tua risposta , si mi riferivo proprio a quello .
Grazie per la dritta segnali analogici , e da un po chesto giocando pure io con app invetor.
Windom guardando il tuo schema controllo quanto fili arrivano al brandeggio? 10 + Antenna?
4x motordriver
12v ,5v,GND,Poti,SDA,SCL(CMPS10)
Grazie
Antonio
[quote=windom46]
Ciao tedesto, se ti riferisci al controllo via bluetooth con cellulare Android del video, l’app l’ho fatta con MitAppInventor(beta). Con la versione 2, trovo che il BlocksEditor non vada avanti e poi sia di difficile gestione, ma forse dipende dal mio PC un po’ vecchiotto o dal collegamento Internet.
Per inviare i dati al cellulare, ho creato una stringa unica di 30 caratteri con una “X” finale come riferimento. I dati inviati sono:
direzione, elevazione, skew, livello segnale, posizione potenziometro rotazione e stato bistabile manuale/automatico, per avere la certezza dello stato del controllo.
Occorrerà poi splittare la stringa in ricezione per ricavare tutte le variabili. Io ho provato anche questo metodo ma il primo sistema secondo me è più veloce e introduce meno latenza nell’esecuzione dei comandi.
Il tempo di mettere insieme tutto il materiale e vedro’ se qualcuno avrà voglia di pubblicarlo.
Allego il link dell’ultima interfaccia in quanto sono riuscito, dopo aver corretto anche una formula per il calcolo dell’orientamento parabola trovata su Wikipedia ad ottenere i dati di puntamento usando latitudine/longitudine del GPS del cellulare o anche solo dalla triangolazione delle cellule telefoniche.
Vorrei ancora riuscire a disattivare lo standby del display, tipo quando si usa il navigatore che il display rimane sempre acceso, ma questa la vedo più dura in quanto non ho trovato istruzioni in merito.
Si, effettivamente più o meno è così, ma faccio prima a farti lo schema del cablaggio che vale più di 1000 spiegazioni. Il cavo dell'antenna che va al satfinder e poi al decoder è una cosa a parte.
Come alimentazione, al brandeggio, arriva solo, oltre alla massa, il +5 volt, i 12 volt arrivano ai motori dal driver. I 3 fili (SDA,SCL e potenziom.) vengono collegati nella scatola stagna a quelli che arrivano dal controllo, praticamente, sono solo di passaggio.
nel brandeggio hai lasciato i motori originali? l´elettronica con i relais interni non servono piu´ o si devono lasciare? i motori si collegano direttamente con il motordriver(emertee) ?
Io il mio l'ho collegato così ( il cavo di destra va al brandeggio). Come vedi oltre ai 4 fili dei motori e ai 3 passanti (bianco,grigio,marron) ci sono solo il nero di massa e il rosso grande dei 5 volt. Forse hanno cambiato qualcosa. Comunque se i motori girano fai solo attenzione che si fermino contro i fine corsa altrimenti bisogna invertire i fili, se mi ricordo bene, rosso e nero sui motoriduttori.
Ciao tedesco, nel dubbio sono andato a cercarmi le intruzioni dei collegamenti del mio brandeggio ed effettivamente, come puoi vedere dall'immagine scannerizzata, hanno cambiato il comune dal negativo al positivo, cosa che sinceramente non capisco in quanto normalmente il comune è la massa.
A questo punto, bisognerà fare arrivare anche il +12volt al brandeggio e modificare il software in modo che per attuare il comando non arrivi il positivo ma il negativo.
... e così anche per tutte le altre istruzioni che controllano i motori (solo quelle).
Certo non ci voleva, mi spiace solo di non avere un altro brandeggio come il tuo da fare le prove in quanto le polarità vanno rispettate per via dei condensatori elettrolitici che ricordo esserci sulle basette dei ralais, che scoppierebbero.
Adattare il software alle tue esigenze non comporta comunque rischi, al massimo, i motori non girano.
Eventualmente prova a cambiarne una funzione alla volta, iniziando da quella che ferma i motori.
Ho altri problemini dove sicuramente mi puoi aiutare , dove nel tuo sketch si trovano i dati del satellite Hotbird? con due pusanti vorrei implementare anche Astra 19,2 Pin Digitali 2 e 4?
Ancora non ho risolto con il Poti .....
come hai fatto con il cmps10 dopo l´hai montato ? potresi postare qualche foto? si deve calibrare come documentazione?
Calibration the CMPS10 I would recommend evaluating the CMPS10 performance first before implementing this function. Its purpose is to remove offsets caused by constant magnetic sources around the CMPS10. First of all you need to determine North and align the CMPS10 with it, then write a sequence of 3 commands in the correct order with a small delay between bytes, 100ms will be more than adequate. The sequence to enter calibration mode is 0x31,0x45,0x5A, then calibrate the first point by sending 0x5E to the command register, this should also light the LED. The Compass should then be rotated 90° and 0x5E sent to the command register again, repeat for two further 90° rotations and the calibration completes and the LED turns off. Please make sure that the CMPS10 is not located nearto ferrous objects as this will distort the magnetic field and induce errors in the reading.
partiamo dai dati di puntamento che sono memorizzati nella eeprom(cella 0 e 1). La prima volta bisogna cercare il satellite con la ricerca manuale sui valori ricavati da tabelle che si trovano in Internet o da programmi tipo Satfinder (Android), valori che dipendono dalla tua posizione che in genere sono intorno a 38 e 173 gradi. Successivamente, memorizzare questi valori con "Salva" per poi ritrovarseli in fase di ricerca automatica. Per quanto riguarda Astra, io non l'ho previsto in quanto uso il decoder TivuSat con scheda che usa esclusivamente Hotbird, ho però notato che senza cambiare elevazione, basta ruotare l'antenna di circa 5 gradi e si prende, anche più forte di Hotbird e puoi sempre memorizzare questi valori per la ricerca successiva.
La cmps10 non l'ho dovuta calibrare in quanto andava benissimo, mentre per la cmps03 che usavo prima e che si era scalibrata, ho usato questo sketch in modalità I2C che penso dovrebbe andare bene anche per la cmps10:
// CALIBRAZIONE CMPS03
#include <Wire.h> #define sensorAddress 0x60 // indirizzo bussola: #define resultRegister 0x02 // indirizzo di memoria per il risultato #define calibrationRegister 22 #define calibrationValue 0xF5 int delayTime = 20000; void setup() { // avvia il bus I2C: Wire.begin(); // avvia Seriale: Serial.begin(9600); }
void loop() { setRegisterRX(sensorAddress, resultRegister); int bearing = readData(sensorAddress, 2); // legge il risultato: Serial.print("posizione: "); // stampa il risultato: Serial.print(bearing/10); Serial.println(" gradi"); delay(10000); // attesa 10 secondi per prossima lettura
// calibrazione: Serial.println("puntare a NORD"); delay (delayTime); setRegisterTX(sensorAddress, calibrationRegister, calibrationValue); Serial.println("NORD scritto"); Serial.println("puntare a EST"); delay (delayTime); setRegisterTX(sensorAddress, calibrationRegister, calibrationValue); Serial.println("EST scritto"); Serial.println("puntare a SUD"); delay (delayTime); setRegisterTX(sensorAddress, calibrationRegister, calibrationValue); Serial.println("SUD scritto"); Serial.println("puntare a OVEST"); delay (delayTime); setRegisterTX(sensorAddress, calibrationRegister, calibrationValue); Serial.println("CALIBRAZIONE FINITA"); while(true) {}; } void setRegisterRX(int address, int thisRegister) {// start I2C transmission: Wire.beginTransmission(address); // write address to read from: Wire.write(thisRegister); // end I2C transmission: Wire.endTransmission(); }
void setRegisterTX(int address, int thisRegister, int thisValue) { // start I2C transmission: Wire.beginTransmission(address); // write address to write to: Wire.write(thisRegister); // write value to write to: Wire.write(thisValue); // end I2C transmission: Wire.endTransmission(); } int readData(int address, int numBytes) { int result = 0; // the result is two bytes long Wire.requestFrom(address, numBytes); // write I2C request for data: while (Wire.available() < 2 ) { // wait for two bytes to return: } // wait for result result = Wire.read() * 256; // read the two bytes, and combine them into one int: result = result + Wire.read(); return result; // return the result: }
Per quanto riguarda il montaggio della bussola, ho solo una foto a montaggio ultimato dell'antenna. Essendo ora integrati bussola e inclinometro, io l'ho sistemata nello scatolotto al posto dell' inclinometro, cercando di tenerla in piano in corrispondenza dei 38 gradi di elevazione e con il nord in avanti (usare solo viti in ottone o acciaio inox per via dei campi magnetici).
Commenti
sempre a far casino sta redazione
CHE GUEVARA
Grazie dell'interessamento Windom, e scusa se lo faccio solo oggi ma sono stato in giro qualche giorno.
Aspetterò con pazienza.
Ciao.
SSaluti a tutti, mi chiamo Elia. Mi diletto anch'io di elettronica ed affini. Pensando di fare cosa gradita ho pensato di fare uno schemino dei collegamenti sul progetto di Windom che allego. In attesa dei nuovi suggerimenti proposti da Windom, ed ulteriori sviluppi, attendo scalpitando. segnalate eventuali errori. Saluti.
Nell' attesa cher venga pubblicato l'articolo, anticipo lo schema di come ho collegato il tutto al fine di controllare il puntamento via bus I2C.
I motori funzionano a 12 volt e non possono essere controllati direttamente da Arduino che verrebbe bruciato immediatamente,occorre interporre un driver per motori C.C. come indicato nello schema.
Siccome serve a poco lo schema senza il software,se qualcuno mi spiega come fare, pubblico anche questo. Resta il problema che il tutto è fatto in funzione della meccanica di rotazione modificata con l'aggiunta di un potenziometro per ottenera la posizione della meccanica stessa, come verrà spiegato dettagliatamente alla pubblicazione dell' articolo.
http://i60.tinypic.com/14l0w1k.jpg
Grazie windom46 per lo schema. Adesso comincio a smanettare, qualcosa verrà fuori. Se non ti crea molto disturbo sarebbe molto gradito il software. Puoi allegarlo utilizzando il pulsante a sinistra "incolla da word". chiaramente deve essere in formato word. Grazie anticipatamente, saluti e a buon rendere.
Come suggeritomi da chimera, allego il software per Arduino (IDE1.05) che sto utilizzando attualmente in giro per la Sardegna da oltre un mese senza problemi.
Mentre ci sono, anticipo anche il link del video pubblicato su Youtube sulle ultime modifiche apportate e sul nuovo sistema di controllo via bluetooth con il Galaxy S3.
software per Arduino:
/* CONTROLLO BRANDEGGIO (Motore303) per Antenna SELFSAT, con ARDUINO-UNO, bussola
* CMPS10 e Display 16x2 in modalità I2C (SatWindom_I2C_rev.2) *
*********************************************************************************/
#include <Wire.h> // include librerie
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS) // softReset sistema
#define ADDRESS 0x60 // definisce indirizzo CMPS10
#define inSF A1 // pin in SatFinder
#define inCom A2 // pin in Pulsanti
#define inPot A3 // pin in Potenziometro
#define ledMA 12 // pin led man/auto
#define inMot 13 // pin motore acceso
#define motDa 9 // pin motore direzione(1)
#define motDb 10 // pin motore direzione(2)
#define motEa 3 // pin motore elevazione(1)
#define motEb 11 // pin motore elevazione(2)
LiquidCrystal_I2C lcd(0x20,16,2); // setta LCD (address, colonne, linee)
int levelSF; // livello segnale del SatFinder
char level = -1; // barra segnale SatFinder
byte oldState = LOW; // imposta stato bistabile
int dirOut; // lettura bussola in gradi
int dirHB = EEPROM.read(0); // legge direziona dalla cella 0
int elevHB = EEPROM.read(1); // legge elevazione dalla cella 1
byte pass = 0; // num.loop per limitare scrittura display
const byte sicRot = 60; // sicurezza rotazione
const byte centro = 183; // rotazione a 180°
int posPot; // posizione rotazione antenna
const byte range = 1; // tolleranza su angolazioni
byte dirLock = 0; // direzione OK
byte elevLock = 0; // elevazione OK
const byte velRid = 100; // riduzione velocità a 100/255
const byte prox = 5; // gradi mancanti alla posizione
byte centroRot = 0; // centro rotazione meccanica
int manButton; // ingresso comandi manuali
char elevOut, skew; // valore elevazione e skew(da CMPS10)
void setup(){
lcd.init(); // inizializza lcd
pinMode(inSF, INPUT); // ingresso livello SatFinder
pinMode(inPot, INPUT); // cursore potenziometro rotazione
pinMode(inCom, INPUT); // ingresso pulsanti comandi manuali
pinMode(ledMA, OUTPUT); // LED manuale/auto
pinMode(inMot, INPUT); // sensore motore acceso
pinMode(motDa, OUTPUT); // motore orientamento 9/10
pinMode(motDb, OUTPUT);
pinMode(motEa, OUTPUT); // motore elevazione 3/11
pinMode(motEb, OUTPUT);
// pin digitali 0-1-2-4-5-6-7-8 e analogico A0, liberi.
ferma(); // ferma i motori
if (inMot == LOW){lcd.backlight();} // accende display
// visualizza su display i valori memorizzati nella EEPROM
lcd.setCursor(0,0);
lcd.print("**** HOTBIRD ***");
lcd.setCursor(0,1);
lcd.print("Dir.");
lcd.print(dirHB, DEC);
lcd.setCursor(9,1);
lcd.print("Elev.");
lcd.print(elevHB, DEC);
lcd.print(" ");
lcd.print(" ");
delay(3000); // attesa 3 secondi
lcd.clear();
}
void loop() {
byte highByte, lowByte; // valori di highByte e lowByte per dirOut
Wire.beginTransmission(ADDRESS); // inizio comunicazione con CMPS10
Wire.write(2); // invia registro per la lettura
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 4); // richiesta di 4 bytes da CMPS10
while(Wire.available() < 4); // attesa disponibilità bites
highByte = Wire.read(); // lettura azimut(direzione)
lowByte = Wire.read(); // lettura decimali azimut(direzione)
elevOut = Wire.read()+57; // lettura elevazione+compensazione
skew = Wire.read(); // lettura angolazione
dirOut = ((highByte<<8)+lowByte)/10; // calcolo direzione
manButton = analogRead(inCom); // valori comandi manuali immessi su(A2)
posPot = map(analogRead(inPot),102,924,0,359); // posizione rotazione rimappata
levelSF = analogRead(inSF); // livello segnale SatFinder
// Partitore resistivo per inviare 6 valori (100-200-300-400-500-600)
// sul pin(A2) e ottenere un convertitore A/D per le varie funzioni.
// 7,8K verso 5v.+ 6 da 2,2k per il partitore + 1 da 100k tra A2 e massa
// ********* BISTABILE COMMUTAZIONE MAN./AUTO ******************
if (manButton > 50 && manButton < 150) { // manButton=100 (Manuale/Auto)
if (oldState == LOW) {
oldState = HIGH; // attiva automatismi e
digitalWrite(ledMA, HIGH); // accende LED
elevLock = 0; // imposta elevLock e dirLock a 0
dirLock = 0;
}else{
oldState = LOW; // attiva comandi manuali e
digitalWrite(ledMA, LOW); // spegne LED
}
delay(500); // attende 1/2 secondo
}
if (oldState == LOW) { // comandi manuali attivato
if (manButton < 50) ferma(); // arresta motori
if (manButton > 150 && manButton < 250) salva(); // 200;salva valori Elev.Dir. nella EPROM
if (manButton > 250 && manButton < 350) alza(); // 300;alza antenna
if (manButton > 350 && manButton < 450) abbassa(); // 400;abbassa antenna
if (manButton > 450 && manButton < 550 && elevOut < sicRot) orario(); // 500;hiude antenna
if (manButton > 550 && manButton < 650 && elevOut < sicRot) antiorario();// 600;apre antenna
}else{orienta();}
if (digitalRead(inMot) == HIGH) chiude(); // chiude ant.a motore acceso
// ***** Scrive su LCD 16x2 con livello segnale *****
pass = pass+1; // limitazione scrittura display
if (pass == 1) {
if (elevOut > 85) { // controllo livello camper
lcd.setCursor(0,0);
lcd.print("LIVELLO___CAMPER");
lcd.setCursor(0,1);
if (((88-elevOut)==0) && ((skew-3)== 0)) { // usa gli assi pitch,roll(da compensare)
lcd.print("*** IN PIANO ***"); // per controllare il livello del camper
}else{
lcd.print("A/P ");
lcd.print(88-elevOut, DEC);
lcd.print(" ");
lcd.setCursor(9,1);
lcd.print("Lat.");
lcd.print(skew-3, DEC);
lcd.print(" ");
}
}else{ // controllo posizionamento antenna
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Elev.");
lcd.print(elevOut, DEC);
lcd.print(" ");
lcd.setCursor(9,0);
lcd.print("Dir.");
lcd.print(dirOut, DEC);
lcd.print(" ");
lcd.setCursor(0,1);
if (levelSF > 30) { // formazione barra livello segnale
lcd.print("Level.");
for (int lev=0; lev<=levelSF/8; lev++) {
lcd.print(level);
}
lcd.print(" ");
}else{
lcd.print("Segn.");
lcd.print(levelSF);
lcd.print(" ");
lcd.setCursor(9,1);
lcd.print("Pos.");
lcd.print(posPot, DEC);
lcd.print(" ");
}
}
}
if (pass > 50) {pass = 0;} // scrive su display ogni 50 loop
delay(10);
}
/*********** FUNZIONI RIPETITIVE *****************/
void alza() {
digitalWrite(motEa, HIGH);
if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut < 30){
analogWrite(motEb, velRid);
}else{
digitalWrite(motEb, LOW);
}
}
/***************************************************/
void abbassa() {
digitalWrite(motEb, HIGH);
if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut > 80){
analogWrite(motEa, velRid);
}else{
digitalWrite(motEa, LOW);
}
}
/***************************************************/
void orario() { // gira in senso orario
digitalWrite(motDb, HIGH);
if (((dirOut > dirHB-prox) && (dirOut < dirHB+prox)) || posPot > 345){
analogWrite(motDa, velRid);
}else{
digitalWrite(motDa, LOW);
}
}
/***************************************************/
void antiorario() { // gira in senso antiorario
digitalWrite(motDa, HIGH);
if (((dirOut > dirHB-prox) && (dirOut < dirHB+prox)) || posPot < 15){
analogWrite(motDb, velRid);
}else{
digitalWrite(motDb, LOW);
}
}
/***************************************************/
void ferma() { // ferma rotazione motori
digitalWrite(motDa, HIGH);
digitalWrite(motDb, HIGH);
digitalWrite(motEb, HIGH);
digitalWrite(motEa, HIGH);
oldState = LOW; // disattiva automatismi e
digitalWrite(ledMA, LOW); // spegne LED
}
/***************************************************/
void salva() {
EEPROM.write(0, dirOut); // memorizza direzione nella cella 0
EEPROM.write(1, elevOut); // memorizza elevazione nella cella 1
delay(500);
Reset_AVR(); // resetta sistema
}
/***************************************************/
void chiude() { // chiude antenna (MOTORE acceso)
oldState = LOW; // disattiva automatismi e
digitalWrite(ledMA, LOW); // spegne LED
if (centroRot == 0){
if (elevOut > sicRot) {alza(); // porta elevazione in sicurezza
}else{
if (posPot > centro + range) antiorario();
if (posPot < centro - range) orario(); // porta rotazione a 180°
}
}
if (posPot == centro) {
centroRot = 1;
digitalWrite(motDa, HIGH); // ferma rotazione antenna
digitalWrite(motDb, HIGH);
}
if (centroRot == 1) abbassa();
}
/***************************************************/
void orienta() { // mantiene l'antenna entro i valore impostati
if (elevOut > elevHB + range) {alza(); // alza antenna
}else{ // orienta antenna se elevOut < elevHB
if (dirOut > dirHB + range) antiorario();
if (dirOut < dirHB - range) orario();
if ((dirOut > dirHB - range) && (dirOut < dirHB + range)) {
digitalWrite(motDa, HIGH); // ferma rotazione antenna
digitalWrite(motDb, HIGH);
dirLock = 1; // direzione OK
}
if (elevOut > elevHB + range) alza(); // alza antenna
if (elevOut < elevHB - range) abbassa(); // abbassa antenna
if ((elevOut < elevHB + range) && elevOut > (elevHB - range)) {
digitalWrite(motEa, HIGH); // ferma elevazione antenna
digitalWrite(motEb, HIGH);
elevLock = 1; // elevazione OK
}
}
if (((elevLock == 1) && (dirLock == 1)) || (levelSF > 80)) centra();
}
/*** Centraggio perfetto satellite. Programma ancora da sviluppare, in attesa di perfezionare
il movimento della meccanica. Sostituendo almeno il motore della rotazione con uno Stepper,
si avrebbe la massima precisione e la possibilità di bloccare la meccanica, con un minimo di
tensione PWM su una fase. Resta da verificare l'influenza dei maggiori campi magnetici creati
sul funzionamento della bussola. Per il momento la ricerca si ferma se durante la scansione,
in prossimità delle posizioni salvate, il livello segnale supera il 30% ********************/
void centra(){
if (levelSF > 30) { // se il segnale supera il 30%, si ferma.
ferma();
oldState = LOW; // attiva comandi manuali e
digitalWrite(ledMA, LOW); // spegne LED
}
}
/******************************* FINE PROGRAMMA ********************************************/
grazie, grazie, grazie *clapping* *biggrin*
Grazie Windom .... Domani comincerò a lavorarci.
Ciao.
Mi sono accorto di un erore del software rispetto allo schema elettrico, dovuto al fatto che a me non funzionava più il pin analogico A0 e quindi avevo usato i pin A1,A2 e A3.
Si prega pertanto di correggere le linee:
#define inSF A1 // pin in SatFinder
#define inCom A2 // pin in Pulsanti
#define inPot A3 // pin in Potenziometro
nel seguente modo:
#define inSF A0 // pin in SatFinder
#define inPot A1 // pin in Potenziometro
#define inCom A2 // pin in Pulsanti
Va detto che si possono usare i pin analogici che si desidera, basta che ci sia corrispondenza tra schema elettrico e software.
Ciao.
aiuto! sono in possesso di un brandeggio come quello di windom46 sprovvisto di motorini qualcuno mi può dare una dritta a quale modello mi devo orientare e possibilmente dove poterli reperire. Chiaramente devo pilotarli con arduino utilizzando il progetto di windom46. Grazie
ciao chimera, i motoriduttori originali, fanno circa 4,5 giri al minuto.
Io quando avevo pensato di sostituire i miei, avevo visto questo:
http://www.futuraelettronica.net/CATGEN2013_SEZIONI/Robotica_nuove_tecnologie.pdf
pag.125 art. RH15912630. Se ci stanno come ingombro, oltre ad essere economici, dovrebbere essere perfetti.
Ciao, a presto.
Dovessi cambiare i motori adesso, però, sull' elevazione, essendo quello originale un po' lento, metterei il RH15812630, sempre a pag.125, che fa 9 RPM.
ciao, windom46 cosa ne pensi di questo?
http://www.ebay.com/itm/12V-DC-5RPM-High-Torque-Gear-Box-Electric-Motor-/221036286413?pt=LH_DefaultDomain_0&hash=item3376ca11cd
costa molto meno.
Questo è l'interno dei motoriduttori originali, ingranaggio che sforza meno in nylon e gli altri metallici, niente di eccezionale. Quelli che dici tu, almeno dalla struttura esterna, sono senz'altro meglio, vedo pure che ci sono con diverso rapporto di riduzione. Non resta che provare (altezza 63 mm....ci stanno?). Come fai ad accoppiarli alla meccanica senza ingranaggi? Fai tutto con pulegge e cinghie dentate?
Io, come vedi all'inizio del video, l'ho fatto sulla rotazione, riducendo a zero i giochi di accoppiamento.
La cosa comporta diverse modifiche alla meccanica, che saranno spiegate dettagliatamente non appena in redazione troveranno il tempo di pubblicare l'articolo.
A preso, ciao.
<img alt="" src="data:image/png;base64,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I/95qDtNUQ5gHhqvOa85qxkpCc4pKTitBBsqgYAm1gW5jAcvDgnVw1JjlOImYTgTtBC0EKSAytVirARiFgbRtbfMNC5dzEtv0DbhOCFNiCqftglpolEoe/AQp3W32dZg1tK5KVxcB7gO2xK8YqfO3VUF7DKAxDHQkYBDzUVdb0uHfnUdkhG9TpU5ZWrDRpFY0EZT2hn326btbPrepqqGl6DUga+6LLauxGnC28Sz7jZxs80UMB11hqzpFZWjZRLMI38WB/PY0LtaVUM5MM+6HfszHbeGprtB0nXsz5NwEQ9yeR75i1jHlQMr8RaxeneqcgAAIABJREFUt4jceQyG9qiVJw62mc9lmtiTFVNA09CZhVCoa8DwXCMZXmpUwx7fOnIXdxzAp70q+OW7x55zBELZWd6xF7dBLtuL2wOql3ed5V1nedddHDmLu+7iLiyCAiRrlezMb3vW3Q0qi6nbvIXK25g6JjZTKTljBGOESUso5oyCsw1ghsTs+1F5K5h1nFjTd2vP4bLhIRCSSsVUxw3iUtWzrudCgks8BaFG7P3CtKb9O3G5IRJs6tRN3P5GvtUmjDfZrEG7le66MMhvpHdNGA8KGOAqxbD4eFVOSxIpiRCYc8w5YgwxNlJ5peBXxjUgmdCasoaONZYnVb3E+KiizbVAm/m9Ex1sLibmDEFBZnOxL6Rno7akpGmboiqzpiqSOFwuFr/euvXFzZuffvLJe+++98orr/7tb3976aW/Pv/8X57405NXDq6dv3Cwu3dx9+yV3bNXTu9f2dm/+tD+wc7+tYf2DnfOXnvw7OEDuwd/3L1yau/qg2evndo/fGD34IHdg1N7Bw/uH5zaP3jw7NXT56/t7F99cO/yg3tXHty9/NDepZ29izv7lx/au3Dq9NmdvfN75y9fuHR49dpjDz/250cef/LJp24888xzDz/6+LWHH3v40SeuP/zo4fWHrz/8yPWHH3300ccfeezxa9euXzu8fvXg8PLly49cv/6nx5949OGH//z4E889++yNp5957tkbzzz15NNP/umF55997sYzN5556qUXbrz68ot/ffHG88/86fln/vzqS8999fkHrE2zYPnVJ++886+X//2357/77P3MnR3//M1br738zj/+9s1nH3z41r/eePWvn7zz5teffby4/UvmO00WC1yfCMxxyVAhcMnaHNdJWyWo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
Non mi ha caricato l'immagine, ecco il link.
http://i57.tinypic.com/p1teq.jpg
i vecchi motorini funzionavano a 24v ed erano accoppiati tramite un ingranaggio in metallo che sono riuscito a conservare. Ho notato che i vecchi motori hanno lo stesso diametro dell'asse di rotazione, quindi posso utilizzare l'ingranaggio che viene blocccato con una coppiglia che funge da fermo. Comunque sto valutando l'idea di poter utilizzare qualche motore di alzacristallo di qualche auto, ma solo se sarà possibile utilizzare l'ingranaggio originale. Domani proverò a fare una foto all'interno del brandeggio.
i vecchi motorini funzionavano a 24v ed erano accoppiati tramite un ingranaggio in metallo che sono riuscito a conservare. Ho notato che i vecchi motori hanno lo stesso diametro dell'asse di rotazione, quindi posso utilizzare l'ingranaggio che viene blocccato con una coppiglia che funge da fermo. Comunque sto valutando l'idea di poter utilizzare qualche motore di alzacristallo di qualche auto, ma solo se sarà possibile utilizzare l'ingranaggio originale. Domani proverò a fare una foto all'interno del brandeggio.
Super Windom ,
dimmi per l´ app Android usi App inventor? come fai a visualizzare piu di un dato analogico ?
i dati li mandi in seriale -->serial.print? nello stesso metodo come li mandi sul lcd i2c?
// visualizza su display i valori memorizzati nella EEPROM
lcd.setCursor(0,0);
lcd.print("**** HOTBIRD ***");
serial.print ("**** HOTBIRD ***");
lcd.setCursor(0,1);
lcd.print("Dir.");
lcd.print(dirHB, DEC);
lcd.setCursor(9,1);
lcd.print("Elev.");
lcd.print(elevHB, DEC);
lcd.print(" ");
lcd.print(" ");
delay(3000); // attesa 3 secondi
lcd.clear();
}
Ciao tedesto, se ti riferisci al controllo via bluetooth con cellulare Android del video, l’app l’ho fatta con MitAppInventor(beta). Con la versione 2, trovo che il BlocksEditor non vada avanti e poi sia di difficile gestione, ma forse dipende dal mio PC un po’ vecchiotto o dal collegamento Internet.
Per inviare i dati al cellulare, ho creato una stringa unica di 30 caratteri con una “X” finale come riferimento. I dati inviati sono:
direzione, elevazione, skew, livello segnale, posizione potenziometro rotazione e stato bistabile manuale/automatico, per avere la certezza dello stato del controllo.
String stringBT, strDir, strElev, strSkew, strLev, strPot, strOS; // variabili trasmissione dati
SoftwareSerial mySerial(pinRX, pinTX); // impostare i pin 2=RX 4=TX
/**************************** SETUP *********************************/
void setup(){
mySerial.begin(38400); // settaggio comunicazione BT, IMPORTANTE! settare
// anche il modulo BT a 38400 con istruzioni AT
ecc.ecc…….
// stringa trasmissione dati
strDir = String(dirOut) + " "; strDir = strDir.substring(0,5); // 5 spazi tra virgolette
strElev = String(int(elevOut)) + " "; strElev = strElev.substring(0,5);
strSkew = String(int(skewOut)) + " "; strSkew = strSkew.substring(0,5);
strLev = String(int(levelSF)) + " "; strLev = strLev.substring(0,5);
strPot = String(int(posPot)) + " "; strPot = strPot.substring(0,5);
strOS = String(int(oldState)) + " "; strOS = strOS.substring(0,4)+"X";
stringBT = strDir + strElev + strSkew + strLev + strPot + strOS ; // lunghezza stringa 30 bytes
mySerial.print(stringBT); // invia dati alla Seriale BT
Nella app.apk le variabili vengono ricavate a blocchi di 5 caratteri, usando come riferimento la X.
Va detto che il programma sarebbe più pulito trasmettendo la stringa di variabili separate da “;” e “:” ottenendo l’accoppiata variabile/valore, così:
stringBT = dir:strDir;elev:strElev;skew:strSkew ;level:strLev; ecc……. // lunghezza stringa 30 bytes
Occorrerà poi splittare la stringa in ricezione per ricavare tutte le variabili. Io ho provato anche questo metodo ma il primo sistema secondo me è più veloce e introduce meno latenza nell’esecuzione dei comandi.
Il tempo di mettere insieme tutto il materiale e vedro’ se qualcuno avrà voglia di pubblicarlo.
Allego il link dell’ultima interfaccia in quanto sono riuscito, dopo aver corretto anche una formula per il calcolo dell’orientamento parabola trovata su Wikipedia ad ottenere i dati di puntamento usando latitudine/longitudine del GPS del cellulare o anche solo dalla triangolazione delle cellule telefoniche.
http://i59.tinypic.com/14udziu.png
Vorrei ancora riuscire a disattivare lo standby del display, tipo quando si usa il navigatore che il display rimane sempre acceso, ma questa la vedo più dura in quanto non ho trovato istruzioni in merito.
ciao chimera, può darsi che i primi brandeggi usassero motori a 24v, i miei invece, sono a 12v. Sui motori dei tergicristalli, a parte il fatto che bisogna riuscire a farceli stare, avevo sentito altre discussioni dove dicevano che i campi magnetici creati, rendevano impossibile l'utilizzo della bussola. Probabilmente o non sono sufficiente schermati contro i disturbi o assorbono troppo, creando maggior flusso magnetico. Penso che la prima idea che avevi avuto (eBay), non sia da scartare.
Ciao windom46,
grazie per la tua risposta , si mi riferivo proprio a quello .
Grazie per la dritta segnali analogici , e da un po chesto giocando pure io con app invetor.
Windom guardando il tuo schema controllo quanto fili arrivano al brandeggio? 10 + Antenna?
4x motordriver
12v ,5v,GND,Poti,SDA,SCL(CMPS10)
Grazie
Antonio
[quote=windom46]
Ciao tedesto, se ti riferisci al controllo via bluetooth con cellulare Android del video, l’app l’ho fatta con MitAppInventor(beta). Con la versione 2, trovo che il BlocksEditor non vada avanti e poi sia di difficile gestione, ma forse dipende dal mio PC un po’ vecchiotto o dal collegamento Internet.
Per inviare i dati al cellulare, ho creato una stringa unica di 30 caratteri con una “X” finale come riferimento. I dati inviati sono:
direzione, elevazione, skew, livello segnale, posizione potenziometro rotazione e stato bistabile manuale/automatico, per avere la certezza dello stato del controllo.
String stringBT, strDir, strElev, strSkew, strLev, strPot, strOS; // variabili trasmissione dati
SoftwareSerial mySerial(pinRX, pinTX); // impostare i pin 2=RX 4=TX
/**************************** SETUP *********************************/
void setup(){
mySerial.begin(38400); // settaggio comunicazione BT, IMPORTANTE! settare
// anche il modulo BT a 38400 con istruzioni AT
ecc.ecc…….
// stringa trasmissione dati
strDir = String(dirOut) + " "; strDir = strDir.substring(0,5); // 5 spazi tra virgolette
strElev = String(int(elevOut)) + " "; strElev = strElev.substring(0,5);
strSkew = String(int(skewOut)) + " "; strSkew = strSkew.substring(0,5);
strLev = String(int(levelSF)) + " "; strLev = strLev.substring(0,5);
strPot = String(int(posPot)) + " "; strPot = strPot.substring(0,5);
strOS = String(int(oldState)) + " "; strOS = strOS.substring(0,4)+"X";
stringBT = strDir + strElev + strSkew + strLev + strPot + strOS ; // lunghezza stringa 30 bytes
mySerial.print(stringBT); // invia dati alla Seriale BT
Nella app.apk le variabili vengono ricavate a blocchi di 5 caratteri, usando come riferimento la X.
Va detto che il programma sarebbe più pulito trasmettendo la stringa di variabili separate da “;” e “:” ottenendo l’accoppiata variabile/valore, così:
stringBT = dir:strDir;elev:strElev;skew:strSkew ;level:strLev; ecc……. // lunghezza stringa 30 bytes
Occorrerà poi splittare la stringa in ricezione per ricavare tutte le variabili. Io ho provato anche questo metodo ma il primo sistema secondo me è più veloce e introduce meno latenza nell’esecuzione dei comandi.
Il tempo di mettere insieme tutto il materiale e vedro’ se qualcuno avrà voglia di pubblicarlo.
Allego il link dell’ultima interfaccia in quanto sono riuscito, dopo aver corretto anche una formula per il calcolo dell’orientamento parabola trovata su Wikipedia ad ottenere i dati di puntamento usando latitudine/longitudine del GPS del cellulare o anche solo dalla triangolazione delle cellule telefoniche.
http://i59.tinypic.com/14udziu.png
Vorrei ancora riuscire a disattivare lo standby del display, tipo quando si usa il navigatore che il display rimane sempre acceso, ma questa la vedo più dura in quanto non ho trovato istruzioni in merito.
[/quote]
Si, effettivamente più o meno è così, ma faccio prima a farti lo schema del cablaggio che vale più di 1000 spiegazioni. Il cavo dell'antenna che va al satfinder e poi al decoder è una cosa a parte.
Come alimentazione, al brandeggio, arriva solo, oltre alla massa, il +5 volt, i 12 volt arrivano ai motori dal driver. I 3 fili (SDA,SCL e potenziom.) vengono collegati nella scatola stagna a quelli che arrivano dal controllo, praticamente, sono solo di passaggio.
Grazie Windom
Ciao Windom46,
nel brandeggio hai lasciato i motori originali? l´elettronica con i relais interni non servono piu´ o si devono lasciare? i motori si collegano direttamente con il motordriver(emertee) ?
grazie per la tua pazienza
Antonio
Nel brandeggio ho lasciato tutto com'era, collegandomi esclusivamente ai fili in uscita, 4 per i movimenti che vanno al driver + massa.
il mio brandeggio viene collegato in comune con il +
[url=http://www.fotos-hochladen.net][img]http://img5.fotos-hochladen.net/uploads/20140619213752uzamhotrs1.jpg[/img][/url]
io l´ collegato cosi´
----------------sopra - ------------------> Mot 1
---------------sotto - ------------------->Mot 1
---------------destra - -------------------->Mot2
---------------sinistra - -------------------->Mot2
--------------- + -------------------->COM +
[url=http://www.fotos-hochladen.net][img]http://img5.fotos-hochladen.net/uploads/20140619221251l280kw7d56.jpg[/img][/url]
sul motodriver ho collegato Power con 12V
Io il mio l'ho collegato così ( il cavo di destra va al brandeggio). Come vedi oltre ai 4 fili dei motori e ai 3 passanti (bianco,grigio,marron) ci sono solo il nero di massa e il rosso grande dei 5 volt. Forse hanno cambiato qualcosa. Comunque se i motori girano fai solo attenzione che si fermino contro i fine corsa altrimenti bisogna invertire i fili, se mi ricordo bene, rosso e nero sui motoriduttori.
Ciao tedesco, nel dubbio sono andato a cercarmi le intruzioni dei collegamenti del mio brandeggio ed effettivamente, come puoi vedere dall'immagine scannerizzata, hanno cambiato il comune dal negativo al positivo, cosa che sinceramente non capisco in quanto normalmente il comune è la massa.
A questo punto, bisognerà fare arrivare anche il +12volt al brandeggio e modificare il software in modo che per attuare il comando non arrivi il positivo ma il negativo.
Esempio:
void alza() {
digitalWrite(motEa, HIGH);
if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut < 30){
analogWrite(motEb, velRid);
}else{
digitalWrite(motEb, LOW);
}
}
cambiare così:
void alza() {
digitalWrite(motEa, LOW);
if (((elevOut > elevHB-prox) && (elevOut < elevHB+prox)) || elevOut < 30){
analogWrite(motEb, velRid);
}else{
digitalWrite(motEb, HIGH);
}
}
... e così anche per tutte le altre istruzioni che controllano i motori (solo quelle).
Certo non ci voleva, mi spiace solo di non avere un altro brandeggio come il tuo da fare le prove in quanto le polarità vanno rispettate per via dei condensatori elettrolitici che ricordo esserci sulle basette dei ralais, che scoppierebbero.
Adattare il software alle tue esigenze non comporta comunque rischi, al massimo, i motori non girano.
Eventualmente prova a cambiarne una funzione alla volta, iniziando da quella che ferma i motori.
Ciao Windom ,
grazie *pleasantry* ma questo l´avevo gia fatto .
Ho altri problemini dove sicuramente mi puoi aiutare , dove nel tuo sketch si trovano i dati del satellite Hotbird? con due pusanti vorrei implementare anche Astra 19,2 Pin Digitali 2 e 4?
Ancora non ho risolto con il Poti .....
come hai fatto con il cmps10 dopo l´hai montato ? potresi postare qualche foto? si deve calibrare come documentazione?
Calibration the CMPS10
I would recommend evaluating the CMPS10 performance first before implementing this function. Its purpose is to remove offsets
caused by constant magnetic sources around the CMPS10. First of all you need to determine North and align the CMPS10 with it, then
write a sequence of 3 commands in the correct order with a small delay between bytes, 100ms will be more than adequate. The
sequence to enter calibration mode is 0x31,0x45,0x5A, then calibrate the first point by sending 0x5E to the command register, this
should also light the LED. The Compass should then be rotated 90° and 0x5E sent to the command register again, repeat for two
further 90° rotations and the calibration completes and the LED turns off. Please make sure that the CMPS10 is not located nearto
ferrous objects as this will distort the magnetic field and induce errors in the reading.
Ciao tedesco,
partiamo dai dati di puntamento che sono memorizzati nella eeprom(cella 0 e 1). La prima volta bisogna cercare il satellite con la ricerca manuale sui valori ricavati da tabelle che si trovano in Internet o da programmi tipo Satfinder (Android), valori che dipendono dalla tua posizione che in genere sono intorno a 38 e 173 gradi. Successivamente, memorizzare questi valori con "Salva" per poi ritrovarseli in fase di ricerca automatica. Per quanto riguarda Astra, io non l'ho previsto in quanto uso il decoder TivuSat con scheda che usa esclusivamente Hotbird, ho però notato che senza cambiare elevazione, basta ruotare l'antenna di circa 5 gradi e si prende, anche più forte di Hotbird e puoi sempre memorizzare questi valori per la ricerca successiva.
La cmps10 non l'ho dovuta calibrare in quanto andava benissimo, mentre per la cmps03 che usavo prima e che si era scalibrata, ho usato questo sketch in modalità I2C che penso dovrebbe andare bene anche per la cmps10:
// CALIBRAZIONE CMPS03
#include <Wire.h>
#define sensorAddress 0x60 // indirizzo bussola:
#define resultRegister 0x02 // indirizzo di memoria per il risultato
#define calibrationRegister 22
#define calibrationValue 0xF5
int delayTime = 20000;
void setup()
{
// avvia il bus I2C:
Wire.begin();
// avvia Seriale:
Serial.begin(9600);
}
void loop()
{
setRegisterRX(sensorAddress, resultRegister);
int bearing = readData(sensorAddress, 2); // legge il risultato:
Serial.print("posizione: "); // stampa il risultato:
Serial.print(bearing/10);
Serial.println(" gradi");
delay(10000); // attesa 10 secondi per prossima lettura
// calibrazione:
Serial.println("puntare a NORD");
delay (delayTime);
setRegisterTX(sensorAddress, calibrationRegister, calibrationValue);
Serial.println("NORD scritto");
Serial.println("puntare a EST");
delay (delayTime);
setRegisterTX(sensorAddress, calibrationRegister, calibrationValue);
Serial.println("EST scritto");
Serial.println("puntare a SUD");
delay (delayTime);
setRegisterTX(sensorAddress, calibrationRegister, calibrationValue);
Serial.println("SUD scritto");
Serial.println("puntare a OVEST");
delay (delayTime);
setRegisterTX(sensorAddress, calibrationRegister, calibrationValue);
Serial.println("CALIBRAZIONE FINITA");
while(true) {};
}
void setRegisterRX(int address, int thisRegister) {// start I2C transmission:
Wire.beginTransmission(address); // write address to read from:
Wire.write(thisRegister); // end I2C transmission:
Wire.endTransmission();
}
void setRegisterTX(int address, int thisRegister, int thisValue) {
// start I2C transmission:
Wire.beginTransmission(address); // write address to write to:
Wire.write(thisRegister); // write value to write to:
Wire.write(thisValue); // end I2C transmission:
Wire.endTransmission();
}
int readData(int address, int numBytes) {
int result = 0; // the result is two bytes long
Wire.requestFrom(address, numBytes); // write I2C request for data:
while (Wire.available() < 2 ) { // wait for two bytes to return:
} // wait for result
result = Wire.read() * 256; // read the two bytes, and combine them into one int:
result = result + Wire.read();
return result; // return the result:
}
Per quanto riguarda il montaggio della bussola, ho solo una foto a montaggio ultimato dell'antenna. Essendo ora integrati bussola e inclinometro, io l'ho sistemata nello scatolotto al posto dell' inclinometro, cercando di tenerla in piano in corrispondenza dei 38 gradi di elevazione e con il nord in avanti (usare solo viti in ottone o acciaio inox per via dei campi magnetici).