Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Batteriebetriebene TV-Fernbedienung mit 3D-bedrucktem Gehäuse

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
9-V-Batterie (generisch)
× 1
9V zu Barrel Jack Connector
× 1
IR-Sender (generisch)
× 1
Maschinenschraube, M3
× 4
Maschinenschraube, M2,5
× 3
M3-Mutter
× 4
M2,5-Mutter
× 3
Durchgangslochwiderstand, 47 Ohm
× 2
Prototyping-Platine, 2,54 mm
× 1
PCB-Druckknopf
× 6
Male-Header 36 Position 1 Row- Long (0,1")
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Lötkolben (generisch)
Lötdraht, bleifrei
PLA-Filament, Durchmesser 1,75 mm

Über dieses Projekt

Einführung

Die Fernbedienung des Fernsehers meiner Freundin funktioniert nicht mehr. Sie hätte in einem Laden in der Nähe billigen Ersatz kaufen können, aber dann dachte sie:Wir sind beide Ingenieure, lass uns zusammen unseren eigenen bauen!

Da wir uns in unseren Fähigkeiten ziemlich ergänzen, war dies eine andere, aber unterhaltsame Art, einige Zeit während des Lockdowns zu verbringen, und es gab uns die Möglichkeit, ein wenig darüber zu lernen, wie diese alltägliche Technologie funktioniert.

Ach ja, und ein kleiner 3D-Drucker zu Hause spielte auch eine Rolle.

So funktioniert's

Da wir zunächst ein einfaches Design basierend auf dem Arduino UNO erstellen wollten, haben wir die minimale Anzahl von Befehlen evaluiert, die wir für die Bedienung unseres Fernsehers benötigen. Wir hielten 6 Befehle für ausreichend:ON/OFF Toggle, Source selection, Ch+, Ch-, Vol+, Vol-.

Schaltfläche lesen

Um den Einsatz zusätzlicher Widerstände zu vermeiden, setzt das Design auf die internen Pull-Up-Widerstände des Arduino. Befindet sich die Fernbedienung nicht im Schlafmodus (siehe unten), wird jeder Tastenzustand in jedem Schleifenzyklus abgefragt. Um zu vermeiden, dass mehrere Treffer gezählt werden, wird eine einfache Entprellungsroutine implementiert, die das millis() . nutzt Funktion.

Infrarotsignale senden

Die Infrarotkommunikation wird von der IRremote.h verarbeitet Bibliothek (ein Lob an die Programmierer!). Alles, was wir tun mussten, war, das Protokoll für unseren Fernseher einzurichten (verschiedene Hersteller haben ihre eigenen Protokolle entwickelt) und bei Google nach den Codes in HEX der verschiedenen Befehle zu suchen, die wir verwenden wollten, und sie den Tasten zuzuordnen. Was das Schaltungsdesign betrifft, muss diese an Pin3 des Arduino UNO angeschlossen werden, damit die Befehle aus der Bibliothek die IR-LED effektiv steuern.

Derzeit ist der Code für drei verschiedene Arten von Fernsehern geschrieben, die durch Kommentieren/Entkommentieren eines #define ausgewählt werden können Direktive im ersten Teil des Codes.

Batterie Speichern

Um den Stromverbrauch zu reduzieren, werden einige Strategien implementiert, die die Befehle aus der avr/sleep.h . nutzen und avr/power.h Bibliotheken.

Alle nicht verwendeten Peripheriegeräte und Schnittstellen (ADC, SPI, TWI, Timer1, usart) werden in der Setup-Routine abgeschaltet. Die eingebaute LED am PWM-Pin13 ist ebenfalls ausgeschaltet. Wir haben uns auch entschieden, die Power-LED des Arduino UNO zu entlöten, die sonst immer leuchtet, obwohl dies nicht empfohlen wird.

Auch das Ausnutzen von millis() , wenn 5 Sekunden lang keine Taste gedrückt wird, geht die Fernbedienung in einen Schlafmodus, aus dem durch erneutes Drücken der Ein/Aus-Taste geweckt wird.

So ist es aufgebaut

Elektronik Montage

Die gesamte Schaltung ist auf einem Prototyping-Board eingebettet, das auf die Arduino UNO-Stiftleisten passt. Mit einem Lötkolben wurden die Tasten unter Berücksichtigung der endgültigen Position auf der Fernbedienung verlötet. Am unteren Teil wurden die beiden 47 Ohm Widerstände parallel gelötet, um den gewünschten Strom durch die IR-LED zu erreichen.

Mit dem Lötdraht wurden Spuren auf der Prototyping-Platine hergestellt, um die Tastenstifte und die IR-LED mit den Stiftleisten zu verbinden.

Auf diese Weise ähnelt die Platine einem Shield, das mit den Stiftleisten auf dem Arduino UNO angebracht wird und alle korrekten Verbindungen gewährleistet.

Anlage CAD und CAM

Das Gehäuse wurde entwickelt, um die Batterie, die Arduino UNO + Prototyping-Board-Baugruppe aufzunehmen, wobei nur die Tasten oben und die IR-LED an der Vorderseite freigelegt werden.

Das Gehäuse besteht aus zwei Teilen, die mit SolidWorks CAD-Software entworfen, mit der Ultimaker Cura-Slicing-Software vorbearbeitet und schließlich mit einem Anycubic Mega Zero 3D-Drucker in PLA 3D gedruckt wurden.

Der Arduino UNO wird mit 3 M2,5-Schrauben an der Basis befestigt, die in die aus der Innenseite der Basis extrudierten Ausrichtungslöcher passen. Sobald das Arduino gesichert ist, ragt die IR-LED aus der Prototyping-Platine heraus, um sie mit dem dafür vorgesehenen Loch auszurichten und sie beim Zusammenbau der beiden Gehäuseteile in Position zu halten, werden drei Mini-Pfosten hinzugefügt, um dies zu vermeiden seitliche Bewegungen der LED-Leitungen. Die Batterie wird in einen dafür vorgesehenen Raum eingepresst.

Die Abdeckung ist so konzipiert, dass nur die Tasten sichtbar sind, und neben jedem von ihnen ist ein Symbol in die Abdeckung eingraviert, um die Funktion jeder Taste anzuzeigen.

Boden und Deckel des Gehäuses werden mit 4 M3-Schrauben montiert.

Code

  • TV_remote.ino
TV_remote.inoArduino
#include #include #include // Pindefinition// An Arduino PWM Pin 3 muss eine IR-LED angeschlossen werden#define OnOff 1# define Source 0#define CH_plus 4#define CH_minus 5#define Vol_plus 6#define Vol_minus 7#define Interrupt_Pin 2 //Nur Pin 2 oder 3 auf Arduino Uno // TV-Modelldefinition //#define LG_TV//#define SAMSUNG_TV#define SONY_TV// Codes definition#ifdef LG_TV unsigned long on_off_code =551489775; // HEX 20DF10EF unsigned long vol_plus_code =551502015; //HEX 20DF40BF unsigned long vol_minus_code =551534655; //HEX 20DFC03F unsigned long ch_plus_code =551485695; //HEX 20DF00FF unsigned long ch_minus_code =551518335; //HEX 20DF807F unsigned long source_code =551538735; //HEX 20DFD02F#endif#ifdef SAMSUNG_TV unsigned long on_off_code =3772793023; // HEX E0E040BF unsigned long vol_plus_code =3772833823; //HEX E0E0E01F unsigned long vol_minus_code =3772829743; //HEX E0E0D02F unsigned long ch_plus_code =3772795063; //HEX E0E048B7 unsigned long ch_minus_code =3772778743; //HEX E0E008F7 unsigned long source_code =3772809343; //HEX E0E0807F#endif#ifdef SONY_TV unsigned long on_off_code =2704; //HEX A90 unsigned long vol_plus_code =1168; //HEX 490 unsigned long vol_minus_code =3216; //HEX C90 unsigned long ch_plus_code =144; //HEX 090 unsigned long ch_minus_code =2192; //HEX 890 unsigned long source_code =2640; //HEX A50#endif//Debug aktivieren//#define DEBUG//IRsend irsend; // IR-Objekt erstellenunsigned long debounce_time;unsigned long last_time;void setup () { analogWrite (13,0); // Turn der eingebauten LED // noInterrupts (); // Interrupts deaktivieren //CLKPR =_BV (CLKPCE); // Clock-Prescaler-Einstellungen aktivieren //CLKPR =_BV (CLKPS0); // Taktvorteiler setzen =2 --> 8 MHz // Interrupts (); pinMode(OnOff,INPUT_PULLUP); pinMode (Quelle, INPUT_PULLUP); pinMode(CH_plus,INPUT_PULLUP); pinMode(CH_minus,INPUT_PULLUP); pinMode(Vol_plus,INPUT_PULLUP); pinMode(Vol_minus,INPUT_PULLUP); pinMode(Interrupt_Pin,INPUT_PULLUP); // Strom sparen power_adc_disable (); // alle ADCs deaktivieren power_spi_disable (); // SPI deaktivieren power_timer1_disable (); // Timer deaktivieren 1 (0 ist für millis(), 2 ist für irremote.h) power_usart0_disable(); // serielle power_twi_disable () deaktivieren; // TWI deaktivieren #ifdef DEBUG Serial.begin (9600); #endif}void loop () {//Check OnOff if (! digitalRead (OnOff)) { debounce_time =millis (); while (millis() - debounce_time <40 ) {; } if (!digitalRead(OnOff)) { #ifdef LG_TV irsend.sendNEC(on_off_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(on_off_code, 32); #endif #ifdef SONY_TV irsend.sendSony(on_off_code, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println ("OnOff"); #endif}} // Quelle prüfen if (!digitalRead(Source)) {debounce_time =millis(); while (millis() - debounce_time <40 ) {; } if (!digitalRead(Source)) { #ifdef LG_TV irsend.sendNEC(source_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(Quellcode, 32); #endif #ifdef SONY_TV irsend.sendSony(Quellcode, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println ( "Source"); #endif}} // CH_plus überprüfen if (!digitalRead(CH_plus)) {debounce_time =millis(); while (millis() - debounce_time <40 ) {; } if (!digitalRead(CH_plus)) { #ifdef LG_TV irsend.sendNEC(ch_plus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(ch_plus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(ch_plus_code, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println("CH+"); #endif}} // CH_minus überprüfen if (!digitalRead(CH_minus)) {debounce_time =millis(); while (millis() - debounce_time <40 ) {; } if (!digitalRead(CH_minus)) { #ifdef LG_TV irsend.sendNEC(ch_minus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(ch_minus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(ch_minus_code, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println ("CH-"); #endif}} //Überprüfe Vol_plus if (!digitalRead(Vol_plus)) {debounce_time =millis(); while (millis() - debounce_time <40 ) {; } if (!digitalRead(Vol_plus)) { #ifdef LG_TV irsend.sendNEC(vol_plus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(vol_plus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(vol_plus_code, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println ("Vol +"); #endif}} //Überprüfe Vol_minus if (!digitalRead(Vol_minus)) {debounce_time =millis(); while (millis() - debounce_time <40 ) {; } if (!digitalRead(Vol_minus)) { #ifdef LG_TV irsend.sendNEC(vol_minus_code, 32); #endif #ifdef SAMSUNG_TV irsend.sendSAMSUNG(vol_minus_code, 32); #endif #ifdef SONY_TV irsend.sendSony(vol_minus_code, 12); #endif last_time =millis(); // das letzte Mal wurde eine Taste gedrückt #ifdef DEBUG Serial.println ( "Vol-"); #endif}} if (millis()-last_time> 5000) {//eine Taste wurde 10 s lang nicht gedrückt #ifdef DEBUG Serial.println ("going to sleep..."); #endif going_to_sleep(); // in den Schlafmodus wechseln #ifdef DEBUG Serial.println ( "Aufwachen ..."); #endif }} // Schlafmodus-Funktionvoid going_to_sleep() { sleep_enable(); // Schlafmodus aktivieren AttachInterrupt (digitalPinToInterrupt (Interrupt_Pin), Wake_up, LOW); // Interrupt zum Aufwachen --> Interrupt Pin als WIRED NOR konfigurieren!!! set_sleep_mode (SLEEP_MODE_PWR_DOWN); // voller Schlafmodus sleep_cpu (); // Schlafmodus aktivieren} // Wake-Up-Funktionvoid Wake_up () { sleep_disable (); // Ruhemodus deaktivieren detachInterrupt (digitalPinToInterrupt (Interrupt_Pin)); //Entferne den Interrupt}

Kundenspezifische Teile und Gehäuse

Schaltpläne

remote_sketch_r4f8a47oWX.fz

Herstellungsprozess

  1. Zutrittskontrolle mit QR, RFID und Temperaturüberprüfung
  2. Verwenden der IR-Fernbedienung mit Raspberry Pi ohne LIRC
  3. PiCy – Der kleine Roboter mit Raspberry Pi-Antrieb!
  4. Arduino-Gyroskop-Spiel mit MPU-6050
  5. Discord-Überwachungskamera mit ESP32
  6. Münzprüfer mit Arduino steuern
  7. Unopad - Arduino MIDI-Controller mit Ableton
  8. Arduino mit Bluetooth zur Steuerung einer LED!
  9. Drehmaschine mit CNC
  10. 5 Vorteile der Fernsteuerung der Produktion