-
Contenuti
441 -
Registrato il
-
Ultima visita
-
Vittorie
7
Tipo di contenuto
Profili
Forum
Calendario
Tutto il contenuto inserito da Rudy
-
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Per chi avesse preso per la prima volta in mano un RCX, ripeto una piccola [glow=red,2,300]guida per l'uso[/glow]: Per la torretta USB va scaricato il driver presente nel file tower164.zip Si apre lo zip Si esegue il file "LEGO MindStorms SDK.exe" Si collega la torretta USB Se invece siete fortunati ed avete un PC con porta seriale e torretta seriale, non serve installare nessun driver. Come software mi piace usare BricxCC. Vantaggi: - funziona sia su RCX che su NXT - usa il firmware standard LEGO, (si possono caricare contemporaneamente anche programmi fatti tramite l'interfaccia LEGO) - usa tutti i comandi disponibili, anzichè il set limitato dell'interfaccia grafica Svantaggi: - non possiede funzioni avanzate (tipo calcoli in virgola mobile, shift, od array multidimensionali, ma nelle normali applicazioni non se ne sente la mancanza) - va scritto come un testo (ma esiste sempre il copia-incolla...) Per utilizzarlo: Scaricate ed installate BricxCC dalla pagina ufficiale Per chi conosce l'inglese qui c'è il tutorial e qui ci sono le FAQ Scaricate il firmware LEGO per l'RCX (firm0328.lgo) che si trova nel MINDSTORMS® SDK2.5 che va scaricato ed installato. Il file firm0328.lgo va preferibilmente copiato a mano nella cartella del BricxCC, visto che va reinstallato ogni volta che l'RCX rimane senza alimentazione. Se usate Vista o superiori, scaricate ed installate anche il Microsoft WinHelp viewer per far funzionare l'aiuto sulle funzioni Finalmente siete pronti per iniziare: - Collegate la torretta - Accendete l'RCX e posizionatelo di fronte alla torretta, ad una ventina di centimetri di distanza - Fate partire BricxCC - Dal menù che appare selezionate nel primo menù USB (per la torretta USB) o COMx (per la torretta seriale, dove X è il numero della porta, solitamente 1: es: COM1) - Selezionate dal menù a destra RCX - Lasciate il firmware su "standard" e cliccate su OK Per gli esperti: nel menù "Edit" - "Preferences" nel tab "General" possiamo selezionare "Use fast mode" e "2X" per dimezzare il tempo di caricamento del firmware. Nella stessa finestra, nel tab StartUp possiamo anche selezionare tipo di connessione e di brick per il prossimo avvio e poi cliccare su OK Se sull'RCX appare solo l'icona dell'omino senza i quattro zeri, va caricato il firmware (la stessa cosa che mettere Win su un computer): - Aprire il menù "Tools" - Cliccare su "Download firmware" Si apre una finestra dove cercare il file firm0328.lgo che si trova nella cartella dove avete installato il MINDSTORMS® SDK2.5, oppure dove l'avete copiato in precedenza. Il firmware viene caricato sull'RCX, ci vogliono circa quattro minuti durante i quali sul display dell'RCX c'è un numero che avanza. Alla fine l'RCX emette il suono di OK e sul display appaiono quattro zeri a sinistra dell'omino. Se ci sono errori, la torretta è troppo lontana o troppo vicina all'RCX oppure ci sono interferenze (troppa luce o telecomandi ad infrarossi nei dintorni) A questo punto per usare uno dei programmi che ho postato basta cliccare nel messaggio del forum sulla scritta "Seleziona" all'inizio del codice, usare la funzione "copia" (CTRL-C), passare a BricxCC, cliccare sulla prima icona in alto a sinistra (New file), usare "incolla" (CTRL.V) e salvare il file con l'estensione .nqc (ad esempio treno.nqc). PS: Dopo salvato, portando il cursore su un'istruzione in blu, cliccando di nuovo con il tasto destro e selezionando "Topic Search" appare l'aiuto in inglese che spiega a cosa serve quell'istruzione. Per caricare il programma sull'RCX,: - Salvo il programma con l'icona blu del disco in alto a sinistra - Seleziono il numero del programma (di solito Program 1) dal menù in alto - Clicco sull'icona blu a onde a sinistra del menù di selezione dei programmi Dopo un pò di tempo l'RCX dà il suono di OK ed il programma è pronto per essere eseguito Per oggi basta, se servono delucidazioni chiedete pure... PS: Visto che di questi tempi non si sa mai, aggiungo che questi software e driver sono forniti così come stanno, senza nessuna autorizzazione della LEGO. Su questi non vi è alcun supporto ufficilale nè mio nè della LEGO. Vengono inoltre forniti a titolo gratuito senza alcuna garanzia, utilizzateli a vostro rischio. Nè la LEGO nè io siamo responsabili di eventuali danni che possono essere provocati dall'utlilzzo degli stessi -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Si, ma la lampadina ti serve per segnalare l'arrivo del treno (= treno in corsa), quando fermi il treno e spegni la lampadina ormai il sensore ha già fatto il suo dovere. Anche questo testato a Cavallino.... 8) -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Il brick giusto è il Mindstorms RCX 1.0 with Power Jack - Complete Brick Ho anche pensato a una cosa: se lo usi con delle batterie ricaricabili eviti di cancellare firmware e programma quando lo stacchi dalla corrente. 8) Quando lo usi attaccato alla corrente, meglio togliere il coperchio del vano batterie e permettere una ventilazione per non surriscaldarlo. Ho visto la tua torretta, splendida con i rampicanti ma mi sa che con un uso intenso in ambiente estivo rischi di fondere tutto ??? Si potrebbe magari modificare sollevata da terra, senza pavimento e con delle feritoie sul tetto ad esempio. PS: Per quanto riguarda l'illuminazione "problematica" vi assicuro che ne abbiamo avuta anche a Cavallino, ed è stata elegantemente aggirata tramite la calibrazione automatica del software 8) (non c'era alcuna schermatura) Non discuto sulle luci da usare: quelle che ho consigliato sono più pratiche perché si attaccano direttamente alla rotaia, le altre hanno bisogno dell'adattatore ma consumano di meno. In pieno spirito AFOL create in libertà con quello che avete a disposizione ;D -
Complimenti, i tuoi modelli mi riempiono di gioia solo a vedere la cura con cui sono costruiti, ma il raccontare la loro storia è quello che li rende davvero appassionanti. Mi piace proprio questa macchinina rossa!
-
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Tralasciando i casi particolari , riassiumo i punti fondamentali del [glow=red,2,300]regolamento per automazione ferroviaria agli eventi[/glow]: Il modulo partecipante al diorama ferroviario ha le seguenti caratteristiche: [*]Costruito con binari 9V [*]Un binario singolo di ingresso ed un binario singolo di uscita in modo da poter essere inserito in un ovale [*]Binario d'ingresso isolato con un segmento di binario PF, binario d'uscita alimentato [*]Alimentazione autonoma ed indipendente [*]Automatico (non deve aver bisogno dell'intervento del capostazione MA è consentito l'uso di un pulsante per il pubblico) [*]Nel software ha la possibilità di regolare la velocità massima del treno [*]NON contiene inversioni di marcia (il resto dell'ovale non cambia il senso di marcia) [*]Bello e divertente [*]... Mi sembra che stia prendendo forma, mi piace ;D Consigli per il materiale di base da usare: - binari 9V - trasformatore del treno - RCX 1 con jack - sensore luce RCX - lampadina da mettere davanti al sensore luce (alimentata dalle rotaie con un attacco rotaia supplementare) - motori PF con cavo adattatore -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Raga... stiamo andando fuori dal seminato ;D Confermo che il treno del GBC sta andando avanti e indietro da anni pilotato da un'unica uscita dell'RCX. Anche il trenino di Cavallino era pilotato da un'unica uscita. Come avevamo avuto già occasione di notare, il motore assorbe tutta quella potenza solo se in stallo, condizione che per fortuna è raro si verifichi in condizioni normali. ??? Riportiamoci sul giusto binario, confermo che un treno si può pilotare tranquillamente con un'uscita dell'RCX -
Clicca sul link un paio di righe sopra la foto dell'edificio tan... ;D
-
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
E qua torna il ferroviere.... : Scusate ma mi spiego meglio: non stiamo lavorando all'automazione del diorama personale, dove ci possiamo sbizzarrire con soluzioni di tutti i tipi per automatizzare gli scambi, farsi una plancia di comando degna della stazione di Milano (magari..... ;D ) e per cui serve una progettazione a monte di tutto l'impianto. In questo caso stiamo lavorando ad un progetto comune che somiglia molto al GBC: ogni modulo accoglie un treno in ingresso e lo consegna al prossimo modulo in uscita. Questo approccio elimina la necessità di coordinamento: come è stato giustamente detto se il modulo funziona rimane in linea, altrimenti viene sostituito da un binario dritto. I moduli si montano seguendo il tracciato del diorama che viene deciso dal coordinatore a seconda dei moduli a disposizione (portandosi comunque una scorta di binari dritti....) Anche per questo aggiungo una regola: il modulo va isolato in ingresso ma deve alimentare il binario d'uscita Così il modulo non riceve interferenze di corrente dal modulo precedente ma alimenta la rotaia fino al modulo successivo. Esempio: il mio modulo toglie la corrente per fermare il treno: se arriva la corrente del modulo precedente il mio treno non si ferma... : Il modulo più semplice è un binario dritto attaccato al trasformatore. Come per il GBC, le prove a casa si fanno collegando un ovale tra ingresso ed uscita e facendo correre due treni per simulare il caso peggiore... ;D Scusate la verbosità ma capisco che stiamo mettendo insieme due mondi totalmente diversi, ed è meglio continuare a spiegare finché tutti hanno capito. -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Quanta carne al fuoco... Andiamo con ordine: Bravo, il tuo modulo concettualmente funziona: un ingresso, un uscita ed il treno che fa qualcosa. Per prima cosa penso che vada evitato l'intervento del "macchinista", quindi abbiamo due alternative: - sostituiamo il pulsante con un sensore luce in modo da farlo attivare dal treno che passa - mettiamo il pulsante a disposizione del pubblico ??? Infatti: le specifiche tecniche dell'RCX parlano chiaro: la corrente massima assorbita dal motore del treno corrisponde alla corrente massima erogata da due porte dell'RCX, se ci aggiungiamo anche tutti i binari del diorama il treno si ferma di sicuro. Su questo siamo pienamente d'accordo: ogni partecipante crea ed alimenta solo il suo modulo, che va regolato in potenza per non far deragliare i treni che passano Qui non sono d'accordo: ho visto agli eventi decine di treni e pochi binari su cui farli correre. Inoltre la gestione del diorama è già di suo impegnativa. Secondo me prima vanno posati gli ovali in base allo spazio ed agli edifici e poi ci si mettono i treni a rotazione. Qui siamo come nel GBC: ogni modulo ha un ingresso ed un uscita, poi su quello che fa c'è la massima libertà di espressione ;D Eliminerei questo strappo alla regola: sai meglio di me che con i 9V non puoi fare il circuito "a racchetta", quindi niente inversioni di marcia. Se poi riesci a farle prendendo atto che il resto del circuito non inverte il senso di marcia solo per te mi va anche bene Anche su questo sono d'accordo, anche per i motivi di alimentazione da parte dell'RCX visti sopra. Sul cibo ed alcool sono pienamente d'accordo ma per quest'anno sarà già tanto riuscire a far funzionare il modulo di Pix per Ballabio ;D Riassiumiamo quindi i punti fondamentali del [glow=red,2,300]regolamento per automazione ferroviaria agli eventi[/glow]: Il modulo partecipante al diorama ferroviario dovrà tassativamente avere le seguenti caratteristiche: [*]Essere costruito con binari 9V, che possono essere isolati dal resto del diorama con un binario corto dritto PF [*]Avere un punto di ingresso ed un punto di uscita in modo da poter essere inserito in un ovale [*]Essere alimentato in maniera autonoma ed indipendente [*]Essere autonomo (non deve aver bisogno dell'intervento del capostazione) [*]Avere la possibilità di regolare la velocità del treno [*]NON sono consentite inversioni di marcia (il resto dell'ovale non cambia il senso di marcia) [*]Essere bello e divertente [*]... -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Forse non l'hai notato, ma questo è il gruppo di lavoro... ;D e tu ormai ci sei dentro 8) Per favore parlaci di come funziona la tua automazione e cerchiamo di capire come mai non si è potuta integrare nel diorama. Propongo la prima specifica: il percorso nel diorama deve essere ad ovali concentrici, ciascuno con un treno (oppure più treni nel caso di moduli con doppio binario) -
Ecco le prime foto... meglio iniziare dalle peggiori che gli altri hanno fatto sicuramente di meglio Foto dell'evento: Cavallino 2012 by Rudy La "piccola" MOC di Dario: Il famoso albero.... Giancarlo con Kim a parlare di valvole...
-
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Questo lo fa il programma del semaforo postato qui Se il tratto è dritto e ti serve un avanti-indietro hai bisogno di due sensori luce di "fine corsa" ai due estremi meno la lunghezza del treno (serve spazio per frenare). Quindi se il treno viene da sinistra la sequenza è binario - sensore - banchina - fine del binario, e l'altra stazione è simmetrica. Il sensore funziona meglio se ha una luce davanti, va bene anche se la alimenti direttamente dalle rotaie. Per far funzionare il programma, metti il treno in mezzo tra le due stazioni e lo fai partire Listato per BrickxCC ed RCX /*------------------------------------------------------------------------------ ; File : tram.nqc ; Description : tram che va avanti e indietro su rotaia dritta ; Programmed by : Rudy ; ports: : A ; B ; C treno ; 1 sensore luce ; 2 sensore luce ; 3 ; 4 ;-----------------------------------------------------------------------------*/ task main() { ;-----------------------------------------------------------------------------*/ // da regolare a seconda del tracciato e del treno: // soglia a cui scatta il sensore (treno presente) int soglia = 10; // velocità massima del treno (minimo 1, massimo 7) int maxspeed=5; ;-----------------------------------------------------------------------------*/ // disabilita lo spegnimento automatico dell'RCX SetSleepTime(0) ; // setta i sensori come sensori luce SetSensorType(SENSOR_1,SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_1,SENSOR_MODE_RAW); SetSensorType(SENSOR_2,SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_2,SENSOR_MODE_RAW); // variabili per le letture dei sensori luce int light1,light2; int light1_max = SENSOR_1; int light2_max = SENSOR_2; // accende il treno int verso=1; SetPower(OUT_C,maxspeed); OnFwd(OUT_C); int x; while (true) { // legge i sensori luce light1 = SENSOR_1; light2 = SENSOR_2; // regolazione automatica della soglia per la luce // varia con la luce ambiente e le macchine fotografiche in giro light1_max++; if (light1<light1_max) light1_max=light1; light2_max++; if (light2<light2_max) light2_max=light2; // controlla se il treno ha fatto scattare il sensore if (light1>(light1_max+soglia) || light2>(light2_max+soglia)) { // frena il treno Float(OUT_C); // aspetta x centesimi di secondo Wait(300); // riparte if (verso) { // riparte indietro OnRev(OUT_C); } else { // riparte avanti OnFwd(OUT_C); } // cambia verso per la prossima volta verso=1-verso; // aspetta x centesimi di secondo che il treno si levi dal sensore Wait(300); } } } -
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Salve a tutti i fermodellisti Legosi... continuo con le idee di automazione ferroviaria per il diorama. Sostengo la mia opinione, testata a Cavallino: - binari 9V - RCX 1.0 (con attacco per il trasformatore dei treni) Vantaggi: - si attacca il trasformatore e l'automazione va avanti da sola per tutte le giornate dell'evento con meno problemi del GBC - i costi sono nettamente inferiori all'NXT con pacco ricaricabile e trasformatore (vedo su Bricklink che l'RCX 1 costa dai 20 ai 30 Euro, lo stesso per la torretta USB per il collegamento ed il trasformatore che si usa è quello dei treni che probabilmente avete già Invece NXT + pacco ricaricabile + trasformatore = 100+50+15, costa quasi tre volte di più - il sensore luce RCX costa dai 4 euro in su mentre il sensore luce NXT costa dai 12 euro in su - si possono usare i motori PF con l'adattatore Inoltre se ci si coordina sulle specifiche (tipo altezza del binario in entrata ed uscita) ciascuno può automatizzare un modulo (penso anche ad esempio a mucche che girano la testa al passaggio del treno...) e poi si montano in sequenza nel diorama senza diventare matti per gestire una caterva di scambi Mi sono attrezzato acquistando a Cavallino il mio primo treno 9V quindi sono disponibile a scrivere il software per i test su... rotaia ;D Un'ultima cosa: Paolo mi ha fatto notare che col 9V non puoi ad esempio far aprire le porte al treno. Ci ho pensato: una possibile soluzione è motorizzare solo le porte con il PF, e motorizzare il comando PF come se fosse uno scambio, così le batterie vengono usate pochissimo e possono durare giorni interi. Per cortesia qualcuno sa se si può usare l'IR-link (che non ho) con il cavo convertitore sull'RCX? Grazie [edit] ho scoperto che i PF si possono guidare direttamente con l'RCX [edit] qui lo zip per BrickOS (così so dove recuperarlo, ignoratelo pure) [edit] esiste il codice per pilotare il PF per BrickxCC? [edit] Questo è tutto quello che ho trovato sulla trasmissione dati dell'RCX in BrickxCC (roba da nerd, non leggetela): 3.5.2 SerialRCX2, Spy The RCX2, Swan, and Spybotics can transmit serial data out the IR port. Prior to transmitting any data, the communication and packet settings must be specified. Then, for each transmission, data should be placed in the transmit buffer, then sent using the SendSerial() function. For the RCX2 and Swan the communication settings are set with SetSerialComm. This determines how bits are sent over IR. Possible values are shown below. OptionEffect SERIAL_COMM_DEFAULTdefault settings SERIAL_COMM_48004800 baud SERIAL_COMM_DUTY2525% duty cycle SERIAL_COMM_76KHZ76kHz carrier SERIAL_COMM_RCXsame as default SERIAL_COMM_RC4800/76kHz/25% SERIAL_COMM_SPYBOT4800/76kHz/25% SERIAL_COMM_96009600 baud (Swan) The default is to send data at 2400 baud using a 50% duty cycle on a 38kHz carrier. To specify multiple options (such as 4800 baud with 25% duty cycle), combine the individual options using bitwise or (SERIAL_COMM_4800 | SERIAL_COMM_DUTY25). The RCX2 and Swan allow you to set the packet settings with SetSerialPacket. This controls how bytes are assembled into packets. Possible values are shown below. OptionEffect SERIAL_PACKET_DEFAULTno packet format - just data bytes SERIAL_PACKET_PREAMBLEsend a packet preamble SERIAL_PACKET_NEGATEDfollow each byte with its complement SERIAL_PACKET_CHECKSUMinclude a checksum for each packet SERIAL_PACKET_RCXstandard RCX format (preamble, negated data, and checksum) Note that negated packets always include a checksum, so the SERIAL_PACKET_CHECKSUM option is only meaningful when SERIAL_PACKET_NEGATED is not specified. Likewise the preamble, negated, and checksum settings are implied by SERIAL_PACKET_RCX. The transmit buffer can hold up to 16 data bytes. These bytes may be set using SetSerialData, then transmitted by calling SendSerial. For example, the following code sends two bytes (0x12 and 0x34) out the serial port: SetSerialComm(SERIAL_COMM_DEFAULT); SetSerialPacket(SERIAL_PACKET_DEFAULT); SetSerialData(0, 0x12); SetSerialData(1, 0x34); SendSerial(0, 2); Spybotics uses a different mechanism for configuring the serial transmission parameters. Use SetSerialType to specify the transmission type with the constants described in the following table. OptionEffect SERIAL_TYPE_SPYBOTSpybotics type SERIAL_TYPE_RCXRCX type SERIAL_TYPE_RCRC type SERIAL_TYPE_USERUser-defined type Use SetSerialBaud to specify the baud rate with the constants described in the following table. OptionEffect SERIAL_BAUD_24002400 baud SERIAL_BAUD_48004800 baud SERIAL_BAUD_96009600 baud Use SetSerialChannel to specify the transmission channel with the constants described in the following table. OptionEffect SERIAL_CHANNEL_IRIR channel SERIAL_CHANNEL_PCPC channel (visible light) Use SetSerialPreamblePos to specify the position of the preamble in the 16 bytes of serial data. Use SetSerialPreambleLen to specify the length of the preamble. Use SetSerialChecksum to specify the checksum type with the constants described in the following table. OptionEffect SERIAL_CHECKSUM_NONENo checksum SERIAL_CHECKSUM_SUMSum checksum SERIAL_CHECKSUM_ZERO_SUMZero sum checksum Use SetSerialBiPhase to specify the bi-phase mode with the constants described in the following table. OptionEffect SERIAL_BIPHASE_OFFNo bi-phase SERIAL_BIPHASE_ONUse bi-phase SetSerialComm(settings)Function - RCX2 Set the communication settings, which determine how the bits are sent over IR SetSerialComm(SERIAL_COMM_DEFAULT); SetSerialPacket(settings)Function - RCX2 Set the packet settings, which control how bytes are assembled into packets. SetSerialPacket(SERIAL_PACKET_DEFAULT); SetSerialData(n, value)Function - RCX2, Spy Set one byte of data in the transmit buffer. N is the index of the byte to set (0-15), and value can be any expression. SetSerialData(3, x); // set byte 3 to x SerialData(n)Value - RCX2, Spy Returns the value of a byte in the transmit buffer (NOT received data). N must be a constant between 0 and 15. x = SerialData(7) ; // read byte #7 SerialPacket()Value - RCX2 Returns the packet data formatting configuration. bit 0 : Preamble (0x55 0xFF 0x00) bit 1 : Negated (incl. negated checksum) bit 2 : Checksum (if not negated) x = SerialPacket(); // read packet configuration SerialComm()Value - RCX2 Returns the UART transmit parameter configuration. bit 0 : Baudrate (0 == 2400 baud, 1 == 4800 baud) bit 1 : Carrier freq (0 == 38 kHz, 1 == 76 kHz) bit 2 : Dutycycle (0 == 50 %, 1 == 25 %) x = SerialComm(); // read UART transmit parameters SendSerial(start, count)Function - RCX2, Spy Use the contents of the transmit buffer to build a packet and send it out the IR port (according to the current packet and communication settings). Start and count are both constants that specify the first byte and the number of bytes within the buffer to be sent. SendSerial(0, 2); // send first two bytes in buffer InitSpybotComm()Function - RCX2 Use this function to configure the serial communication registers in preparation for sending messages using the Spybot protocol. InitSpybotComm(); // prepare to send IR using Spybot protocol SendSpybotMsg()Function - RCX2 Use this function to send a 7 byte Spybot message which was previously set via a call to SetSpybotMessage. SendSpybotMsg(); SetSpybotMessage(mode, myID, addr, cmd, hi, lo)Function - RCX2 Use this function to set the contents of a Spybot message. The message can then be sent repeatedly via calls to SendSpybotMsg. SetSpybotMessage(MSG_BROADCAST, 9, 0, CMD_FIRE_LASER, 1, 100); SendSpybotMessage(mode, myID, addr, cmd, hi, lo)Function - RCX2 Use this function to send a 7 byte Spybot message. This function calls InitSpybotComm, SetSpybotMessage, and SendSpybotMsg in sequence. SendSpybotMessage(MSG_BROADCAST, 9, 0, CMD_FIRE_LASER, 1, 100); SendSpybotCtrlMsg()Function - RCX2 Use this function to send a 2 byte Spybot controller message which was previously set via a call to SetSpybotCtrlMessage. SendSpybotCtrlMsg(); SetSpybotCtrlMessage(nMyID, nMsg)Function - RCX2 Use this function to set the contents of a Spybot controller message. The message can then be sent repeatedly via calls to SendSpybotCtrlMsg. SetSpybotCtrlMessage(ID_CTRL_1, SPY_CTRL_BTN_1); SendSpybotCtrlMessage(nMyID, nMsg)Function - RCX2 Use this function to send a 2 byte Spybot controller message. This function calls InitSpybotComm, SetSpybotCtrlMessage, and SendSpybotCtrlMsg in sequence. SendSpybotCtrlMessage(ID_CTRL_1, SPY_CTRL_BTN_1); SendSpybotCtrlPingMsg()Function - RCX2 Use this function to send a 2 byte Spybot controller ping message which was previously set via a call to SetSpybotCtrlPingMessage. SendSpybotCtrlPingMsg(); SetSpybotCtrlPingMessage(nID)Function - RCX2 Use this function to set the contents of a Spybot controller ping message. The message can then be sent repeatedly via calls to SendSpybotCtrlPingMsg. SetSpybotCtrlPingMessage(ID_CTRL_1); SendSpybotCtrlPingMessage(nID)Function - RCX2 Use this function to send a 2 byte Spybot controller ping message. This function calls InitSpybotComm, SetSpybotCtrlPingMessage, and SendSpybotCtrlPingMsg in sequence. SendSpybotCtrlPingMessage(ID_CTRL_1); SendSpybotPingMsg()Function - RCX2 Use this function to send a 4 byte Spybot ping message which was previously set via a call to SetSpybotPingMessage. SendSpybotPingMsg(); SetSpybotPing(nLinkID, nMyID, nInfo)Function — RCX2 Use this function to set the contents of a Spybot ping message. The message can then be sent repeatedly via calls to SendSpybotPingMsg. SetSpybotPingMessage(ID_CTRL_1, ID_MIN_BOT+1, 10); SendSpybotPing(nLinkID, nMyID, nInfo)Function - RCX2 Use this function to send a 2 byte Spybot ping message. This function calls InitSpybotComm, SetSpybotPingMessage, and SendSpybotPingMsg in sequence. SendSpybotPingMessage(ID_CTRL_1, ID_MIN_BOT+1, 10); InitRCComm()Function - RCX2 Use this function to configure the serial communication registers in preparation for sending messages using the Spybot RC protocol. InitRCComm(); // prepare to send IR using RC protocol SendRCMsg()Function - RCX2 Use this function to send a 4 byte RC message which was previously set via a call to SetRCMessage. SendRCMsg(); SetRCMessage(nChannel, nLeft, nRight)Function - RCX2 Use this function to set the contents of a Spybot RC message. The message can then be sent repeatedly via calls to SendRCMsg. SetRCMessage(RC_CHANNEL_2, RC_CMD_FWD, RC_CMD_FWD); SendRCMessage(nChannel, nLeft, nRight)Function - RCX2 Use this function to send a 2 byte Spybot ping message. This function calls InitRCComm, SetRCMessage, and SendRCMsg in sequence. SendRCMessage(RC_CHANNEL_2, RC_CMD_FWD, RC_CMD_FWD); DefaultSerialComm()Value - Swan Returns the default UART transmit parameter configuration. x = DefaultSerialComm(); // read the default UART transmit config DefaultSerialPacket()Value - Swan Returns the default packet data formatting configuration. x = DefaultSerialPacket(); // read the default packet config SetDefaultSerialComm(settings)Function - Swan Set the default communication settings, which determine how the bits are sent over IR SetDefaultSerialComm(SERIAL_COMM_DEFAULT); SetDefaultSerialPacket(settings)Function - Swan Set the default packet settings, which control how bytes are assembled into packets. SetDefaultSerialPacket(SERIAL_PACKET_DEFAULT); SerialType()Value - Spy Returns the type of the serial transmission. x = SerialType(); // SERIAL_TYPE_USER ?? SetSerialType(type)Function - Spy Sets the type of the serial transmission. SetSerialType(SERIAL_TYPE_USER); // set type to user Use one of the following constants: SERIAL_TYPE_SPYBOT, SERIAL_TYPE_RCX, SERIAL_TYPE_RC, SERIAL_TYPE_USER. SerialBaud()Value - Spy Returns the baud rate of the serial transmission. x = SerialBaud(); // SERIAL_BAUD_2400 ?? SetSerialBaud(baud)Function - Spy Sets the baud rate of the serial transmission. SetSerialBaud(SERIAL_BAUD_2400); // set baud to 2400 Use one of the following constants: SERIAL_BAUD_2400, SERIAL_BAUD_4800, SERIAL_BAUD_9600. SerialChannel()Value - Spy Returns the transmission channel. x = SerialChannel(); // SERIAL_CHANNEL_PC ?? SetSerialChannel(channel)Function - Spy Sets the transmission channel. SetSerialChannel(SERIAL_CHANNEL_IR); // set channel to IR Use one of the following constants: SERIAL_CHANNEL_IR, SERIAL_CHANNEL_PC. SerialPreamblePos()Value - Spy Returns the preamble position within the serial data buffer. x = SerialPreamblePos(); SetSerialPreamblePos(n)Function - Spy Sets the position of the preamble within the serial data buffer. SetSerialPreamblePos(12); // set preamble pos to 12 SerialPreambleLen()Value - Spy Returns the preamble length. x = SerialPreambleLen(); SetSerialPreambleLen(n)Function - Spy Sets the length of the preamble. SetSerialPreambleLen(3); // set preamble length to 3 SerialChecksum()Value - Spy Returns the transmission checksum type. x = SerialChecksum(); // SERIAL_CHECKSUM_SUM ?? SetSerialChecksum(check)Function - Spy Sets the transmission checksum type. SetSerialChecksum(SERIAL_CHECKSUM_SUM); // use Sum checksum Use one of the following constants: SERIAL_CHECKSUM_NONE, SERIAL_CHECKSUM_SUM, SERIAL_CHECKSUM_ZERO_SUM. SerialBiPhase()Value - Spy Returns the transmission bi-phase mode. x = SerialBiPhase(); // SERIAL_BIPHASE_OFF ?? SetSerialBiPhase(mode)Function - Spy Sets the transmission bi-phase mode. SetSerialBiPhase(SERIAL_BIPHASE_OFF); // no bi-phase Use one of the following constants: SERIAL_BIPHASE_OFF, SERIAL_BIPHASE_ON. -
Aggiungo: - Biffuz lasciato chiuso a chiave nel camper - il robottino di Glorfindel che ha sconfitto i miei 8 robot :'( - i ragazzi/ragazze del monta-smonta usati impunemente per i lavori pesanti - il generatore che finiva il gasolio - uno che mi ha chiesto in prestito un brick 8 x 1 e che quando ha aperto il pick-a-brick me l'ha restituito - Antonella che ha lasciato la sua reflex incustodita in bella mostra su un tavolo per mezza giornata ed alla fine l'ha ritrovata sempre lì - Giancarlo che ha mostrato la sua radio a Kim e si sono trovati parlando del circuito della radio a valvole per ore...
-
Idea! NXT Automazione Treni
Rudy ha risposto al topic di Pix in Automazione, Illuminazione e Programmazione
Riporto in auge questo argomento perchè a Cavallino abbiamo automatizzato un semaforo in pochi minuti con l'RCX ed il treno di Paolo. Dietro gentile richiesta ecco il listato NXT per BrickxCC: /*------------------------------------------------------------------------------ ; File : semaforotreno.nxc ; Description : Semaforo per il treno ; Programmed by : Rudy ; ports: : A luce rossa ; B luce verde ; C treno ; 1 sensore luce dell'RCX con una lampadina di fronte ; 2 ; 3 ; 4 ;-----------------------------------------------------------------------------*/ void print(int riga,string testo,int numero) { // stampa stringa e numero sulla riga // calcola il valore della riga (0 in basso a sinistra) int lnum=(8-riga)*8; ClearLine(lnum); TextOut(0, lnum, testo); if (numero) NumOut(6*strlen(testo), lnum, numero); } task main() { // disabilita lo spegnimento automatico dell'NXT SetSleepTime(0) ; // seleziona come tipo il sensore luce RCX SetSensorType(S1,SENSOR_TYPE_LIGHT); SetSensorMode(S1,SENSOR_MODE_RAW); // accende il semaforo OnFwd(OUT_A,100); // treno e luce di riferimento int maxspeed=70; OnFwd(OUT_C,maxspeed); // lettura del sensore luce int light_max; int x,luce; while (true) { luce=Sensor(S1); print (2,"Test: ",light_max); print (4,"Luce: ",luce); // regolazione automatica della soglia per la luce // varia con la luce ambiente e le macchine fotografiche in giro light_max--; if (luce>light_max) light_max=luce; if (luce<(light_max-10)) { // frena il treno Float(OUT_C); Wait(3000); // luce verde OnFwd(OUT_B,100); Off(OUT_A); // partenza for (x=1 ; x<maxspeed ; x=x+10 ) { OnFwd(OUT_C,x); Wait(500); } OnFwd(OUT_C,maxspeed); Wait(500); // luce rossa OnFwd(OUT_A,100); Off(OUT_B); } } } Versione per RCX: /*------------------------------------------------------------------------------ ; File : trainstation ; Description : Semaforo per il treno ; Programmed by : Rudy ; ports: : A luce rossa ; B luce verde ; C treno ; 1 sensore luce ; 2 ; 3 ; 4 ;-----------------------------------------------------------------------------*/ task main() { SetSleepTime(0) ; SetSensorType(SENSOR_1,SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_1,SENSOR_MODE_RAW); // semaforo SetPower(OUT_A,8); SetPower(OUT_B,8); OnFwd(OUT_A); // leggo il sensore luce int light1_down = SENSOR_1; // treno int maxspeed=5; SetPower(OUT_C,maxspeed); OnFwd(OUT_C); int x; while (true) { int luce=SENSOR_1; // regolazione automatica della soglia per la luce // varia con la luce ambiente e le macchine fotografiche in giro light1_down++; if (luce<light1_down) light1_down=luce; if (luce>(light1_down+9)) { // frena il treno Float(OUT_C); Wait(300); // luce verde OnFwd(OUT_B); Off(OUT_A); // partenza for (x=1 ; x<maxspeed ; x++ ) { SetPower(OUT_C,x); OnFwd(OUT_C); Wait(100); } SetPower(OUT_C,maxspeed); OnFwd(OUT_C); Wait(100); // luce rossa OnFwd(OUT_A); Off(OUT_B); } } } Spiegazione del modulo: L'NXT dà corrente alla rotaia sulla porta C con il cavo adattatore A destra del binario c'è il sensore, a sinistra la lampadina alimentata dal binario (il treno passa in mezzo) Vicino all'NXT c'è il semaforo con due luci collegate con i cavi adattatori Si possono usare anche i sensori luce dell'NXT La logica: - accende il semaforo rosso - accende il treno - ciclo continuo: -- controlla il sensore -- se il sensore rileva qualcosa: --- frena il treno --- aspetta x secondi --- spegne il rosso --- accende il verde --- fa partire dolcemente il treno --- aspetta x secondi --- spegne il verde --- accende il rosso - fine ciclo -
Mi associo ai ringraziamenti per questo immane lavoro di gruppo ricordando in ordine sparso: - il pubblico ("Ma fate queste cose con i Lego?" "Ma dove si compra questo?") - Eliminator - il treno di Paolo (PS: ho la tua prolunga ed il trasformatore, te li porto a Ballabio) - la porchetta - i forzati del GBC più grande mai visto a Cavallino ??? - Michele ed Antonella onnipresenti - l'Ambassador - Kevin fatto passare per il figlio di Giancarlo - il fortino spagnolo con i cannoni PF - il TARDIS ed i Dalek - Andrea tuttofare - i favolosi tatuaggi di Dario (PS: appena posso posto la foto dell'albero del tuo modulare) - l'inaspettata vena artistica di Alecchisi - Jack Sparrow nei posti più impensati - la f...auna locale - i biscotti dei belgi - il rosè dei veneti - Brick over the Beach Intanto questo, chi vuole continui pure la lista che è moooolto lunga....
-
Fine agosto non ho più la sala disponibile, stiamo cercando una data tra Cavallino e Ballabio...
-
Per un attimo ho letto "quello in LEGO lo devo ancora fare..." ;D Mi crescerà lo stud sulla testa Scherzi a parte allego il progetto del dohyo in Duplo. (visto che LDD non ha i Duplo ho usato i brick normali: al posto del 2x1 si usano due brick normali 4x2 sovrapposti). Lista dei pezzi: 479 x DUPLO BRICK 2X4 - Black 76 x DUPLO BRICK 2X2 - White 36 x DUPLO BRICK 2X2 - Black 22 x DUPLO BRICK 2X4 - White 16 x BRICK 4X2 - White Anto, non è che riusciresti a procurarci una "manciatina" di Duplo neri? Modello in LDD Dohjo2.lxf
-
Grazie per la disponibilità, il tema dell'incontro sarà LEGO a ruota libera, pizza al taglio, salame e birra/bibite, una cosa informale e conviviale. In effetti montare un set tutti insieme sarebbe una bella cosa... magari un Cafè Corner... Si, i week-end vanno bene anche per me: penso che proporre un venerdì sera non dovrebbe portare via troppo alle famiglie, oppure rischiamo e ci mettiamo pure i bimbi di sabato pomeriggio?
-
Neanche tanto scema, hai detto che in macchina hai appena spazio per il robottino... Il mio rimane nell'aria, il falegname ogni volta che lo contatto mi dice che sarà pronto la prossima settimana, ormai ci ho rinunciato. Giancarlo, il tuo dohyo com'è? PS: Postate le foto dei concorrenti... per adesso ci sono solo quelle di Giancarlo e mie
-
In questo periodo "vacanziero" propongo un'idea pazzerella che da un pò mi frulla in mente. Ho la disponibilità di una sala di un 100 mq fino alla fine di agosto nell'Udinese e mi piacerebbe organizzare un incontro AFOL informale per "sfoggiare" le nostre MOC e conoscersi di persona, a cavallo tra Cavallino e Ballabio. Iniziamo la fase 1: chi vive nel Triveneto dia la propria disponibilità di date e orari per l'incontro
-
Attento al peso... devi stare sotto i 1000 grammi, e con due NXT, le batterie ed i motori sei già al limite. Già con Snail ho dovuto fare i salti mortali per restarci dentro
-
Accidenti questo ci ha preso gusto.... ma qualcuno gli ha detto quant'è cara la quota d'iscrizione al Sumo per ogni robot? Impresa semplice semplice... I due NXT vanno definiti uno "master" e l'altro "slave" Sullo slave accendi il Bluetooth e lo rendi visibile Sul master vai su Bluetooth/My contacts, selezioni lo slave e la connessione 1 In sintesi i due programmi dialogano scambiandosi SMS, ad esempio ecco la trasmissione di due interi: Programma sul master // IS BLUETOOTH CONNECTION READY? if(BluetoothStatus(1)!=NO_ERR) { TextOut(5,LCD_LINE4,"Bluetooth error",true); while(true); } // PROGRAM NAME ON SLAVE RemoteStartProgram(1, "slaveprogram.rxe") int aTurns=10; int bTurns=20; // SEND VALUES SendRemoteNumber(1,MAILBOX1,aTurns) Wait(100); SendRemoteNumber(1,MAILBOX1,bTurns) Wait(100); // GET ACK string text; while(ReceiveMessage(MAILBOX2, true, text) !=NO_ERR); Programma sullo slave int aTurns,bTurns; while(ReceiveRemoteNumber(MAILBOX1, true, aTurns) == STAT_MSG_EMPTY_MAILBOX); while(ReceiveRemoteNumber(MAILBOX1, true, bTurns) == STAT_MSG_EMPTY_MAILBOX); SendResponseString(MAILBOX2,"OK") NumOut(5,LCD_LINE3,aTurns,true); NumOut(5,LCD_LINE5,bTurns); while(true); Altrimenti dopo connessi se ti basta un solo programma usi il primo come telecomando per il secondo con le funzioni remote: RemoteDatalogSetTimes RemoteGetBatteryLevel RemoteGetConnectionCount RemoteGetConnectionName RemoteGetContactCount RemoteGetContactName RemoteGetCurrentProgramName RemoteGetInputValues RemoteGetOutputState RemoteGetProperty RemoteKeepAlive RemoteLowspeedGetStatus RemoteLowspeedRead RemoteLowspeedWrite RemoteMessageRead RemoteMessageWrite RemotePlaySoundFile RemotePlayTone RemoteResetMotorPosition RemoteResetScaledValue RemoteResetTachoCount RemoteSetInputMode RemoteSetOutputState RemoteSetProperty RemoteStartProgram RemoteStopProgram RemoteStopSound
-
Evvai! Un avversario in meno!!! Grazie Elisa ;D Ed ora per i secchioni ho fatto una nuova versione di decisore con antistallo per TestaRossa: // ed ora siamo in battaglia while (true) { bordo=luce(); if (bordo!=NIENTE) { // al solito precedenza al bordo Off(M_I); // prima ruota dall'altra parte del bordo (Nord davanti) direzione=SE; TextOut(0,LCD_LINE1," BORDER LEFT "); if (bordo==DESTRA) { direzione=SW; TextOut(0,LCD_LINE1," BORDER RIGHT "); } if (bordo==DAVANTI) { direzione=S; TextOut(0,LCD_LINE1," BORDER FRONT "); } muovi(direzione,HIGH); Wait(GIRO/4); // poi va indietro muovi(S,HIGH); Wait(400); Off(M_I); // e ricomincia a girare... direzione=E; } else { NEMICO=guarda(); direzione=NW; TextOut(0,LCD_LINE1," ENEMY LEFT "); if (NEMICO==NIENTE) { direzione=E; TextOut(0,LCD_LINE1," SEARCHING... "); } if (NEMICO==DESTRA) { direzione=NE; TextOut(0,LCD_LINE1," ENEMY RIGHT "); } if (NEMICO==DAVANTI) { direzione=N; TextOut(0,LCD_LINE1," ENEMY FRONT "); } if (speed==HIGH) { direzione=N; TextOut(0,LCD_LINE1," ENEMY TOUCHED "); } } // antistallo if (direzione==modo) { stato++; if (stato>100) { direzione=W; } if (stato>200) { stato=0; } } else { stato=0; modo=direzione; } muovi(direzione,speed); } Grazie ai consigli di Giancarlo ho risolto il problema di usare il sollevatore come sensore, ora ha due velocità: normalmente va piano, se viene frenato il motore parte al 100%. Se il motore arriva alla massima velocità (gira libero) allora torna alla marcia bassa. Questo pezzo di programma fa parte di un task parallelo, la variabile speed è quella che viene passata al programma principale // taratura LIFT - prima velocità bassa OnFwd(LIFT,LOW); // aspetta che prenda velocità Wait(500); int angle1=MotorRotationCount(LIFT); Wait(TEMPO); int angle2=MotorRotationCount(LIFT); int slow=angle2-angle1; slow -= 3; // taratura LIFT - velocità alta OnFwd(LIFT,HIGH); // aspetta che prenda velocità Wait(500); angle1=MotorRotationCount(LIFT); Wait(TEMPO); angle2=MotorRotationCount(LIFT); int fast=angle2-angle1; fast -= 4; // velocità iniziale speed=LOW; while(true) { OnFwd(LIFT,speed); Wait(500); angle1=MotorRotationCount(LIFT); Wait(TEMPO); angle2=MotorRotationCount(LIFT); angle2 -= angle1; if (speed==LOW) { // accellera se rallenta if (angle2<slow) speed=HIGH; } else { // rallenta se libero if (angle2>fast) speed=LOW; } }
-
OT mode ON Siamo in pochissimi in zona... io sono a Codroipo, tra Udine e Pordenone, se vuoi scrivi in privato Il mio giocattolaio preferito non vedrebbe l'ora di organizzare un evento qui. Mi ha detto che in negozio ci sono un sacco di appassionati che si vergognano ad acquistare set... Tra questi anche un ingegnere con la passione di collezionare MISB, li tiene come archivio e non ne ha mai montato neanche uno... ??? OT mode OFF Per quanto riguarda il contest sono troppo assorbito dal Sumo, di extra sono riuscito solo a fare una vignetta ma l'ho già regalata. Ho realizzato che con i Technic case se ne possono fare ben poche ;D
