Inhaltsverzeichnis:

Arduino Morse Code Writer - Gunook
Arduino Morse Code Writer - Gunook

Video: Arduino Morse Code Writer - Gunook

Video: Arduino Morse Code Writer - Gunook
Video: Arduino and Morse code 2024, Juli
Anonim
Image
Image
Arduino Morsecode-Schreiber
Arduino Morsecode-Schreiber

Ich habe einen Roboter entwickelt, der jeden beliebigen Text in Morsecode umwandeln und dann aufschreiben kann!! Es ist aus Pappe und Lego und für die Elektronik habe ich Arduino und nur zwei Motoren verwendet.

Lieferungen

Arduino Uno-Board Schrittmotor Micro-Servo SG90ULN2003 Schrittmotor-Treibermodul Netzteilmodul Breadboard4× Jumper-Drähte6× Female-to-Male-Dupont-Drähte9V1A AdapterUSB-Kabel Karton 2× Holzdübel 2× Federn Stroh Weißes PapierLegoSuper-Kleber Heißklebepistole Gummiband Stifthalter)Scherenschneider

Schritt 1: Aufbau der Basis

Aufbau der Basis
Aufbau der Basis
Aufbau der Basis
Aufbau der Basis
Aufbau der Basis
Aufbau der Basis

Beginnen Sie mit dem Bau der Basis. Meins ist 4 Stollen breit und 20 Stollen lang, nachdem ich eine Schicht mit diesen Längen gebaut hatte, baute ich einen ein Stollen breiten Boarder um ihn herum und ließ auf einer Seite eine Lücke, um Platz für den Schrittmotor zu lassen, dann fügte ich hinzu Fliesenstücke in den mittleren Teil, wo der Papierstreifen sein wird. Die Verwendung von Lego machte es sehr robust und leicht zu modifizieren. Um die Papierrolle zu machen, schneide ich 1,2 cm breite A4-Papierstreifen (ich habe diese Breite gewählt, weil sie die gleiche Breite wie das Lego-Rad hat, das ich verwendet habe, du kannst deins je nach Rad größer oder kleiner machen) und ich habe ihre Enden zusammengeklebt um einen sehr langen Streifen zu bilden, dann habe ich ihn um das Rad gewickelt.

Schritt 2: Das Servostück

Das Servo-Stück
Das Servo-Stück
Das Servo-Stück
Das Servo-Stück
Das Servo-Stück
Das Servo-Stück

Für diesen Schritt benötigen Sie:

  • zwei Holzdübel 4cm lang
  • zwei Federn 2cm lang
  • ein Strohhalm in zwei Stücke von je 2cm Länge geschnitten
  • ein 12 x 4 cm großes Stück Pappe
  • zwei 4 x 1,5 cm große Kartons
  • ein 4 x 2 cm großes Stück Pappe

Kleben Sie zuerst die Dübel auf eines der 4 x 1,5 Stücke, stecken Sie dann die Federn und die Strohhalme in die Dübel und kleben Sie dann das andere Pappstück auf die andere Seite, um alles an Ort und Stelle zu halten.

Zweitens kleben Sie das 4 x 2 cm große Stück auf die Strohhalme.

Drittens das ganze Stück umdrehen und einen kleinen Dübel auf die Rückseite kleben, nicht in der Mitte, sondern etwas links. (Ich habe vergessen, den kleinen Dübel im ersten Bild hinzuzufügen)

Schneiden Sie zum Schluss ein Loch in das große Stück Pappe in der Größe der Vorderseite des Servomotors und kleben Sie den Motor ein kleiner Dübel, der wiederum die Federn nach unten drückt.

Am Ende habe ich etwa 3 cm vom unteren Teil des 12 cm x 4 cm großen Stücks abgeschnitten und zwei weitere 4 cm x 1,5 cm große Stücke daran geklebt und dann mit einem 5,5 cm x 4 cm großen Stück Pappe bedeckt. Und um den Marker zu halten, machte ich eine kleine Schleife des Gummibandes und klebte es auf ein kleines Stück Pappe, dann klebte ich das auf das 4cm x 2cm Stück, das sich nach unten bewegt, wenn das Servo startet. Diese Ergänzungen verhinderten, dass sich der Marker von einer Seite zur anderen bewegte, wenn die Federn wieder hochkommen.

Schritt 3: Hinzufügen des Servomotors und der Papierrolle zur Basis

Hinzufügen des Servomotors und der Papierrolle zur Basis
Hinzufügen des Servomotors und der Papierrolle zur Basis
Hinzufügen des Servomotors und der Papierrolle zur Basis
Hinzufügen des Servomotors und der Papierrolle zur Basis

Ich fügte zwei weitere Steine zu einer Seite der Basis hinzu, um das Servostück zu stützen, und ich klebte es an Ort und Stelle. Dann fügte ich das Rad am anderen Ende der Basis hinzu.

Schritt 4: Aufbau des Schrittmotorrahmens

Aufbau des Schrittmotorrahmens
Aufbau des Schrittmotorrahmens
Aufbau des Schrittmotorrahmens
Aufbau des Schrittmotorrahmens
Aufbau des Schrittmotorrahmens
Aufbau des Schrittmotorrahmens

Dieser Schritt war eine kleine Herausforderung, da der Motor nicht perfekt zu Lego passte. Ich habe es jedoch geschafft, indem ich die beiden Löcher im Motor verwendet habe, um ihn zu befestigen. Als nächstes klebte ich ein Lego-Rad an die Spitze des Motors und legte es dann direkt neben die Basis auf der Seite, die ich in Schritt 1 offen gelassen hatte.

Schritt 5: Feinschliff

Feinschliff
Feinschliff
Feinschliff
Feinschliff
Feinschliff
Feinschliff
Feinschliff
Feinschliff

Ich fügte zwei Bogenstücke hinzu, um das Rad abzudecken, um das Papier zu fixieren. Und ich fügte zwei kleinere Bogenstücke hinzu, eines zum Halten der Drähte des Schrittmotors und eines zum Halten des Papiers. Zuletzt habe ich das Schrittmotorrad gegen ein etwas größeres ausgetauscht, das das Papier besser bewegt als das alte Rad.

Schritt 6: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik

Schließlich müssen Sie die Motoren mit dem Arduino verbinden und den Code hochladen.

Wir beginnen mit dem Servomotor, verbinden das braune Kabel (das Erdungskabel) mit dem GND-Pin, dann das rote Kabel (das Stromkabel) mit dem 5V-Pin und das orange Kabel (das Signalkabel) mit dem Dig # 5 Stift. Als nächstes verbinden Sie den Schrittmotor 1N1 mit Dig #11, 1N2 mit Dig #10, 1N3 mit Dig #9, 1N4 mit Dig #8, die 5V mit der positiven Seite des Steckbretts und den Massestift mit der negativen Seite des Steckbrett. Und vergessen Sie nicht, das Stromversorgungsmodul an das Steckbrett anzuschließen und sicherzustellen, dass seine positiven und negativen Seiten korrekt mit den entsprechenden Seiten auf dem Steckbrett ausgerichtet sind. Wenn Sie dies vergessen, kehren Sie die Stromversorgung Ihres Projekts um, und das möchten Sie nicht.

Für den Code habe ich vier Methoden geschrieben, eine um einen Punkt zu schreiben, eine um einen Bindestrich zu schreiben und zwei um Platz zwischen jedem Buchstaben und jedem Wort zu lassen. Auf diese Weise kann ich diese Methoden nur dann aufrufen, wenn ich sie brauche, anstatt sie für jeden Buchstaben neu zu schreiben. Dann habe ich eine for-Schleife geschrieben, die jeden Buchstaben des Textes durchläuft und sie schreibe. Darin habe ich eine if-Anweisung für jeden Buchstaben geschrieben, aber Sie können sie in einer switch-Anweisung schreiben, wenn Sie möchten. Natürlich können Sie den Code ergänzen, damit das Programm Zahlen lesen kann. Wenn die gesamte Verkabelung fertig ist, kopieren Sie einfach den Code und fügen Sie ihn in Ihre IDE ein. Vergessen Sie nicht, die Stepper-, Servo- und String-Bibliotheken zu installieren. Danach können Sie loslegen.

Wie es funktioniert

Wenn das Arduino startet, schaut sich das Programm den ersten Buchstaben des Textes an, und je nachdem, welcher es ist, ruft es die Funktionen auf, die es in Morse-Code schreiben. Wenn beispielsweise die Punktfunktion aufgerufen wird, wird der Servomotor auf 160 eingestellt, wodurch der Stift nach unten bewegt wird, und dann auf 90 zurückgesetzt, wodurch die Federn wieder nach oben kommen und den Stift mit ihnen bewegen. Und wenn die Strichfunktion aufgerufen wird, bewegt das Servo den Stift nach unten, dann dreht der Schrittmotor das Rad, das das Papier zieht, wodurch der Stift einen Strich schreibt. Und wenn eine der Leerzeichenfunktionen aufgerufen wird, dreht sich der Schrittmotor, aber mit dem Stift nach oben, so dass er das Papier zieht und einen Abstand zwischen den Buchstaben oder Wörtern schafft. Wenn es fertig ist, geht es zum nächsten Buchstaben und wiederholt den gleichen Vorgang. Ich hoffe du magst es;)

Der Code

#enthalten

#include #include #include const int stepsPerRevolution = 150; // Dies ist die Variable für den Schrittmotor Stringsatz = "*hello"; // Ändern Sie diese Variable, um verschiedene Wörter zu schreiben, aber schreiben Sie nur in Kleinbuchstaben und beginnen Sie Ihr Wort mit "*" Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Dies ist die Methode, die den Roboter dazu bringt, einen Punkt zu schreiben void dot () { Serial.println ("dot start"); myServo.write(160); Verzögerung (1000); myServo.write(90); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); Serial.println ("Punkt fertig"); } // Dies ist die Methode, die den Roboter dazu bringt, einen Bindestrich zu schreiben void dash () { Serial.println ("dash start"); myServo.write(160); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); myServo.write(90); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); Serial.println ("Strich fertig"); } // Dies ist die Methode, die den Roboter dazu bringt, ein Leerzeichen zwischen jedem Buchstaben zu lassen void space () { Serial.println ("space start"); myServo.write(90); Verzögerung (1000); myStepper.step(200); Verzögerung (1000); Serial.println ("Leerzeichen fertig"); } // Dies ist die Methode, die den Roboter veranlasst, einen größeren Abstand zwischen jedem Wort zu lassen void bigSpace() { myServo.write(90); myStepper.step(250); Verzögerung (1000); aufrechtzuerhalten. Void setup () { // Geben Sie Ihren Setup-Code hier ein, um ihn einmal auszuführen: Serial.begin (9600); myStepper.setSpeed(100); myServo.attach(5); int first = Satz.indexOf('*'); // diese for-Schleife durchläuft jeden Buchstaben des Strings und ruft dann die richtigen Methoden auf, um ihn aufzuschreiben für (int i = 0; i <satz.length(); i++) { if (sentence.charAt(first + i) == 'a') {Serial.print(".-"); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'b') {Serial.print ("-…"); Bindestrich(); Punkt(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'c') { Serial.print ("-.-. "); Bindestrich(); Punkt(); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'd') {Serial.print ("-.. "); Bindestrich(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'e') {Serial.print (."); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'f') { Serial.print (..-. "); Punkt(); Punkt(); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'g') {Serial.print ("--."); Bindestrich(); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'h') {Serial.print ("…."); Punkt(); Punkt(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'i') {Serial.print (.. "); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'j') {Serial.print (".---"); Punkt(); Bindestrich(); Bindestrich(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'k') {Serial.print ("-.-"); Bindestrich(); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'l') {Serial.print (".-.. "); Punkt(); Bindestrich(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'm') {Serial.print ("--"); Bindestrich(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'n') {Serial.print ("-."); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'o') {Serial.print ("---"); Bindestrich(); Bindestrich(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'p') {Serial.print (".--. "); Punkt(); Bindestrich(); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'q') {Serial.print ("--.-"); Bindestrich(); Bindestrich(); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'r') {Serial.print (".-. "); Punkt(); Bindestrich(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 's') {Serial.print ("…"); Punkt(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 't') {Serial.print ("-"); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt(first + i) == 'u') {Serial.print("..-"); Punkt(); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'v') {Serial.print ("…-"); Punkt(); Punkt(); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'w') {Serial.print(".--"); Punkt(); Bindestrich(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'x') {Serial.print ("-..-"); Bindestrich(); Punkt(); Punkt(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == 'y') {Serial.print ("-.--"); Bindestrich(); Punkt(); Bindestrich(); Bindestrich(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt(first + i) == 'z') {Serial.print("--.."); Bindestrich(); Bindestrich(); Punkt(); Punkt(); Platz(); aufrechtzuerhalten. Sonst if (sentence.charAt (first + i) == '') {Serial.print ("/"); bigSpace(); } } } void loop() {//Schreibe hier nichts }

Schritt 7: Fehlerbehebung

Das Rad bewegt sich nicht

Die Reibung zwischen Rad und Papier könnte zu groß sein. Versuchen Sie, das Rad etwas anzuheben oder zu ändern.

Das Rad zieht das Papier, dreht sich dann aber weiter, ohne das Papier zu ziehen

Stellen Sie sicher, dass Sie das Rad in der Mitte des Schrittmotors geklebt haben

Die Punkte und Striche sind verbunden

Überprüfen Sie, ob die Punkt-, Bindestrich- und Leerzeichenfunktionen richtig geschrieben sind, sie sollten so aussehen:

// Dies ist die Methode, die den Roboter dazu bringt, einen Punkt zu schreiben () { Serial.println ("dot start"); myServo.write(160); Verzögerung (1000); myServo.write(90); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); Serial.println ("Punkt fertig"); }

// Dies ist die Methode, die den Roboter dazu bringt, einen Bindestrich zu schreiben

Void Strich () {Serial.println ("Strichstart"); myServo.write(160); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); myServo.write(90); Verzögerung (1000); myStepper.step(stepsPerRevolution); Verzögerung (1000); Serial.println ("Strich fertig"); }

// Dies ist die Methode, die den Roboter dazu bringt, zwischen jedem Buchstaben ein Leerzeichen zu lassen

Void space () {Serial.println ("space start"); myServo.write(90); Verzögerung (1000); myStepper.step(200); Verzögerung (1000); Serial.println ("Leerzeichen fertig"); }

Empfohlen: