Musol

Descripció: Construïm un mussol que cerca preses i es para quan detecta moviment a prop
Temps estimat: 120'
Dificultat: fàcil
Edat recomanada: Totes les edats (els més petits necessitaran ajuda amb l'estructura de paper)
Material:
Plantilla impresa, tisores, cinta adhesiva, pega, placa Arduino Uno + shield, miniservo i ultrasons.
Objectius: Iniciació a la robòtica amb un material modelable i personalitzable.

 
 

Desenvolupament

1. Retalla la plantilla o dissenya el teu propi mussol. Doblega el paper per totes les línies que trobis.


https://stokado.communia.org/core/preview?fileId=947043&x=1920&y=1080&a=truehttps://stokado.communia.org/core/preview?fileId=947063&x=1920&y=1080&a=truehttps://stokado.communia.org/core/preview?fileId=947101&x=1920&y=1080&a=truehttps://stokado.communia.org/core/preview?fileId=947072&x=1920&y=1080&a=truehttps://stokado.communia.org/core/preview?fileId=947112&x=1920&y=1080&a=truehttps://stokado.communia.org/core/preview?fileId=947123&x=1920&y=1080&a=true


Connexions:

  1. Miniservo al pin 6
  2. ECHO al pin 2
  3. TRIG al pin 3


    Programació

    Ens dirigim a la ide de mblock https://ide.mblock.cc

    • Cal afegir una extensió compatible "HC-SR04 Ultrasonic Sensor PCM"

    • Escollim la targeta Arduino Uno
    • Fem els meus blocs "configuració inicial", "defineix distància" i "mou motor"


      • Fem la lògica:


        El codi en ArdunioC


        // generated by mBlock5 for <your product>
        // codes make you happy

        #include <Arduino.h>
        #include <Wire.h>
        #include <SoftwareSerial.h>
        #include <Servo.h>

        float angle_motor = 0;
        float sentit = 0;

        void configuracio_inicial(){
        angle_motor = 90;
        sentit = 1;
        _delay(1);

        }
        #define echoPin 2
        #define trigPin 3

        long duration;
        long distance;

        void defineix_distancia(){
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = duration/58.2;
        delay(50);
        Serial.println(String("distancia: ") + String(distance));

        }
        Servo servo_6;
        void mou_motor(){
        if(sentit == 1.000000){
        if(angle_motor > 160){
        sentit = 0;

        }
        angle_motor = (angle_motor + 3);
        servo_6.write(angle_motor);

        }
        if(sentit == 0.000000){
        if(angle_motor < 20){
        sentit = 1;

        }
        angle_motor = ((angle_motor - 3));
        servo_6.write(angle_motor);

        }
        Serial.println(String("angle motor: ") + String(angle_motor));
        Serial.println(String("sentit: ") + String(sentit));

        }

        void _delay(float seconds) {
        long endTime = millis() + seconds * 1000;
        while(millis() < endTime) _loop();
        }

        void setup() {
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
        Serial.begin(115200);
        servo_6.attach(6);
        configuracio_inicial();
        while(1) {
        defineix_distancia();
        if(distance > 30){
        mou_motor();

        }
        _delay(0.05);

        _loop();
        }

        }

        void _loop() {
        }

        void loop() {
        _loop();
        }

        Carreguem el programa a la placa

        1. Copiem el codi de "vista prèvia: Arduinoc".
        2. Obrim la IDE d'Arduino.
        3. Esborrem el que hi hagi i enganxem el nostre codi
        4. Connectem la placa per USB (parem l'alimentació de la pila)
        5. Assegurem que estigui escolli el port i la placa al menú d'Eines
        6. Verifiquem el codi
        7. Pugem el codi

        Enllaços d'interès

        Compliquem el projecte?

        1. Fem que el mussol giri segons la lectura d'un potenciòmetre?
        2. Fem que un brunzidor faci soroll quan la distància sigui menor a 30 cm?
        Darrera modificació: dimarts, 4 d’octubre 2022, 18:10