Otočné zrkadielko

From Digitálne technológie výroby
Revision as of 13:07, 9 June 2020 by Dermiskova (talk | contribs)
Jump to: navigation, search



Čo budem potrebovať?

Zrkadlo
  • Budem potrebovať nejaké otočné zrkadielko, ktoré si poupravíme z jedného boku
  • Servo SG90
  • Servo FS90R
  • Arduino nano strong
  • Napájanie, baterky
  • 4 -krát tlačidlá Touch
  • prepájacie káble typu M-F
  • skrutky (šróby) na upevnenie držiaka na servo v základni - 2kusy


Prečo?
Vyskúšať vytvoriť si niečo vlastné a oboznámiť sa s Arduinom. Navyše to bude unikát, ktorý v obchode len tak nenájdete. A napríklad pri šminkovaní si zrkadielko nezašpiníte len kvôli natočeniu, len ľahko pomocou tlačidla si ho natočíte ako budete potrebovať.


Ako na to?
Všetky súbory nájdete tu:
https://drive.google.com/drive/u/0/folders/1XdoHModR5uVDD5H3o1uEbmd_AcxNtlTm

Najprv si komponenty pripojíme k Arduinu.
Ja som začala Touch talčidlami
1/0 pripojíme porty 2,4,6,8 ( žltá farba v Arduine nano strong),
GND pripojíme na GND(čo sú čierne porty v Arduine nano strong)
VCC pripojíme na 5V (červené porty v Arduine nano strong)

Servo SG90 som dala na port 10
Servo FS90R som dala na port 12

3D talčený model som si stiahla zo stránky : https://www.thingiverse.com/thing:3958326
A podľa svojho projektu som po upravila niektoré komponenty (Front cover V1, small gear V1), a držiak z názvom (servo_mount_for_remote_V1) nebudem potrebovať, vymodelujeme si vlastné.

  • Komponenty pre 3D tlač

    potom čo si všetko zložíme a po upevňujeme, to bude vyzerať takto:

  • Zapojenie

s držiakom na horné servo som improvizovala a zostrojila som ho z konštrukcie fixy, čo som prilepila o platňu taviacou pištoľou a na to som pripevnila servo drátikom.
Všetko v základni som musela dobre prichytiť aby mi to nebránilo-spomaľovalo v otáčaní vpravo-vľavo.
Do platne ktorá sa bude otáčať som musela spraviť v prostriedku otvor na káble k servu, ktoré otáča zrkadlom hore-dole. Video na pozretie neúplného celku: https://drive.google.com/drive/u/0/folders/1xAaZdGraONxEiZWmZgJmQa61WUsUDXxj

K finálnemu výsledku pripevníme ešte riadiaci panel a ja som ešte prefarbila na zlato otočnú platňu aj s vyrobeným držiakom z fixy-pera na servo.: https://drive.google.com/drive/folders/1qKMEAsro9kWZGQv2GVC-QDTm8hpamKql

Otočné zrkadielko som nastavila v otáčaní vpravo-vľavo na 8-em otočení, z dôvodu toho aby sa mi veľmi nezamotali káble okolo zrkadielka, ktoré idú k vrchnému servo, ktoré otáča zrkadlo hore-dole.

  • Zrkadlo

Kód pre otáčanie zrkadielka:

    .#include <Servo.h> //bez bodky na začiatku, len hashtag
    const int touchPravy = 2;
    const int touchLavy = 4;
    const int touchHore = 6;
    const int touchDole = 8;

    int val1 = 0;
    int val2 = 0;
    int val3 = 0;
    int val4 = 0;
    int poziciaOtoc = 0;
    int sklopNaklonPozicia = 90;
    int krpos = 1000;
    Servo s2;
    Servo s;
    void setup() {

     s.attach(10);
     s2.attach(12);
     pinMode(touchPravy, INPUT);
     pinMode(touchLavy, INPUT);
     pinMode(touchHore, INPUT);
     pinMode(touchDole, INPUT);
     s2.write(sklopNaklonPozicia);
     Serial.begin(9600);
     Serial.println("start....");
     delay(1000);
    

    } int otocTo(Servo motorcek, int sklopNaklonPozicia, int koniec) {

     int naopak = 1;
     if (sklopNaklonPozicia > koniec){
       naopak = -1;
       }
     for (int i = sklopNaklonPozicia; i != koniec; i += naopak ) {
       motorcek.write(i);
       Serial.println(i);
       delay(krpos/5);
     }
     return koniec;
    

    }

    void loop() {

     val1 = digitalRead(touchPravy);
     val2 = digitalRead(touchLavy);
     val3 = digitalRead(touchHore);
     val4 = digitalRead(touchDole);
     if (val1 == 1) {
       delay(500);
       if (poziciaOtoc != 8) {
         s.write(84);
         Serial.println(poziciaOtoc);
         delay(krpos);
         s.write(90);
         poziciaOtoc += 1;
       }
       else {
         Serial.println("prvy else..blok..");
         s.write(90);
       }
     }
     if (val2 == 1) {
       delay(500);
       if (poziciaOtoc != -8) {
         s.write(95);
         Serial.println(poziciaOtoc);
         delay(krpos);
         s.write(90);
         poziciaOtoc -= 1;
       } else {
         Serial.println(poziciaOtoc);
         Serial.println("zle -10");
       }
     }
     if (val3 == 1) {
       delay(500);
       if (sklopNaklonPozicia != 120) {
         sklopNaklonPozicia = otocTo(s2, sklopNaklonPozicia, sklopNaklonPozicia + 10);
         Serial.println(sklopNaklonPozicia);
         delay(krpos / 2);
       } else {
         Serial.println(sklopNaklonPozicia);
         Serial.println("zle 3tlacidlo");
       }
     }
     if (val4 == 1) {
       delay(500);
       if (sklopNaklonPozicia != 40) {
         sklopNaklonPozicia = otocTo(s2, sklopNaklonPozicia, sklopNaklonPozicia - 10) ;
         Serial.println(sklopNaklonPozicia);
         delay(krpos / 2);
       } else {
         Serial.println(sklopNaklonPozicia);
         Serial.println("zle 4tlacidlo");
       }
     }
    

    }