Sommario:

Arduino Morse Code Writer: 7 passaggi (con immagini)
Arduino Morse Code Writer: 7 passaggi (con immagini)

Video: Arduino Morse Code Writer: 7 passaggi (con immagini)

Video: Arduino Morse Code Writer: 7 passaggi (con immagini)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Dicembre
Anonim
Image
Image
Scrittore di codice Morse Arduino
Scrittore di codice Morse Arduino

Ho creato un robot che può convertire qualsiasi testo in codice Morse e poi scriverlo!! È fatto di cartone e Lego e per l'elettronica ho usato Arduino e solo due motori.

Forniture

Scheda Arduino Uno Motore passo-passo Micro servo SG90ULN2003 Modulo driver motore passo-passo Modulo di alimentazione Breadboard4× Fili jumper6× Fili dupont femmina-maschio Adattatore 9V1ACavo USB Cartone 2× Tasselli in legno 2× Molle Paglia Carta bianca Colla LEGO Super Pistola per colla a caldo Fascia elastica (per fare un portapenne) Forbici Cutter

Passaggio 1: costruire la base

Costruire la base
Costruire la base
Costruire la base
Costruire la base
Costruire la base
Costruire la base

Inizia costruendo la base. Il mio è largo 4 perni e lungo 20, dopo aver costruito uno strato con quelle lunghezze, ho costruito un bordo largo uno perno attorno ad esso lasciando uno spazio su un lato per lasciare spazio al motore passo-passo, quindi ho aggiunto pezzi di piastrelle nella parte centrale dove sarà la striscia di carta. L'uso di Lego lo ha reso molto robusto e facile da modificare. Per realizzare il rotolo di carta, ho tagliato delle strisce di carta A4 larghe 1,2 cm (ho scelto questa larghezza perché è della stessa larghezza della ruota Lego che ho usato, puoi farla più grande o più piccola a seconda della tua ruota) e ho incollato le loro estremità insieme per formare una striscia molto lunga, poi l'ho avvolto intorno alla ruota.

Passaggio 2: il pezzo del servo

Il servo pezzo
Il servo pezzo
Il servo pezzo
Il servo pezzo
Il servo pezzo
Il servo pezzo

Per questo passaggio è necessario:

  • due tasselli in legno lunghi 4 cm
  • due molle lunghe 2cm
  • una cannuccia tagliata in due pezzi lunghi 2 cm ciascuno
  • un pezzo di cartone da 12 cm per 4 cm
  • due pezzi di cartone da 4 cm per 1,5 cm
  • un pezzo di cartone da 4 cm per 2 cm

Per prima cosa, incolla i tasselli su uno dei 4 pezzi per 1,5, quindi inserisci le molle e le cannucce nei tasselli, quindi incolla l'altro pezzo di cartone dall'altra parte per tenere tutto in posizione.

In secondo luogo, incolla il pezzo di 4 cm per 2 cm sopra le cannucce.

Terzo, capovolgi l'intero pezzo e incolla un piccolo tassello sul retro, non al centro ma leggermente a sinistra. (ho dimenticato di aggiungere il tassello piccolo nella prima foto)

Infine, pratica un foro nel pezzo di cartone grande delle dimensioni della parte anteriore del servomotore e incolla il motore, quindi incolla il pezzo appena fatto con i tasselli al pezzo grande in modo che quando il servo si muove, spinge il piccolo tassello in basso che a sua volta spinge verso il basso anche le molle.

Ho finito per tagliare circa 3 cm dalla parte inferiore del pezzo da 12 cm per 4 cm e incollarvi altri due pezzi da 4 cm per 1,5 cm, quindi ricoprirlo con un pezzo di cartone da 5,5 cm per 4 cm. E per tenere il pennarello ho fatto un piccolo anello di elastico e l'ho incollato su un piccolo pezzo di cartone, quindi l'ho incollato al pezzo di 4 cm per 2 cm che si sposterà verso il basso quando il servo si avvia. Queste aggiunte hanno impedito al marcatore di spostarsi da un lato all'altro quando le molle tornano su.

Passaggio 3: aggiunta del servomotore e del rotolo di carta alla base

Aggiunta del servomotore e del rotolo di carta alla base
Aggiunta del servomotore e del rotolo di carta alla base
Aggiunta del servomotore e del rotolo di carta alla base
Aggiunta del servomotore e del rotolo di carta alla base

Ho aggiunto altri due mattoncini su un lato della base per supportare il pezzo del servo e l'ho incollato in posizione. Poi ho aggiunto la ruota all'estremità della base.

Passaggio 4: costruire il telaio del motore passo-passo

Costruire il telaio del motore passo-passo
Costruire il telaio del motore passo-passo
Costruire il telaio del motore passo-passo
Costruire il telaio del motore passo-passo
Costruire il telaio del motore passo-passo
Costruire il telaio del motore passo-passo

Questo passaggio è stato un po' una sfida, perché il motore non era fatto per adattarsi perfettamente ai Lego. Tuttavia, sono riuscito a farlo usando i due fori nel motore per fissarlo in posizione. Successivamente, ho incollato una ruota Lego sulla punta del motore e poi l'ho posizionata proprio accanto alla base sul lato che ho lasciato aperto nel passaggio 1.

Passaggio 5: ritocchi finali

Finiture
Finiture
Finiture
Finiture
Finiture
Finiture
Finiture
Finiture

Ho aggiunto due pezzi di arco per coprire la ruota per fissare la carta in posizione. E ho aggiunto due pezzi di arco più piccoli uno per tenere i fili del motore passo-passo e un altro per tenere la carta. Infine, ho cambiato la ruota del motore passo-passo con una leggermente più grande che spostasse la carta meglio della vecchia ruota.

Passaggio 6: elettronica

Elettronica
Elettronica
Elettronica
Elettronica

Infine, devi collegare i motori ad Arduino e caricare il codice.

Inizieremo con il servomotore, collegheremo il filo marrone (il filo di terra) al pin GND, quindi il filo rosso (il filo di alimentazione) al pin 5V e il filo arancione (il filo di segnale) al Dig #5 spillo. Successivamente, il motore passo-passo, collega 1N1 a Dig # 11, 1N2 a Dig # 10, 1N3 a Dig # 9, 1N4 a Dig # 8, 5V al lato positivo della breadboard e il pin di terra al lato negativo del tagliere. E non dimenticare di collegare il modulo di alimentazione alla breadboard assicurandoti che i suoi lati positivo e negativo si allineino correttamente ai lati corrispondenti sulla breadboard. Se dimentichi di farlo, invertirai il potere al tuo progetto e non vorrai farlo.

Per il codice, ho scritto quattro metodi, uno per scrivere un punto, uno per scrivere un trattino e due per lasciare uno spazio tra ogni lettera e ogni parola. In questo modo, posso chiamare questi metodi quando ne ho bisogno invece di scriverlo di nuovo per ogni lettera. Quindi ho scritto un ciclo for che attraversa ogni lettera del testo e lo scrivo, al suo interno ho scritto un'istruzione if per ogni lettera ma puoi scriverla in un'istruzione switch se preferisci. Naturalmente è possibile aggiungere al codice per consentire al programma di leggere i numeri. Quando tutto il cablaggio è pronto, copia e incolla il codice nel tuo IDE. Non dimenticare di installare le librerie stepper, servo e string. Dopodiché, sei a posto.

Come funziona

All'avvio di Arduino, il programma guarda la prima lettera del testo e, a seconda di quale è, chiama le funzioni che la scrivono in codice Morse. Ad esempio, quando viene chiamata la funzione punto, il servomotore è impostato su 160 che sposta la penna verso il basso, quindi viene riportato su 90 che consente alle molle di risalire spostando la penna con loro. E se viene chiamata la funzione trattino, il servomotore sposta la penna verso il basso, quindi il motore passo-passo fa girare la rotella che tira la carta facendo scrivere alla penna un trattino. E se una delle funzioni spaziali viene chiamata il motore passo-passo ruota ma con la penna in alto in modo da tirare la carta creando uno spazio tra le lettere o le parole. Al termine, passa alla lettera successiva e ripete lo stesso processo. Spero vi piaccia;)

Il codice

#includere

#include #include #include const int stepsPerRevolution = 150; // Questa è la variabile per il motore passo-passo Stringa frase = "*ciao"; //Cambia questa variabile per scrivere parole diverse ma scrivi solo in lettere minuscole e inizia la tua parola con "*" Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Questo è il metodo che fa scrivere al robot un punto void dot() { Serial.println("dot start"); myServo.write(160); ritardo(1000); myServo.write(90); ritardo(1000); myStepper.step(stepsPerRevolution); ritardo(1000); Serial.println("punto fatto"); } // Questo è il metodo che fa scrivere al robot un trattino void dash() { Serial.println("dash start"); myServo.write(160); ritardo(1000); myStepper.step(stepsPerRevolution); ritardo(1000); myServo.write(90); ritardo(1000); myStepper.step(stepsPerRevolution); ritardo(1000); Serial.println("trattino terminato"); } // Questo è il metodo che fa in modo che il robot lasci uno spazio tra ogni lettera void space() { Serial.println("space start"); myServo.write(90); ritardo(1000); mioStepper.step(200); ritardo(1000); Serial.println("spazio fatto"); } // Questo è il metodo che fa in modo che il robot lasci uno spazio maggiore tra ogni parola void bigSpace() { myServo.write(90); mioStepper.step(250); ritardo(1000); } void setup() { // inserisci qui il tuo codice di installazione, da eseguire una volta: Serial.begin(9600); myStepper.setSpeed(100); myServo.attach(5); int prima = frase.indexOf('*'); // questo ciclo for passa attraverso ogni lettera della stringa e quindi chiama i metodi giusti per scriverla for (int i = 0; i <phrase.length(); i++) { if (sentence.charAt(first + i) == 'a') { Serial.print(".- "); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'b') { Serial.print("-… "); trattino(); punto(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 'c') { Serial.print("-.-. "); trattino(); punto(); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 'd') { Serial.print("-.. "); trattino(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 'e') { Serial.print(". "); punto(); spazio(); } else if (frase.charAt(first + i) == 'f') { Serial.print("..-. "); punto(); punto(); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 'g') { Serial.print("--. "); trattino(); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 'h') { Serial.print("…. "); punto(); punto(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 'i') { Serial.print(".. "); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 'j') { Serial.print(".--- "); punto(); trattino(); trattino(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'k') { Serial.print("-.- "); trattino(); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'l') { Serial.print(".-.. "); punto(); trattino(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 'm') { Serial.print("-- "); trattino(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'n') { Serial.print("-. "); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 'o') { Serial.print("--- "); trattino(); trattino(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'p') { Serial.print(".--. "); punto(); trattino(); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 'q') { Serial.print("--.- "); trattino(); trattino(); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'r') { Serial.print(".-. "); punto(); trattino(); punto(); spazio(); } else if (frase.charAt(first + i) == 's') { Serial.print("… "); punto(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == 't') { Serial.print("- "); trattino(); spazio(); } else if (frase.charAt(first + i) == 'u') { Serial.print("..- "); punto(); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'v') { Serial.print("…- "); punto(); punto(); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'w') { Serial.print(".-- "); punto(); trattino(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'x') { Serial.print("-..- "); trattino(); punto(); punto(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'y') { Serial.print("-.-- "); trattino(); punto(); trattino(); trattino(); spazio(); } else if (frase.charAt(first + i) == 'z') { Serial.print("--.. "); trattino(); trattino(); punto(); punto(); spazio(); } else if (frase.charAt(first + i) == ' ') { Serial.print("/ "); spazio grande(); } } } void loop() { // Non scrivere nulla qui }

Passaggio 7: risoluzione dei problemi

La ruota non si muove

Potrebbe esserci troppo attrito tra la ruota e la carta, prova ad alzare un po' la ruota o a cambiarla.

La ruota tira la carta ma poi continua a ruotare senza tirare la carta

Assicurati di aver incollato la ruota al centro del motore passo-passo

I punti e i trattini sono collegati

Controlla se le funzioni punto, trattino e spazio sono scritte correttamente, dovrebbero essere così:

// Questo è il metodo che fa scrivere al robot un dotvoid dot() { Serial.println("dot start"); myServo.write(160); ritardo(1000); myServo.write(90); ritardo(1000); myStepper.step(stepsPerRevolution); ritardo(1000); Serial.println("punto fatto"); }

// Questo è il metodo che fa scrivere al robot un trattino

void trattino() { Serial.println("inizio trattino"); myServo.write(160); ritardo(1000); myStepper.step(stepsPerRevolution); ritardo(1000); myServo.write(90); ritardo(1000); mioStepper.step(stepsPerRevolution); ritardo(1000); Serial.println("trattino terminato"); }

// Questo è il metodo che fa sì che il robot lasci uno spazio tra ogni lettera

void space() { Serial.println("spazio iniziale"); myServo.write(90); ritardo(1000); mioStepper.step(200); ritardo(1000); Serial.println("spazio fatto"); }

Consigliato: