![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Software that allows basic remote control of the position of a servo (schematic included in the comments)
Fork of Nucleo_sg90_remote_control by
Diff: main.cpp
- Revision:
- 5:78a94312c383
- Parent:
- 4:85a8391945b2
- Child:
- 6:6e9120cf5640
--- a/main.cpp Thu Mar 09 01:16:43 2017 +0000 +++ b/main.cpp Thu Mar 23 19:44:48 2017 +0000 @@ -1,68 +1,55 @@ -//247-426-Nucleo_Lab_7 -//This software is derived from Nucleo_pwm_servo_sg90. +//247-426-Nucleo_Lab_8 +//This software is derived from Nucleo_sg90_remote_control. //It outputs a PWM signal that is compatible with Tower Pro SG90 servos. -//It makes the servo move from one programmed position to another each time the -//user button is pressed. -//The programmed positions are defined by the values that are stored in -//the variable "pulseDurationInMicroSeconds". -//An index counter is used to select which value is to be used to set the pulse -//duration of the PWM signal that controls that servo. -//The value of this index counter is changed each time the user button is -//pressed and the changes are made in a way that makes the program repeatedly -//cycles through all the possible positions. -//It is just necessary to add values to "pulseDurationInMicroSeconds" to have -//the servo adopt more positions. +//It makes the servo move according to the temperature read from a DS1820 +//temperature sensor. +//Pressing the user button makes the software define the temperature it then +//reads as a reference temperature that is associated to the middle position +//that can be taken by the sg90 servo. An increase in temperature relative to +//this reference temperature will then make the servo rotate in one direction +//whereas a decrease with respect to the reference will rather make it rotate in +//the other direction. +// //Just connect the brown wire of a SG90 servo to GND, its red wire to AVDD and //its the orange wire to D11 to have the SMT32-F401RE control the servo. // - -//Remote control of a SG90 servo is also possible if the Nucleo board is allowed -//to control an infrared LED as an infrared receptor is connected to the servo. // //material: -// Infrared LED = LTE-5802A, Receiver = RPM7140-V4R +// DS18S20: temperature sensor // //signals: // D11= pwm signal to use to control SG90 directly -// D10= !D11 = signal to use to control the transmitter's LED -// D9 = 40kHz signal to use to modulate the LED output -// -// -//Transmitter: (powered by Nucleo's supply) -// +5 ---/\/\/\----------- | -// 180 | -// |_ -// \/ LTE-5802A -// -- -// ______|______ -// |/ \| -// D10---/\/\/\-----| |-----/\/\/\----- D9 -// (!pwm) 10k |\ <-emitter-> /| 10k (40kHz) -// | | -// GND GND +// D8= used to communicate with the 1-wire temperature sensor Ds18s20 // -// GND of Nucleo board ------ GND -// -//Receiver: (powered by remote supply) -// +// Circuit: // _____ -// | O | RPM7140-V4R -// +5---/\/\/\---- ----- (front view) -// 10k | | | | -// | | | |______+5v -// Orange wire of servo SG90 --------------------.-- | |________GND -// Red wire of servo SG90 -----+5V \| | -// Brown wire of servo SG90 ---GND |----- -// emitter /| -// | -// GND +// | | DS18S20 +// -----(front view) +// | | | +// GND___| | |+5V +// Orange wire of servo SG90 --D11 | +// Red wire of servo SG90 -----+5V D8_______|-/\/\/\--+5v +// Brown wire of servo SG90 ---GND 10k +// +// Hyperterminal configuration +// 9600 bauds, 8-bit data, no parity + + +#include "DS1820.h" #include "mbed.h" #define NUMBER_OF_POSITIONS sizeof(pulseDurationInMicroSeconds)/sizeof(int) #define PWM_PERIOD_FOR_SG90_IN_MS 20 #define PWM_PERIOD_FOR_MODULATION_IN_US 25 + + +Serial pc(SERIAL_TX, SERIAL_RX); +DS1820 probe(D8); + +PwmOut led(LED1); DigitalOut userLED(LED1); + PwmOut towerProSG90(D11); PwmOut remoteControlOutput(D10); PwmOut modulatingOutput(D9); @@ -91,10 +78,15 @@ modulatingOutput.period_us(PWM_PERIOD_FOR_MODULATION_IN_US); modulatingOutput.pulsewidth_us(PWM_PERIOD_FOR_MODULATION_IN_US/2); userButton.fall(&responseToUserButtonPressed); - + + userLED = 1; while(1) { userLED = !userLED; - wait(1); + + int delai = 0; + delai = probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready + printf("Il fait: %3.1foC\r\n", probe.temperature()); + wait(1.25); } }