Platzi
Platzi

¡Invierte en ti y celebremos! Adquiere un plan Expert o Expert+ a precio especial.

Antes: $349
$259
Currency
Antes: $349
Ahorras: $90
COMIENZA AHORA
Termina en: 16D : 7H : 37M : 37S

Debes tener cuenta en Platzi

Para ver esta clase abierta debes iniciar sesión

Robot para riego de plantas en Arduino, Javascript y Node32/36

LOS FELICITO A TODO EL EQUIPO PLATZI Y AL PROFESOR FREDDY DE VERDAD QUE ANTES HACIA LAS COSAS POR COPIAR Y AHORA LOGRE ENTENDER ESTOY FULLLL EMOCIONADO Y ESO QUE AUN NO TENGO UN ARDUINO POR QUE AQUÍ EN VENEZUELA CUESTA LO QUE ME GANO EN UN MES Y UN KIT COMPLETO DE ARDUINO CUESTA LO QUE ME GANO EN 6 MESES PERO DEJANDO A UN LADO LO MALO DE VERDAD QUE LOS FELICITO POR SU INICIATIVA DE ESTE CURSO BÁSICO DE PROGRAMACIÓN Y LOGRAR QUE LAS GENTE TECNOLOGA COMO YO NOS EMOCIONE MAS Y CADA VEZ MAS TODA LA RAMA Y EN ESPECIAL LA PROGRAMACIÓN… SALUDOS… ESPERO ALGÚN DÍA CONOCERLOS Y NO SE ALGÚN MOMENTO TENER EL NIVEL PARA TRABAJAR CON USTEDES DESDE VENEZUELA SALUDOS FELIZ AÑO NUEVO Y LES DESEO LO MEJOR PARA EL PRÓXIMO AÑO 2017 SALUDOS A TODA LA COMUNIDAD PLATZI…

Captura.JPG

Muy buen curso!

Por acá les dejo un ejemplo del ejercicio con el simulador, pero en Sketch, no en Javascript. La fotocelda y el servo en movimiento.

https://i.snag.gy/Xqgdwc.jpg

https://circuits.io/circuits/3881619-4-mover-un-servo-segun-una-fotocelda/

#include <Servo.h> 

Servo my_servo;
int led = 13;
int pin_FotoCelda = 0; // Almacena el pin analógico del LDR (Fotocelda).
int valor_FotoCelda = 0; // Almacenar el valor del sensor de la Fotocelda.

void setup() {
  pinMode(led, OUTPUT); // pinMode(puerto, envía energía).
  my_servo.attach(9); // Puerto.
  my_servo.write(90);  // Posición inicial del servo en grados.
}

void loop() {
  valor_FotoCelda = analogRead(pin_FotoCelda); // Lee el valor del potenciómetro (valor siempre este 0 y 1024).
  
  // Como el valor del sensor varía entre 0 y 1000 (aproximadamente) vamos a hacer lo siguiente:
  // Si el valor del sensor es menor que 400 (muy poca luz) el led se enciende y se mueve el servo a 70 grados.
  if(valor_FotoCelda < 400) {
    digitalWrite(led, HIGH);
    my_servo.write(70);
  // Si el valor del sensor es mayor que 400 (mucha luz) el led se apaga y se mueve el servo a 110 grados.
  } else {
   	digitalWrite(led, LOW);
    my_servo.write(110);
  }
}

¡No puedo creer que todo este curso haya sido gratis! Al empezar el curso pense que iba ser sencillo, nada complejo. Yo estuve en un un clase de programación en Ing. en Computación solo por un semestre (4 meses, realmente) y lo maximo que recuerdo que hicimos fue un programa que tu le ingresabas un año y te decia si era bisiesto o no. Pense que el ATM y el pollo que se movia en la granja iba a ser lo mas complejo que programariamos aquí y, por eso, me sorprendi muchisimo cuando emepezamos con Arduino.

Como les comente estuve en la carrera de Computación, pero solo estuve un semestre. Me salí porque no senti que era la mio en ese momento. Yo queria una carrera que me permitiera crear robots o maquinas, que me permitiera cambiar el mundo y sentia que lo que hacia en Computación no tenia un impacto tangible. Es por eso, que este curso desperto ese interes que tenia y habia olvidado. Ya he comprado mi Arduino Uno y estoy apunto de subscribirme a Platzi para continuar con el curso de Arduino y concluir la carrera de Programación.

Sinceramente, gracias.

Así termina el circuito en la clase. Si no tienen un Arduino pueden hacerlo en Tinkercad, pero tendrían que escribir el código en Sketch.

fotocelda y servo.PNG

El código quedaría así:

#include <Servo.h>

Servo servo;
int led = 13;
int pinLDR = 0;
int valorLDR = 0;

bool servoAbajo = true;

void setup()
{
  Serial.begin(9600);
  
  pinMode(13, OUTPUT); 
  
  servo.attach(9);
  servo.write(0);
}

void loop()
{
  valorLDR = analogRead(pinLDR);
  digitalWrite(led, HIGH);
  
  Serial.println(valorLDR);
  
  if (valorLDR > 500) {
    if (servoAbajo) {
      servo.write(110);
      servoAbajo = false;
    } else {
      servo.write(70);
      servoAbajo = true;
    }
  	
  } else {
  	servo.write(0);
  }
  
  delay(1000);
}

Si te sirvió el comentario, dale like, así me ayudas y motivas a seguir colaborando. ¡Feliz aprendizaje!

Atentamente: Rapimi95. 😄

Sacarán un curso de robótica ?

Me costaba muchísimo en la universidad entender la programación, no se como pero logré terminar las materias y ahora estoy haciendo mi proyecto de titulación. Y por la desesperación pensé muchas veces en dedicarme a otra cosa, gracias a este curso mi cariño a mi carrera se reactivo y he logrado entender cosas que nunca entendì. No me voy a rendir tan pronto, gracias profe Freddy y gracias Platzi 😃 …

Hice este ejercicio en el simulador, dejo el enlace:

https://www.tinkercad.com/things/ho2Iwsv9AgH-servo

robot.png

Desde Venezuela les hago llegar un saludo impregnado en admiración y respeto al equipo de Platzi, me encantó el curso espero poder continuar formándome en su plataforma; no dejen de mejorar nunca porque si su objetivo es enseñar con gran calidad a la mayor cantidad de personas, lo lograran. Son grandes.

Hola a [email protected] Comparto el código del último desafío del curso, el robot de riego. En mi caso (ya que soy muuuuy creativo) lo he llamado IrrigationBot.
El código está bastante comentado, y es similar al utilizado para el ejmplo con el fotorresistor, sin embargo les recomiendo presten especial atención a las referencias sobre el higrómetro, creo les ahorrará algún dolor de cabeza.
El prototipo lo pueden ver en funcionamiento Aquí

irrigationBot.js

// JavaScript Document

var jf = require('johnny-five');

var circuit = new jf.Board();

var led, motor, higro, alarm; //declaración de los componentes del hardware

var turn = 0; //variable que controla la posición de la bandera.

circuit.on("ready", activate); // cuando el circuito esté listo disparamos la función activate();

function activate() {
	//En el caso de los sensores debemos configurarlos. Lo hacemos creando un objeto JSON donde especificamos el puerto    // y la frecuencia.
	var config = {pin: "A0", freq:50};
	
	higro = new jf.Sensor(config); // inicializamos nuestro higrómetro y le pasamos com parámetro a config.
	
	
	motor = new jf.Servo(9); //inicializamos nuestro servo y le pasamos el puerto donde recibirálos datos
	motor.to(90); //la bandera quedará recta al iniciar por primera vez
	
	measure(); // invocación de la función que controlará las mediciones y las acciones a ejecutr
	
}

//Creamos una función recursiva que nos permite monitorar cada segundo las variaciones de luz.

function measure(){
	//Mostramos por consola los datos enviados por celda.
	console.log("Humedad del suelo: " + higro.value);
	
	humidity = higro.value; // capturamos la cantidad de humedad en una variable.
	led = new jf.Led(13); //inicilizamos nuestra led y le asignamos el puerto 13
	alarm = new jf.Led(4); //inicilizamos nuestro buzzer y le asignamos el puerto 4
	
	if(humidity > 800){ // recordar que valor más alto es inversamente proporcional a cantidad de humedad
		led.on(); // escasa humedad encendemos la led.		
		alarm.on(); // suena la alarma porque se ha encendido el sistema de riego.
		if(turn){
			turn = 0;
			motor.to(110);
		}
		else{
			turn = 1;
			motor.to(60);
		}
	}
	else{
		motor.to(20);
		led.off(); // si tenemos suficiente humedad la led se apaga.
		alarm.off(); // la alarma está apagada si no es necesario regar.		
	}
	
	setTimeout(measure, 1000);//llamada recursiva a la función measure();
}

Hice una pequeña modificación al código conservando el mismo concepto que el original. Está hecho con Sketch (Lenguaje de arduino) para que lo prueben en Tinkercad si no tienen los elementos físicos

Arduinode en Sketch con Tinkercad
#include <Servo.h>

Servo servo;
int led = 13;
int luz = 0;

void setup()
{
  pinMode(led, OUTPUT); // Define el pin 13 como salida
  pinMode(A0, INPUT); // Defino la entrada análoga
  Serial.begin(9600); // Abro el puerto serial en 9600 bps:
  servo.attach(9); // Le indico el pin 9 donde está conectado
  servo.write(0); // Inicio el servomotor en 90°
}

void loop()
{
  digitalWrite(led, HIGH);
  luz = analogRead(A0); // Leo el valor de la foto resistencia
  Serial.println(luz); // Imprimo el valor de   digitalWrite(led, HIGH);
  
  delay(500); // Espero 500ms
  
  if (luz > 300){ // Hay luz
    servo.write(70);
  } else {
    servo.write(0);
  }
  
  digitalWrite(led, LOW);
  delay(500); // Espero 500ms
  
  if (luz > 300){ // Hay luz
    servo.write(110);
  } else {
    servo.write(0);
  }
  
}

Bueno, esto se acabó:
![](Captura de pantalla 2020-02-06 a las 21.43.17.png

var cinco = require("johnny-five");// classe con la biblioteca J-five
var circuito = new cinco.Board();//instancia con modulos para la placa
var bombilla;
var servo;
var celda;
var turno = 0;

circuito.on("ready", encender);

function encender()
{
  var configuracion = {pin: "A0", freq: 50}//configuracion del sensor objeto jeson
  celda = new cinco.Sensor(configuracion);//instancia con modulos para el sensor

  bombilla = new cinco.Led(13);//instancia con modulos para el led
  bombilla.on();

  servo = new cino.Servo(9);//instancia con modulos para el servo
  servo.to(90);
  ondear();
}

ondear()
{
  console.log("Luz = " + celda.value);
  var luz = celda.value;
  if(luz > 800)
  {
    if(turno){
      turno = 0;
      servo.to(70);
    }
    else{
      turno = 1;
      servo.to(110);
    }
    servo.to(90);
  }
  else
  {
    servo.to(180);
  }
  setTimeout(ondear, 1000);//setTimeout invoca a una funcion de forma recursiva
}```

A quienes esten usando el simulador tinkercad.com con este código en C mueven el servo

#include <Servo.h>

int led_puerto = 13;
int servo_puerto = 9;
Servo servo;

void setup()
{
  pinMode(led_puerto, OUTPUT);
  servo.attach(servo_puerto);
  servo.write(0);
}

void loop()
{
  servo.write(180);
}

Y el circuito configurado como dijo freddy
circuito

Ha sido un excelente curso es mas, diria el mejor de todos para alguien que no sabe nada de programacion. Quiero dar gracias por todo el conocimiento que me otorgó Freddy en este curso lastima se tuviera que acabar.

<strong>Thanks Freddy</strong>

WOW, Excelente curso. Aquí les dejo mis apuntes de todo el curso 😄. A por la carrera de IoT ahora 😂

Espero tener pronto mi kit de Arduino para aplicar todo lo aprendido! 😃
Estas clases han sido lo máximo y me motivan a seguir aprendiendo más.

Adjunto mi código y simulación del ejercicio, aún me falta llevarlo a la práctica…
banderita.JPG

bueno fue genial el curso es muy completo ahora solo debo esperar a que termine la cuarentena y comprar el arduino para poner en práctica todo esto y realizar el último reto que me queda

Sinceramente estoy muy agradecida con todo el equipo de Platzi y con Freddy por compartir este valioso conocimiento (y gratuitamente) los admiro mucho y quisiera poder brindarle esta oportunidad a otras personas (sobre todo acá en mi país, Venezuela), como ustedes lo han hecho conmigo. Me han hecho muy feliz, y son uno de mis mayores motores de inspiración y motivación para continuar con mis estudios y no rendirme. Se les quiere.

Muchas gracias Freddy, aprendí mucho más de lo que aprendo en la universidad. Mil gracias!!

Este es el circuito implementado, funciono a las mil maravillas con el código:
![](motor2.jpg

Mi aporte con código en Sketch 😃

Simulador Arduino Servo con Led y Fotocelda.jpg
banderita.png

Esto esta muy genial!!!
yo quiero continuar con alguna carrera de platzi, pero me falta un año para que me puedan hacer prestamos y adquirir la suscripcion anual, les pido a mis padres y la siutacion no da para hacerlo de una 😦, pero pronto tendre ese certificado, gracias por ser mi mentos Freddy.

Estoy con mas de 6 meses de atraso que se dio este curso y tengo mas ganas cada vez que termino de ver un video y hago mi resumen de aprendizaje, buenos tips freddy. Saludos desde Venezuela ojala pueda ganar la beca…

Un proyecto simple pero muy inspirador, sobretodo para realizar proyectos en casa 😉

Gracias Freddy. Ha sido muy emocionante, me gradué de Ingeniero Químico hace 7 años y nunca he podido ejercer mas de un año (en Venezuela), a esta altura me he replanteado muchas cosas y decidí aprender a programar y estudiar con ustedes para reenfocarme profesionalmente en este campo. Gracias por todo, siento que he aprendido en un mes mas de lo que me había imaginado.

Muchas gracias por todo, tanto a Freddy como a los que estuvieron en el curso, pude ver como unos se ayudaban a otros a lo largo del curso, espero que pueda ver mas gente así a lo largo de los demás cursos

En arduino, el ejemplo de la clase

luzon.jpg
luzoff.jpg

¡Saludos Freddy, saludos Platzi! Excelente este curso de Programación Básica. Soy de de Venezuela y estoy muy agradecido por su labor para con mi hermanos del país al regalar becas de suscripción gratis a sus cursos. Esto nos motiva a seguir aprendiendo y a tumbar cualquier limitante o barreras pese a nuestra horrible situación económica, política y social.

INTERESANTE
PDTA: ME FALTA ARDUINO JEJEXD

Aquí mi resultado:
![](servo.JPG

#include<Servo.h>

Servo servo;
int rojo = 13;
int naranja = 11;
int azul = 7;
int luz = 0;

void setup()
{
  pinMode(rojo, OUTPUT); // pin 13  salida led rojo
  pinMode(naranja, OUTPUT);//pin 11 salida led anaranjado
  pinMode(azul, OUTPUT);// pin 7 salida led azul
  pinMode(A0, INPUT); // Defino la entrada análoga
  Serial.begin(9600); // Abro el puerto serial en 9600 bps:
  servo.attach(9); // pin 9 donde está conectado
  servo.write(0); // Inicia el servomotor en 90°
}

void loop()
{
  digitalWrite(rojo, HIGH);
  digitalWrite(naranja, LOW);
  digitalWrite(azul, HIGH);
  luz = analogRead(A0); // Leo el valor de la foto resistencia
  Serial.println(luz); // Imprimo el valor de   digitalWrite(led, HIGH);
  
  delay(500); // 
  
  if (luz > 300){ 
    servo.write(70);
  } else {
    servo.write(0);
  }
  
  digitalWrite(rojo, LOW);
  digitalWrite(naranja, HIGH);
  digitalWrite(azul, LOW);
  delay(500); 
  
  if (luz > 300){
    servo.write(110);
  } else {
    servo.write(0);
  }
  
}```

Verificar en el siguiente enlace:
[](https://www.tinkercad.com/things/25qu2WaTB65-start-simulating/editel?collectionid=OIYJ88OJ3OPN3EA&lessonid=EHD2303J3YPUS5Z&magic=638b523f76dcedce06d8fb4f94f5fdc5a4130698&projectid=OIYJ88OJ3OPN3EA&t=1573883088877849613&tenant=circuits#/lesson-viewer?sharecode=L05ra4orn-6zR9ejAutRFBys4zt6BPMmLXMnSBqLGVM=)
Servo.png

ANTES DE INICIAR CON LA FOTORESISTENCIA

Servo2.png

DESPUES DE QUE PASA EL NIVEL LA FOTORESISTENCIA, ACTIVA EL LED Y EL SERVO

<#include <Servo.h>

int fotoresistor = A0;
int led = 13;
int servoPos = 0;
Servo jjservo;


void setup()
{
  pinMode(led, OUTPUT);
  pinMode(fotoresistor, INPUT);
  jjservo.attach(9);
}

void loop()
{
  jjservo.write(servoPos);
  int medida = digitalRead(fotoresistor);
                         
  if (medida == 1 )/// el valor en voltaje es aproximadamente 2.22 V
  {
    servoPos = 90;
    digitalWrite(led, HIGH);
    delay(300);
    digitalWrite(led, LOW);
    delay(300);
  }
  else
  {
  	digitalWrite(led, LOW);
    servoPos = 0;
  }
  
}>

Freddy cantando el himno de México jajajaja

estoy creando una pagina para mi escuela que tal voy:
<!DOCTYPE html>
<html lang=“es”>

<head>
<meta charset=“UTF-8”>
<meta name=“viewport” content=“width=device-width, initial-scale=1.0”>
<meta http-equiv=“X-UA-Compatible” content=“ie=edge”>
<title>CBTa #64</title>
<link rel=“shortcut icon” href=“img/cbta64.jpg” type=“image/x-icon”>
<link rel=“stylesheet” href=“css/estilos.css”>
<link href=“https://fonts.googleapis.com/css?family=Open+Sans:300,400,700,800&display=swap” rel=“stylesheet”>
</head>

<body>
<header>
<nav>
<a href=“file:///C:/Users/Manuelprz/Downloads/P%C3%A1gina%20web%20Manuel%20Design/index.html”>Inicio</a>
<a href="">Acerca de</a>
<a href="">Portafolio</a>
</nav>
<section class=“textos-header”>
<h1>EXCELENCIA EDUCATIVA</h1>
<h2>Tu mejor oferta</h2>
</section>
<div class=“wave” style=“height: 150px; overflow: hidden;”><svg viewBox=“0 0 500 150” preserveAspectRatio=“none"
style=“height: 100%; width: 100%;”>
<path d=“M0.00,49.98 C150.00,150.00 349.20,-50.00 500.00,49.98 L500.00,150.00 L0.00,150.00 Z"
style=“stroke: none; fill: #fff;”></path>
</svg></div>
</header>
<main>
<section class=“contenedor sobre-nosotros”>
<h2 class=“titulo”>Nuestra Institución</h2>
<div class=“contenedor-sobre-nosotros”>
<img src=“img/ilustracion2.svg” alt=”” class=“imagen-about-us”>
<div class=“contenido-textos”>
<h3><span>1</span>carreras disponibles</h3>
<strong></strong><p>tecnico en ofimatica</p></strong>
<strong><p>tecnico en desarrollo sustentable</p></strong>
<h3><span>2</span>Formacion Academica</h3>
<p>En la institucion aprenderemos a desarrollar habilidades y destrezas en el ambito social,educativo y demas.</p>
</div>
</div>
</section>
<section class=“portafolio”>
<div class=“contenedor”>
<h2 class=“titulo”>Portafolio</h2>
<div class=“galeria-port”>
<div class=“imagen-port”>
<img src=“img/img1.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img2.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img3.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img8.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img4.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img5.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img6.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img7.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
</div>
</div>
</section>
<section class=“clientes contenedor”>
<h2 class=“titulo”>Que dicen nuestros alumnos</h2>
<div class=“cards”>
<div class=“card”>
<img src=“img/face1.jpg” alt="">
<div class=“contenido-texto-card”>
<h4>Juan</h4>
<p>La escuela es lo bastante buena para ofrecer la mejor calidad respecto a educacion y formacion profesional, formen parte de el CBTa #64</p>
</div>
</div>
<div class=“card”>
<img src=“img/face2.jpg” alt="">
<div class=“contenido-texto-card”>
<h4>Emy</h4>
<p>Cuenta con el estandar necesario de estudio con unos profesores lo bastante preparados para dar a conocer sus clases adecuadamente</p>
</div>
</div>
</div>
</section>
<section class=“about-services”>
<div class=“contenedor”>
<h2 class=“titulo”>Actividades Extracurriculares</h2>
<div class=“servicio-cont”>
<div class=“servicio-ind”>
<img src=“img/ilustracion1.svg” alt="">
<h3>Banda de Guerra</h3>
<p>forma parte de la banda de guerra y participa en diversos concursos a nivel estatal</p>
</div>
<div class=“servicio-ind”>
<img src=“img/ilustracion4.svg” alt="">
<h3>Equipo de futbol</h3>
<p>Forma parte de nuestro equipo de futbol y acude a competencias para asi lograr participaciones a nivel estado</p>
</div>
<div class=“servicio-ind”>
<img src=“img/ilustracion3.svg” alt="">
<h3>Escolta de bandera</h3>
<p>adentrate en nuestra escolta de bandera y participa en competencias estatales</p>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class=“contenedor-footer”>
<div class=“content-foo”>
<h4>celular</h4>
<p>6495260048</p>
</div>
<div class=“content-foo”>
<h4>pagina</h4>
<p>https://www.facebook.com/cbta64/</p>
</div>
<div class=“content-foo”>
<h4>Localidad</h4>
<p>Santa Maria del Oro, Durango</p>
</div>
</div>
<h2 class=“titulo-final”>© Manuel Design | Manuel Pererz</h2>
</footer>
</body>

</html>

estilos

  • {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    }

body {
font-family: ‘open sans’;
}

.contenedor {
padding: 60px 0;
width: 90%;
max-width: 1000px;
margin: auto;
overflow: hidden;
}

.titulo {
color: #642a73;
font-size: 30px;
text-align: center;
margin-bottom: 60px;
}

/* Header */

header {
width: 100%;
height: 600px;
background: #bc4e9c;
/* fallback for old browsers /
background: -webkit-linear-gradient(to right, hsla(340, 95%, 50%, 0.459), hsla(317, 45%, 52%, 0.664)), url(…/img/portada.jpg);
/
Chrome 10-25, Safari 5.1-6 /
background: linear-gradient(to right, hsla(340, 95%, 50%, 0.459), hsla(317, 45%, 52%, 0.664)), url(…/img/portada.jpg);
/
W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
background-size: cover;
background-attachment: fixed;
position: relative;
}

nav{
text-align: right;
padding: 30px 50px 0 0;
}

nav > a{
color:#fff;
font-weight: 300;
text-decoration: none;
margin-right: 10px;
}

nav > a:hover{
text-decoration: underline;
}

header .textos-header{
display: flex;
height: 430px;
width: 100%;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
}

.textos-header h1{
font-size: 50px;
color:#fff;
}

.textos-header h2{
font-size: 30px;
font-weight: 300;
color:#fff;
}

.wave{
position: absolute;
bottom: 0;
width: 100%;
}

/* About us */

main .sobre-nosotros{
padding: 30px 0 60px 0;
}
.contenedor-sobre-nosotros{
display: flex;
justify-content: space-evenly;
}

.imagen-about-us{
width: 48%;
}

.sobre-nosotros .contenido-textos{
width: 48%;
}

.contenido-textos h3{
margin-bottom: 15px;
}

.contenido-textos h3 span{
background: #4d0686;
color: #fff;
border-radius: 50%;
display: inline-block;
text-align: center;
width: 30px;
height: 30px;
padding: 2px;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, .5);
margin-right: 5px;
}

.contenido-textos p{
padding: 0px 0px 30px 15px;
font-weight: 300;
text-align: justify;
}
.contenido-textos p{
padding: 0px 0px 30px 15px;
font-weight: 300;
text-align: justify;
}
/* Galeria */

.portafolio{
background: #f2f2f2;
}

.galeria-port{
display: flex;
justify-content: space-evenly;
flex-wrap: wrap;
}

.imagen-port{
width: 24%;
margin-bottom: 10px;
overflow: hidden;
position: relative;
cursor: pointer;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, .5);
}

.imagen-port > img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

.hover-galeria{
position: absolute;
width: 100%;
height: 100%;
top: 0;
transform: scale(0);
background: hsla(273,91%,27%, 0.7);
transition: transform .5s;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}

.hover-galeria img{
width: 50px;
}

.hover-galeria p{
color: #fff;
}

.imagen-port:hover .hover-galeria{
transform: scale(1);
}

/* Clients */

.cards{
display: flex;
justify-content: space-evenly;
}

.cards .card{
background: #4d0686;
display: flex;
width: 46%;
height: 200px;
align-items: center;
justify-content: space-evenly;
border-radius: 5px;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.6);
}

.cards .card img{
width: 100px;
height: 100px;
object-fit: cover;
border: 3px solid #fff;
border-radius: 50%;
display: block;
}

.cards .card > .contenido-texto-card{
width: 60%;
color: #fff;
}

.cards .card > .contenido-texto-card p{
font-weight: 300;
padding-top: 5px;
}

/* Our team */

.about-services{
background: #f2f2f2;
padding-bottom: 30px;
}

.servicio-cont{
display:flex;
justify-content: space-between;
align-items: center;
}

.servicio-ind{
width: 28%;
text-align: center;
}

.servicio-ind img{
width: 90%;
}

.servicio-ind h3{
margin: 10px 0;
}

.servicio-ind p{
font-weight: 300;
text-align: justify;
}

/* footer */

footer{
background: #414141;
padding: 60px 0 30px 0;
margin: auto;
overflow: hidden;
}

.contenedor-footer{
display: flex;
width: 90%;
justify-content: space-evenly;
margin: auto;
padding-bottom: 50px;
border-bottom: 1px solid #ccc;
}

.content-foo{
text-align: center;
}

.content-foo h4{
color: #fff;
border-bottom: 3px solid #af20d3;
padding-bottom: 5px;
margin-bottom: 10px;
}

.content-foo p{
color: #ccc;
}

.titulo-final{
text-align: center;
font-size: 24px;
margin: 20px 0 0 0;
color: #9e9797;
}

@media screen and (max-width:900px){
header{
background-position: center;
}

.contenedor-sobre-nosotros{
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.sobre-nosotros .contenido-textos{
    width: 90%;
}

.imagen-about-us{
    width: 90%;
}

/* Galeria */

.imagen-port{
    width: 44%;
}

/* Clientes */

.cards{
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.cards .card{
    width: 90%;
}

.cards .card:first-child{
    margin-bottom: 30px;
}

/* servicios */

.servicio-cont{
    justify-content: center;
    flex-direction: column;
}

.servicio-ind{
    width: 100%;
    text-align: center;
}

.servicio-ind:nth-child(1), .servicio-ind:nth-child(2){
    margin-bottom: 60px;
}

.servicio-ind img{
    width: 90%;
}

}

@media screen and (max-width:500px){
nav{
text-align: center;
padding: 30px 0 0 0;
}

nav > a{
    margin-right: 5px;
}

.textos-header h1{
    font-size: 35px;
}

.textos-header h2{
    font-size: 20px;
}

/* ABOUT US */

.imagen-about-us{
    margin-bottom: 60px;
    width: 99%;
}

.sobre-nosotros .contenido-textos{
    width: 95%;
}

/* Galeria */

.imagen-port{
    width: 95%;
}

/* Clients */

.cards .card{
    height: 450px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.cards .card img{
    width: 90px;
    height: 90px;
}

/* Footer */

.contenedor-footer{
    flex-direction: column;
    border: none;
}

.content-foo{
    margin-bottom: 20px;
    text-align: center;
}

.content-foo h4{
    border: none;
}

.content-foo p{
    color: #ccc;
    border-bottom: 1px solid #f2f2f2;
    padding-bottom: 20px;
}

.titulo-final{
    font-size: 20px;
}

}

y necesito saber como enlazar otra pagina html con estilos ya que al enlazarla me aparce sin estilos y sin imagenes, es algo que no recuerdo como hacer

entre mas aprendo cosas nuevas me doy cuenta que en realidad se menos, que buen curso, ahore me voy a hacer el de definitivo de java.

function Confusión ()
{
Estoy un poco perdido por tantas palabras. Pero vuelvo a verlo y entiendo.
}

Desde Venezuela …Infinitas Gracias!!! a freddy y Platzi, por permitirme aprender un poco mas con este excelente curso, 100% recomendado. gracias…

Sr. John Freddy, muy buenas tardes,

Muy agradecido estoy por la oportunidad de reforzar mis conocimientos con este curso.

Excelente contenido, metodología, algo muy distinto a los cursos online que he participado.

Quedo con mucha expectativa con los cursos que tomaré.

Muchos éxitos para Platzi.

No crei posible que en este curso de programacion iba a realizar cosas tan increibles como crear un robot, no quiero imaginarme lo que me espera en los cursos avanzados¡¡¡¡

La verdad es que estoy bastante agradecido por haber cursado este curso. Tan pronto vuelva a tener recursos, vendré a devorarme todos los cursos que pueda, sobretodo ese de Biología Extraterrestre jajaja

¡Nunca pensé que iba a programar un arduino con un curso de programación básica! Tuve que hacerlo en el simulador Tinkercad, fue un reto complicado, pero me siento super contento y emocionado de haber cumplido este y todos los demás retos del curso.

En mi circuito, usando un sensor de temperatura, se activa (pardea) un led rojo a modo de alarma y automáticamente se mueve un servo (simulando la acción de abrir la llave de agua).

ENLACE AL DISEÑO EN TINKERCAD

Captura de pantalla (178).png
#include<Servo.h>


const long A = 1000;     //Resistencia en oscuridad en KΩ
const int B = 15;        //Resistencia a la luz (10 Lux) en KΩ
const int Rc = 10; 

Servo servoMotor;
const int LDRPin = A0;
int ilumi;
int foto;
int turno;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(LDRPin,INPUT);
  servoMotor.attach(9);
}

void loop()
{
  foto = analogRead(LDRPin);
  digitalWrite(13, HIGH);
  delay(500); // medio segundo
  digitalWrite(13, LOW);
  delay(500); // medio segundo
  
  
  ilumi = ((long)foto*A*10)/((long)B*Rc*(1024-foto)); //calcular la intensidad de luz
  ondear();
}

void ondear(){
	int luz  =   ilumi;
  if(luz > 800){
    if(turno == 1){
      turno =0;
      servoMotor.write(70);
  	  delay(500);
    }else{
      turno = 1;
      servoMotor.write(110);
  	  delay(500);
    }
  }else{
    servoMotor.write(150);
  	delay(500);
  }
 // ondear();
}```

Que emoción, estoy que grito en plena madrugada :v , definitivamente esto es lo que me gusta!

Muchísimas gracias por tu tiempo, seguimos con los cursos aprendiendo. Platzi!

Ahora a conseguir un arduino para poder aplicar esto!

Muchas gracias señor Freddy.

Usted ha sido un excelente maestro.

Un profesor excelente, todo el curso magnifico, eternamente agradecido y felicidades para todos en platzi !

Muchas gracias Freddy y TeamPlatzi! Excelente curso.
Su pasión contagia.
Nos volveremos a ver.
Fuerte abrazo.

Hola. Se puede leer o escribir variables de arduino desde una aplicación web? Cual sería el camino? El problema de usar firmata es que no se puede aprovechar la potencia de procesador para que el hardware funcione independientemente de la conexión hacia un ordenador. Junto a un colega nos dedicamos a realizar desarrollos electrónicos como el que adjunto en imagen (un equipo para electrodeposición de cobre en desarrollo) . Por ejemplo en este caso el arduino se comunica a una HMI y maneja un inversor según parámetros cargados en HMI y queremos leer y graficar valores en una pc solo de ser requeridos por el usuario, es decir el equipo debe funcionar de forma autónoma. Unsuccessful HTTP response

Bonísimo

Totalmente agradecido con Freddy, los compañeros del curso y la comunidad Platzi en general, aprender a programar ha sido una de mis mejores experiencias, este curso me ha ayudado a fortalecer mi gusto personal y mi camino profesional, con mucho animo de compartir a otros lo aprendido y seguir fortaleciendo habilidades tecnológicas para estar a la vanguardia de lo que nos espera en un futuro no muy lejano.

Muchas gracias por el curso, pronto compraré el arduino y subire los retos.

Todo en un solo if.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var BancoCliente = 'BOD';
        var CuentaCliente = true;
        var saldo = 100;
        var BancoDestino = prompt('Ingresa Banco de destino');
        var CuentaDestino = true;
        var Hora = new Date();
        var Costo = 0;
        var Monto = parseInt(prompt('Ingresa monto'));
        
        if (Hora.getHours() > 9 && Hora.getHours() < 12 || Hora.getHours() > 15 && Hora.getHours() < 20){
            if(CuentaCliente && CuentaDestino){
                if (BancoCliente == BancoDestino){
                    Costo = 0;
                }
                else {
                    Costo = 5;
                }
                Monto += Costo;
                if (saldo > Monto){
                    alert('Transaccion exitosa');
                }
                else{
                    alert('Saldo insuficiente');
                }
            }
            else{
                alert('Cuenta no verificada');
            }
        }
        else {
            alert('Hora invalida');
        ```

Freddy!!! Infinitas gracias por todo el conocimiento que has compartido mediante este curso.

Quiero manifestar que desde hace un tiempo decidí iniciar mi aprendizaje de programación con un objetivo algo diferente a los que se plantean en este curso. Sin embargo, debo confesar que desde los primeros videos he quedado cautivado por el contenido y la pedagogía que tienes para enseñar.

He visto cada uno de los videos y he realizado cada una de las actividades propuestas, y creo que hay mucho por aprender, pero también creo que este curso ha sentado las bases de lo que será mi proceso de aprendizaje en programación, manteniendo mi objetivo inicial.

Nuevamente, muchas gracias.
!Y vida eterna para Platzi!

se le ve la emocion a Freddy por la electronica y la programacion juntos

Sí a ustedes les sale este error, el problema es el COM en el código
.
1.png

C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode>node leds
C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode\node_modules\bindings\bindings.js:135
  throw err;
  ^

Error: Could not locate the bindings file. Tried:
 → C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode\node_modules\johnny-five\node_modules\@serialport\bindings\build\bindings.node

.
Han habido cambios en como se escribe el código en Johnny Five, se soluciona así:

//Así es el código original y falla
var jf = require("johnny-five");
var circuito = new jf.Board();

//Así tiene que quedar, ahora (Febrero 2021) hay que incluir en la .Board el puerto COM al que esta conectado el Arduino. Por su puesto tu tienes que colocar el COM que te dice en tu computador
var jf = require("johnny-five");
var circuito = new jf.Board({ port: "COM5" });

.
¿Cómo saber mi COM? en el arduino te dice a cual esta conectado.
.

2.jpg

A pesar de no tener el arduino fisico, utilice un simulador y buscando en internet logre programarlo para hacer lo que indicaba fredy en la primera parte.

1.png

Codigo en arduino:

#include <Servo.h> //Importar libreria

Servo myservo; //Crear objeto del tipo servo
int pulsomin = 1000; // 1 milisegundo equivale a 1000 microsegundos (0 grados)
int pulsomax = 2000; // 2 milisegundos equivale a 2000 microsegundos (180 grados)

int valorSensor = 0;
const int pinsensor = A0;

int ms = 100;
void setup()
{
  pinMode(13, OUTPUT);
  myservo.attach(9, pulsomin, pulsomax); //inicializar el servo, primer parametro el pin, luego valor del pulso minimo y luego valor del pulso maximo.
  
  Serial.begin(9600);
}


void loop()
{
  valorSensor = analogRead(pinsensor);
  Serial.print("Valor del sensor: ");
  Serial.println(valorSensor);
    
  if (valorSensor >= 500) {
    digitalWrite(13, LOW); //Apagamos el led cuando detecta mucha luz
    myservo.write(0); // funcion write envia el angulo al cual debe posicionarse el servo
  
  }
  else {
    myservo.write(180);
    digitalWrite(13, HIGH); //Prendemos el led cuando detecta poca luz.
  };```


Captura de Pantalla 2021-01-30 a la(s) 19.08.17.png

Que gran curso! y sobre todo que gran Profesor!

curso mas pro de arduino???

@freddier Muchas gracias por cambiarnos la forma de pensar y de ver las cosas, recién finalizo mis proyectos del curso y quiero continuar con mas proyectos. Gracias Platzi, seguiré mi carrera como Backend aqui mismo.

kisto para empezar los cursos de programcion en platzi que emocion

hola

:'c tu despedida me llego al cora XD
no tengo arduino, en cuanto lo tengo prometo enviar mi proyecto y tembien tengo planeado seguir con mas cursos de aca

gracias por este increible curso, de verdad que ni en quinto semestre de universidad dan lo que se vio aqui, y creo que nunca me daran esto

no quiero ser ingeniero de mi universidad, quiero ser ingeniero de Platzi XD

hasta la proxima BYE
y claro que voy a enseñar lo que aprendi XD

Muchisimas gracias Freddy por siempre motivarnos para seguir aprendiendo!, estoy muy convencido de que mi suscripción a Platzi valdrá totalmente la pena!

la verdad considero que el material y los proyectos que se realizar fueron mas allá de mis expectativas, agradezco mucho motivarnos a seguir adelante en el mundo de la programación y a amar lo que hacemos.

Muy emotivo el mensaje final.

Buenas a todos, lo que hizo Freddy en el circuito es un divisor de voltaje en un circuito en serie, lo que en realidad lee el puerto analogo del arduino es esa variacion de voltaje al variar la resistencia del LDR que tambien depende de la cantidad de luz. Gracia Freddy, excelente curso.

gracias

buen video

ya casi consigo usar el simulador de Arduino para hacer todo este circuito 😄

b.jpg

Aquí les dejo mi simulación, el código es el mismo, saludos!!!

GENIALL LLEGAR HASTA ACA!!

ES MUCHO LO QUE SE APRENDE

Para los que lo realizan en la simulación de tinkercad les dejo el código que pueden usar en la pagina (NOTA: Tiene que hacer click en el fotoreceptor al iniciar la simulación para cambiar la variación de luz)

#include <Servo.h>

int sensorValue = 0;

int girador = 0;

Servo servo_9;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);

  servo_9.attach(9);

}

void loop()
{
  digitalWrite(13, HIGH);
  sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  if (sensorValue > 500) {
    if (girador == 1) {
      girador = 0;
      servo_9.write(150);
      delay(2000); // Wait for 2000 millisecond(s)
    } else {
      girador = 1;
      servo_9.write(30);
      delay(2000); // Wait for 2000 millisecond(s)
    }
  }
}```

![](https://ibb.co/zRRnHmb) Esta es la imagen del diseño

Hola. En primer lugar muchas gracias por este curso de programación básica, siento que vi muchas cosas nuevas e interesantes, voy a volver atras a repasar un poco mas para no olvidarlas 😃
Aqui dejo lo que hice en Arduino, o hice en un simulador y me hubiera encantado poder tenerlo en fisico.
Otra cosa es que encontre mucho mas sencillo hacerlo en lenguaje C o como se programa en el simulador y en el Arduino que lo que veia que hacia Feddy en java script. Mi codigo me resulto mas corto y facil de entender 😄
Aqui lo dejo 😃

#include <Servo.h>


Servo servomotor;
int sensor = A0;
int var;


void setup()
{
  Serial.begin(9600);
  
  pinMode(13, OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(A0,INPUT);
  
  servomotor.attach(9);
}


void loop()
{
  var = analogRead(0);
 
  if(var < 400)
  {
    servomotor.write(0);
     digitalWrite(13,LOW);
  }
  else
  {
   
    digitalWrite(13,HIGH);
    servomotor.write(80);
    delay(1000);
    servomotor.write(180);
    delay(1000);
  }

Serial.println(var);

}

https://www.tinkercad.com/things/2GRlTQ6qU2g-brilliant-habbi-kup/editel

en verdad que a pesar de ser un curso basico de programacion esta muy completo y entre mas avanzas te impresiona lo bueno que es a pesar de ser gratis)

Se puede hacer completamente con el emulador? Trate de ponerle el codigo del entorno de arduino y me dio errores.

Les comparto éste link, ¡seguro les va a interesar!
https://platzi.com/blog/conoce-personas-increibles-como-tu/

Lo que amé del curso: La inspiración que hierve con cada clase tan desmenuzada, fácil y práctica. No es simplista, es un abrebocas inmenso al maravilloso mundo de la programación. Quiero comenzar a aprender JavaScript y demás tecnologías web, crear sitios web pro, aprender IA, desarrollar aplicaciones, profundizar en estructuras de datos y algoritmos complejos, y finalmente para nutrir e inspirar quiero impartir ese conocimiento a otras personas.

Lo más valioso al comenzar este camino es interiorizar hasta dónde queremos llegar, cada uno tiene sus propias razones para crear código, ¿cuáles son las tuyas?

¡Gracias Platzi!

Muchas gracias por este curso de programación básica. Me sirvió mucho para repasar conceptos de programación y aprender cosas nuevas. Estoy bien animado para continuar con los cursos pagos , valen la pena 😃 😄

pues si, ya me ha metido en ganas de comprarme un arduino y empezar a automatizar la casa

Alguien mas se dio cuenta que dijo 190 y el servo solo tiene hasta 180?

Antes de realizar el curso tenía dudas acerca de suscribirme a Platzi, pero ahora estoy convencido de que definitivamente es de las mejores inversiones que podría hacer.

¡Feliz aprendizaje!**_
Atentamente: Rapimi95. 😄

Ha sido un curso fascinante, muy provechoso y educativo. Muchas gracias por este espacio.

muchas gracias freddy por el curso que nos regalastes, me ayudastes full encontrar el lado divertido de la programación, gracias a ti me adentre a este mundo, que profesores de hace años no me hiceron ver. (posdata: termine el curso en 22 dias jajaja porque pague el expert y vi que era gratis, y no queria demorar tanto para empezar los de pago ajjajaa aun asi aprendi full pero claro cada dia demoraba en 5 horas a 10 horas XD

Gracias

Este es el código de color de las resistencias del que Freddy habla:

que lastima no poder contar con el arduino en fisico 😦

Hola hace tiempo hice el codigo para un bebedero automatico y lo mande al correo que dice freddy pero nunca llego respuesta asi que lo dejo aqui para que me ayuden a revisarlo y corregirlo

var five = require("johnny-five")
var circuito = new five.Board()
var bombillo; manguera; hygrometer;

circuito.on("ready", prender());

function prender()
{
  var configuracion = {pin: "A0", freg:255};
  hygrometer = new five.hygrometer(configuracion);

  bombillo = new five.Led(13);
  bombillo.on();
   //suponiendo que () es el puerto de conexion

   manguera = new five.Motor({pin: 5
   });
   manguera.to(180)
     //console.log ("start", Date.now())

     bombear();
}

function bombear()
{
  console.log("this.relativeHumidity: " + hygrometer.value + "%");
  var relativeHumidity = hygrometer.value);
  if (relativeHumidity < 50)
  {
    manguera.to(0)
      //console.log("stop", Date.now())
  }
  else {
    {
      manguera.to(180)
        //console.log ("start", Date.now())   })
    }
  }
  setTimeout(bombear, 1000);
}

GRacias Freddy 😃

Que padre, la verdad me dieron ganas de comprare un aurdino de verdadultimo.png
Excelente curso!

Muy bueno, muchas gracias Freddy.

Muchisimas Gracias Freddy, Ahora viene lo mas decisivo que he tenido en mi vida, elegir en que quiero especializarme, es que todo es tan interesante¡¡¡¡¡¡¡ …Que emocion¡¡¡¡¡

chevre

Dios mio, si hubiera conocido a Platzi y este maravilloso curso e impecable maestro Freddy, me hubiera evitad tantos dolores de cabeza!, muchas gracias por tanto!!

muy buena clase pero me parece que debo repasar conceptos porque a veces siento que vamos demasiado rápido

Nunca pares de aprender!!

Que gran proyecto me ha motivado bastante a realizar mi propio proyecto con estos conocimientos básicos aprendidos.

Espectacular ejercicio para terminar. Gracias Freddy.

gracias Fredy muy buen curso, gran profesor!!

LOS FELICITO A TODO EL EQUIPO PLATZI Y AL PROFESOR FREDDY DE VERDAD QUE ANTES HACIA LAS COSAS POR COPIAR Y AHORA LOGRE ENTENDER ESTOY FULLLL EMOCIONADO Y ESO QUE AUN NO TENGO UN ARDUINO POR QUE AQUÍ EN VENEZUELA CUESTA LO QUE ME GANO EN UN MES Y UN KIT COMPLETO DE ARDUINO CUESTA LO QUE ME GANO EN 6 MESES PERO DEJANDO A UN LADO LO MALO DE VERDAD QUE LOS FELICITO POR SU INICIATIVA DE ESTE CURSO BÁSICO DE PROGRAMACIÓN Y LOGRAR QUE LAS GENTE TECNOLOGA COMO YO NOS EMOCIONE MAS Y CADA VEZ MAS TODA LA RAMA Y EN ESPECIAL LA PROGRAMACIÓN… SALUDOS… ESPERO ALGÚN DÍA CONOCERLOS Y NO SE ALGÚN MOMENTO TENER EL NIVEL PARA TRABAJAR CON USTEDES DESDE VENEZUELA SALUDOS FELIZ AÑO NUEVO Y LES DESEO LO MEJOR PARA EL PRÓXIMO AÑO 2017 SALUDOS A TODA LA COMUNIDAD PLATZI…

Captura.JPG

Muy buen curso!

Por acá les dejo un ejemplo del ejercicio con el simulador, pero en Sketch, no en Javascript. La fotocelda y el servo en movimiento.

https://i.snag.gy/Xqgdwc.jpg

https://circuits.io/circuits/3881619-4-mover-un-servo-segun-una-fotocelda/

#include <Servo.h> 

Servo my_servo;
int led = 13;
int pin_FotoCelda = 0; // Almacena el pin analógico del LDR (Fotocelda).
int valor_FotoCelda = 0; // Almacenar el valor del sensor de la Fotocelda.

void setup() {
  pinMode(led, OUTPUT); // pinMode(puerto, envía energía).
  my_servo.attach(9); // Puerto.
  my_servo.write(90);  // Posición inicial del servo en grados.
}

void loop() {
  valor_FotoCelda = analogRead(pin_FotoCelda); // Lee el valor del potenciómetro (valor siempre este 0 y 1024).
  
  // Como el valor del sensor varía entre 0 y 1000 (aproximadamente) vamos a hacer lo siguiente:
  // Si el valor del sensor es menor que 400 (muy poca luz) el led se enciende y se mueve el servo a 70 grados.
  if(valor_FotoCelda < 400) {
    digitalWrite(led, HIGH);
    my_servo.write(70);
  // Si el valor del sensor es mayor que 400 (mucha luz) el led se apaga y se mueve el servo a 110 grados.
  } else {
   	digitalWrite(led, LOW);
    my_servo.write(110);
  }
}

¡No puedo creer que todo este curso haya sido gratis! Al empezar el curso pense que iba ser sencillo, nada complejo. Yo estuve en un un clase de programación en Ing. en Computación solo por un semestre (4 meses, realmente) y lo maximo que recuerdo que hicimos fue un programa que tu le ingresabas un año y te decia si era bisiesto o no. Pense que el ATM y el pollo que se movia en la granja iba a ser lo mas complejo que programariamos aquí y, por eso, me sorprendi muchisimo cuando emepezamos con Arduino.

Como les comente estuve en la carrera de Computación, pero solo estuve un semestre. Me salí porque no senti que era la mio en ese momento. Yo queria una carrera que me permitiera crear robots o maquinas, que me permitiera cambiar el mundo y sentia que lo que hacia en Computación no tenia un impacto tangible. Es por eso, que este curso desperto ese interes que tenia y habia olvidado. Ya he comprado mi Arduino Uno y estoy apunto de subscribirme a Platzi para continuar con el curso de Arduino y concluir la carrera de Programación.

Sinceramente, gracias.

Así termina el circuito en la clase. Si no tienen un Arduino pueden hacerlo en Tinkercad, pero tendrían que escribir el código en Sketch.

fotocelda y servo.PNG

El código quedaría así:

#include <Servo.h>

Servo servo;
int led = 13;
int pinLDR = 0;
int valorLDR = 0;

bool servoAbajo = true;

void setup()
{
  Serial.begin(9600);
  
  pinMode(13, OUTPUT); 
  
  servo.attach(9);
  servo.write(0);
}

void loop()
{
  valorLDR = analogRead(pinLDR);
  digitalWrite(led, HIGH);
  
  Serial.println(valorLDR);
  
  if (valorLDR > 500) {
    if (servoAbajo) {
      servo.write(110);
      servoAbajo = false;
    } else {
      servo.write(70);
      servoAbajo = true;
    }
  	
  } else {
  	servo.write(0);
  }
  
  delay(1000);
}

Si te sirvió el comentario, dale like, así me ayudas y motivas a seguir colaborando. ¡Feliz aprendizaje!

Atentamente: Rapimi95. 😄

Sacarán un curso de robótica ?

Me costaba muchísimo en la universidad entender la programación, no se como pero logré terminar las materias y ahora estoy haciendo mi proyecto de titulación. Y por la desesperación pensé muchas veces en dedicarme a otra cosa, gracias a este curso mi cariño a mi carrera se reactivo y he logrado entender cosas que nunca entendì. No me voy a rendir tan pronto, gracias profe Freddy y gracias Platzi 😃 …

Hice este ejercicio en el simulador, dejo el enlace:

https://www.tinkercad.com/things/ho2Iwsv9AgH-servo

robot.png

Desde Venezuela les hago llegar un saludo impregnado en admiración y respeto al equipo de Platzi, me encantó el curso espero poder continuar formándome en su plataforma; no dejen de mejorar nunca porque si su objetivo es enseñar con gran calidad a la mayor cantidad de personas, lo lograran. Son grandes.

Hola a [email protected] Comparto el código del último desafío del curso, el robot de riego. En mi caso (ya que soy muuuuy creativo) lo he llamado IrrigationBot.
El código está bastante comentado, y es similar al utilizado para el ejmplo con el fotorresistor, sin embargo les recomiendo presten especial atención a las referencias sobre el higrómetro, creo les ahorrará algún dolor de cabeza.
El prototipo lo pueden ver en funcionamiento Aquí

irrigationBot.js

// JavaScript Document

var jf = require('johnny-five');

var circuit = new jf.Board();

var led, motor, higro, alarm; //declaración de los componentes del hardware

var turn = 0; //variable que controla la posición de la bandera.

circuit.on("ready", activate); // cuando el circuito esté listo disparamos la función activate();

function activate() {
	//En el caso de los sensores debemos configurarlos. Lo hacemos creando un objeto JSON donde especificamos el puerto    // y la frecuencia.
	var config = {pin: "A0", freq:50};
	
	higro = new jf.Sensor(config); // inicializamos nuestro higrómetro y le pasamos com parámetro a config.
	
	
	motor = new jf.Servo(9); //inicializamos nuestro servo y le pasamos el puerto donde recibirálos datos
	motor.to(90); //la bandera quedará recta al iniciar por primera vez
	
	measure(); // invocación de la función que controlará las mediciones y las acciones a ejecutr
	
}

//Creamos una función recursiva que nos permite monitorar cada segundo las variaciones de luz.

function measure(){
	//Mostramos por consola los datos enviados por celda.
	console.log("Humedad del suelo: " + higro.value);
	
	humidity = higro.value; // capturamos la cantidad de humedad en una variable.
	led = new jf.Led(13); //inicilizamos nuestra led y le asignamos el puerto 13
	alarm = new jf.Led(4); //inicilizamos nuestro buzzer y le asignamos el puerto 4
	
	if(humidity > 800){ // recordar que valor más alto es inversamente proporcional a cantidad de humedad
		led.on(); // escasa humedad encendemos la led.		
		alarm.on(); // suena la alarma porque se ha encendido el sistema de riego.
		if(turn){
			turn = 0;
			motor.to(110);
		}
		else{
			turn = 1;
			motor.to(60);
		}
	}
	else{
		motor.to(20);
		led.off(); // si tenemos suficiente humedad la led se apaga.
		alarm.off(); // la alarma está apagada si no es necesario regar.		
	}
	
	setTimeout(measure, 1000);//llamada recursiva a la función measure();
}

Hice una pequeña modificación al código conservando el mismo concepto que el original. Está hecho con Sketch (Lenguaje de arduino) para que lo prueben en Tinkercad si no tienen los elementos físicos

Arduinode en Sketch con Tinkercad
#include <Servo.h>

Servo servo;
int led = 13;
int luz = 0;

void setup()
{
  pinMode(led, OUTPUT); // Define el pin 13 como salida
  pinMode(A0, INPUT); // Defino la entrada análoga
  Serial.begin(9600); // Abro el puerto serial en 9600 bps:
  servo.attach(9); // Le indico el pin 9 donde está conectado
  servo.write(0); // Inicio el servomotor en 90°
}

void loop()
{
  digitalWrite(led, HIGH);
  luz = analogRead(A0); // Leo el valor de la foto resistencia
  Serial.println(luz); // Imprimo el valor de   digitalWrite(led, HIGH);
  
  delay(500); // Espero 500ms
  
  if (luz > 300){ // Hay luz
    servo.write(70);
  } else {
    servo.write(0);
  }
  
  digitalWrite(led, LOW);
  delay(500); // Espero 500ms
  
  if (luz > 300){ // Hay luz
    servo.write(110);
  } else {
    servo.write(0);
  }
  
}

Bueno, esto se acabó:
![](Captura de pantalla 2020-02-06 a las 21.43.17.png

var cinco = require("johnny-five");// classe con la biblioteca J-five
var circuito = new cinco.Board();//instancia con modulos para la placa
var bombilla;
var servo;
var celda;
var turno = 0;

circuito.on("ready", encender);

function encender()
{
  var configuracion = {pin: "A0", freq: 50}//configuracion del sensor objeto jeson
  celda = new cinco.Sensor(configuracion);//instancia con modulos para el sensor

  bombilla = new cinco.Led(13);//instancia con modulos para el led
  bombilla.on();

  servo = new cino.Servo(9);//instancia con modulos para el servo
  servo.to(90);
  ondear();
}

ondear()
{
  console.log("Luz = " + celda.value);
  var luz = celda.value;
  if(luz > 800)
  {
    if(turno){
      turno = 0;
      servo.to(70);
    }
    else{
      turno = 1;
      servo.to(110);
    }
    servo.to(90);
  }
  else
  {
    servo.to(180);
  }
  setTimeout(ondear, 1000);//setTimeout invoca a una funcion de forma recursiva
}```

A quienes esten usando el simulador tinkercad.com con este código en C mueven el servo

#include <Servo.h>

int led_puerto = 13;
int servo_puerto = 9;
Servo servo;

void setup()
{
  pinMode(led_puerto, OUTPUT);
  servo.attach(servo_puerto);
  servo.write(0);
}

void loop()
{
  servo.write(180);
}

Y el circuito configurado como dijo freddy
circuito

Ha sido un excelente curso es mas, diria el mejor de todos para alguien que no sabe nada de programacion. Quiero dar gracias por todo el conocimiento que me otorgó Freddy en este curso lastima se tuviera que acabar.

<strong>Thanks Freddy</strong>

WOW, Excelente curso. Aquí les dejo mis apuntes de todo el curso 😄. A por la carrera de IoT ahora 😂

Espero tener pronto mi kit de Arduino para aplicar todo lo aprendido! 😃
Estas clases han sido lo máximo y me motivan a seguir aprendiendo más.

Adjunto mi código y simulación del ejercicio, aún me falta llevarlo a la práctica…
banderita.JPG

bueno fue genial el curso es muy completo ahora solo debo esperar a que termine la cuarentena y comprar el arduino para poner en práctica todo esto y realizar el último reto que me queda

Sinceramente estoy muy agradecida con todo el equipo de Platzi y con Freddy por compartir este valioso conocimiento (y gratuitamente) los admiro mucho y quisiera poder brindarle esta oportunidad a otras personas (sobre todo acá en mi país, Venezuela), como ustedes lo han hecho conmigo. Me han hecho muy feliz, y son uno de mis mayores motores de inspiración y motivación para continuar con mis estudios y no rendirme. Se les quiere.

Muchas gracias Freddy, aprendí mucho más de lo que aprendo en la universidad. Mil gracias!!

Este es el circuito implementado, funciono a las mil maravillas con el código:
![](motor2.jpg

Mi aporte con código en Sketch 😃

Simulador Arduino Servo con Led y Fotocelda.jpg
banderita.png

Esto esta muy genial!!!
yo quiero continuar con alguna carrera de platzi, pero me falta un año para que me puedan hacer prestamos y adquirir la suscripcion anual, les pido a mis padres y la siutacion no da para hacerlo de una 😦, pero pronto tendre ese certificado, gracias por ser mi mentos Freddy.

Estoy con mas de 6 meses de atraso que se dio este curso y tengo mas ganas cada vez que termino de ver un video y hago mi resumen de aprendizaje, buenos tips freddy. Saludos desde Venezuela ojala pueda ganar la beca…

Un proyecto simple pero muy inspirador, sobretodo para realizar proyectos en casa 😉

Gracias Freddy. Ha sido muy emocionante, me gradué de Ingeniero Químico hace 7 años y nunca he podido ejercer mas de un año (en Venezuela), a esta altura me he replanteado muchas cosas y decidí aprender a programar y estudiar con ustedes para reenfocarme profesionalmente en este campo. Gracias por todo, siento que he aprendido en un mes mas de lo que me había imaginado.

Muchas gracias por todo, tanto a Freddy como a los que estuvieron en el curso, pude ver como unos se ayudaban a otros a lo largo del curso, espero que pueda ver mas gente así a lo largo de los demás cursos

En arduino, el ejemplo de la clase

luzon.jpg
luzoff.jpg

¡Saludos Freddy, saludos Platzi! Excelente este curso de Programación Básica. Soy de de Venezuela y estoy muy agradecido por su labor para con mi hermanos del país al regalar becas de suscripción gratis a sus cursos. Esto nos motiva a seguir aprendiendo y a tumbar cualquier limitante o barreras pese a nuestra horrible situación económica, política y social.

INTERESANTE
PDTA: ME FALTA ARDUINO JEJEXD

Aquí mi resultado:
![](servo.JPG

#include<Servo.h>

Servo servo;
int rojo = 13;
int naranja = 11;
int azul = 7;
int luz = 0;

void setup()
{
  pinMode(rojo, OUTPUT); // pin 13  salida led rojo
  pinMode(naranja, OUTPUT);//pin 11 salida led anaranjado
  pinMode(azul, OUTPUT);// pin 7 salida led azul
  pinMode(A0, INPUT); // Defino la entrada análoga
  Serial.begin(9600); // Abro el puerto serial en 9600 bps:
  servo.attach(9); // pin 9 donde está conectado
  servo.write(0); // Inicia el servomotor en 90°
}

void loop()
{
  digitalWrite(rojo, HIGH);
  digitalWrite(naranja, LOW);
  digitalWrite(azul, HIGH);
  luz = analogRead(A0); // Leo el valor de la foto resistencia
  Serial.println(luz); // Imprimo el valor de   digitalWrite(led, HIGH);
  
  delay(500); // 
  
  if (luz > 300){ 
    servo.write(70);
  } else {
    servo.write(0);
  }
  
  digitalWrite(rojo, LOW);
  digitalWrite(naranja, HIGH);
  digitalWrite(azul, LOW);
  delay(500); 
  
  if (luz > 300){
    servo.write(110);
  } else {
    servo.write(0);
  }
  
}```

Verificar en el siguiente enlace:
[](https://www.tinkercad.com/things/25qu2WaTB65-start-simulating/editel?collectionid=OIYJ88OJ3OPN3EA&lessonid=EHD2303J3YPUS5Z&magic=638b523f76dcedce06d8fb4f94f5fdc5a4130698&projectid=OIYJ88OJ3OPN3EA&t=1573883088877849613&tenant=circuits#/lesson-viewer?sharecode=L05ra4orn-6zR9ejAutRFBys4zt6BPMmLXMnSBqLGVM=)
Servo.png

ANTES DE INICIAR CON LA FOTORESISTENCIA

Servo2.png

DESPUES DE QUE PASA EL NIVEL LA FOTORESISTENCIA, ACTIVA EL LED Y EL SERVO

<#include <Servo.h>

int fotoresistor = A0;
int led = 13;
int servoPos = 0;
Servo jjservo;


void setup()
{
  pinMode(led, OUTPUT);
  pinMode(fotoresistor, INPUT);
  jjservo.attach(9);
}

void loop()
{
  jjservo.write(servoPos);
  int medida = digitalRead(fotoresistor);
                         
  if (medida == 1 )/// el valor en voltaje es aproximadamente 2.22 V
  {
    servoPos = 90;
    digitalWrite(led, HIGH);
    delay(300);
    digitalWrite(led, LOW);
    delay(300);
  }
  else
  {
  	digitalWrite(led, LOW);
    servoPos = 0;
  }
  
}>

Freddy cantando el himno de México jajajaja

estoy creando una pagina para mi escuela que tal voy:
<!DOCTYPE html>
<html lang=“es”>

<head>
<meta charset=“UTF-8”>
<meta name=“viewport” content=“width=device-width, initial-scale=1.0”>
<meta http-equiv=“X-UA-Compatible” content=“ie=edge”>
<title>CBTa #64</title>
<link rel=“shortcut icon” href=“img/cbta64.jpg” type=“image/x-icon”>
<link rel=“stylesheet” href=“css/estilos.css”>
<link href=“https://fonts.googleapis.com/css?family=Open+Sans:300,400,700,800&display=swap” rel=“stylesheet”>
</head>

<body>
<header>
<nav>
<a href=“file:///C:/Users/Manuelprz/Downloads/P%C3%A1gina%20web%20Manuel%20Design/index.html”>Inicio</a>
<a href="">Acerca de</a>
<a href="">Portafolio</a>
</nav>
<section class=“textos-header”>
<h1>EXCELENCIA EDUCATIVA</h1>
<h2>Tu mejor oferta</h2>
</section>
<div class=“wave” style=“height: 150px; overflow: hidden;”><svg viewBox=“0 0 500 150” preserveAspectRatio=“none"
style=“height: 100%; width: 100%;”>
<path d=“M0.00,49.98 C150.00,150.00 349.20,-50.00 500.00,49.98 L500.00,150.00 L0.00,150.00 Z"
style=“stroke: none; fill: #fff;”></path>
</svg></div>
</header>
<main>
<section class=“contenedor sobre-nosotros”>
<h2 class=“titulo”>Nuestra Institución</h2>
<div class=“contenedor-sobre-nosotros”>
<img src=“img/ilustracion2.svg” alt=”” class=“imagen-about-us”>
<div class=“contenido-textos”>
<h3><span>1</span>carreras disponibles</h3>
<strong></strong><p>tecnico en ofimatica</p></strong>
<strong><p>tecnico en desarrollo sustentable</p></strong>
<h3><span>2</span>Formacion Academica</h3>
<p>En la institucion aprenderemos a desarrollar habilidades y destrezas en el ambito social,educativo y demas.</p>
</div>
</div>
</section>
<section class=“portafolio”>
<div class=“contenedor”>
<h2 class=“titulo”>Portafolio</h2>
<div class=“galeria-port”>
<div class=“imagen-port”>
<img src=“img/img1.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img2.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img3.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img8.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img4.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img5.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img6.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
<div class=“imagen-port”>
<img src=“img/img7.jpg” alt="">
<div class=“hover-galeria”>
<img src=“img/icono1.png” alt="">
<p>Nuestro trabajo</p>
</div>
</div>
</div>
</div>
</section>
<section class=“clientes contenedor”>
<h2 class=“titulo”>Que dicen nuestros alumnos</h2>
<div class=“cards”>
<div class=“card”>
<img src=“img/face1.jpg” alt="">
<div class=“contenido-texto-card”>
<h4>Juan</h4>
<p>La escuela es lo bastante buena para ofrecer la mejor calidad respecto a educacion y formacion profesional, formen parte de el CBTa #64</p>
</div>
</div>
<div class=“card”>
<img src=“img/face2.jpg” alt="">
<div class=“contenido-texto-card”>
<h4>Emy</h4>
<p>Cuenta con el estandar necesario de estudio con unos profesores lo bastante preparados para dar a conocer sus clases adecuadamente</p>
</div>
</div>
</div>
</section>
<section class=“about-services”>
<div class=“contenedor”>
<h2 class=“titulo”>Actividades Extracurriculares</h2>
<div class=“servicio-cont”>
<div class=“servicio-ind”>
<img src=“img/ilustracion1.svg” alt="">
<h3>Banda de Guerra</h3>
<p>forma parte de la banda de guerra y participa en diversos concursos a nivel estatal</p>
</div>
<div class=“servicio-ind”>
<img src=“img/ilustracion4.svg” alt="">
<h3>Equipo de futbol</h3>
<p>Forma parte de nuestro equipo de futbol y acude a competencias para asi lograr participaciones a nivel estado</p>
</div>
<div class=“servicio-ind”>
<img src=“img/ilustracion3.svg” alt="">
<h3>Escolta de bandera</h3>
<p>adentrate en nuestra escolta de bandera y participa en competencias estatales</p>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class=“contenedor-footer”>
<div class=“content-foo”>
<h4>celular</h4>
<p>6495260048</p>
</div>
<div class=“content-foo”>
<h4>pagina</h4>
<p>https://www.facebook.com/cbta64/</p>
</div>
<div class=“content-foo”>
<h4>Localidad</h4>
<p>Santa Maria del Oro, Durango</p>
</div>
</div>
<h2 class=“titulo-final”>© Manuel Design | Manuel Pererz</h2>
</footer>
</body>

</html>

estilos

  • {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    }

body {
font-family: ‘open sans’;
}

.contenedor {
padding: 60px 0;
width: 90%;
max-width: 1000px;
margin: auto;
overflow: hidden;
}

.titulo {
color: #642a73;
font-size: 30px;
text-align: center;
margin-bottom: 60px;
}

/* Header */

header {
width: 100%;
height: 600px;
background: #bc4e9c;
/* fallback for old browsers /
background: -webkit-linear-gradient(to right, hsla(340, 95%, 50%, 0.459), hsla(317, 45%, 52%, 0.664)), url(…/img/portada.jpg);
/
Chrome 10-25, Safari 5.1-6 /
background: linear-gradient(to right, hsla(340, 95%, 50%, 0.459), hsla(317, 45%, 52%, 0.664)), url(…/img/portada.jpg);
/
W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
background-size: cover;
background-attachment: fixed;
position: relative;
}

nav{
text-align: right;
padding: 30px 50px 0 0;
}

nav > a{
color:#fff;
font-weight: 300;
text-decoration: none;
margin-right: 10px;
}

nav > a:hover{
text-decoration: underline;
}

header .textos-header{
display: flex;
height: 430px;
width: 100%;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
}

.textos-header h1{
font-size: 50px;
color:#fff;
}

.textos-header h2{
font-size: 30px;
font-weight: 300;
color:#fff;
}

.wave{
position: absolute;
bottom: 0;
width: 100%;
}

/* About us */

main .sobre-nosotros{
padding: 30px 0 60px 0;
}
.contenedor-sobre-nosotros{
display: flex;
justify-content: space-evenly;
}

.imagen-about-us{
width: 48%;
}

.sobre-nosotros .contenido-textos{
width: 48%;
}

.contenido-textos h3{
margin-bottom: 15px;
}

.contenido-textos h3 span{
background: #4d0686;
color: #fff;
border-radius: 50%;
display: inline-block;
text-align: center;
width: 30px;
height: 30px;
padding: 2px;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, .5);
margin-right: 5px;
}

.contenido-textos p{
padding: 0px 0px 30px 15px;
font-weight: 300;
text-align: justify;
}
.contenido-textos p{
padding: 0px 0px 30px 15px;
font-weight: 300;
text-align: justify;
}
/* Galeria */

.portafolio{
background: #f2f2f2;
}

.galeria-port{
display: flex;
justify-content: space-evenly;
flex-wrap: wrap;
}

.imagen-port{
width: 24%;
margin-bottom: 10px;
overflow: hidden;
position: relative;
cursor: pointer;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, .5);
}

.imagen-port > img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

.hover-galeria{
position: absolute;
width: 100%;
height: 100%;
top: 0;
transform: scale(0);
background: hsla(273,91%,27%, 0.7);
transition: transform .5s;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}

.hover-galeria img{
width: 50px;
}

.hover-galeria p{
color: #fff;
}

.imagen-port:hover .hover-galeria{
transform: scale(1);
}

/* Clients */

.cards{
display: flex;
justify-content: space-evenly;
}

.cards .card{
background: #4d0686;
display: flex;
width: 46%;
height: 200px;
align-items: center;
justify-content: space-evenly;
border-radius: 5px;
box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.6);
}

.cards .card img{
width: 100px;
height: 100px;
object-fit: cover;
border: 3px solid #fff;
border-radius: 50%;
display: block;
}

.cards .card > .contenido-texto-card{
width: 60%;
color: #fff;
}

.cards .card > .contenido-texto-card p{
font-weight: 300;
padding-top: 5px;
}

/* Our team */

.about-services{
background: #f2f2f2;
padding-bottom: 30px;
}

.servicio-cont{
display:flex;
justify-content: space-between;
align-items: center;
}

.servicio-ind{
width: 28%;
text-align: center;
}

.servicio-ind img{
width: 90%;
}

.servicio-ind h3{
margin: 10px 0;
}

.servicio-ind p{
font-weight: 300;
text-align: justify;
}

/* footer */

footer{
background: #414141;
padding: 60px 0 30px 0;
margin: auto;
overflow: hidden;
}

.contenedor-footer{
display: flex;
width: 90%;
justify-content: space-evenly;
margin: auto;
padding-bottom: 50px;
border-bottom: 1px solid #ccc;
}

.content-foo{
text-align: center;
}

.content-foo h4{
color: #fff;
border-bottom: 3px solid #af20d3;
padding-bottom: 5px;
margin-bottom: 10px;
}

.content-foo p{
color: #ccc;
}

.titulo-final{
text-align: center;
font-size: 24px;
margin: 20px 0 0 0;
color: #9e9797;
}

@media screen and (max-width:900px){
header{
background-position: center;
}

.contenedor-sobre-nosotros{
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.sobre-nosotros .contenido-textos{
    width: 90%;
}

.imagen-about-us{
    width: 90%;
}

/* Galeria */

.imagen-port{
    width: 44%;
}

/* Clientes */

.cards{
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.cards .card{
    width: 90%;
}

.cards .card:first-child{
    margin-bottom: 30px;
}

/* servicios */

.servicio-cont{
    justify-content: center;
    flex-direction: column;
}

.servicio-ind{
    width: 100%;
    text-align: center;
}

.servicio-ind:nth-child(1), .servicio-ind:nth-child(2){
    margin-bottom: 60px;
}

.servicio-ind img{
    width: 90%;
}

}

@media screen and (max-width:500px){
nav{
text-align: center;
padding: 30px 0 0 0;
}

nav > a{
    margin-right: 5px;
}

.textos-header h1{
    font-size: 35px;
}

.textos-header h2{
    font-size: 20px;
}

/* ABOUT US */

.imagen-about-us{
    margin-bottom: 60px;
    width: 99%;
}

.sobre-nosotros .contenido-textos{
    width: 95%;
}

/* Galeria */

.imagen-port{
    width: 95%;
}

/* Clients */

.cards .card{
    height: 450px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.cards .card img{
    width: 90px;
    height: 90px;
}

/* Footer */

.contenedor-footer{
    flex-direction: column;
    border: none;
}

.content-foo{
    margin-bottom: 20px;
    text-align: center;
}

.content-foo h4{
    border: none;
}

.content-foo p{
    color: #ccc;
    border-bottom: 1px solid #f2f2f2;
    padding-bottom: 20px;
}

.titulo-final{
    font-size: 20px;
}

}

y necesito saber como enlazar otra pagina html con estilos ya que al enlazarla me aparce sin estilos y sin imagenes, es algo que no recuerdo como hacer

entre mas aprendo cosas nuevas me doy cuenta que en realidad se menos, que buen curso, ahore me voy a hacer el de definitivo de java.

function Confusión ()
{
Estoy un poco perdido por tantas palabras. Pero vuelvo a verlo y entiendo.
}

Desde Venezuela …Infinitas Gracias!!! a freddy y Platzi, por permitirme aprender un poco mas con este excelente curso, 100% recomendado. gracias…

Sr. John Freddy, muy buenas tardes,

Muy agradecido estoy por la oportunidad de reforzar mis conocimientos con este curso.

Excelente contenido, metodología, algo muy distinto a los cursos online que he participado.

Quedo con mucha expectativa con los cursos que tomaré.

Muchos éxitos para Platzi.

No crei posible que en este curso de programacion iba a realizar cosas tan increibles como crear un robot, no quiero imaginarme lo que me espera en los cursos avanzados¡¡¡¡

La verdad es que estoy bastante agradecido por haber cursado este curso. Tan pronto vuelva a tener recursos, vendré a devorarme todos los cursos que pueda, sobretodo ese de Biología Extraterrestre jajaja

¡Nunca pensé que iba a programar un arduino con un curso de programación básica! Tuve que hacerlo en el simulador Tinkercad, fue un reto complicado, pero me siento super contento y emocionado de haber cumplido este y todos los demás retos del curso.

En mi circuito, usando un sensor de temperatura, se activa (pardea) un led rojo a modo de alarma y automáticamente se mueve un servo (simulando la acción de abrir la llave de agua).

ENLACE AL DISEÑO EN TINKERCAD

Captura de pantalla (178).png
#include<Servo.h>


const long A = 1000;     //Resistencia en oscuridad en KΩ
const int B = 15;        //Resistencia a la luz (10 Lux) en KΩ
const int Rc = 10; 

Servo servoMotor;
const int LDRPin = A0;
int ilumi;
int foto;
int turno;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(LDRPin,INPUT);
  servoMotor.attach(9);
}

void loop()
{
  foto = analogRead(LDRPin);
  digitalWrite(13, HIGH);
  delay(500); // medio segundo
  digitalWrite(13, LOW);
  delay(500); // medio segundo
  
  
  ilumi = ((long)foto*A*10)/((long)B*Rc*(1024-foto)); //calcular la intensidad de luz
  ondear();
}

void ondear(){
	int luz  =   ilumi;
  if(luz > 800){
    if(turno == 1){
      turno =0;
      servoMotor.write(70);
  	  delay(500);
    }else{
      turno = 1;
      servoMotor.write(110);
  	  delay(500);
    }
  }else{
    servoMotor.write(150);
  	delay(500);
  }
 // ondear();
}```

Que emoción, estoy que grito en plena madrugada :v , definitivamente esto es lo que me gusta!

Muchísimas gracias por tu tiempo, seguimos con los cursos aprendiendo. Platzi!

Ahora a conseguir un arduino para poder aplicar esto!

Muchas gracias señor Freddy.

Usted ha sido un excelente maestro.

Un profesor excelente, todo el curso magnifico, eternamente agradecido y felicidades para todos en platzi !

Muchas gracias Freddy y TeamPlatzi! Excelente curso.
Su pasión contagia.
Nos volveremos a ver.
Fuerte abrazo.

Hola. Se puede leer o escribir variables de arduino desde una aplicación web? Cual sería el camino? El problema de usar firmata es que no se puede aprovechar la potencia de procesador para que el hardware funcione independientemente de la conexión hacia un ordenador. Junto a un colega nos dedicamos a realizar desarrollos electrónicos como el que adjunto en imagen (un equipo para electrodeposición de cobre en desarrollo) . Por ejemplo en este caso el arduino se comunica a una HMI y maneja un inversor según parámetros cargados en HMI y queremos leer y graficar valores en una pc solo de ser requeridos por el usuario, es decir el equipo debe funcionar de forma autónoma. Unsuccessful HTTP response

Bonísimo

Totalmente agradecido con Freddy, los compañeros del curso y la comunidad Platzi en general, aprender a programar ha sido una de mis mejores experiencias, este curso me ha ayudado a fortalecer mi gusto personal y mi camino profesional, con mucho animo de compartir a otros lo aprendido y seguir fortaleciendo habilidades tecnológicas para estar a la vanguardia de lo que nos espera en un futuro no muy lejano.

Muchas gracias por el curso, pronto compraré el arduino y subire los retos.

Todo en un solo if.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var BancoCliente = 'BOD';
        var CuentaCliente = true;
        var saldo = 100;
        var BancoDestino = prompt('Ingresa Banco de destino');
        var CuentaDestino = true;
        var Hora = new Date();
        var Costo = 0;
        var Monto = parseInt(prompt('Ingresa monto'));
        
        if (Hora.getHours() > 9 && Hora.getHours() < 12 || Hora.getHours() > 15 && Hora.getHours() < 20){
            if(CuentaCliente && CuentaDestino){
                if (BancoCliente == BancoDestino){
                    Costo = 0;
                }
                else {
                    Costo = 5;
                }
                Monto += Costo;
                if (saldo > Monto){
                    alert('Transaccion exitosa');
                }
                else{
                    alert('Saldo insuficiente');
                }
            }
            else{
                alert('Cuenta no verificada');
            }
        }
        else {
            alert('Hora invalida');
        ```

Freddy!!! Infinitas gracias por todo el conocimiento que has compartido mediante este curso.

Quiero manifestar que desde hace un tiempo decidí iniciar mi aprendizaje de programación con un objetivo algo diferente a los que se plantean en este curso. Sin embargo, debo confesar que desde los primeros videos he quedado cautivado por el contenido y la pedagogía que tienes para enseñar.

He visto cada uno de los videos y he realizado cada una de las actividades propuestas, y creo que hay mucho por aprender, pero también creo que este curso ha sentado las bases de lo que será mi proceso de aprendizaje en programación, manteniendo mi objetivo inicial.

Nuevamente, muchas gracias.
!Y vida eterna para Platzi!

se le ve la emocion a Freddy por la electronica y la programacion juntos

Sí a ustedes les sale este error, el problema es el COM en el código
.
1.png

C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode>node leds
C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode\node_modules\bindings\bindings.js:135
  throw err;
  ^

Error: Could not locate the bindings file. Tried:
 → C:\Users\Seba-PC\Progra\Platzi\Programación basica\ArduiNode\node_modules\johnny-five\node_modules\@serialport\bindings\build\bindings.node

.
Han habido cambios en como se escribe el código en Johnny Five, se soluciona así:

//Así es el código original y falla
var jf = require("johnny-five");
var circuito = new jf.Board();

//Así tiene que quedar, ahora (Febrero 2021) hay que incluir en la .Board el puerto COM al que esta conectado el Arduino. Por su puesto tu tienes que colocar el COM que te dice en tu computador
var jf = require("johnny-five");
var circuito = new jf.Board({ port: "COM5" });

.
¿Cómo saber mi COM? en el arduino te dice a cual esta conectado.
.

2.jpg

A pesar de no tener el arduino fisico, utilice un simulador y buscando en internet logre programarlo para hacer lo que indicaba fredy en la primera parte.

1.png

Codigo en arduino:

#include <Servo.h> //Importar libreria

Servo myservo; //Crear objeto del tipo servo
int pulsomin = 1000; // 1 milisegundo equivale a 1000 microsegundos (0 grados)
int pulsomax = 2000; // 2 milisegundos equivale a 2000 microsegundos (180 grados)

int valorSensor = 0;
const int pinsensor = A0;

int ms = 100;
void setup()
{
  pinMode(13, OUTPUT);
  myservo.attach(9, pulsomin, pulsomax); //inicializar el servo, primer parametro el pin, luego valor del pulso minimo y luego valor del pulso maximo.
  
  Serial.begin(9600);
}


void loop()
{
  valorSensor = analogRead(pinsensor);
  Serial.print("Valor del sensor: ");
  Serial.println(valorSensor);
    
  if (valorSensor >= 500) {
    digitalWrite(13, LOW); //Apagamos el led cuando detecta mucha luz
    myservo.write(0); // funcion write envia el angulo al cual debe posicionarse el servo
  
  }
  else {
    myservo.write(180);
    digitalWrite(13, HIGH); //Prendemos el led cuando detecta poca luz.
  };```


Captura de Pantalla 2021-01-30 a la(s) 19.08.17.png

Que gran curso! y sobre todo que gran Profesor!

curso mas pro de arduino???

@freddier Muchas gracias por cambiarnos la forma de pensar y de ver las cosas, recién finalizo mis proyectos del curso y quiero continuar con mas proyectos. Gracias Platzi, seguiré mi carrera como Backend aqui mismo.

kisto para empezar los cursos de programcion en platzi que emocion

hola

:'c tu despedida me llego al cora XD
no tengo arduino, en cuanto lo tengo prometo enviar mi proyecto y tembien tengo planeado seguir con mas cursos de aca

gracias por este increible curso, de verdad que ni en quinto semestre de universidad dan lo que se vio aqui, y creo que nunca me daran esto

no quiero ser ingeniero de mi universidad, quiero ser ingeniero de Platzi XD

hasta la proxima BYE
y claro que voy a enseñar lo que aprendi XD

Muchisimas gracias Freddy por siempre motivarnos para seguir aprendiendo!, estoy muy convencido de que mi suscripción a Platzi valdrá totalmente la pena!

la verdad considero que el material y los proyectos que se realizar fueron mas allá de mis expectativas, agradezco mucho motivarnos a seguir adelante en el mundo de la programación y a amar lo que hacemos.

Muy emotivo el mensaje final.

Buenas a todos, lo que hizo Freddy en el circuito es un divisor de voltaje en un circuito en serie, lo que en realidad lee el puerto analogo del arduino es esa variacion de voltaje al variar la resistencia del LDR que tambien depende de la cantidad de luz. Gracia Freddy, excelente curso.

gracias

buen video

ya casi consigo usar el simulador de Arduino para hacer todo este circuito 😄

b.jpg

Aquí les dejo mi simulación, el código es el mismo, saludos!!!

GENIALL LLEGAR HASTA ACA!!

ES MUCHO LO QUE SE APRENDE

Para los que lo realizan en la simulación de tinkercad les dejo el código que pueden usar en la pagina (NOTA: Tiene que hacer click en el fotoreceptor al iniciar la simulación para cambiar la variación de luz)

#include <Servo.h>

int sensorValue = 0;

int girador = 0;

Servo servo_9;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);

  servo_9.attach(9);

}

void loop()
{
  digitalWrite(13, HIGH);
  sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  if (sensorValue > 500) {
    if (girador == 1) {
      girador = 0;
      servo_9.write(150);
      delay(2000); // Wait for 2000 millisecond(s)
    } else {
      girador = 1;
      servo_9.write(30);
      delay(2000); // Wait for 2000 millisecond(s)
    }
  }
}```

![](https://ibb.co/zRRnHmb) Esta es la imagen del diseño

Hola. En primer lugar muchas gracias por este curso de programación básica, siento que vi muchas cosas nuevas e interesantes, voy a volver atras a repasar un poco mas para no olvidarlas 😃
Aqui dejo lo que hice en Arduino, o hice en un simulador y me hubiera encantado poder tenerlo en fisico.
Otra cosa es que encontre mucho mas sencillo hacerlo en lenguaje C o como se programa en el simulador y en el Arduino que lo que veia que hacia Feddy en java script. Mi codigo me resulto mas corto y facil de entender 😄
Aqui lo dejo 😃

#include <Servo.h>


Servo servomotor;
int sensor = A0;
int var;


void setup()
{
  Serial.begin(9600);
  
  pinMode(13, OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(A0,INPUT);
  
  servomotor.attach(9);
}


void loop()
{
  var = analogRead(0);
 
  if(var < 400)
  {
    servomotor.write(0);
     digitalWrite(13,LOW);
  }
  else
  {
   
    digitalWrite(13,HIGH);
    servomotor.write(80);
    delay(1000);
    servomotor.write(180);
    delay(1000);
  }

Serial.println(var);

}

https://www.tinkercad.com/things/2GRlTQ6qU2g-brilliant-habbi-kup/editel

en verdad que a pesar de ser un curso basico de programacion esta muy completo y entre mas avanzas te impresiona lo bueno que es a pesar de ser gratis)

Se puede hacer completamente con el emulador? Trate de ponerle el codigo del entorno de arduino y me dio errores.

Les comparto éste link, ¡seguro les va a interesar!
https://platzi.com/blog/conoce-personas-increibles-como-tu/

Lo que amé del curso: La inspiración que hierve con cada clase tan desmenuzada, fácil y práctica. No es simplista, es un abrebocas inmenso al maravilloso mundo de la programación. Quiero comenzar a aprender JavaScript y demás tecnologías web, crear sitios web pro, aprender IA, desarrollar aplicaciones, profundizar en estructuras de datos y algoritmos complejos, y finalmente para nutrir e inspirar quiero impartir ese conocimiento a otras personas.

Lo más valioso al comenzar este camino es interiorizar hasta dónde queremos llegar, cada uno tiene sus propias razones para crear código, ¿cuáles son las tuyas?

¡Gracias Platzi!

Muchas gracias por este curso de programación básica. Me sirvió mucho para repasar conceptos de programación y aprender cosas nuevas. Estoy bien animado para continuar con los cursos pagos , valen la pena 😃 😄

pues si, ya me ha metido en ganas de comprarme un arduino y empezar a automatizar la casa

Alguien mas se dio cuenta que dijo 190 y el servo solo tiene hasta 180?

Antes de realizar el curso tenía dudas acerca de suscribirme a Platzi, pero ahora estoy convencido de que definitivamente es de las mejores inversiones que podría hacer.

¡Feliz aprendizaje!**_
Atentamente: Rapimi95. 😄

Ha sido un curso fascinante, muy provechoso y educativo. Muchas gracias por este espacio.

muchas gracias freddy por el curso que nos regalastes, me ayudastes full encontrar el lado divertido de la programación, gracias a ti me adentre a este mundo, que profesores de hace años no me hiceron ver. (posdata: termine el curso en 22 dias jajaja porque pague el expert y vi que era gratis, y no queria demorar tanto para empezar los de pago ajjajaa aun asi aprendi full pero claro cada dia demoraba en 5 horas a 10 horas XD

Gracias

Este es el código de color de las resistencias del que Freddy habla:

que lastima no poder contar con el arduino en fisico 😦

Hola hace tiempo hice el codigo para un bebedero automatico y lo mande al correo que dice freddy pero nunca llego respuesta asi que lo dejo aqui para que me ayuden a revisarlo y corregirlo

var five = require("johnny-five")
var circuito = new five.Board()
var bombillo; manguera; hygrometer;

circuito.on("ready", prender());

function prender()
{
  var configuracion = {pin: "A0", freg:255};
  hygrometer = new five.hygrometer(configuracion);

  bombillo = new five.Led(13);
  bombillo.on();
   //suponiendo que () es el puerto de conexion

   manguera = new five.Motor({pin: 5
   });
   manguera.to(180)
     //console.log ("start", Date.now())

     bombear();
}

function bombear()
{
  console.log("this.relativeHumidity: " + hygrometer.value + "%");
  var relativeHumidity = hygrometer.value);
  if (relativeHumidity < 50)
  {
    manguera.to(0)
      //console.log("stop", Date.now())
  }
  else {
    {
      manguera.to(180)
        //console.log ("start", Date.now())   })
    }
  }
  setTimeout(bombear, 1000);
}

GRacias Freddy 😃

Que padre, la verdad me dieron ganas de comprare un aurdino de verdadultimo.png
Excelente curso!

Muy bueno, muchas gracias Freddy.

Muchisimas Gracias Freddy, Ahora viene lo mas decisivo que he tenido en mi vida, elegir en que quiero especializarme, es que todo es tan interesante¡¡¡¡¡¡¡ …Que emocion¡¡¡¡¡

chevre

Dios mio, si hubiera conocido a Platzi y este maravilloso curso e impecable maestro Freddy, me hubiera evitad tantos dolores de cabeza!, muchas gracias por tanto!!

muy buena clase pero me parece que debo repasar conceptos porque a veces siento que vamos demasiado rápido

Nunca pares de aprender!!

Que gran proyecto me ha motivado bastante a realizar mi propio proyecto con estos conocimientos básicos aprendidos.

Espectacular ejercicio para terminar. Gracias Freddy.

gracias Fredy muy buen curso, gran profesor!!